Jon Solow commited on
Commit
183562b
·
1 Parent(s): 662f01a

Implement ST TD for defenses

Browse files
Files changed (1) hide show
  1. src/stats.py +28 -0
src/stats.py CHANGED
@@ -137,6 +137,33 @@ def add_stats_from_team_def_df_to_stat_map(df: pd.DataFrame, stat_map):
137
  stat_map[week][player_id].update(player_stats)
138
 
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  # 24 hour cache
141
  @st.cache_data(ttl=60 * 60 * 24)
142
  def assemble_nflverse_stats() -> dict[int, dict[str, dict[str, float]]]:
@@ -150,6 +177,7 @@ def assemble_nflverse_stats() -> dict[int, dict[str, dict[str, float]]]:
150
  add_stats_from_player_df_to_stat_map(df_player_stats, stat_map)
151
  add_stats_from_player_df_to_stat_map(df_kicking_stats, stat_map)
152
  add_stats_from_team_def_df_to_stat_map(df_def_stats, stat_map)
 
153
 
154
  return stat_map
155
 
 
137
  stat_map[week][player_id].update(player_stats)
138
 
139
 
140
+ def add_st_stats_to_defense(df: pd.DataFrame, stat_map):
141
+ short_team_names_to_player_id = {t.rosters_short_name: p for t, p in PLAYOFF_TEAM_DEF_PLAYER}
142
+ df_playoffs = df[
143
+ (df.week.isin(NFLVERSE_STAT_WEEK_TO_PLAYOFF_WEEK.keys()) & df.team.isin(short_team_names_to_player_id.keys()))
144
+ ]
145
+ df_playoffs.week = df_playoffs.week.apply(lambda x: NFLVERSE_STAT_WEEK_TO_PLAYOFF_WEEK[x])
146
+
147
+ for week_team_tuple, row in df_playoffs.set_index(["week", "team"]).iterrows():
148
+ if isinstance(week_team_tuple, tuple):
149
+ week, team = week_team_tuple
150
+ else:
151
+ # this won't happen but makes mypy happy
152
+ continue
153
+ player_id = short_team_names_to_player_id[team]
154
+ player_stats: dict[str, float] = stat_map[week].get(player_id, {})
155
+
156
+ # special teams td update only
157
+ for k, v in row.to_dict().items():
158
+ if k == "special_teams_tds":
159
+ if (mapped_k := NFLVERSE_STAT_COL_TO_ID[k]) in player_stats:
160
+ player_stats[mapped_k] += v
161
+ else:
162
+ player_stats[mapped_k] = v
163
+
164
+ stat_map[week][player_id] = player_stats
165
+
166
+
167
  # 24 hour cache
168
  @st.cache_data(ttl=60 * 60 * 24)
169
  def assemble_nflverse_stats() -> dict[int, dict[str, dict[str, float]]]:
 
177
  add_stats_from_player_df_to_stat_map(df_player_stats, stat_map)
178
  add_stats_from_player_df_to_stat_map(df_kicking_stats, stat_map)
179
  add_stats_from_team_def_df_to_stat_map(df_def_stats, stat_map)
180
+ add_st_stats_to_defense(df_player_stats, stat_map)
181
 
182
  return stat_map
183