|
import pandas as pd |
|
from countries import make_country_table |
|
|
|
make_country_table = make_country_table |
|
|
|
|
|
def aggregate(results): |
|
results = ( |
|
results.groupby(["model", "bcp_47", "task", "metric"]).mean().reset_index() |
|
) |
|
lang_results = ( |
|
results.groupby(["bcp_47", "task", "metric"]) |
|
.agg({"score": "mean", "model": "nunique"}) |
|
.reset_index() |
|
) |
|
model_results = ( |
|
results.groupby(["model", "task", "metric"]) |
|
.agg({"score": "mean", "bcp_47": "nunique"}) |
|
.reset_index() |
|
) |
|
task_results = ( |
|
results.groupby(["task", "metric"]) |
|
.agg({"score": "mean", "bcp_47": "nunique", "model": "nunique"}) |
|
.reset_index() |
|
) |
|
return results, lang_results, model_results, task_results |
|
|
|
|
|
def mean(lst): |
|
return sum(lst) / len(lst) if lst else None |
|
|
|
|
|
def make_model_table(df, models): |
|
df["task_metric"] = df["task"] + "_" + df["metric"] |
|
df = df.drop(columns=["task", "metric"]) |
|
task_metrics = df["task_metric"].unique() |
|
df = df.pivot(index="model", columns="task_metric", values="score").fillna(0) |
|
df["average"] = df[task_metrics].mean(axis=1) |
|
df = df.sort_values(by="average", ascending=False).reset_index() |
|
for row in [*task_metrics, "average"]: |
|
df[row] = df[row].round(2) |
|
df = pd.merge(df, models, left_on="model", right_on="id", how="left") |
|
df["creation_date"] = df["creation_date"].dt.strftime("%Y-%m-%d") |
|
df["rank"] = df.index + 1 |
|
df = df[ |
|
[ |
|
"rank", |
|
"model", |
|
"hf_id", |
|
"creation_date", |
|
"size", |
|
"type", |
|
"license", |
|
"average", |
|
*task_metrics, |
|
] |
|
] |
|
return df |
|
|
|
|
|
def make_language_table(df, languages): |
|
df["task_metric"] = df["task"] + "_" + df["metric"] |
|
df = df.drop(columns=["task", "metric"]) |
|
task_metrics = df["task_metric"].unique() |
|
df = ( |
|
df.pivot(index="bcp_47", columns="task_metric", values="score") |
|
.fillna(0) |
|
.reset_index() |
|
) |
|
df["average"] = df[task_metrics].mean(axis=1) |
|
for row in [*task_metrics, "average"]: |
|
df[row] = df[row].round(2) |
|
df = pd.merge(languages, df, on="bcp_47", how="outer") |
|
df = df.sort_values(by="speakers", ascending=False) |
|
df = df[ |
|
[ |
|
"bcp_47", |
|
"language_name", |
|
"autonym", |
|
"speakers", |
|
"family", |
|
"average", |
|
"in_benchmark", |
|
*task_metrics, |
|
] |
|
] |
|
return df |