Nicolas Wagner
correct emoji leaderboard
aabac86
import json
import os
import pandas as pd
from src.display.utils import SubmissionQueueColumn, TeamColumn
from src.leaderboard.read_team_results import get_team_results
def get_leaderboard_df(results_path: str, cols: list) -> pd.DataFrame:
raw_data = get_team_results(results_path)
all_data_json = [v.to_dict() for v in raw_data]
if not all_data_json:
return pd.DataFrame(columns=cols)
df = pd.DataFrame.from_records(all_data_json)
df = df.sort_values(
by=[TeamColumn.best_f1.name, TeamColumn.best_submission_date.name],
ascending=[False, True],
)
team_name_col = TeamColumn.team_name.name
if team_name_col in df.columns and len(df) > 0:
medals = ["πŸ₯‡", "πŸ₯ˆ", "πŸ₯‰"]
creative_emoji = "🎨"
non_aurigin_count = 0
for idx in range(len(df)):
current_name = str(df.iloc[idx][team_name_col])
if current_name.lower() == "aurigin":
if not current_name.startswith("πŸ€–"):
df.iloc[idx, df.columns.get_loc(team_name_col)] = f"πŸ€– {current_name}"
continue
if not any(current_name.startswith(emoji) for emoji in medals + [creative_emoji, "πŸ€–"]):
if non_aurigin_count < 3:
df.iloc[idx, df.columns.get_loc(team_name_col)] = f"{medals[non_aurigin_count]} {current_name}"
elif non_aurigin_count < 6:
df.iloc[idx, df.columns.get_loc(team_name_col)] = f"{creative_emoji} {current_name}"
non_aurigin_count += 1
df = df[cols].round(decimals=4)
return df
def get_submission_queue_df(save_path: str, cols: list) -> list[pd.DataFrame]:
all_submissions = []
if not os.path.exists(save_path):
empty_df = pd.DataFrame(columns=cols)
return empty_df, empty_df, empty_df
for filename in os.listdir(save_path):
if not filename.endswith(".json"):
continue
filepath = os.path.join(save_path, filename)
if not os.path.isfile(filepath):
continue
filepath = os.path.join(save_path, filename)
try:
with open(filepath, "r") as f:
data = json.load(f)
submission_data = {
SubmissionQueueColumn.team_name.name: data.get("team_name", ""),
SubmissionQueueColumn.submission_date.name: data.get("timestamp", ""),
SubmissionQueueColumn.accuracy.name: data.get("scores", {}).get("accuracy", 0.0),
SubmissionQueueColumn.f1.name: data.get("scores", {}).get("f1", 0.0),
SubmissionQueueColumn.precision.name: data.get("scores", {}).get("precision", 0.0),
SubmissionQueueColumn.recall.name: data.get("scores", {}).get("recall", 0.0),
SubmissionQueueColumn.tp.name: data.get("scores", {}).get("tp", 0),
SubmissionQueueColumn.fp.name: data.get("scores", {}).get("fp", 0),
SubmissionQueueColumn.fn.name: data.get("scores", {}).get("fn", 0),
SubmissionQueueColumn.tn.name: data.get("scores", {}).get("tn", 0),
SubmissionQueueColumn.status.name: data.get("status", "UNKNOWN"),
}
all_submissions.append(submission_data)
except Exception:
continue
accepted_list = [
s for s in all_submissions if s[SubmissionQueueColumn.status.name] in ["ACCEPTED", "ACCEPTED, BUT WORST"]
]
rejected_list = [
s for s in all_submissions if s[SubmissionQueueColumn.status.name] not in ["ACCEPTED", "ACCEPTED, BUT WORST"]
]
df_accepted = (
pd.DataFrame.from_records(accepted_list, columns=cols) if accepted_list else pd.DataFrame(columns=cols)
)
df_rejected = (
pd.DataFrame.from_records(rejected_list, columns=cols) if rejected_list else pd.DataFrame(columns=cols)
)
df_all = (
pd.DataFrame.from_records(all_submissions, columns=cols) if all_submissions else pd.DataFrame(columns=cols)
)
return df_accepted, df_rejected, df_all