File size: 2,705 Bytes
52d1750
 
 
12536a4
 
3f72b8c
 
52d1750
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f81ac63
330cbe3
52d1750
3f72b8c
52d1750
 
 
 
 
12536a4
 
3f72b8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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:

    # adding the total
    all_markets = closed_markets.copy(deep=True)
    all_markets["market_creator"] = "all"

    # merging both dataframes
    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,  # Adjusted for better fit on laptop screens
        height=600,  # Adjusted for better fit on laptop screens
    )

    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:
    # adding the total
    all_markets = closed_markets.copy(deep=True)
    all_markets["market_creator"] = "all"

    # merging both dataframes
    final_markets = pd.concat([closed_markets, all_markets], ignore_index=True)
    final_markets = final_markets.sort_values(by="opening_datetime", ascending=True)

    # Create the main figure and axis
    fig, ax1 = plt.subplots(figsize=(10, 6))

    # Create the boxplot using seaborn
    sns.boxplot(
        data=final_markets,
        x="month_year_week",
        y="kl_divergence",
        ax=ax1,
        hue="market_creator",
    )

    # Set labels and title for the main axis
    ax1.set_xlabel("Week")
    ax1.set_ylabel("KL Divergence")
    ax1.set_title("KL Divergence Boxplot with Off-by Percentage")

    # Create a secondary y-axis
    ax2 = ax1.twinx()

    # Plot the off_by_perc values on the secondary y-axis
    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)

    # Set label for the secondary y-axis
    ax2.set_ylabel("Off-by Percentage")

    # Adjust the layout and display the plot
    plt.tight_layout()
    return gr.Plot(
        value=fig,
    )