cyberosa commited on
Commit
65733ce
·
1 Parent(s): 2206479

adding new needed data source for pearl agents

Browse files
Files changed (2) hide show
  1. app.py +27 -4
  2. tabs/agent_graphs.py +69 -4
app.py CHANGED
@@ -27,7 +27,11 @@ from tabs.trader_plots import (
27
  plot_total_bet_amount,
28
  plot_active_traders,
29
  )
30
- from tabs.agent_graphs import plot_rolling_average_dune, plot_rolling_average_roi
 
 
 
 
31
 
32
  from tabs.daily_graphs import (
33
  get_current_week_data,
@@ -151,7 +155,14 @@ def load_all_data():
151
  repo_type="dataset",
152
  )
153
  df9 = pd.read_parquet(daa_pearl_df)
154
- return df1, df2, df3, df4, df5, df6, df7, df8, df9
 
 
 
 
 
 
 
155
 
156
 
157
  def prepare_data():
@@ -166,6 +177,7 @@ def prepare_data():
166
  all_mech_calls,
167
  daa_qs_df,
168
  daa_pearl_df,
 
169
  ) = load_all_data()
170
  all_trades["creation_timestamp"] = all_trades["creation_timestamp"].dt.tz_convert(
171
  "UTC"
@@ -243,6 +255,7 @@ def prepare_data():
243
  all_mech_calls,
244
  daa_qs_df,
245
  daa_pearl_df,
 
246
  )
247
 
248
 
@@ -256,6 +269,7 @@ def prepare_data():
256
  all_mech_calls,
257
  daa_qs_df,
258
  daa_pearl_df,
 
259
  ) = prepare_data()
260
 
261
  retention_df = prepare_retention_dataset(
@@ -559,10 +573,19 @@ with demo:
559
  with gr.Row():
560
  pearl_rolling_avg_plot = plot_rolling_average_roi(
561
  weekly_roi_df=weekly_metrics_by_market_creator,
562
- market_creator="pearl",
 
 
 
 
 
 
563
  )
564
  with gr.Row():
565
- gr.Markdown("# Average weekly ROI for Pearl agents (WIP)")
 
 
 
566
 
567
  with gr.TabItem("🪝 Retention metrics (WIP)"):
568
  with gr.Row():
 
27
  plot_total_bet_amount,
28
  plot_active_traders,
29
  )
30
+ from tabs.agent_graphs import (
31
+ plot_rolling_average_dune,
32
+ plot_rolling_average_roi,
33
+ plot_weekly_average_roi,
34
+ )
35
 
36
  from tabs.daily_graphs import (
37
  get_current_week_data,
 
155
  repo_type="dataset",
156
  )
157
  df9 = pd.read_parquet(daa_pearl_df)
158
+ # Read pearl_agents.parquet
159
+ pearl_agents_df = hf_hub_download(
160
+ repo_id="valory/Olas-predict-dataset",
161
+ filename="pearl_agents.parquet",
162
+ repo_type="dataset",
163
+ )
164
+ df10 = pd.read_parquet(pearl_agents_df)
165
+ return df1, df2, df3, df4, df5, df6, df7, df8, df9, df10
166
 
167
 
168
  def prepare_data():
 
177
  all_mech_calls,
178
  daa_qs_df,
179
  daa_pearl_df,
180
+ pearl_agents_df,
181
  ) = load_all_data()
182
  all_trades["creation_timestamp"] = all_trades["creation_timestamp"].dt.tz_convert(
183
  "UTC"
 
255
  all_mech_calls,
256
  daa_qs_df,
257
  daa_pearl_df,
258
+ pearl_agents_df,
259
  )
260
 
261
 
 
269
  all_mech_calls,
270
  daa_qs_df,
271
  daa_pearl_df,
272
+ pearl_agents_df,
273
  ) = prepare_data()
274
 
