From 02f2abf6ddb72db4e0353b93db7f7de5109ae52b Mon Sep 17 00:00:00 2001 From: John Drake Date: Tue, 17 Feb 2026 23:38:14 -0500 Subject: [PATCH] Added per-quarter stats gen --- statcruncher.py | 120 ++++++++++++++++++++++++++++++--------------- stats plotter.xlsx | Bin 0 -> 32503 bytes 2 files changed, 80 insertions(+), 40 deletions(-) create mode 100644 stats plotter.xlsx diff --git a/statcruncher.py b/statcruncher.py index f09649a..3e69bad 100644 --- a/statcruncher.py +++ b/statcruncher.py @@ -2,10 +2,16 @@ # Once I hack together something that seems useful, I may try to tidy this up. +from datetime import datetime import yaml from operator import itemgetter from more_itertools import pairwise, distinct_combinations + +def str_to_date(date_str): + return datetime.strptime(date_str, "%Y-%m-%d").date() + + print() # load file @@ -33,7 +39,7 @@ class TeamResult: class MatchResult: def __init__(self, yaml_match): - self.date = yaml_match['date'] + self.date = str_to_date(str(yaml_match['date'])) # Just in case the date is still a string, parse it into a date object. self.mission = yaml_match['mission'] yaml_match_results = yaml_match['results'] @@ -178,62 +184,96 @@ for (role, related_roles) in role_relationships.items(): any_roles_to_players[role].append(any_roles_to_players[related_role]) # print("expanded any_roles_to_players['defense']:",any_roles_to_players['defense']) # print("any_roles_to_players['offense']:",any_roles_to_players['offense']) + -player_to_win_count = dict() -player_to_match_count = dict() -duo_to_win_count = dict() -duo_to_match_count = dict() -trio_to_win_count = dict() -trio_to_match_count = dict() +def compute_stats_for_time_period(start_date, end_date): + player_to_win_count = dict() + player_to_match_count = dict() + duo_to_win_count = dict() + duo_to_match_count = dict() -match_results = [MatchResult(match) for match in file_contents] + match_results = [MatchResult(match) for match in file_contents] -# loop over all matches -for match_result in match_results: + # loop over all matches + for match_result in match_results: + if match_result.date < start_date or match_result.date > end_date: + continue - # WIN RATE STATS GATHERING. SINGLES, DUOS, TRIOS, ETC. - for team_result in match_result.team_results: - - # SINGLES - for player_result in team_result.player_results: - if not player_result.name in player_to_match_count: - player_to_match_count[player_result.name] = 0 - if not player_result.name in player_to_win_count: - player_to_win_count[player_result.name] = 0 - player_to_match_count[player_result.name]+=1 - if team_result.is_winner: - player_to_win_count[player_result.name]+=1 - - # DUOS - for duo in distinct_combinations(team_result.player_results, 2): - player_name_duo = tuple([duo[0].name, duo[1].name]) - # print('Duo ',player_name_duo,' appeared in match ',match_result.mission,' on date ',match_result.date) - if not player_name_duo in duo_to_win_count: - duo_to_win_count[player_name_duo] = 0 - if not player_name_duo in duo_to_match_count: - duo_to_match_count[player_name_duo] = 0 - duo_to_match_count[player_name_duo]+=1 - if team_result.is_winner: - duo_to_win_count[player_name_duo]+=1 + # WIN RATE STATS GATHERING. SINGLES, DUOS, TRIOS, ETC. + for team_result in match_result.team_results: + + # SINGLES + for player_result in team_result.player_results: + if not player_result.name in player_to_match_count: + player_to_match_count[player_result.name] = 0 + if not player_result.name in player_to_win_count: + player_to_win_count[player_result.name] = 0 + player_to_match_count[player_result.name]+=1 + if team_result.is_winner: + player_to_win_count[player_result.name]+=1 + + # DUOS + for duo in distinct_combinations(team_result.player_results, 2): + player_name_duo = tuple([duo[0].name, duo[1].name]) + # print('Duo ',player_name_duo,' appeared in match ',match_result.mission,' on date ',match_result.date) + if not player_name_duo in duo_to_win_count: + duo_to_win_count[player_name_duo] = 0 + if not player_name_duo in duo_to_match_count: + duo_to_match_count[player_name_duo] = 0 + duo_to_match_count[player_name_duo]+=1 + if team_result.is_winner: + duo_to_win_count[player_name_duo]+=1 + + return (player_to_win_count, player_to_match_count, duo_to_win_count, duo_to_match_count) -# Print conditional probabilities -player_to_win_rate = dict() +# Print stat results + +(all_time_player_to_win_count, all_time_player_to_match_count, all_time_duo_to_win_count, all_time_duo_to_match_count) = compute_stats_for_time_period(str_to_date('2000-01-01'), str_to_date('2100-01-01')) +all_time_player_names = list(all_time_player_to_match_count.keys()) + +# Print player win rates CSV style by quarter +# CSV format: +# Player,Q1 2025,Q2 2025,Q3 2025,Q4 2025,Q1 2026 +# Foxox,#N/A,0.3,0.4,0.5,0.45 +# Pupecki,#N/A,0.2,0.3,#N/A,0.55 +quarters = [('Q1 2025','2025-01-01','2025-03-31'),('Q2 2025','2025-04-01','2025-06-30'),('Q3 2025','2025-07-01','2025-09-30'),('Q4 2025','2025-10-01','2025-12-31'),('Q1 2026','2026-01-01','2026-03-31')] +csv_header = 'Player' +csv_per_player = dict() +for quarter in quarters: + quarter_name = quarter[0] + quarter_start_date = str_to_date(quarter[1]) + quarter_end_date = str_to_date(quarter[2]) + csv_header+=','+quarter_name + (player_to_win_count, player_to_match_count, duo_to_win_count, duo_to_match_count) = compute_stats_for_time_period(quarter_start_date, quarter_end_date) + for player in all_time_player_names: + # If there is csv row for the player yet, initialize it. + if not player in csv_per_player: + csv_per_player[player] = [] + # If the player played at least one match in the quarter, add their win rate to the csv. Otherwise, add #N/A. + if player in player_to_match_count and player_to_match_count[player] > 0: + csv_per_player[player].append(player_to_win_count[player] / player_to_match_count[player]) + else: + csv_per_player[player].append('#N/A') +print(csv_header) +for player in all_time_player_names: + print(player+','+','.join([str(x) for x in csv_per_player[player]])) + num_top_players_to_show = 5 # The number of top players to show in each category. -player_match_counts = list(player_to_match_count.values()) +player_match_counts = list(all_time_player_to_match_count.values()) player_match_counts.sort(reverse=True) top_single_tenth_match_count = player_match_counts[num_top_players_to_show] -top_players = [(p, player_to_win_count[p] / player_to_match_count[p]) for p in player_to_match_count.keys() if p in player_to_match_count and player_to_match_count[p] >= top_single_tenth_match_count] +top_players = [(p, all_time_player_to_win_count[p] / all_time_player_to_match_count[p]) for p in all_time_player_to_match_count.keys() if p in all_time_player_to_match_count and all_time_player_to_match_count[p] >= top_single_tenth_match_count] top_players.sort(key=lambda p: p[1], reverse=True) print('Highest confidence singles',[p[0]+' '+format(p[1],'.2f') for p in top_players[:num_top_players_to_show]]) -duo_match_counts = list(duo_to_match_count.values()) +duo_match_counts = list(all_time_duo_to_match_count.values()) duo_match_counts.sort(reverse=True) top_duo_match_count = duo_match_counts[num_top_players_to_show] -top_duos = [(p, duo_to_win_count[p] / duo_to_match_count[p]) for p in duo_to_match_count.keys() if p in duo_to_match_count and duo_to_match_count[p] >= top_duo_match_count] +top_duos = [(p, all_time_duo_to_win_count[p] / all_time_duo_to_match_count[p]) for p in all_time_duo_to_match_count.keys() if p in all_time_duo_to_match_count and all_time_duo_to_match_count[p] >= top_duo_match_count] top_duos.sort(key=lambda p: p[1], reverse=True) print('Highest confidence duos',[str(p[0])+' '+format(p[1],'.2f') for p in top_duos[:num_top_players_to_show]]) diff --git a/stats plotter.xlsx b/stats plotter.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c5659ee02fbb37bc86d70e342562273020f50f6c GIT binary patch literal 32503 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 UaNy^Pz02 z)=#s%70!6$-hL$4YG+a8G3v!##3`W_SsIiVlq;I%R$}FxQ=DzWb0=rEuc!?x=PA#) z`&xGWgSpPLyq-EUdd)cy{X5p}QfeFdS#3{7pZTGQ`jAxDmB;;(&ZXU92+)^%u*TFZ z=1vQr0f#~xo+AA@iG#YB)9ny84}2w5E83`?<^GGH0CcUKU9wm4bZUm3l~+eUG^FJ! zuFJD7TAScN0*+cyr)X~F$uc{7UY|p^eeyya4g<)hiFKA9{^zAY1fYV#d*DExHBfE^ z>#u`(e;)?0v9z)O@GF+(#tK&V{?fu+WkvwYWoL9&o%>z=A; zDng3+jrVr9?b?fic}znxd69~sP7+mo;cC@lI-s(I`*Ic$T7UzQ&^3lsj5Re^mBwX# zRcDToxw?6E))$H2|K4Dg*x#w62O}ocXH~_10jYCGvR~R-P%8l!V?Ox@Mx8;hxp{(# zWu0HK0=Yn~%tfXJTu?_q>T#epOZJd>?R8K+?%05QDE-nW6?D*CiUp3USCWGHFvJw(5-9(O~J z&esz?qC1C7FuMI@g;{-EU}MAN>$_@Yl6Y^NKmWQwX_5A1H7!6Ho1_oV27bn@fxUMM z8;05eTjEf%Qx^Hw?Q7vM`?~>!MKm9=eD3Md0+5q*)lW0w1c9i*#OdB=DhX98kV9C! z%DdUKg;)LFH=(rh>LPq|n4)Zfdv_W83r;T`jI1s{cVQJ&(X*9i;6IeVwg30&q`!3k=NYB{oAxb1qa~B@n&bOu^-_J} zRW>%6II!O)DtY&~c*V|>sgHBpb87JIlYB@l-tf-rb(VeIiy-07wz9KNU}xx3j9-wm z%X?2%o=?lK_ z(iTZ_cfrP^<&0xaRt;NZlI0yn)^~4GDw2ToY&hB(l!}DPoFbQWi&| zM@$X4ZCZaJuAw8DpeV{Ajg2Hzwy9-tj6_9Ei1mG+6@yx1p|6H%Sbr((X7n;L*^A9! zmSxJdwtf2;0$iP7-1@d)HOVi3-c>p|pY|%;{Cj%w{aQn-BE`oFi!SjGe1>(aU(!C8 zW5L{iS-137l3#|JQK5wKNnleQRd@bkT@W zw48b8OLYHB|7D@?tA->Kq^jOYArWkum^k-@6A7 z(2rxCR@lzwYYruw;a{j;^3u?$R!974Cg~ceF(dfwb3fK5MGqGFWAe}<+Cb!%tWzLU%iDURlBgMCvlv2L6N_&PQMVI z*#ByUdE0}6(8lGbr#GiR2rtAJ-Ib)!$Y0ZV$5r6GBHDxjBP>o?FreOGl)J52vPimc z@~AKm$_nXaI{C9$#rUlFI=XMOqgb}@ptjNF-$)JxJ4&>4g^Y4&K}B@h`n}TZ2%>C& zyD28mhK?CSEn0S*gTU=pgo1yI65)&R=*DPjJ&ejOJ<^ZVq*gvbYMn7;O7CABWn#@MKfA_etECpE-#-_)f3f@5_qkfwTVY(xqrDM{YyGOcO(J z72B5!F~~h9_m3NsTY6^FbqbKDZ@%X;I;!fyImcduHtldD?_OTy?7DKx!fEus^e9oe zOR6yZf^!$Oso#}Cbd1oa;&GyO@)U#q+YmD*Mdrf+L&OCZbo753;#*tW|8IxDkp1f? zHAcv0;U%*FA@mI~^3sb}R!Yb|rSBv)&MMzR#yFYCEfMnQpGA#zD+X_7gJ5A^Sm0d5yUg>y`G^f0^Q`WeMUXPWdre;7Lpg=uxskm$ ztOQJ{s7#!?a<)|#TZ6%?%JHs6yfwq+!CCg<4$s;OLYNqh_pbCm1kue4nI~u!WrIu7 zAGm5GoK`!xmsnUT)%BH6hVj=lz=y+IK~-66yWe~@?3w8D7koX3A|e`9?LVsOSn!p; z(&XwPr@3BMj5G+yvI-k4R8uG+V(5O8c{^m-gxSsf>E)_wHrHH|U>L`2ey8TGU)=e~ zXZ=c864e+Kl@AQt%dY#@XZGy2cGd(?ROr~l7|s!VtC7ZrtoNT>UQrX_Q7u0U)bOp8 z6u=aE@P5^r%6zvQ;Z&kTm<~$ul4%ZD*b1}KPzscH!@)5D*lI zzZ(Db;Qy**_$SVv_3M5knIiwY6aQ7s?oX6I@B93X@{#%%%AdD?{t58sJz~EBOqhQG z{JvG}&!&Ig_wl>w4M47dVf^st?H_+4{CN=mHv&2TFNA*+&wo--xf;Po$* zzc)Ki2cUoLb^b*7GuQJQq0juE2){Ewe z@&DR`{0aCck^c?&&F&ZAzeo4~LhJto{F5C225hzer;`7ZD*p-gC$;Klb0g<}H2>Ffswe{suw#G)1HX+xN|4&^>979- DdPR4r literal 0 HcmV?d00001