cyberosa
commited on
Commit
·
f0f1e9a
1
Parent(s):
d9d744c
Using new gnosis dataset and updating DAA graph
Browse files- app.py +54 -5
- tabs/daily_graphs.py +52 -0
- 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
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 |
-
|
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,
|