275
  retention_df = prepare_retention_dataset(
 
573
  with gr.Row():
574
  pearl_rolling_avg_plot = plot_rolling_average_roi(
575
  weekly_roi_df=weekly_metrics_by_market_creator,
576
+ pearl_agents=pearl_agents_df,
577
+ )
578
+ with gr.Row():
579
+ gr.Markdown("# Average weekly ROI for Pearl agents")
580
+ with gr.Row():
581
+ gr.Markdown(
582
+ "This graph shows the average weekly ROI for Pearl agents. The data is based on the latest DAA results."
583
  )
584
  with gr.Row():
585
+ weekly_avg_roi_plot = plot_weekly_average_roi(
586
+ weekly_roi_df=weekly_metrics_by_market_creator,
587
+ pearl_agents=pearl_agents_df,
588
+ )
589
 
590
  with gr.TabItem("🪝 Retention metrics (WIP)"):
591
  with gr.Row():
tabs/agent_graphs.py CHANGED
@@ -7,7 +7,7 @@ import plotly.express as px
7
  def plot_rolling_average_dune(
8
  daa_df: pd.DataFrame,
9
  ) -> gr.Plot:
10
- """Function to plot the rolling average of daily active traders"""
11
 
12
  fig = px.bar(
13
  daa_df,
@@ -28,7 +28,7 @@ def plot_rolling_average(
28
  daa_df: pd.DataFrame,
29
  market_creator: str = None,
30
  ) -> gr.Plot:
31
- """Function to plot the rolling average of daily active traders by markets"""
32
  if market_creator is not None:
33
  filtered_traders_df = daa_df.loc[daa_df["market_creator"] == market_creator]
34
  rolling_avg_df = get_sevenday_rolling_average(filtered_traders_df)
@@ -77,15 +77,24 @@ def get_sevenday_rolling_average(daa_df: pd.DataFrame) -> pd.DataFrame:
77
 
78
 
79
  def plot_rolling_average_roi(
80
- weekly_roi_df: pd.DataFrame, daa_pearl_df: pd.DataFrame
81
  ) -> gr.Plot:
82
  """Function to plot the rolling average of ROI for pearl agents"""
83
  # Get the list of unique addresses from the daa_pearl_df
84
- unique_addresses = daa_pearl_df["trader_address"].unique()
85
  # Filter the weekly_roi_df to include only those addresses
86
  filtered_weekly_roi_df = weekly_roi_df[
87
  weekly_roi_df["trader_address"].isin(unique_addresses)
88
  ]
 
 
 
 
 
 
 
 
 
89
  # Get the 2-week rolling average of ROI
90
  rolling_avg_roi_df = get_twoweeks_rolling_average_roi(filtered_weekly_roi_df)
91
  print(rolling_avg_roi_df.head())
@@ -125,3 +134,59 @@ def get_twoweeks_rolling_average_roi(weekly_roi_df: pd.DataFrame) -> pd.DataFram
125
  )
126
  trader_rolling_avg_roi.rename(columns={"roi": "rolling_avg_roi"}, inplace=True)
127
  return trader_rolling_avg_roi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  def plot_rolling_average_dune(
8
  daa_df: pd.DataFrame,
9
  ) -> gr.Plot:
10
+ """Function to plot the rolling average of daily active agents"""
11
 
12
  fig = px.bar(
13
  daa_df,
 
28
  daa_df: pd.DataFrame,
29
  market_creator: str = None,
30
  ) -> gr.Plot:
31
+ """Function to plot the rolling average of daily active agents"""
32
  if market_creator is not None:
33
  filtered_traders_df = daa_df.loc[daa_df["market_creator"] == market_creator]
34
  rolling_avg_df = get_sevenday_rolling_average(filtered_traders_df)
 
77
 
78
 
79
  def plot_rolling_average_roi(
80
+ weekly_roi_df: pd.DataFrame, pearl_agents: pd.DataFrame
81
  ) -> gr.Plot:
82
  """Function to plot the rolling average of ROI for pearl agents"""
83
  # Get the list of unique addresses from the daa_pearl_df
84
+ unique_addresses = pearl_agents["safe_address"].unique()
85
  # Filter the weekly_roi_df to include only those addresses
86
  filtered_weekly_roi_df = weekly_roi_df[
87
  weekly_roi_df["trader_address"].isin(unique_addresses)
88
  ]
89
+ # Select only the columns: "roi", "month_year_week", "trader_address"
90
+ filtered_weekly_roi_df = filtered_weekly_roi_df[
91
+ ["roi", "month_year_week", "trader_address"]
92
+ ].copy()
93
+ # Remove duplicates
94
+ filtered_weekly_roi_df = filtered_weekly_roi_df.drop_duplicates(
95
+ subset=["month_year_week", "trader_address"]
96
+ )
97
+
98
  # Get the 2-week rolling average of ROI
99
  rolling_avg_roi_df = get_twoweeks_rolling_average_roi(filtered_weekly_roi_df)
100
  print(rolling_avg_roi_df.head())
 
134
  )
