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,
    )