File size: 3,079 Bytes
e2483e1
 
 
 
 
9679b78
 
e2483e1
 
 
 
9679b78
cc33185
9679b78
 
 
 
 
 
 
 
 
 
 
e2483e1
9679b78
 
 
 
 
 
 
e2483e1
9679b78
e2483e1
 
9679b78
e2483e1
 
 
 
 
9679b78
 
 
 
 
 
e2483e1
 
 
9679b78
 
 
e2483e1
 
9679b78
 
e2483e1
 
 
 
 
 
 
 
 
9679b78
e2483e1
 
 
 
 
 
9679b78
 
 
 
 
 
 
 
 
 
 
 
 
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
from typing import List


HEIGHT = 600
WIDTH = 1000


def get_tool_winning_rate(tools_df: pd.DataFrame, inc_tools: List[str]) -> pd.DataFrame:
    """Gets the tool winning rate data for the given tools and calculates the winning percentage."""
    tools_inc = tools_df[tools_df["tool"].isin(inc_tools)]
    # tools_inc['error'] = tools_inc.apply(set_error, axis=1)
    tools_non_error = tools_inc[tools_inc["error"] != 1]
    tools_non_error.loc[:, "currentAnswer"] = tools_non_error["currentAnswer"].replace(
        {"no": "No", "yes": "Yes"}
    )
    tools_non_error = tools_non_error[
        tools_non_error["currentAnswer"].isin(["Yes", "No"])
    ]
    tools_non_error = tools_non_error[tools_non_error["vote"].isin(["Yes", "No"])]
    tools_non_error["win"] = (
        tools_non_error["currentAnswer"] == tools_non_error["vote"]
    ).astype(int)
    tools_non_error.columns = tools_non_error.columns.astype(str)
    wins = (
        tools_non_error.groupby(["tool", "request_month_year_week", "win"])
        .size()
        .unstack()
        .fillna(0)
    )
    wins["win_perc"] = (wins[1] / (wins[0] + wins[1])) * 100
    wins.reset_index(inplace=True)
    wins["total_request"] = wins[0] + wins[1]
    wins.columns = wins.columns.astype(str)
    # Convert request_month_year_week to string and explicitly set type for Altair
    wins["request_month_year_week"] = wins["request_month_year_week"].astype(str)
    return wins


def get_overall_winning_rate(wins_df: pd.DataFrame) -> pd.DataFrame:
    """Gets the overall winning rate data for the given tools and calculates the winning percentage."""
    overall_wins = (
        wins_df.groupby("request_month_year_week")
        .agg({"0": "sum", "1": "sum", "win_perc": "mean", "total_request": "sum"})
        .rename(columns={"0": "losses", "1": "wins"})
        .reset_index()
    )
    return overall_wins


def plot_tool_winnings_overall(
    wins_df: pd.DataFrame, winning_selector: str = "win_perc"
) -> gr.BarPlot:
    """Plots the overall winning rate data for the given tools and calculates the winning percentage."""
    return gr.BarPlot(
        title="Winning Rate",
        x_title="Date",
        y_title=winning_selector,
        show_label=True,
        interactive=True,
        show_actions_button=True,
        tooltip=["request_month_year_week", winning_selector],
        value=wins_df,
        x="request_month_year_week",
        y=winning_selector,
        height=HEIGHT,
        width=WIDTH,
    )


def plot_tool_winnings_by_tool(wins_df: pd.DataFrame, tool: str) -> gr.BarPlot:
    """Plots the winning rate data for the given tool."""
    return gr.BarPlot(
        title="Winning Rate",
        x_title="Week",
        y_title="Winning Rate",
        x="request_month_year_week",
        y="win_perc",
        value=wins_df[wins_df["tool"] == tool],
        show_label=True,
        interactive=True,
        show_actions_button=True,
        tooltip=["request_month_year_week", "win_perc"],
        height=HEIGHT,
        width=WIDTH,
    )