cyberosa commited on
Commit
8704528
·
1 Parent(s): 7f9e80f

new nr trades and total bet amount per trader and market

Browse files
Files changed (2) hide show
  1. app.py +27 -10
  2. tabs/market_plots.py +70 -0
app.py CHANGED
@@ -27,8 +27,8 @@ from tabs.daily_graphs import (
27
  from scripts.utils import get_traders_family
28
  from tabs.market_plots import (
29
  plot_kl_div_per_market,
30
- plot_total_bet_amount,
31
  plot_nr_trades_per_trader_per_market,
 
32
  )
33
 
34
 
@@ -151,7 +151,7 @@ with demo:
151
  )
152
 
153
  with gr.Tabs():
154
- with gr.TabItem("🔥 Weekly profitability metrics"):
155
  with gr.Row():
156
  gr.Markdown("# Weekly metrics of all traders")
157
  with gr.Row():
@@ -389,7 +389,7 @@ with demo:
389
  # else:
390
  # gr.Markdown("Data not available yet")
391
 
392
- with gr.TabItem("📉Closed Markets Kullback–Leibler divergence"):
393
  with gr.Row():
394
  gr.Markdown(
395
  "# Weekly Market Prediction Accuracy for Closed Markets (Kullback-Leibler Divergence)"
@@ -406,13 +406,7 @@ with demo:
406
  with gr.Column(scale=1):
407
  interpretation = get_interpretation_text()
408
 
409
- with gr.Row():
410
- gr.Markdown(
411
- "# Weekly total bet amount by market creator and trader type"
412
- )
413
- with gr.Row():
414
- total_bet_amount = plot_total_bet_amount(trader_agents_data)
415
- with gr.TabItem("💹 Metrics at the market level"):
416
  with gr.Row():
417
  gr.Markdown(
418
  "# Weekly nr of trades per trader per market for all traders"
@@ -440,6 +434,29 @@ with demo:
440
  trades_volume_plot = plot_nr_trades_per_trader_per_market(
441
  trader_agents_data, trader_filter="non_agent"
442
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
443
 
444
  with gr.TabItem("🎖️Weekly winning trades % per trader"):
445
  with gr.Row():
 
27
  from scripts.utils import get_traders_family
28
  from tabs.market_plots import (
29
  plot_kl_div_per_market,
 
30
  plot_nr_trades_per_trader_per_market,
31
+ plot_total_bet_amount_per_trader_per_market,
32
  )
33
 
34
 
 
151
  )
152
 
153
  with gr.Tabs():
154
+ with gr.TabItem("🔥 Weekly metrics"):
155
  with gr.Row():
156
  gr.Markdown("# Weekly metrics of all traders")
157
  with gr.Row():
 
389
  # else:
390
  # gr.Markdown("Data not available yet")
391
 
392
+ with gr.TabItem("📉 Markets Kullback–Leibler divergence"):
393
  with gr.Row():
394
  gr.Markdown(
395
  "# Weekly Market Prediction Accuracy for Closed Markets (Kullback-Leibler Divergence)"
 
406
  with gr.Column(scale=1):
407
  interpretation = get_interpretation_text()
408
 
409
+ with gr.TabItem("📮 Number of trades per market"):
 
 
 
 
 
 
410
  with gr.Row():
411
  gr.Markdown(
412
  "# Weekly nr of trades per trader per market for all traders"
 
434
  trades_volume_plot = plot_nr_trades_per_trader_per_market(
435
  trader_agents_data, trader_filter="non_agent"
436
  )
437
+ with gr.TabItem("💰 Money invested"):
438
+ with gr.Row():
439
+ gr.Markdown("# Weekly total bet amount by market for all traders")
440
+ with gr.Row():
441
+ total_bet_amount = plot_total_bet_amount_per_trader_per_market(
442
+ trader_agents_data
443
+ )
444
+
445
+ with gr.Row():
446
+ gr.Markdown("# Weekly total bet amount by market for traders Agents 🤖")
447
+ with gr.Row():
448
+ a_trader_total_bet_amount = plot_total_bet_amount_per_trader_per_market(
449
+ trader_agents_data, trader_filter="agent"
450
+ )
451
+
452
+ with gr.Row():
453
+ gr.Markdown("# Weekly total bet amount by market for Non-agent traders")
454
+ with gr.Row():
455
+ na_trader_total_bet_amount = (
456
+ plot_total_bet_amount_per_trader_per_market(
457
+ trader_agents_data, trader_filter="non_agent"
458
+ )
459
+ )
460
 
461
  with gr.TabItem("🎖️Weekly winning trades % per trader"):
462
  with gr.Row():
tabs/market_plots.py CHANGED
@@ -149,6 +149,76 @@ def plot_total_bet_amount(trades_df: pd.DataFrame) -> gr.Plot:
149
  )
150
 
151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152
  def plot_nr_trades_per_trader_per_market(
153
  traders_data: pd.DataFrame, trader_filter: str = "all"
154
  ) -> gr.Plot:
 
149
  )
150
 
151
 
152
+ def plot_total_bet_amount_per_trader_per_market(
153
+ trades_df: pd.DataFrame, trader_filter: str = "all"
154
+ ) -> gr.Plot:
155
+ """Plots the total bet amount per trader per market."""
156
+ traders_all = trades_df.copy(deep=True)
157
+ traders_all["market_creator"] = "all"
158
+
159
+ # merging both dataframes
160
+ final_traders = pd.concat([traders_all, trades_df], ignore_index=True)
161
+ final_traders = final_traders.sort_values(by="creation_date", ascending=True)
162
+
163
+ # Create binary staking category
164
+ final_traders["trader_type"] = final_traders["staking"].apply(
165
+ lambda x: "non_agent" if x == "non_agent" else "agent"
166
+ )
167
+ final_traders["trader_market"] = final_traders.apply(
168
+ lambda x: (x["trader_type"], x["market_creator"]), axis=1
169
+ )
170
+ color_discrete_sequence = ["purple", "goldenrod", "darkgreen"]
171
+ if trader_filter == "agent":
172
+ color_discrete_sequence = ["darkviolet", "goldenrod", "green"]
173
+ final_traders = final_traders.loc[final_traders["trader_type"] == "agent"]
174
+ elif trader_filter == "non_agent":
175
+ final_traders = final_traders.loc[final_traders["trader_type"] != "agent"]
176
+
177
+ total_bet_amount = (
178
+ final_traders.groupby(
179
+ ["month_year_week", "market_creator", "trader_address", "title"],
180
+ sort=False,
181
+ )["collateral_amount"]
182
+ .sum()
183
+ .reset_index(name="total_bet_amount")
184
+ )
185
+
186
+ fig = px.box(
187
+ total_bet_amount,
188
+ x="month_year_week",
189
+ y="total_bet_amount",
190
+ color="market_creator",
191
+ color_discrete_sequence=color_discrete_sequence,
192
+ category_orders={
193
+ "market_creator": ["pearl", "quickstart", "all"],
194
+ "trader_market": [
195
+ ("agent", "pearl"),
196
+ ("non_agent", "pearl"),
197
+ ("agent", "quickstart"),
198
+ ("non_agent", "quickstart"),
199
+ ("agent", "all"),
200
+ ("non_agent", "all"),
201
+ ],
202
+ },
203
+ # facet_col="trader_type",
204
+ )
205
+
206
+ fig.update_layout(
207
+ xaxis_title="Week",
208
+ yaxis_title="Weekly total bet amount per trader per market",
209
+ legend=dict(yanchor="top", y=0.5),
210
+ width=1000, # Adjusted for better fit on laptop screens
211
+ height=600, # Adjusted for better fit on laptop screens
212
+ )
213
+ # for axis in fig.layout:
214
+ # if axis.startswith("xaxis"):
215
+ # fig.layout[axis].update(title="Week")
216
+ fig.update_xaxes(tickformat="%b %d\n%Y")
217
+ return gr.Plot(
218
+ value=fig,
219
+ )
220
+
221
+
222
  def plot_nr_trades_per_trader_per_market(
223
  traders_data: pd.DataFrame, trader_filter: str = "all"
224
  ) -> gr.Plot: