Added power ranking report output

This commit is contained in:
Ryan Fitz-Gerald
2024-10-10 11:49:58 -04:00
parent 6cae038e84
commit 4b320b5c0a

View File

@@ -2,6 +2,7 @@ from pathlib import Path
import tbaapiv3client
from tbaapiv3client.rest import ApiException
from pprint import pprint
from datetime import datetime as dt
from csv import DictWriter
@@ -93,7 +94,83 @@ def get_event_teams(api_client: tbaapiv3client.ApiClient, season:str) -> dict[di
return event_teams
def write_rank_csv(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
def write_power_rank(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
# Create annual rank CSV
results_list:list[dict] = []
for team, ranks in rankings.items():
result = {
'team': team
}
rank_sum = 0
point_total_sum = 0
point_district_sum = 0
point_district_na_sum = 0
entry_count = 0
for season in seasons:
rank = ''
point_total = ''
point_district = ''
point_district_na = ''
if season in ranks:
rank = ranks[season]['rank']
point_total = ranks[season]['point_total']
point_district = 0
if ranks[season]['points_event1'] is not None:
point_district += ranks[season]['points_event1']
if ranks[season]['points_event2'] is not None:
point_district += ranks[season]['points_event2']
point_district_na = 0
if ranks[season]['points_event1_na'] is not None:
point_district_na += ranks[season]['points_event1_na']
if ranks[season]['points_event2_na'] is not None:
point_district_na += ranks[season]['points_event2_na']
rank_sum += rank
point_total_sum += point_total
point_district_sum += point_district
point_district_na_sum += point_district_na
entry_count += 1
result[f'{season} Rank'] = rank
result[f'{season} Point Total'] = point_total
result[f'{season} Points District'] = point_district
result[f'{season} Points District No Awards'] = point_district_na
rank_avg = ''
point_total_avg = ''
point_district_avg = ''
point_district_na_avg = ''
if entry_count > 0:
rank_avg = rank_sum / entry_count
point_total_avg = point_total_sum / entry_count
point_district_avg = point_district_sum / entry_count
point_district_na_avg = point_district_na_sum / entry_count
result[f'Avg Rank'] = rank_avg
result[f'Avg Point Total'] = point_total_avg
result[f'Avg Points District'] = point_district_avg
result[f'Avg Points District No Awards'] = point_district_na_avg
results_list.append(result)
write_result(path, results_list)
def write_rank(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
# Create annual rank CSV
results_list:list[dict] = []
@@ -111,9 +188,9 @@ def write_rank_csv(path: str | Path, rankings: list[dict], seasons:list[str]) ->
results_list.append(result)
write_result_csv(path, results_list)
write_result(path, results_list)
def write_point_total_csv(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
def write_point_total(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
# Create annual rank CSV
results_list:list[dict] = []
@@ -131,9 +208,9 @@ def write_point_total_csv(path: str | Path, rankings: list[dict], seasons:list[s
results_list.append(result)
write_result_csv(path, results_list)
write_result(path, results_list)
def write_points_events_csv(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
def write_points_events(path: str | Path, rankings: list[dict], seasons:list[str]) -> None:
# Create annual rank CSV
results_list:list[dict] = []
@@ -157,9 +234,9 @@ def write_points_events_csv(path: str | Path, rankings: list[dict], seasons:list
results_list.append(result)
write_result_csv(path, results_list)
write_result(path, results_list)
def write_result_csv(path: str| Path, results_list:list[dict]) -> None:
def write_result(path: str| Path, results_list:list[dict]) -> None:
if not isinstance(path, Path):
path = Path(path)
@@ -172,6 +249,9 @@ def write_result_csv(path: str| Path, results_list:list[dict]) -> None:
def main():
run_time = dt.now()
run_time_str = run_time.strftime('%Y%m%d_%H%M')
seasons = ['2022fim', '2023fim', '2024fim']
root_dir = Path('results')
@@ -246,7 +326,7 @@ def main():
if len(event_details):
# Write Event Details
with open(root_dir / f'{key} details.csv', 'w', newline='') as f:
with open(root_dir / f'{run_time_str} - {key} details.csv', 'w', newline='') as f:
writer = DictWriter(f, event_details[0])
writer.writeheader()
@@ -279,15 +359,13 @@ def main():
# Write Event Summary
with open(root_dir / f'event summary.csv', 'w', newline='') as f:
with open(root_dir / f'{run_time_str} - event summary.csv', 'w', newline='') as f:
writer = DictWriter(f, event_summary[0].keys())
writer.writeheader()
writer.writerows(event_summary)
#write_rank_csv(root_dir / "season_rankings.csv", rankings, seasons)
#write_point_total_csv(root_dir / "season_point_total.csv", rankings, seasons)
#write_points_events_csv(root_dir / "season_points_events.csv", rankings, seasons)
write_power_rank(root_dir / f"{run_time_str} - season_power_rank.csv", rankings, seasons)
if __name__ == '__main__':