Spaces:
Runtime error
Runtime error
cyberosa
commited on
Commit
Β·
f245408
1
Parent(s):
652d8f6
new tab with active traders
Browse files- app.py +22 -1
- tabs/market_plots.py +0 -3
- tabs/trader_plots.py +65 -0
app.py
CHANGED
|
@@ -11,13 +11,13 @@ from scripts.metrics import (
|
|
| 11 |
)
|
| 12 |
from tabs.trader_plots import (
|
| 13 |
plot_trader_metrics_by_market_creator,
|
| 14 |
-
plot_trader_daily_metrics_by_market_creator,
|
| 15 |
default_trader_metric,
|
| 16 |
trader_metric_choices,
|
| 17 |
get_metrics_text,
|
| 18 |
plot_winning_metric_per_trader,
|
| 19 |
get_interpretation_text,
|
| 20 |
plot_total_bet_amount,
|
|
|
|
| 21 |
)
|
| 22 |
from tabs.daily_graphs import (
|
| 23 |
get_current_week_data,
|
|
@@ -393,6 +393,27 @@ with demo:
|
|
| 393 |
inputs=[no_trader_live_details_selector, no_trader_live_details_plot],
|
| 394 |
outputs=[no_trader_live_details_plot],
|
| 395 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 396 |
|
| 397 |
with gr.TabItem("π Markets KullbackβLeibler divergence"):
|
| 398 |
with gr.Row():
|
|
|
|
| 11 |
)
|
| 12 |
from tabs.trader_plots import (
|
| 13 |
plot_trader_metrics_by_market_creator,
|
|
|
|
| 14 |
default_trader_metric,
|
| 15 |
trader_metric_choices,
|
| 16 |
get_metrics_text,
|
| 17 |
plot_winning_metric_per_trader,
|
| 18 |
get_interpretation_text,
|
| 19 |
plot_total_bet_amount,
|
| 20 |
+
plot_active_traders,
|
| 21 |
)
|
| 22 |
from tabs.daily_graphs import (
|
| 23 |
get_current_week_data,
|
|
|
|
| 393 |
inputs=[no_trader_live_details_selector, no_trader_live_details_plot],
|
| 394 |
outputs=[no_trader_live_details_plot],
|
| 395 |
)
|
| 396 |
+
with gr.TabItem("βοΈ Active traders"):
|
| 397 |
+
with gr.Row():
|
| 398 |
+
gr.Markdown("# Active traders for all markets by trader categories")
|
| 399 |
+
with gr.Row():
|
| 400 |
+
active_traders_plot = plot_active_traders(traders_data, unknown_traders)
|
| 401 |
+
|
| 402 |
+
with gr.Row():
|
| 403 |
+
gr.Markdown("# Active traders for Pearl markets by trader categories")
|
| 404 |
+
with gr.Row():
|
| 405 |
+
active_traders_plot = plot_active_traders(
|
| 406 |
+
traders_data, unknown_traders, market_creator="pearl"
|
| 407 |
+
)
|
| 408 |
+
|
| 409 |
+
with gr.Row():
|
| 410 |
+
gr.Markdown(
|
| 411 |
+
"# Active traders for Quickstart markets by trader categories"
|
| 412 |
+
)
|
| 413 |
+
with gr.Row():
|
| 414 |
+
active_traders_plot = plot_active_traders(
|
| 415 |
+
traders_data, unknown_traders, market_creator="quickstart"
|
| 416 |
+
)
|
| 417 |
|
| 418 |
with gr.TabItem("π Markets KullbackβLeibler divergence"):
|
| 419 |
with gr.Row():
|
tabs/market_plots.py
CHANGED
|
@@ -231,9 +231,6 @@ def plot_nr_trades_per_trader_per_market(
|
|
| 231 |
width=1000, # Adjusted for better fit on laptop screens
|
| 232 |
height=600, # Adjusted for better fit on laptop screens
|
| 233 |
)
|
| 234 |
-
# for axis in fig.layout:
|
| 235 |
-
# if axis.startswith("xaxis"):
|
| 236 |
-
# fig.layout[axis].update(title="Week")
|
| 237 |
fig.update_xaxes(tickformat="%b %d\n%Y")
|
| 238 |
return gr.Plot(
|
| 239 |
value=fig,
|
|
|
|
| 231 |
width=1000, # Adjusted for better fit on laptop screens
|
| 232 |
height=600, # Adjusted for better fit on laptop screens
|
| 233 |
)
|
|
|
|
|
|
|
|
|
|
| 234 |
fig.update_xaxes(tickformat="%b %d\n%Y")
|
| 235 |
return gr.Plot(
|
| 236 |
value=fig,
|
tabs/trader_plots.py
CHANGED
|
@@ -268,3 +268,68 @@ def plot_total_bet_amount(
|
|
| 268 |
return gr.Plot(
|
| 269 |
value=fig,
|
| 270 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 268 |
return gr.Plot(
|
| 269 |
value=fig,
|
| 270 |
)
|
| 271 |
+
|
| 272 |
+
|
| 273 |
+
def plot_active_traders(
|
| 274 |
+
traders_data: pd.DataFrame,
|
| 275 |
+
unknown_traders: pd.DataFrame,
|
| 276 |
+
market_creator: str = None,
|
| 277 |
+
):
|
| 278 |
+
"""Function to plot the volume of active traders for the different categories and markets"""
|
| 279 |
+
traders_data["trader_type"] = traders_data["staking"].apply(
|
| 280 |
+
lambda x: "non_Olas" if x == "non_Olas" else "Olas"
|
| 281 |
+
)
|
| 282 |
+
filtered_traders_data = traders_data
|
| 283 |
+
if len(unknown_traders) > 0:
|
| 284 |
+
# merge
|
| 285 |
+
unknown_traders["trader_type"] = "unknown"
|
| 286 |
+
filtered_traders_data = pd.concat([traders_data, unknown_traders], axis=0)
|
| 287 |
+
|
| 288 |
+
if market_creator is not None:
|
| 289 |
+
filtered_traders_data = filtered_traders_data.loc[
|
| 290 |
+
filtered_traders_data["market_creator"] == market_creator
|
| 291 |
+
]
|
| 292 |
+
active_traders = (
|
| 293 |
+
filtered_traders_data.groupby(by=["month_year_week", "trader_type"])[
|
| 294 |
+
"trader_address"
|
| 295 |
+
]
|
| 296 |
+
.nunique()
|
| 297 |
+
.reset_index(name="nr_traders")
|
| 298 |
+
)
|
| 299 |
+
# Convert string dates to datetime and sort them
|
| 300 |
+
all_dates_dt = sorted(
|
| 301 |
+
[
|
| 302 |
+
datetime.strptime(date, "%b-%d")
|
| 303 |
+
for date in active_traders["month_year_week"].unique()
|
| 304 |
+
]
|
| 305 |
+
)
|
| 306 |
+
# Convert back to string format
|
| 307 |
+
all_dates = [date.strftime("%b-%d") for date in all_dates_dt]
|
| 308 |
+
color_mapping = [
|
| 309 |
+
"royalblue",
|
| 310 |
+
"goldenrod",
|
| 311 |
+
"gray",
|
| 312 |
+
]
|
| 313 |
+
fig = px.bar(
|
| 314 |
+
active_traders,
|
| 315 |
+
x="month_year_week",
|
| 316 |
+
y="nr_traders",
|
| 317 |
+
color="trader_type",
|
| 318 |
+
color_discrete_sequence=color_mapping,
|
| 319 |
+
category_orders={
|
| 320 |
+
"trader_type": ["Olas", "non_Olas", "unknown"],
|
| 321 |
+
},
|
| 322 |
+
barmode="group",
|
| 323 |
+
)
|
| 324 |
+
fig.update_layout(
|
| 325 |
+
xaxis_title="Week",
|
| 326 |
+
yaxis_title="Weekly active traders per trader type",
|
| 327 |
+
legend=dict(yanchor="top", y=0.5),
|
| 328 |
+
)
|
| 329 |
+
|
| 330 |
+
fig.update_xaxes(tickformat="%b %d")
|
| 331 |
+
# Update layout to force x-axis category order (hotfix for a sorting issue)
|
| 332 |
+
fig.update_layout(xaxis={"categoryorder": "array", "categoryarray": all_dates})
|
| 333 |
+
return gr.Plot(
|
| 334 |
+
value=fig,
|
| 335 |
+
)
|