rosacastillo commited on
Commit
16d3c27
·
1 Parent(s): 53ce693

Fixing x axis order

Browse files
Files changed (3) hide show
  1. app.py +11 -13
  2. tabs/metrics.py +80 -0
  3. tabs/trades.py +11 -200
app.py CHANGED
@@ -15,8 +15,14 @@ from tabs.trades import (
15
  plot_trades_per_market_by_week,
16
  plot_winning_trades_by_week,
17
  plot_winning_trades_per_market_by_week,
 
 
 
 
 
18
  plot_trade_details,
19
  )
 
20
  from tabs.tool_win import (
21
  get_tool_winning_rate,
22
  get_overall_winning_rate,
@@ -212,7 +218,7 @@ with demo:
212
  )
213
  with gr.Column(min_width=350):
214
  all_wtrades_by_week = plot_winning_trades_per_market_by_week(
215
- trades_df=trades_winning_rate_df, market_type="all"
216
  )
217
 
218
  with gr.Row():
@@ -220,24 +226,16 @@ with demo:
220
  with gr.Row():
221
  trade_details_selector = gr.Dropdown(
222
  label="Select a trade metric",
223
- choices=[
224
- "mech calls",
225
- "collateral amount",
226
- "earnings",
227
- "net earnings",
228
- "ROI",
229
- ],
230
- value="mech calls",
231
  )
232
  with gr.Row():
233
  trade_details_plot = plot_trade_details(
234
- trade_detail="mech calls", trades_df=trades_df
235
  )
236
 
237
  def update_trade_details(trade_detail):
238
- return plot_trade_details(
239
- trade_detail=trade_detail, trades_df=trades_df
240
- )
241
 
242
  trade_details_selector.change(
243
  update_trade_details,
 
15
  plot_trades_per_market_by_week,
16
  plot_winning_trades_by_week,
17
  plot_winning_trades_per_market_by_week,
18
+ )
19
+
20
+ from tabs.metrics import (
21
+ metric_choices,
22
+ default_metric,
23
  plot_trade_details,
24
  )
25
+
26
  from tabs.tool_win import (
27
  get_tool_winning_rate,
28
  get_overall_winning_rate,
 
218
  )
219
  with gr.Column(min_width=350):
220
  all_wtrades_by_week = plot_winning_trades_per_market_by_week(
221
+ trades_df=winning_trades_by_market, market_type="all"
222
  )
223
 
224
  with gr.Row():
 
226
  with gr.Row():
227
  trade_details_selector = gr.Dropdown(
228
  label="Select a trade metric",
229
+ choices=metric_choices,
230
+ value=default_metric,
 
 
 
 
 
 
231
  )
232
  with gr.Row():
233
  trade_details_plot = plot_trade_details(
234
+ metric_name=default_metric, trades_df=trades_df
235
  )
236
 
237
  def update_trade_details(trade_detail):
238
+ return plot_trade_details(metric_name=trade_detail, trades_df=trades_df)
 
 
239
 
