import evalica
import pandas as pd
import plotly.express as px
from evalica import Winner
from plotly.graph_objects import Figure
evalica.__version__
df_food = pd.read_csv("food.csv", dtype=str)
df_food["winner"] = df_food["winner"].map({
"left": Winner.X,
"right": Winner.Y,
"tie": Winner.Draw,
})
df_food.head(5)
df_food["left_id"], df_food["right_id"], index = evalica.indexing(df_food["left"], df_food["right"])
matrices = evalica.matrices(df_food["left_id"], df_food["right_id"], df_food["winner"], index)
pd.DataFrame(matrices.win_matrix, index=index, columns=index) # win matrix
pd.DataFrame(matrices.tie_matrix, index=index, columns=index) # tie matrix
count_result = evalica.counting(df_food["left"], df_food["right"], df_food["winner"])
count_result.scores.to_frame()
avr_result = evalica.average_win_rate(df_food["left"], df_food["right"], df_food["winner"])
avr_result.scores.to_frame()
bt_result = evalica.bradley_terry(df_food["left"], df_food["right"], df_food["winner"])
bt_result.scores.to_frame()
newman_result = evalica.newman(df_food["left"], df_food["right"], df_food["winner"])
newman_result.scores.to_frame()
eigen_result = evalica.eigen(df_food["left"], df_food["right"], df_food["winner"])
eigen_result.scores.to_frame()
elo_result = evalica.elo(df_food["left"], df_food["right"], df_food["winner"])
elo_result.scores.to_frame()
df_bt_pairwise = evalica.pairwise_frame(bt_result.scores)
df_bt_pairwise
def visualize(df_pairwise: pd.DataFrame) -> Figure:
fig = px.imshow(df_pairwise, color_continuous_scale="RdBu", text_auto=".2f")
fig.update_layout(xaxis_title="Loser", yaxis_title="Winner", xaxis_side="top")
fig.update_traces(hovertemplate="Winner: %{y}<br>Loser: %{x}<br>Fraction of Wins: %{z}")
return fig
visualize(df_bt_pairwise)