cyberosa commited on
Commit
f0f1e9a
·
1 Parent(s): d9d744c

Using new gnosis dataset and updating DAA graph

Browse files
Files changed (3) hide show
  1. app.py +54 -5
  2. tabs/daily_graphs.py +52 -0
  3. tabs/trader_plots.py +0 -63
app.py CHANGED
@@ -26,7 +26,6 @@ from tabs.trader_plots import (
26
  get_interpretation_text,
27
  plot_total_bet_amount,
28
  plot_active_traders,
29
- plot_rolling_average,
30
  plot_rolling_average_roi,
31
  )
32
  from tabs.daily_graphs import (
@@ -34,6 +33,7 @@ from tabs.daily_graphs import (
34
  plot_daily_metrics,
35
  trader_daily_metric_choices,
36
  default_daily_metric,
 
37
  )
38
  from scripts.utils import get_traders_family
39
  from tabs.market_plots import (
@@ -136,7 +136,15 @@ def load_all_data():
136
  repo_type="dataset",
137
  )
138
  df7 = pd.read_parquet(all_mech_calls_df)
139
- return df1, df2, df3, df4, df5, df6, df7
 
 
 
 
 
 
 
 
140
 
141
 
142
  def prepare_data():
@@ -149,8 +157,12 @@ def prepare_data():
149
  retention_df,
150
  active_traders,
151
  all_mech_calls,
 
152
  ) = load_all_data()
153
-
 
 
 
154
  all_trades["creation_date"] = all_trades["creation_timestamp"].dt.date
155
 
156
  # nr-trades variable
@@ -191,6 +203,41 @@ def prepare_data():
191
  .dt.to_period("W")
192
  .dt.start_time.dt.strftime("%b-%d-%Y")
193
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  return (
195
  traders_data,
196
  closed_markets,
@@ -199,6 +246,7 @@ def prepare_data():
199
  retention_df,
200
  active_traders,
201
  all_mech_calls,
 
202
  )
203
 
204
 
@@ -210,6 +258,7 @@ def prepare_data():
210
  raw_retention_df,
211
  active_traders,
212
  all_mech_calls,
 
213
  ) = prepare_data()
214
 
215
  retention_df = prepare_retention_dataset(
@@ -642,14 +691,14 @@ with demo:
642
  gr.Markdown(" # Daily active agents in Pearl markets")
643
  with gr.Row():
644
  rolling_avg_plot = plot_rolling_average(
645
- active_traders,
646
  market_creator="pearl",
647
  )
648
  with gr.Row():
649
  gr.Markdown(" # Daily active agents in QS markets")
650
  with gr.Row():
651
  rolling_avg_plot = plot_rolling_average(
652
- active_traders,
653
  market_creator="quickstart",
654
  )
655
 
 
26
  get_interpretation_text,
27
  plot_total_bet_amount,
28
  plot_active_traders,
 
29
  plot_rolling_average_roi,
30
  )
31
  from tabs.daily_graphs import (
 
33
  plot_daily_metrics,
34
  trader_daily_metric_choices,
35
  default_daily_metric,
36
+ plot_rolling_average,
37
  )
38
  from scripts.utils import get_traders_family
39
  from tabs.market_plots import (
 
136
  repo_type="dataset",
137
  )
138
  df7 = pd.read_parquet(all_mech_calls_df)
139
+
140
+ # gnosis_txs_dataset.parquet
141
+ gnosis_txs_df = hf_hub_download(
142
+ repo_id="valory/Olas-predict-dataset",
143
+ filename="gnosis_txs_dataset.parquet",
144
+ repo_type="dataset",
145
+ )
146
+ df8 = pd.read_parquet(gnosis_txs_df)
147
+ return df1, df2, df3, df4, df5, df6, df7, df8
148
 
149
 
150
  def prepare_data():
 
157
  retention_df,
158
  active_traders,
159
  all_mech_calls,
160
+ gnosis_txs_df,
161
  ) = load_all_data()
