cyberosa commited on
Commit
f245408
·
1 Parent(s): 652d8f6

new tab with active traders

Browse files
Files changed (3) hide show
  1. app.py +22 -1
  2. tabs/market_plots.py +0 -3
  3. tabs/trader_plots.py +65 -0
app.py CHANGED
@@ -11,13 +11,13 @@ from scripts.metrics import (
11
  )
12
  from tabs.trader_plots import (
13
  plot_trader_metrics_by_market_creator,
14
- plot_trader_daily_metrics_by_market_creator,
15
  default_trader_metric,
16
  trader_metric_choices,
17
  get_metrics_text,
18
  plot_winning_metric_per_trader,
19
  get_interpretation_text,
20
  plot_total_bet_amount,
 
21
  )
22
  from tabs.daily_graphs import (
23
  get_current_week_data,
@@ -393,6 +393,27 @@ with demo:
393
  inputs=[no_trader_live_details_selector, no_trader_live_details_plot],
394
  outputs=[no_trader_live_details_plot],
395
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
396
 
397
  with gr.TabItem("📉 Markets Kullback–Leibler divergence"):
398
  with gr.Row():
 
11
  )
12
  from tabs.trader_plots import (
13
  plot_trader_metrics_by_market_creator,
 
14
  default_trader_metric,
15
  trader_metric_choices,
16
  get_metrics_text,
17
  plot_winning_metric_per_trader,
18
  get_interpretation_text,
19
  plot_total_bet_amount,
20
+ plot_active_traders,
21
  )
22
  from tabs.daily_graphs import (
23
  get_current_week_data,
 
393
  inputs=[no_trader_live_details_selector, no_trader_live_details_plot],
394
  outputs=[no_trader_live_details_plot],
395
  )
396
+ with gr.TabItem("⚙️ Active traders"):
397
+ with gr.Row():
398
+ gr.Markdown("# Active traders for all markets by trader categories")
399
+ with gr.Row():
400
+ active_traders_plot = plot_active_traders(traders_data, unknown_traders)
401
+
402
+ with gr.Row():
403
+ gr.Markdown("# Active traders for Pearl markets by trader categories")
404
+ with gr.Row():
405
+ active_traders_plot = plot_active_traders(
406
+ traders_data, unknown_traders, market_creator="pearl"
407
+ )
408
+
409
+ with gr.Row():
410
+ gr.Markdown(
411
+ "# Active traders for Quickstart markets by trader categories"
412
+ )
413
+ with gr.Row():
414
+ active_traders_plot = plot_active_traders(
415
+ traders_data, unknown_traders, market_creator="quickstart"
416
+ )
417
 
418
  with gr.TabItem("📉 Markets Kullback–Leibler divergence"):
419
  with gr.Row():
tabs/market_plots.py CHANGED
@@ -231,9 +231,6 @@ def plot_nr_trades_per_trader_per_market(
231
  width=1000, # Adjusted for better fit on laptop screens
232
  height=600, # Adjusted for better fit on laptop screens
233
  )
234
- # for axis in fig.layout:
235
- # if axis.startswith("xaxis"):
236
- # fig.layout[axis].update(title="Week")
237
  fig.update_xaxes(tickformat="%b %d\n%Y")
238
  return gr.Plot(
239
  value=fig,
 
231
  width=1000, # Adjusted for better fit on laptop screens
232
  height=600, # Adjusted for better fit on laptop screens
233
  )
 
 
 
234
  fig.update_xaxes(tickformat="%b %d\n%Y")
235
  return gr.Plot(
236
  value=fig,
tabs/trader_plots.py CHANGED
@@ -268,3 +268,68 @@ def plot_total_bet_amount(
268
  return gr.Plot(
269
  value=fig,
270
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  return gr.Plot(
269
  value=fig,
270
  )
271
+
272
+
273
+ def plot_active_traders(
274
+ traders_data: pd.DataFrame,
275
+ unknown_traders: pd.DataFrame,
276
+ market_creator: str = None,
277
+ ):
278
+ """Function to plot the volume of active traders for the different categories and markets"""
279
+ traders_data["trader_type"] = traders_data["staking"].apply(
280
+ lambda x: "non_Olas" if x == "non_Olas" else "Olas"
281
+ )
282
+ filtered_traders_data = traders_data
283
+ if len(unknown_traders) > 0:
284
+ # merge
285
+ unknown_traders["trader_type"] = "unknown"
286
+ filtered_traders_data = pd.concat([traders_data, unknown_traders], axis=0)
287
+
288
+ if market_creator is not None:
289
+ filtered_traders_data = filtered_traders_data.loc[
290
+ filtered_traders_data["market_creator"] == market_creator
291
+ ]
292
+ active_traders = (
293
+ filtered_traders_data.groupby(by=["month_year_week", "trader_type"])[
294
+ "trader_address"
295
+ ]
296
+ .nunique()
297
+ .reset_index(name="nr_traders")
298
+ )
299
+ # Convert string dates to datetime and sort them
300
+ all_dates_dt = sorted(
301
+ [
302
+ datetime.strptime(date, "%b-%d")
303
+ for date in active_traders["month_year_week"].unique()
304
+ ]
305
+ )
306
+ # Convert back to string format
307
+ all_dates = [date.strftime("%b-%d") for date in all_dates_dt]
308
+ color_mapping = [
309
+ "royalblue",
310
+ "goldenrod",
311
+ "gray",
312
+ ]
313
+ fig = px.bar(
314
+ active_traders,
315
+ x="month_year_week",
316
+ y="nr_traders",
317
+ color="trader_type",
318
+ color_discrete_sequence=color_mapping,
319
+ category_orders={
320
+ "trader_type": ["Olas", "non_Olas", "unknown"],
321
+ },
322
+ barmode="group",
323
+ )
324
+ fig.update_layout(
325
+ xaxis_title="Week",
326
+ yaxis_title="Weekly active traders per trader type",
327
+ legend=dict(yanchor="top", y=0.5),
328
+ )
329
+
330
+ fig.update_xaxes(tickformat="%b %d")
331
+ # Update layout to force x-axis category order (hotfix for a sorting issue)
332
+ fig.update_layout(xaxis={"categoryorder": "array", "categoryarray": all_dates})
333
+ return gr.Plot(
334
+ value=fig,
335
+ )