|
import pandas as pd |
|
import gradio as gr |
|
from typing import List |
|
import plotly.express as px |
|
from tabs.tool_win import sort_key |
|
|
|
|
|
HEIGHT = 600 |
|
WIDTH = 1000 |
|
|
|
|
|
def get_error_data(tools_df: pd.DataFrame, inc_tools: List[str]) -> pd.DataFrame: |
|
"""Gets the error data for the given tools and calculates the error percentage.""" |
|
tools_inc = tools_df[tools_df["tool"].isin(inc_tools)] |
|
error = ( |
|
tools_inc.groupby(["tool", "request_month_year_week", "error"]) |
|
.size() |
|
.unstack() |
|
.fillna(0) |
|
.reset_index() |
|
) |
|
error["error_perc"] = (error[1] / (error[0] + error[1])) * 100 |
|
error["total_requests"] = error[0] + error[1] |
|
return error |
|
|
|
|
|
def get_error_data_by_market( |
|
tools_df: pd.DataFrame, inc_tools: List[str] |
|
) -> pd.DataFrame: |
|
"""Gets the error data for the given tools and calculates the error percentage.""" |
|
tools_inc = tools_df[tools_df["tool"].isin(inc_tools)] |
|
error = ( |
|
tools_inc.groupby( |
|
["tool", "request_month_year_week", "market_creator", "error"], sort=False |
|
) |
|
.size() |
|
.unstack() |
|
.fillna(0) |
|
.reset_index() |
|
) |
|
error["error_perc"] = (error[1] / (error[0] + error[1])) * 100 |
|
error["total_requests"] = error[0] + error[1] |
|
return error |
|
|
|
|
|
def get_error_data_overall(error_df: pd.DataFrame) -> pd.DataFrame: |
|
"""Gets the error data for the given tools and calculates the error percentage.""" |
|
error_total = ( |
|
error_df.groupby("request_month_year_week") |
|
.agg({"total_requests": "sum", 1: "sum", 0: "sum"}) |
|
.reset_index() |
|
) |
|
error_total["error_perc"] = (error_total[1] / error_total["total_requests"]) * 100 |
|
error_total.columns = error_total.columns.astype(str) |
|
error_total["error_perc"] = error_total["error_perc"].apply(lambda x: round(x, 4)) |
|
return error_total |
|
|
|
|
|
def get_error_data_overall_by_market(error_df: pd.DataFrame) -> pd.DataFrame: |
|
"""Gets the error data for the given tools and calculates the error percentage.""" |
|
error_total = ( |
|
error_df.groupby(["request_month_year_week", "market_creator"], sort=False) |
|
.agg({"total_requests": "sum", 1: "sum", 0: "sum"}) |
|
.reset_index() |
|
) |
|
error_total["error_perc"] = (error_total[1] / error_total["total_requests"]) * 100 |
|
error_total.columns = error_total.columns.astype(str) |
|
error_total["error_perc"] = error_total["error_perc"].apply(lambda x: round(x, 4)) |
|
return error_total |
|
|
|
|
|
def plot_error_data(error_all_df: pd.DataFrame) -> gr.BarPlot: |
|
"""Plots the error data for the given tools and calculates the error percentage.""" |
|
return gr.BarPlot( |
|
value=error_all_df, |
|
x="request_month_year_week", |
|
y="error_perc", |
|
title="Error Percentage", |
|
x_title="Week", |
|
y_title="Error Percentage", |
|
show_label=True, |
|
interactive=True, |
|
show_actions_button=True, |
|
tooltip=["request_month_year_week", "error_perc"], |
|
height=HEIGHT, |
|
width=WIDTH, |
|
) |
|
|
|
|
|
def plot_error_data_by_market(error_all_df: pd.DataFrame) -> gr.Plot: |
|
|
|
|
|
sorted_categories = sorted( |
|
error_all_df["request_month_year_week"].unique(), key=sort_key |
|
) |
|
|
|
error_all_df["request_month_year_week"] = pd.Categorical( |
|
error_all_df["request_month_year_week"], |
|
categories=sorted_categories, |
|
ordered=True, |
|
) |
|
|
|
|
|
error_all_df = error_all_df.sort_values("request_month_year_week") |
|
|
|
fig = px.bar( |
|
error_all_df, |
|
x="request_month_year_week", |
|
y="error_perc", |
|
color="market_creator", |
|
barmode="group", |
|
color_discrete_sequence=["purple", "goldenrod", "darkgreen"], |
|
category_orders={ |
|
"market_creator": ["pearl", "quickstart", "all"], |
|
"request_month_year_week": sorted_categories, |
|
}, |
|
) |
|
fig.update_layout( |
|
xaxis_title="Week", |
|
yaxis_title="Error Percentage", |
|
legend=dict(yanchor="top", y=0.5), |
|
) |
|
fig.update_layout(width=WIDTH, height=HEIGHT) |
|
fig.update_xaxes(tickformat="%b %d\n%Y") |
|
return gr.Plot(value=fig) |
|
|
|
|
|
def plot_tool_error_data(error_df: pd.DataFrame, tool: str) -> gr.BarPlot: |
|
"""Plots the error data for the given tool.""" |
|
error_tool = error_df[error_df["tool"] == tool] |
|
error_tool.columns = error_tool.columns.astype(str) |
|
error_tool["error_perc"] = error_tool["error_perc"].apply(lambda x: round(x, 4)) |
|
|
|
return gr.BarPlot( |
|
title="Error Percentage", |
|
x_title="Week", |
|
y_title="Error Percentage %", |
|
show_label=True, |
|
interactive=True, |
|
show_actions_button=True, |
|
tooltip=["request_month_year_week", "error_perc"], |
|
value=error_tool, |
|
x="request_month_year_week", |
|
y="error_perc", |
|
height=HEIGHT, |
|
width=WIDTH, |
|
) |
|
|
|
|
|
def plot_tool_error_data_by_market(error_df: pd.DataFrame, tool: str) -> gr.Plot: |
|
error_tool = error_df[error_df["tool"] == tool] |
|
error_tool.columns = error_tool.columns.astype(str) |
|
error_tool["error_perc"] = error_tool["error_perc"].apply(lambda x: round(x, 4)) |
|
|
|
|
|
sorted_categories = sorted( |
|
error_tool["request_month_year_week"].unique(), key=sort_key |
|
) |
|
|
|
error_tool["request_month_year_week"] = pd.Categorical( |
|
error_tool["request_month_year_week"], |
|
categories=sorted_categories, |
|
ordered=True, |
|
) |
|
|
|
|
|
error_tool = error_tool.sort_values("request_month_year_week") |
|
|
|
fig = px.bar( |
|
error_tool, |
|
x="request_month_year_week", |
|
y="error_perc", |
|
color="market_creator", |
|
barmode="group", |
|
color_discrete_sequence=["purple", "goldenrod", "darkgreen"], |
|
category_orders={ |
|
"market_creator": ["pearl", "quickstart", "all"], |
|
"request_month_year_week": sorted_categories, |
|
}, |
|
) |
|
fig.update_layout( |
|
xaxis_title="Week", |
|
yaxis_title="Error Percentage %", |
|
legend=dict(yanchor="top", y=0.5), |
|
) |
|
fig.update_layout(width=WIDTH, height=HEIGHT) |
|
fig.update_xaxes(tickformat="%b %d\n%Y") |
|
return gr.Plot(value=fig) |
|
|
|
|
|
def plot_week_error_data(error_df: pd.DataFrame, week: str) -> gr.BarPlot: |
|
"""Plots the error data for the given week.""" |
|
error_week = error_df[error_df["request_month_year_week"] == week] |
|
error_week.columns = error_week.columns.astype(str) |
|
error_week["error_perc"] = error_week["error_perc"].apply(lambda x: round(x, 4)) |
|
return gr.BarPlot( |
|
value=error_week, |
|
x="tool", |
|
y="error_perc", |
|
title="Error Percentage", |
|
x_title="Tool", |
|
y_title="Error Percentage", |
|
show_label=True, |
|
interactive=True, |
|
show_actions_button=True, |
|
tooltip=["tool", "error_perc"], |
|
height=HEIGHT, |
|
width=WIDTH, |
|
) |
|
|
|
|
|
def plot_week_error_data_by_market(error_df: pd.DataFrame, week: str) -> gr.Plot: |
|
error_week = error_df[error_df["request_month_year_week"] == week] |
|
error_week.columns = error_week.columns.astype(str) |
|
error_week["error_perc"] = error_week["error_perc"].apply(lambda x: round(x, 4)) |
|
|
|
fig = px.bar( |
|
error_week, |
|
x="tool", |
|
y="error_perc", |
|
color="market_creator", |
|
barmode="group", |
|
color_discrete_sequence=["purple", "goldenrod", "darkgreen"], |
|
category_orders={ |
|
"market_creator": ["pearl", "quickstart", "all"], |
|
}, |
|
) |
|
fig.update_layout( |
|
xaxis_title="Tool", |
|
yaxis_title="Error Percentage %", |
|
legend=dict(yanchor="top", y=0.5), |
|
) |
|
fig.update_layout(width=WIDTH, height=HEIGHT) |
|
fig.update_xaxes(tickformat="%b %d\n%Y") |
|
return gr.Plot(value=fig) |
|
|