Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import pandas as pd | |
| import plotly.express as px | |
| trader_metric_choices = [ | |
| "mech calls", | |
| "bet amount", | |
| "earnings", | |
| "net earnings", | |
| "ROI", | |
| ] | |
| default_trader_metric = "ROI" | |
| def get_metrics_text() -> gr.Markdown: | |
| metric_text = """ | |
| ## Description of the graph | |
| These metrics are computed weekly. The statistical measures are: | |
| * min, max, 25th(q1), 50th(median) and 75th(q2) percentiles | |
| * the upper and lower fences to delimit possible outliers | |
| * the average values as the dotted lines | |
| """ | |
| return gr.Markdown(metric_text) | |
| def plot_trader_metrics_by_market_creator( | |
| metric_name: str, traders_df: pd.DataFrame | |
| ) -> gr.Plot: | |
| """Plots the weekly trader metrics.""" | |
| if metric_name == "mech calls": | |
| metric_name = "mech_calls" | |
| column_name = "nr_mech_calls" | |
| yaxis_title = "Total nr of mech calls per trader" | |
| elif metric_name == "ROI": | |
| column_name = "roi" | |
| yaxis_title = "Total ROI (net profit/cost)" | |
| elif metric_name == "bet amount": | |
| metric_name = "bet_amount" | |
| column_name = metric_name | |
| yaxis_title = "Total bet amount per trader (xDAI)" | |
| elif metric_name == "net earnings": | |
| metric_name = "net_earnings" | |
| column_name = metric_name | |
| yaxis_title = "Total net profit per trader (xDAI)" | |
| else: # earnings | |
| column_name = metric_name | |
| yaxis_title = "Total gross profit per trader (xDAI)" | |
| traders_filtered = traders_df[["month_year_week", "market_creator", column_name]] | |
| fig = px.box( | |
| traders_filtered, | |
| x="month_year_week", | |
| y=column_name, | |
| color="market_creator", | |
| color_discrete_sequence=["purple", "goldenrod", "darkgreen"], | |
| category_orders={"market_creator": ["pearl", "quickstart", "all"]}, | |
| ) | |
| fig.update_traces(boxmean=True) | |
| fig.update_layout( | |
| xaxis_title="Week", | |
| yaxis_title=yaxis_title, | |
| legend=dict(yanchor="top", y=0.5), | |
| ) | |
| fig.update_xaxes(tickformat="%b %d\n%Y") | |
| return gr.Plot( | |
| value=fig, | |
| ) | |
| def plot_trader_metrics_by_trader_type(metric_name: str, traders_df: pd.DataFrame): | |
| """Plots the weekly trader metrics.""" | |
| if metric_name == "mech calls": | |
| metric_name = "mech_calls" | |
| column_name = "nr_mech_calls" | |
| yaxis_title = "Total nr of mech calls per trader" | |
| elif metric_name == "ROI": | |
| column_name = "roi" | |
| yaxis_title = "Total ROI (net profit/cost)" | |
| elif metric_name == "bet amount": | |
| metric_name = "bet_amount" | |
| column_name = metric_name | |
| yaxis_title = "Total bet amount per trader (xDAI)" | |
| elif metric_name == "net earnings": | |
| metric_name = "net_earnings" | |
| column_name = metric_name | |
| yaxis_title = "Total net profit per trader (xDAI)" | |
| else: # earnings | |
| column_name = metric_name | |
| yaxis_title = "Total gross profit per trader (xDAI)" | |
| traders_filtered = traders_df[["month_year_week", "trader_type", column_name]] | |
| fig = px.box( | |
| traders_filtered, | |
| x="month_year_week", | |
| y=column_name, | |
| color="trader_type", | |
| color_discrete_sequence=["gray", "orange", "darkblue"], | |
| category_orders={"trader_type": ["singlebet", "multibet", "all"]}, | |
| ) | |
| fig.update_traces(boxmean=True) | |
| fig.update_layout( | |
| xaxis_title="Week", | |
| yaxis_title=yaxis_title, | |
| legend=dict(yanchor="top", y=0.5), | |
| ) | |
| fig.update_xaxes(tickformat="%b %d\n%Y") | |
| return gr.Plot( | |
| value=fig, | |
| ) | |