cyberosa commited on
Commit
c235ab0
·
1 Parent(s): 72d697e

updating weekly average roi

Browse files
Files changed (1) hide show
  1. tabs/agent_graphs.py +38 -28
tabs/agent_graphs.py CHANGED
@@ -137,58 +137,68 @@ def get_twoweeks_rolling_average_roi(traders_data: pd.DataFrame) -> pd.DataFrame
137
 
138
  # Rename columns
139
  rolling_avg.rename(
140
- columns={"roi": "rolling_avg_roi", "creation_date": "month_year_week"},
141
  inplace=True,
142
  )
143
 
144
  return rolling_avg
145
 
146
 
147
- def get_weekly_average_roi(weekly_roi_df: pd.DataFrame) -> pd.DataFrame:
148
- """Function to get the weekly average ROI for pearl agents"""
149
- # Create a local copy of the dataframe
150
- local_df = weekly_roi_df.copy()
151
 
152
- # Convert string dates to datetime
153
- local_df["month_year_week"] = pd.to_datetime(
154
- local_df["month_year_week"], format="%b-%d-%Y"
155
- )
 
 
156
 
157
- # Group by month_year_week and market_creator, then calculate the mean ROI
158
- weekly_avg_roi = (
159
- local_df.groupby(["month_year_week"], sort=False)["roi"].mean().reset_index()
 
 
 
 
 
 
 
 
 
 
160
  )
161
- return weekly_avg_roi
 
162
 
163
 
164
  def plot_weekly_average_roi(
165
- weekly_roi_df: pd.DataFrame, pearl_agents: pd.DataFrame
166
  ) -> gr.Plot:
167
  """Function to plot the weekly average of ROI for pearl agents"""
168
  # Get the list of unique addresses from the daa_pearl_df
 
169
  unique_addresses = pearl_agents["safe_address"].unique()
170
  # Filter the weekly_roi_df to include only those addresses
171
- filtered_weekly_roi_df = weekly_roi_df[
172
- weekly_roi_df["trader_address"].isin(unique_addresses)
173
  ]
174
- # Select only the columns: "roi", "month_year_week", "trader_address"
175
- filtered_weekly_roi_df = filtered_weekly_roi_df[
176
- ["roi", "month_year_week", "trader_address"]
177
- ].copy()
178
- # Remove duplicates
179
- filtered_weekly_roi_df = filtered_weekly_roi_df.drop_duplicates(
180
- subset=["month_year_week", "trader_address"]
181
  )
 
 
 
 
182
  # Get the weekly average ROI
183
- weekly_avg_roi_df = get_weekly_average_roi(filtered_weekly_roi_df)
184
  # plot the weekly average ROI
185
  print(weekly_avg_roi_df.head())
186
- # Ensure 'month_year_week' is a column, not an index
187
- if "month_year_week" not in weekly_avg_roi_df.columns:
188
- weekly_avg_roi_df = weekly_avg_roi_df.reset_index()
189
  fig = px.line(
190
  weekly_avg_roi_df,
191
- x="month_year_week",
192
  y="roi",
193
  )
194
  fig.update_layout(
 
137
 
138
  # Rename columns
139
  rolling_avg.rename(
140
+ columns={"roi": "rolling_avg_roi", "date": "creation_date"},
141
  inplace=True,
142
  )
143
 
144
  return rolling_avg
145
 
146
 
147
+ def get_weekly_average_roi(traders_data: pd.DataFrame) -> pd.DataFrame:
148
+ """Function to get the weekly average ROI by market_creator and total"""
 
 
149
 
150
+ # Create a copy to avoid SettingWithCopyWarning
151
+ local_df = traders_data.copy()
152
+
153
+ # Ensure creation_date is datetime64[ns]
154
+ # Since creation_date comes from .dt.date, it's a date object, not datetime
155
+ local_df["creation_date"] = pd.to_datetime(local_df["creation_date"])
156
 
157
+ # Aggregate ROI at the date level first
158
+ daily_avg = local_df.groupby("creation_date")["roi"].mean().reset_index()
159
+
160
+ # Set the datetime index
161
+ daily_avg = daily_avg.set_index("creation_date")
162
+
163
+ # Resample to weekly frequency and calculate mean
164
+ weekly_avg = daily_avg.resample("W").mean().reset_index()
165
+
166
+ # Rename columns for consistency
167
+ weekly_avg.rename(
168
+ columns={"date": "creation_date", "roi": "weekly_avg_roi"},
169
+ inplace=True,
170
  )
171
+
172
+ return weekly_avg
173
 
174
 
175
  def plot_weekly_average_roi(
176
+ traders_data: pd.DataFrame, pearl_agents: pd.DataFrame
177
  ) -> gr.Plot:
178
  """Function to plot the weekly average of ROI for pearl agents"""
179
  # Get the list of unique addresses from the daa_pearl_df
180
+ # Get the list of unique addresses from the daa_pearl_df
181
  unique_addresses = pearl_agents["safe_address"].unique()
182
  # Filter the weekly_roi_df to include only those addresses
183
+ filtered_traders_data = traders_data[
184
+ traders_data["trader_address"].isin(unique_addresses)
185
  ]
186
+ # create the date column
187
+ filtered_traders_data["creation_timestamp"] = pd.to_datetime(
188
+ filtered_traders_data["creation_timestamp"]
 
 
 
 
189
  )
190
+ filtered_traders_data["creation_date"] = filtered_traders_data[
191
+ "creation_timestamp"
192
+ ].dt.date
193
+
194
  # Get the weekly average ROI
195
+ weekly_avg_roi_df = get_weekly_average_roi(filtered_traders_data)
196
  # plot the weekly average ROI
197
  print(weekly_avg_roi_df.head())
198
+
 
 
199
  fig = px.line(
200
  weekly_avg_roi_df,
201
+ x="creation_date",
202
  y="roi",
203
  )
204
  fig.update_layout(