File size: 4,600 Bytes
04a2c17 c255cf4 04a2c17 55b63e0 04a2c17 c255cf4 285f2a6 c255cf4 0b04461 c255cf4 6992ec1 c255cf4 6992ec1 c255cf4 0b04461 c255cf4 0b04461 c255cf4 0b04461 c255cf4 0b04461 c255cf4 0b04461 c255cf4 0b04461 c255cf4 0b04461 c255cf4 0b04461 c255cf4 |
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
import pandas as pd
import gradio as gr
from typing import List
from tabs.metrics import tool_metric_choices
import plotly.express as px
HEIGHT = 600
WIDTH = 1000
def prepare_tools(tools: pd.DataFrame) -> pd.DataFrame:
tools["request_time"] = pd.to_datetime(tools["request_time"])
tools = tools.sort_values(by="request_time", ascending=True)
tools["request_month_year_week"] = (
pd.to_datetime(tools["request_time"])
.dt.to_period("W")
.dt.start_time.dt.strftime("%b-%d-%Y")
)
# preparing the tools graph
# adding the total
tools_all = tools.copy(deep=True)
tools_all["market_creator"] = "all"
# merging both dataframes
tools = pd.concat([tools, tools_all], ignore_index=True)
tools = tools.sort_values(by="request_time", ascending=True)
return tools
def get_overall_winning_rate_by_market(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", "market_creator"], sort=False)
.agg({"0": "sum", "1": "sum", "win_perc": "mean", "total_request": "sum"})
.rename(columns={"0": "losses", "1": "wins"})
.reset_index()
)
return overall_wins
def sort_key(date_str):
month, day, year = date_str.split("-")
month_order = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
]
month_num = month_order.index(month) + 1
day = int(day)
year = int(year)
return (year, month_num, day) # year, month, day
def integrated_plot_tool_winnings_overall_per_market_by_week(
winning_df: pd.DataFrame,
winning_selector: str = "Weekly Mean Mech Tool Accuracy as (Accurate Responses/All) %",
) -> gr.Plot:
# get the column name from the metric name
column_name = tool_metric_choices.get(winning_selector)
wins_df = get_overall_winning_rate_by_market(winning_df)
# Sort the unique values of request_month_year_week
sorted_categories = sorted(
wins_df["request_month_year_week"].unique(), key=sort_key
)
# Create a categorical type with a specific order
wins_df["request_month_year_week"] = pd.Categorical(
wins_df["request_month_year_week"], categories=sorted_categories, ordered=True
)
# Sort the DataFrame based on the new categorical column
wins_df = wins_df.sort_values("request_month_year_week")
fig = px.bar(
wins_df,
x="request_month_year_week",
y=column_name,
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=winning_selector,
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 integrated_tool_winnings_by_tool_per_market(
wins_df: pd.DataFrame, tool: str
) -> gr.Plot:
tool_wins_df = wins_df[wins_df["tool"] == tool]
# Sort the unique values of request_month_year_week
sorted_categories = sorted(
tool_wins_df["request_month_year_week"].unique(), key=sort_key
)
# Create a categorical type with a specific order
tool_wins_df["request_month_year_week"] = pd.Categorical(
tool_wins_df["request_month_year_week"],
categories=sorted_categories,
ordered=True,
)
# Sort the DataFrame based on the new categorical column
wins_df = wins_df.sort_values("request_month_year_week")
fig = px.bar(
tool_wins_df,
x="request_month_year_week",
y="win_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="Weekly Mean Mech Tool Accuracy as (Accurate Responses/All) %",
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)
|