Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import pandas as pd | |
| HEIGHT=600 | |
| WIDTH=1000 | |
| def prepare_trades(trades_df: pd.DataFrame) -> pd.DataFrame: | |
| """Prepares the trades data for analysis.""" | |
| trades_df['creation_timestamp'] = pd.to_datetime(trades_df['creation_timestamp']) | |
| trades_df['creation_timestamp'] = trades_df['creation_timestamp'].dt.tz_convert('UTC') | |
| trades_df['month_year'] = trades_df['creation_timestamp'].dt.to_period('M').astype(str) | |
| trades_df['month_year_week'] = trades_df['creation_timestamp'].dt.to_period('W').astype(str) | |
| trades_df['winning_trade'] = trades_df['winning_trade'].astype(int) | |
| return trades_df | |
| def get_overall_trades(trades_df: pd.DataFrame) -> pd.DataFrame: | |
| """Gets the overall trades data for the given tools and calculates the winning percentage.""" | |
| trades_count = trades_df.groupby('month_year_week').size().reset_index() | |
| trades_count.columns = trades_count.columns.astype(str) | |
| trades_count.rename(columns={'0': 'trades'}, inplace=True) | |
| return trades_count | |
| def get_overall_winning_trades(trades_df: pd.DataFrame) -> pd.DataFrame: | |
| """Gets the overall winning trades data for the given tools and calculates the winning percentage.""" | |
| winning_trades = trades_df.groupby(['month_year_week'])['winning_trade'].sum() / trades_df.groupby(['month_year_week'])['winning_trade'].count() * 100 | |
| # winning_trades is a series, give it a dataframe | |
| winning_trades = winning_trades.reset_index() | |
| winning_trades.columns = winning_trades.columns.astype(str) | |
| winning_trades.columns = ['month_year_week', 'winning_trade'] | |
| return winning_trades | |
| def plot_trade_details(trade_detail: str, trades_df: pd.DataFrame) -> gr.LinePlot: | |
| """Plots the trade details for the given trade detail.""" | |
| if trade_detail == "mech calls": | |
| # this is to filter out the data before 2023-09-01 | |
| trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"] | |
| trades_filtered = trades_filtered.groupby("month_year_week")["num_mech_calls"].quantile([0.25, 0.5, 0.75]).unstack() | |
| trades_filtered.columns = trades_filtered.columns.astype(str) | |
| trades_filtered.reset_index(inplace=True) | |
| trades_filtered.columns = [ | |
| "month_year_week", | |
| "25th_percentile", | |
| "50th_percentile", | |
| "75th_percentile" | |
| ] | |
| # reformat the data as percentile, date, value | |
| trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="mech_calls") | |
| return gr.LinePlot( | |
| value=trades_filtered, | |
| x="month_year_week", | |
| y="mech_calls", | |
| color="percentile", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "percentile", "mech_calls"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) | |
| if trade_detail == "collateral amount": | |
| trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"] | |
| trades_filtered = trades_filtered.groupby("month_year_week")["collateral_amount"].quantile([0.25, 0.5, 0.75]).unstack() | |
| trades_filtered.columns = trades_filtered.columns.astype(str) | |
| trades_filtered.reset_index(inplace=True) | |
| trades_filtered.columns = [ | |
| "month_year_week", | |
| "25th_percentile", | |
| "50th_percentile", | |
| "75th_percentile" | |
| ] | |
| # reformat the data as percentile, date, value | |
| trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="collateral_amount") | |
| return gr.LinePlot( | |
| value=trades_filtered, | |
| x="month_year_week", | |
| y="collateral_amount", | |
| color="percentile", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "percentile", "collateral_amount"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) | |
| if trade_detail == "earnings": | |
| trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"] | |
| trades_filtered = trades_filtered.groupby("month_year_week")["earnings"].quantile([0.25, 0.5, 0.75]).unstack() | |
| trades_filtered.columns = trades_filtered.columns.astype(str) | |
| trades_filtered.reset_index(inplace=True) | |
| trades_filtered.columns = [ | |
| "month_year_week", | |
| "25th_percentile", | |
| "50th_percentile", | |
| "75th_percentile" | |
| ] | |
| # reformat the data as percentile, date, value | |
| trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="earnings") | |
| return gr.LinePlot( | |
| value=trades_filtered, | |
| x="month_year_week", | |
| y="earnings", | |
| color="percentile", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "percentile", "earnings"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) | |
| if trade_detail == "net earnings": | |
| trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"] | |
| trades_filtered = trades_filtered.groupby("month_year_week")["net_earnings"].quantile([0.25, 0.5, 0.75]).unstack() | |
| trades_filtered.columns = trades_filtered.columns.astype(str) | |
| trades_filtered.reset_index(inplace=True) | |
| trades_filtered.columns = [ | |
| "month_year_week", | |
| "25th_percentile", | |
| "50th_percentile", | |
| "75th_percentile" | |
| ] | |
| # reformat the data as percentile, date, value | |
| trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="net_earnings") | |
| return gr.LinePlot( | |
| value=trades_filtered, | |
| x="month_year_week", | |
| y="net_earnings", | |
| color="percentile", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "percentile", "net_earnings"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) | |
| if trade_detail == "ROI": | |
| trades_filtered = trades_df[trades_df["creation_timestamp"] >"2023-09-01"] | |
| trades_filtered = trades_filtered.groupby("month_year_week")["roi"].quantile([0.25, 0.5, 0.75]).unstack() | |
| trades_filtered.columns = trades_filtered.columns.astype(str) | |
| trades_filtered.reset_index(inplace=True) | |
| trades_filtered.columns = [ | |
| "month_year_week", | |
| "25th_percentile", | |
| "50th_percentile", | |
| "75th_percentile" | |
| ] | |
| # reformat the data as percentile, date, value | |
| trades_filtered = trades_filtered.melt(id_vars=["month_year_week"], var_name="percentile", value_name="ROI") | |
| return gr.LinePlot( | |
| value=trades_filtered, | |
| x="month_year_week", | |
| y="ROI", | |
| color="percentile", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "percentile", "ROI"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) | |
| def plot_trades_by_week(trades_df: pd.DataFrame) -> gr.BarPlot: | |
| """Plots the trades data for the given tools and calculates the winning percentage.""" | |
| return gr.BarPlot( | |
| value=trades_df, | |
| x="month_year_week", | |
| y="trades", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "trades"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) | |
| def plot_winning_trades_by_week(trades_df: pd.DataFrame) -> gr.BarPlot: | |
| """Plots the winning trades data for the given tools and calculates the winning percentage.""" | |
| return gr.BarPlot( | |
| value=trades_df, | |
| x="month_year_week", | |
| y="winning_trade", | |
| show_label=True, | |
| interactive=True, | |
| show_actions_button=True, | |
| tooltip=["month_year_week", "winning_trade"], | |
| height=HEIGHT, | |
| width=WIDTH | |
| ) |