135
  trader_rolling_avg_roi.rename(columns={"roi": "rolling_avg_roi"}, inplace=True)
136
  return trader_rolling_avg_roi
137
+
138
+
139
+ def get_weekly_average_roi(weekly_roi_df: pd.DataFrame) -> pd.DataFrame:
140
+ """Function to get the weekly average ROI for pearl agents"""
141
+ # Create a local copy of the dataframe
142
+ local_df = weekly_roi_df.copy()
143
+
144
+ # Convert string dates to datetime
145
+ local_df["month_year_week"] = pd.to_datetime(
146
+ local_df["month_year_week"], format="%b-%d-%Y"
147
+ )
148
+
149
+ # Group by month_year_week and market_creator, then calculate the mean ROI
150
+ weekly_avg_roi = (
151
+ local_df.groupby(["month_year_week"], sort=False)["roi"].mean().reset_index()
152
+ )
153
+ return weekly_avg_roi
154
+
155
+
156
+ def plot_weekly_average_roi(
157
+ weekly_roi_df: pd.DataFrame, pearl_agents: pd.DataFrame
158
+ ) -> gr.Plot:
159
+ """Function to plot the weekly average of ROI for pearl agents"""
160
+ # Get the list of unique addresses from the daa_pearl_df
161
+ unique_addresses = pearl_agents["safe_address"].unique()
162
+ # Filter the weekly_roi_df to include only those addresses
163
+ filtered_weekly_roi_df = weekly_roi_df[
164
+ weekly_roi_df["trader_address"].isin(unique_addresses)
165
+ ]
166
+ # Select only the columns: "roi", "month_year_week", "trader_address"
167
+ filtered_weekly_roi_df = filtered_weekly_roi_df[
168
+ ["roi", "month_year_week", "trader_address"]
169
+ ].copy()
170
+ # Remove duplicates
171
+ filtered_weekly_roi_df = filtered_weekly_roi_df.drop_duplicates(
172
+ subset=["month_year_week", "trader_address"]
173
+ )
174
+ # Get the weekly average ROI
175
+ weekly_avg_roi_df = get_weekly_average_roi(filtered_weekly_roi_df)
176
+ # plot the weekly average ROI
177
+ print(weekly_avg_roi_df.head())
178
+ # Ensure 'month_year_week' is a column, not an index
179
+ if "month_year_week" not in weekly_avg_roi_df.columns:
180
+ weekly_avg_roi_df = weekly_avg_roi_df.reset_index()
181
+ fig = px.line(
182
+ weekly_avg_roi_df,
183
+ x="month_year_week",
184
+ y="roi",
185
+ )
186
+ fig.update_layout(
187
+ xaxis_title="Week",
188
+ yaxis_title="Weekly average ROI for pearl agents",
189
+ )
190
+ return gr.Plot(
191
+ value=fig,
192
+ )