|
import pandas as pd |
|
import gradio as gr |
|
from typing import List |
|
|
|
|
|
HEIGHT=600 |
|
WIDTH=1000 |
|
|
|
|
|
def set_error(row: pd.Series) -> bool: |
|
"""Sets the error for the given row.""" |
|
if row.error not in [True, False]: |
|
if not row.prompt_response: |
|
return True |
|
return False |
|
return row.error |
|
|
|
|
|
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)].copy() |
|
tools_inc['error'] = tools_inc.apply(set_error, axis=1) |
|
tools_non_error = tools_inc[tools_inc['error'] != True] |
|
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) |
|
|
|
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 |
|
) |