162
+ all_trades["creation_timestamp"] = all_trades["creation_timestamp"].dt.tz_convert(
163
+ "UTC"
164
+ )
165
+ all_trades = all_trades.sort_values(by="creation_timestamp", ascending=True)
166
  all_trades["creation_date"] = all_trades["creation_timestamp"].dt.date
167
 
168
  # nr-trades variable
 
203
  .dt.to_period("W")
204
  .dt.start_time.dt.strftime("%b-%d-%Y")
205
  )
206
+
207
+ # prepare daa dataset concatenating all_trades and gnosis_txs_df
208
+ selected_trades = all_trades[all_trades["staking"] != "non_Olas"].copy(deep=True)
209
+ selected_trades = selected_trades[
210
+ [
211
+ "market_creator",
212
+ "trader_address",
213
+ "creation_timestamp",
214
+ ]
215
+ ]
216
+ selected_trades.drop_duplicates(inplace=True)
217
+ selected_trades["tx_date"] = pd.to_datetime(
218
+ selected_trades["creation_timestamp"].dt.date, format="%b-%d-%Y"
219
+ )
220
+
221
+ gnosis_txs_df["tx_date"] = pd.to_datetime(gnosis_txs_df["tx_datetime"]).dt.date
222
+ gnosis_txs_df = gnosis_txs_df[
223
+ [
224
+ "trader_address",
225
+ "tx_date",
226
+ "market_creator",
227
+ ]
228
+ ]
229
+ gnosis_txs_df["tx_date"] = pd.to_datetime(
230
+ gnosis_txs_df["tx_date"], format="%b-%d-%Y"
231
+ )
232
+ selected_trades = selected_trades[
233
+ [
234
+ "trader_address",
235
+ "tx_date",
236
+ "market_creator",
237
+ ]
238
+ ]
239
+ daa_df = pd.concat([selected_trades, gnosis_txs_df], ignore_index=True)
240
+ daa_df.drop_duplicates(inplace=True)
241
  return (
242
  traders_data,
243
  closed_markets,
 
246
  retention_df,
247
  active_traders,
248
  all_mech_calls,
249
+ daa_df,
250
  )
251
 
252
 
 
258
  raw_retention_df,
259
  active_traders,
260
  all_mech_calls,
261
+ daa_df,
262
  ) = prepare_data()
263
 