240
  trade_details_selector.change(
241
  update_trade_details,
tabs/metrics.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import gradio as gr
3
+
4
+ metric_choices = [
5
+ "mech calls",
6
+ "collateral amount",
7
+ "earnings",
8
+ "net earnings",
9
+ "ROI",
10
+ ]
11
+
12
+ default_metric = "ROI"
13
+
14
+ HEIGHT = 600
15
+ WIDTH = 1000
16
+
17
+
18
+ def plot_trade_details(metric_name: str, trades_df: pd.DataFrame) -> gr.LinePlot:
19
+ """Plots the trade details for the given trade detail."""
20
+ column_name = metric_name
21
+ if metric_name == "mech calls":
22
+ metric_name = "mech_calls"
23
+ column_name = "num_mech_calls"
24
+ elif metric_name == "ROI":
25
+ column_name = "roi"
26
+
27
+ # this is to filter out the data before 2023-09-01
28
+ trades_filtered = trades_df[trades_df["creation_timestamp"] > "2023-09-01"]
29
+ trades_filtered = (
30
+ trades_filtered.groupby("month_year_week")[column_name]
31
+ .quantile([0.25, 0.5, 0.75])
32
+ .unstack()
33
+ )
34
+ trades_filtered.columns = trades_filtered.columns.astype(str)
35
+ trades_filtered.reset_index(inplace=True)
36
+ trades_filtered.columns = [
37
+ "month_year_week",
38
+ "25th_percentile",
39
+ "50th_percentile",
40
+ "75th_percentile",
41
+ ]
42
+ # reformat the data as percentile, date, value
43
+ trades_filtered = trades_filtered.melt(
44
+ id_vars=["month_year_week"], var_name="percentile", value_name=metric_name
45
+ )
46
+
47
+ return gr.LinePlot(
48
+ value=trades_filtered,
49
+ x="month_year_week",
50
+ y=metric_name,
51
+ color="percentile",
52
+ show_label=True,
53
+ interactive=True,
54
+ show_actions_button=True,
55
+ tooltip=["month_year_week", "percentile", metric_name],
56
+ height=HEIGHT,
57
+ width=WIDTH,
58
+ )
59
+
60
+
61
+ def plot_average_roi_per_market_by_week(trades_df: pd.DataFrame) -> gr.LinePlot:
62
+
63
+ mean_roi_per_market_by_week = (
64
+ trades_df.groupby(["market_creator", "month_year_week"])["roi"]
65
+ .mean()
66
+ .reset_index()
67
+ )
68
+ mean_roi_per_market_by_week.rename(columns={"roi": "mean_roi"}, inplace=True)
69
+ return gr.LinePlot(
70
+ value=mean_roi_per_market_by_week,
71
+ x="month_year_week",
72
+ y="ROI",
73
+ color="market_creator",
74
+ show_label=True,
75
+ interactive=True,
76
+ show_actions_button=True,
77
+ tooltip=["month_year_week", "market_creator", "mean_roi"],
78
+ height=HEIGHT,
79
+ width=WIDTH,
80
+ )
tabs/trades.py CHANGED
@@ -13,6 +13,7 @@ def prepare_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
13
  trades_df["creation_timestamp"] = trades_df["creation_timestamp"].dt.tz_convert(
14
  "UTC"
15
  )
 
16
  trades_df["month_year"] = (
17
  trades_df["creation_timestamp"].dt.to_period("M").astype(str)
18
  )
@@ -34,7 +35,9 @@ def get_overall_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
34
  def get_overall_by_market_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
35
  """Gets the overall trades data"""
36
  trades_count = (
37
- trades_df.groupby(["market_creator", "month_year_week"]).size().reset_index()
 
 
38
  )
39
  trades_count.columns = trades_count.columns.astype(str)
40
  trades_count.rename(columns={"0": "trades"}, inplace=True)
@@ -58,8 +61,10 @@ def get_overall_winning_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
58
  def get_overall_winning_by_market_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
59
  """Gets the overall winning trades data for the given tools and calculates the winning percentage."""
60
  winning_trades = (
61
- trades_df.groupby(["market_creator", "month_year_week"])["winning_trade"].sum()
62
- / trades_df.groupby(["market_creator", "month_year_week"])[
 
 
63
  "winning_trade"
64
  ].count()
65
  * 100
@@ -67,206 +72,11 @@ def get_overall_winning_by_market_trades(trades_df: pd.DataFrame) -> pd.DataFram
67
  # winning_trades is a series, give it a dataframe
68
  winning_trades = winning_trades.reset_index()
69
  winning_trades.columns = winning_trades.columns.astype(str)
70
- winning_trades.columns = ["market_creator", "month_year_week", "winning_trade"]
71
  print(winning_trades.head())
72
  return winning_trades
73
 
74
 
75
- def plot_trade_details(trade_detail: str, trades_df: pd.DataFrame) -> gr.LinePlot:
76
- """Plots the trade details for the given trade detail."""
77
- if trade_detail == "mech calls":
78
- # this is to filter out the data before 2023-09-01
79
- trades_filtered = trades_df[trades_df["creation_timestamp"] > "2023-09-01"]
80
- trades_filtered = (
81
- trades_filtered.groupby("month_year_week")["num_mech_calls"]
82
- .quantile([0.25, 0.5, 0.75])
83
- .unstack()
84
- )
85
- trades_filtered.columns = trades_filtered.columns.astype(str)
86
- trades_filtered.reset_index(inplace=True)
87
- trades_filtered.columns = [
88
- "month_year_week",
89
- "25th_percentile",
90
- "50th_percentile",
91
- "75th_percentile",
92
- ]
93
- # reformat the data as percentile, date, value
94
- trades_filtered = trades_filtered.melt(
95
- id_vars=["month_year_week"], var_name="percentile", value_name="mech_calls"
96
- )
97
-
98
- return gr.LinePlot(
99
- value=trades_filtered,
100
- x="month_year_week",
101
- y="mech_calls",
102
- color="percentile",
103
- show_label=True,
104
- interactive=True,
105
- show_actions_button=True,
106
- tooltip=["month_year_week", "percentile", "mech_calls"],
107
- height=HEIGHT,
108
- width=WIDTH,
109
- )
110
-
111
- if trade_detail == "collateral amount":
112
- trades_filtered = trades_df[trades_df["creation_timestamp"] > "2023-09-01"]
113
- trades_filtered = (
114
- trades_filtered.groupby("month_year_week")["collateral_amount"]
115
- .quantile([0.25, 0.5, 0.75])
116
- .unstack()
117
- )
118
- trades_filtered.columns = trades_filtered.columns.astype(str)
119
- trades_filtered.reset_index(inplace=True)
120
- trades_filtered.columns = [
121
- "month_year_week",
122
- "25th_percentile",
123
- "50th_percentile",
124
- "75th_percentile",
125
- ]
126
- # reformat the data as percentile, date, value
127
- trades_filtered = trades_filtered.melt(
128
- id_vars=["month_year_week"],
129
- var_name="percentile",
130
- value_name="collateral_amount",
131
- )
132
-
133
- return gr.LinePlot(
134
- value=trades_filtered,
135
- x="month_year_week",
136
- y="collateral_amount",
137
- color="percentile",
138
- show_label=True,
139
- interactive=True,
140
- show_actions_button=True,
141
- tooltip=["month_year_week", "percentile", "collateral_amount"],
142
- height=HEIGHT,
143
- width=WIDTH,
144
- )
145
-
146
- if trade_detail == "earnings":
147
- trades_filtered = trades_df[trades_df["creation_timestamp"] > "2023-09-01"]
148
- trades_filtered = (
149
- trades_filtered.groupby("month_year_week")["earnings"]
150
- .quantile([0.25, 0.5, 0.75])
151
- .unstack()
152
- )
153
- trades_filtered.columns = trades_filtered.columns.astype(str)
154
- trades_filtered.reset_index(inplace=True)
155
- trades_filtered.columns = [
156
- "month_year_week",
157
- "25th_percentile",
158
- "50th_percentile",
159
- "75th_percentile",
160
- ]
161
- # reformat the data as percentile, date, value
162
- trades_filtered = trades_filtered.melt(
163
- id_vars=["month_year_week"], var_name="percentile", value_name="earnings"
164
- )
165
-
166
- return gr.LinePlot(
167
- value=trades_filtered,
168
- x="month_year_week",
169
- y="earnings",
170
- color="percentile",
171
- show_label=True,
172
- interactive=True,
173
- show_actions_button=True,
174
- tooltip=["month_year_week", "percentile", "earnings"],
175
- height=HEIGHT,
176
- width=WIDTH,
177
- )
178
-
179
- if trade_detail == "net earnings":
180
- trades_filtered = trades_df[trades_df["creation_timestamp"] > "2023-09-01"]
181
- trades_filtered = (
182
- trades_filtered.groupby("month_year_week")["net_earnings"]
183
- .quantile([0.25, 0.5, 0.75])
184
- .unstack()
185
- )
186
- trades_filtered.columns = trades_filtered.columns.astype(str)
187
- trades_filtered.reset_index(inplace=True)
188
- trades_filtered.columns = [
189
- "month_year_week",
190
- "25th_percentile",
191
- "50th_percentile",
192
- "75th_percentile",
193
- ]
194
- # reformat the data as percentile, date, value
195
- trades_filtered = trades_filtered.melt(
196
- id_vars=["month_year_week"],
197
- var_name="percentile",
198
- value_name="net_earnings",
199
- )
200
-
201
- return gr.LinePlot(
202
- value=trades_filtered,
203
- x="month_year_week",
204
- y="net_earnings",
205
- color="percentile",
206
- show_label=True,
207
- interactive=True,
208
- show_actions_button=True,
209
- tooltip=["month_year_week", "percentile", "net_earnings"],
210
- height=HEIGHT,
211
- width=WIDTH,
212
- )
213
-
214
- if trade_detail == "ROI":
215
- trades_filtered = trades_df[trades_df["creation_timestamp"] > "2023-09-01"]
216
- trades_filtered = (
217
- trades_filtered.groupby("month_year_week")["roi"]
218
- .quantile([0.25, 0.5, 0.75])
219
- .unstack()
220
- )
221
- trades_filtered.columns = trades_filtered.columns.astype(str)
222
- trades_filtered.reset_index(inplace=True)
223
- trades_filtered.columns = [
224
- "month_year_week",
225
- "25th_percentile",
226
- "50th_percentile",
227
- "75th_percentile",
228
- ]
229
- # reformat the data as percentile, date, value
230
- trades_filtered = trades_filtered.melt(
231
- id_vars=["month_year_week"], var_name="percentile", value_name="ROI"
232
- )
233
-
234
- return gr.LinePlot(
235
- value=trades_filtered,
236
- x="month_year_week",
237
- y="ROI",
238
- color="percentile",
239
- show_label=True,
240
- interactive=True,
241
- show_actions_button=True,
242
- tooltip=["month_year_week", "percentile", "ROI"],
243
- height=HEIGHT,
244
- width=WIDTH,
245
- )
246
-
247
-
248
- def plot_average_roi_per_market_by_week(trades_df: pd.DataFrame) -> gr.LinePlot:
249
-
250
- mean_roi_per_market_by_week = (
251
- trades_df.groupby(["market_creator", "month_year_week"])["roi"]
252
- .mean()
253
- .reset_index()
254
- )
255
- mean_roi_per_market_by_week.rename(columns={"roi": "mean_roi"}, inplace=True)
256
- return gr.LinePlot(
257
- value=mean_roi_per_market_by_week,
258
- x="month_year_week",
259
- y="ROI",
260
- color="market_creator",
261
- show_label=True,
262
- interactive=True,
263
- show_actions_button=True,
264
- tooltip=["month_year_week", "market_creator", "mean_roi"],
265
- height=HEIGHT,
266
- width=WIDTH,
267
- )
268
-
269
-
270
  def plot_trades_by_week(trades_df: pd.DataFrame) -> gr.BarPlot:
271
  """Plots the trades data for the given tools and calculates the winning percentage."""
272
  return gr.BarPlot(
@@ -309,6 +119,7 @@ def plot_trades_per_market_by_week(
309
  fig.update_layout(
310
  xaxis_title="Week",
311
  yaxis_title="Weekly nr of trades",
 
312
  )
313
  fig.update_xaxes(tickformat="%b %d\n%Y")
314
  return gr.Plot(
@@ -357,7 +168,7 @@ def plot_winning_trades_per_market_by_week(
357
  fig.update_layout(
358
  xaxis_title="Week",
359
  yaxis_title="Weekly % of winning trades",
360
- # yaxis_tickformat="%",
361
  )
362
  fig.update_xaxes(tickformat="%b %d\n%Y")
363
  return gr.Plot(
 
13
  trades_df["creation_timestamp"] = trades_df["creation_timestamp"].dt.tz_convert(
14
  "UTC"
15
  )
16
+ trades_df = trades_df.sort_values(by="creation_timestamp", ascending=True)
17
  trades_df["month_year"] = (
18
  trades_df["creation_timestamp"].dt.to_period("M").astype(str)
19
  )
 
35
  def get_overall_by_market_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
36
  """Gets the overall trades data"""
37
  trades_count = (
38
+ trades_df.groupby(["month_year_week", "market_creator"], sort=False)
39
+ .size()
40
+ .reset_index()
41
  )
42
  trades_count.columns = trades_count.columns.astype(str)
43
  trades_count.rename(columns={"0": "trades"}, inplace=True)
 
61
  def get_overall_winning_by_market_trades(trades_df: pd.DataFrame) -> pd.DataFrame:
62
  """Gets the overall winning trades data for the given tools and calculates the winning percentage."""
63
  winning_trades = (
64
+ trades_df.groupby(["month_year_week", "market_creator"], sort=False)[
65
+ "winning_trade"
66
+ ].sum()
67
+ / trades_df.groupby(["month_year_week", "market_creator"], sort=False)[
68
  "winning_trade"
69
  ].count()
70
  * 100
 
72
  # winning_trades is a series, give it a dataframe
73
  winning_trades = winning_trades.reset_index()
74
  winning_trades.columns = winning_trades.columns.astype(str)
75
+ winning_trades.columns = ["month_year_week", "market_creator", "winning_trade"]
76
  print(winning_trades.head())
77
  return winning_trades
78
 
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  def plot_trades_by_week(trades_df: pd.DataFrame) -> gr.BarPlot:
81
  """Plots the trades data for the given tools and calculates the winning percentage."""
82
  return gr.BarPlot(
 
119
  fig.update_layout(
120
  xaxis_title="Week",
121
  yaxis_title="Weekly nr of trades",
122
+ # xaxis_type="category",
123
  )
124
  fig.update_xaxes(tickformat="%b %d\n%Y")
125
  return gr.Plot(
 
168
  fig.update_layout(
169
  xaxis_title="Week",
170
  yaxis_title="Weekly % of winning trades",
171
+ # xaxis_type="category",
172
  )
173
  fig.update_xaxes(tickformat="%b %d\n%Y")
174
  return gr.Plot(