|
import pandas as pd |
|
import gradio as gr |
|
import plotly.express as px |
|
import plotly.graph_objects as go |
|
from plotly.subplots import make_subplots |
|
import matplotlib.pyplot as plt |
|
import seaborn as sns |
|
|
|
|
|
def plot_kl_div_per_market(closed_markets: pd.DataFrame) -> gr.Plot: |
|
|
|
|
|
all_markets = closed_markets.copy(deep=True) |
|
all_markets["market_creator"] = "all" |
|
|
|
|
|
final_markets = pd.concat([closed_markets, all_markets], ignore_index=True) |
|
final_markets = final_markets.sort_values(by="opening_datetime", ascending=True) |
|
|
|
fig = px.box( |
|
final_markets, |
|
x="month_year_week", |
|
y="kl_divergence", |
|
color="market_creator", |
|
color_discrete_sequence=["purple", "goldenrod", "darkgreen"], |
|
category_orders={"market_creator": ["pearl", "quickstart", "all"]}, |
|
) |
|
fig.update_traces(boxmean=True) |
|
fig.update_layout( |
|
xaxis_title="Markets closing Week", |
|
yaxis_title="Kullback–Leibler divergence", |
|
legend=dict(yanchor="top", y=0.5), |
|
width=800, |
|
height=600, |
|
) |
|
|
|
fig.update_xaxes(tickformat="%b %d\n%Y") |
|
|
|
return gr.Plot( |
|
value=fig, |
|
) |
|
|
|
|
|
def plot_kl_div_with_off_by(closed_markets: pd.DataFrame) -> gr.Plot: |
|
|
|
all_markets = closed_markets.copy(deep=True) |
|
all_markets["market_creator"] = "all" |
|
|
|
|
|
final_markets = pd.concat([closed_markets, all_markets], ignore_index=True) |
|
final_markets = final_markets.sort_values(by="opening_datetime", ascending=True) |
|
|
|
|
|
fig, ax1 = plt.subplots(figsize=(10, 6)) |
|
|
|
|
|
sns.boxplot( |
|
data=final_markets, |
|
x="month_year_week", |
|
y="kl_divergence", |
|
ax=ax1, |
|
hue="market_creator", |
|
) |
|
|
|
|
|
ax1.set_xlabel("Week") |
|
ax1.set_ylabel("KL Divergence") |
|
ax1.set_title("KL Divergence Boxplot with Off-by Percentage") |
|
|
|
|
|
ax2 = ax1.twinx() |
|
|
|
|
|
for i, week in enumerate(closed_markets["month_year_week"].unique()): |
|
off_by_perc = closed_markets[closed_markets["month_year_week"] == week][ |
|
"off_by_perc" |
|
] |
|
ax2.scatter([i] * len(off_by_perc), off_by_perc, color="red", alpha=0.01) |
|
|
|
|
|
ax2.set_ylabel("Off-by Percentage") |
|
|
|
|
|
plt.tight_layout() |
|
return gr.Plot( |
|
value=fig, |
|
) |
|
|