Spaces:
Runtime error
Runtime error
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,
|