| import pandas as pd | |
| import json | |
| from pathlib import Path | |
| from typing import Dict, List | |
| class LeaderboardDataLoader: | |
| """Handles loading and managing leaderboard data""" | |
| def __init__(self): | |
| self.abs_path = Path(__file__).parent.parent | |
| self.task_information = self._load_task_information() | |
| self.leaderboard_data = self._load_leaderboard_data() | |
| self.dataframes = self._create_dataframes() | |
| self.original_avg_performances = self._store_original_performances() | |
| self.n_models = self._calculate_n_models() | |
| def _load_task_information(self) -> Dict: | |
| """Load task information from JSON""" | |
| with open(self.abs_path / "task_information.json", 'r') as file: | |
| return json.load(file) | |
| def _load_leaderboard_data(self) -> Dict[str, Dict]: | |
| """Load all leaderboard JSON data""" | |
| leaderboard_files = { | |
| 'zero_shot': 'leaderboards/Zero-Shot_leaderboard.json', | |
| 'few_shot': 'leaderboards/Few-Shot_leaderboard.json', | |
| 'cot': 'leaderboards/CoT_leaderboard.json' | |
| } | |
| data = {} | |
| for key, filepath in leaderboard_files.items(): | |
| with open(self.abs_path / filepath, 'r') as file: | |
| data[key] = json.load(file) | |
| return data | |
| def _create_dataframes(self) -> Dict[str, pd.DataFrame]: | |
| """Create pandas DataFrames from JSON data""" | |
| dataframes = {} | |
| for key in ['zero_shot', 'few_shot', 'cot']: | |
| if key == 'few_shot': | |
| json_file = "leaderboards/Few-Shot_leaderboard.json" | |
| elif key == 'cot': | |
| json_file = "leaderboards/CoT_leaderboard.json" | |
| else: | |
| json_file = "leaderboards/Zero-Shot_leaderboard.json" | |
| dataframes[key] = pd.read_json(self.abs_path / json_file, precise_float=True) | |
| return dataframes | |
| def _store_original_performances(self) -> Dict[str, pd.Series]: | |
| """Store original average performances for reset functionality""" | |
| return { | |
| key: df["Average Performance"].copy() | |
| for key, df in self.dataframes.items() | |
| } | |
| def _calculate_n_models(self) -> int: | |
| """Calculate number of models from the data""" | |
| return int(list(self.leaderboard_data['zero_shot']["Model"].keys())[-1]) + 1 | |
| def get_dataframe(self, leaderboard_type: str) -> pd.DataFrame: | |
| """Get dataframe for specific leaderboard type""" | |
| return self.dataframes[leaderboard_type] | |
| def get_leaderboard_json(self, leaderboard_type: str) -> Dict: | |
| """Get JSON data for specific leaderboard type""" | |
| return self.leaderboard_data[leaderboard_type] | |
| def get_original_performance(self, leaderboard_type: str) -> pd.Series: | |
| """Get original average performance for specific leaderboard type""" | |
| return self.original_avg_performances[leaderboard_type] |