264
  retention_df = prepare_retention_dataset(
 
691
  gr.Markdown(" # Daily active agents in Pearl markets")
692
  with gr.Row():
693
  rolling_avg_plot = plot_rolling_average(
694
+ daa_df,
695
  market_creator="pearl",
696
  )
697
  with gr.Row():
698
  gr.Markdown(" # Daily active agents in QS markets")
699
  with gr.Row():
700
  rolling_avg_plot = plot_rolling_average(
701
+ daa_df,
702
  market_creator="quickstart",
703
  )
704
 
tabs/daily_graphs.py CHANGED
@@ -229,3 +229,55 @@ def plot_daily_metrics_v2(
229
 
230
  # Update y-axes to have the same range
231
  fig.update_yaxes(matches="y")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
 
230
  # Update y-axes to have the same range
231
  fig.update_yaxes(matches="y")
232
+
233
+
234
+ def get_sevenday_rolling_average(daa_df: pd.DataFrame) -> pd.DataFrame:
235
+ """Function to get the 7-day rolling average of the number of unique
236
+ trader_address"""
237
+ # Create a local copy of the dataframe
238
+ local_df = daa_df.copy()
239
+
240
+ # Sort the dataframe by date
241
+ local_df = local_df.sort_values(by="tx_date").set_index("tx_date")
242
+
243
+ # Group by market_creator and calculate rolling average of unique trader_address
244
+ rolling_avg = (
245
+ local_df.resample("D")["trader_address"]
246
+ .nunique()
247
+ .rolling(window=7)
248
+ .mean()
249
+ .reset_index()
250
+ )
251
+ rolling_avg.rename(columns={"trader_address": "rolling_avg_traders"}, inplace=True)
252
+ return rolling_avg
253
+
254
+
255
+ def plot_rolling_average(
256
+ daa_df: pd.DataFrame,
257
+ market_creator: str = None,
258
+ ) -> gr.Plot:
259
+ """Function to plot the rolling average of daily active traders by markets"""
260
+ if market_creator is not None:
261
+ filtered_traders_df = daa_df.loc[daa_df["market_creator"] == market_creator]
262
+ rolling_avg_df = get_sevenday_rolling_average(filtered_traders_df)
263
+ else:
264
+ rolling_avg_df = get_sevenday_rolling_average(daa_df)
265
+ print(rolling_avg_df.head())
266
+
267
+ # Ensure 'creation_date' is a column, not an index
268
+ if "creation_date" not in rolling_avg_df.columns:
269
+ rolling_avg_df = rolling_avg_df.reset_index()
270
+
271
+ fig = px.bar(
272
+ rolling_avg_df,
273
+ x="tx_date",
274
+ y="rolling_avg_traders",
275
+ )
276
+ fig.update_layout(
277
+ xaxis_title="Date",
278
+ yaxis_title="7-day rolling average of DAA",
279
+ )
280
+
281
+ return gr.Plot(
282
+ value=fig,
283
+ )
tabs/trader_plots.py CHANGED
@@ -446,69 +446,6 @@ def plot_rolling_average_roi(
446
  )
447
 
448
 
449
- def get_sevenday_rolling_average(active_traders_df: pd.DataFrame) -> pd.DataFrame:
450
- """Function to get the 7-day rolling average of the number of unique
451
- trader_address removing the unknown traders"""
452
- # Create a local copy of the dataframe
453
- local_df = active_traders_df.copy()
454
-
455
- # Remove unknown traders
456
- local_df = local_df.loc[local_df["trader_type"] != "unknown"]
457
-
458
- # Convert string dates to datetime
459
- local_df["creation_date"] = pd.to_datetime(
460
- local_df["creation_date"], format="%b-%d-%Y"
461
- )
462
- # Sort the dataframe by date
463
- local_df = local_df.sort_values(by="creation_date").set_index("creation_date")
464
-
465
- # Group by market_creator and calculate rolling average of unique trader_address
466
- rolling_avg_by_market = (
467
- local_df.resample("D")["trader_address"]
468
- .nunique()
469
- .rolling(window=7)
470
- .mean()
471
- .reset_index()
472
- )
473
- rolling_avg_by_market.rename(
474
- columns={"trader_address": "rolling_avg_traders"}, inplace=True
475
- )
476
- return rolling_avg_by_market
477
-
478
-
479
- def plot_rolling_average(
480
- active_traders_df: pd.DataFrame,
481
- market_creator: str = None,
482
- ) -> gr.Plot:
483
- """Function to plot the rolling average of active traders for the different categories and markets"""
484
- if market_creator is not None:
485
- filtered_traders_df = active_traders_df.loc[
486
- active_traders_df["market_creator"] == market_creator
487
- ]
488
- rolling_avg_df = get_sevenday_rolling_average(filtered_traders_df)
489
- else:
490
- rolling_avg_df = get_sevenday_rolling_average(active_traders_df)
491
- print(rolling_avg_df.head())
492
-
493
- # Ensure 'creation_date' is a column, not an index
494
- if "creation_date" not in rolling_avg_df.columns:
495
- rolling_avg_df = rolling_avg_df.reset_index()
496
-
497
- fig = px.bar(
498
- rolling_avg_df,
499
- x="creation_date",
500
- y="rolling_avg_traders",
501
- )
502
- fig.update_layout(
503
- xaxis_title="Date",
504
- yaxis_title="7-day rolling average of active traders",
505
- )
506
-
507
- return gr.Plot(
508
- value=fig,
509
- )
510
-
511
-
512
  def plot_active_traders(
513
  active_traders_data: pd.DataFrame,
514
  market_creator: str = None,
 
446
  )
447
 
448
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
449
  def plot_active_traders(
450
  active_traders_data: pd.DataFrame,
451
  market_creator: str = None,