File size: 4,246 Bytes
d8cf478 52d1750 d8cf478 d41146f 6154c13 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
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,
)
def plot_winning_metric_per_trader(traders_winning_df: pd.DataFrame) -> gr.Plot:
fig = px.box(
traders_winning_df,
x="month_year_week",
y="winning_perc",
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="Weekly winning percentage %",
legend=dict(yanchor="top", y=0.5),
)
fig.update_xaxes(tickformat="%b %d\n%Y")
return gr.Plot(
value=fig,
)
|