Jon Solow commited on
Commit
1487d7c
·
1 Parent(s): 7730451

Implement defensive live stats

Browse files
Files changed (1) hide show
  1. src/stats.py +23 -6
src/stats.py CHANGED
@@ -192,7 +192,7 @@ def get_live_stats() -> dict[int, dict[str, dict[str, float]]]:
192
  return get_yahoo_stats()
193
 
194
 
195
- YAHOO_TO_STAT_MAP = {
196
  "PASSING": {
197
  "PASSING_YARDS": PASS_YD.key,
198
  "PASSING_TOUCHDOWNS": PASS_TD.key,
@@ -218,6 +218,14 @@ YAHOO_TO_STAT_MAP = {
218
  "FIELD_GOALS_MADE_50_PLUS": FG_50_.key,
219
  "EXTRA_POINTS_MADE": XP.key,
220
  },
 
 
 
 
 
 
 
 
221
  }
222
 
223
 
@@ -249,25 +257,34 @@ def add_yahoo_stat_type_to_stat_map(
249
  if week not in stat_map:
250
  stat_map[week] = {}
251
 
 
 
252
  if yahoo_stat_type == "KICKING":
253
  week_leaders = week_dict["POSTSEASON"][""]["FIELD_GOALS_MADE"]["leagues"][0]["leagueWeeks"][0]["leaders"]
 
 
 
254
  else:
255
  week_leaders = week_dict["POSTSEASON"][""][f"{yahoo_stat_type}_YARDS"]["leagues"][0]["leagueWeeks"][0][
256
  "leaders"
257
  ]
258
 
259
  for player in week_leaders:
260
- raw_player_id = player["player"]["playerId"].split(".")[-1]
261
- player_id = YAHOO_PLAYER_ID_MAP.get(raw_player_id, raw_player_id)
 
 
 
 
262
  if player_id not in stat_map[week]:
263
  stat_map[week][player_id] = {}
264
  stats = player["stats"]
265
  for stat in stats:
266
  if stat_key := YAHOO_TO_STAT_MAP[yahoo_stat_type].get(stat["statId"]):
267
  if stat_key in stat_map[week][player_id]:
268
- stat_map[week][player_id][stat_key] += float(stat["value"])
269
  else:
270
- stat_map[week][player_id][stat_key] = float(stat["value"])
271
  # else:
272
  # # remove after mapping all intended
273
  # stat_map[week][player_id][stat["statId"]] = stat["value"]
@@ -302,7 +319,7 @@ def get_yahoo_stats() -> dict[int, dict[str, dict[str, float]]]:
302
  )
303
  add_yahoo_stat_type_to_stat_map(stats_json["weeklyStatsFootballKicking"]["nfl"]["200"]["2023"], "KICKING", stat_map)
304
  return_stats = stats_json["weeklyStatsFootballReturns"]["nfl"]["200"]["2023"]
305
- defense_stats = stats_json["weeklyStatsFootballDefense"]["nfl"]["200"]["2023"]
306
 
307
  return stat_map
308
 
 
192
  return get_yahoo_stats()
193
 
194
 
195
+ YAHOO_TO_STAT_MAP: dict[str, dict[str, str]] = {
196
  "PASSING": {
197
  "PASSING_YARDS": PASS_YD.key,
198
  "PASSING_TOUCHDOWNS": PASS_TD.key,
 
218
  "FIELD_GOALS_MADE_50_PLUS": FG_50_.key,
219
  "EXTRA_POINTS_MADE": XP.key,
220
  },
221
+ "DEFENSE": {
222
+ "SACKS": SACK.key,
223
+ "INTERCEPTIONS_FORCED": DEF_INT.key,
224
+ "INTERCEPTION_RETURN_TOUCHDOWNS": DEF_TD.key,
225
+ "FORCED_FUMBLES": FUM_REC.key,
226
+ "FUMBLE_RETURN_TOUCHDOWNS": DEF_TD.key,
227
+ "SAFETIES": SAFETY.key,
228
+ },
229
  }
230
 
231
 
 
257
  if week not in stat_map:
258
  stat_map[week] = {}
259
 
260
+ # only used for defense summary
261
+ short_team_names_to_player_id = {}
262
  if yahoo_stat_type == "KICKING":
263
  week_leaders = week_dict["POSTSEASON"][""]["FIELD_GOALS_MADE"]["leagues"][0]["leagueWeeks"][0]["leaders"]
264
+ elif yahoo_stat_type == "DEFENSE":
265
+ week_leaders = week_dict["POSTSEASON"][""]["TOTAL_TACKLES"]["leagues"][0]["leagueWeeks"][0]["leaders"]
266
+ short_team_names_to_player_id = {t.rosters_short_name: p for t, p in PLAYOFF_TEAM_DEF_PLAYER}
267
  else:
268
  week_leaders = week_dict["POSTSEASON"][""][f"{yahoo_stat_type}_YARDS"]["leagues"][0]["leagueWeeks"][0][
269
  "leaders"
270
  ]
271
 
272
  for player in week_leaders:
273
+ if yahoo_stat_type == "DEFENSE":
274
+ player_id = short_team_names_to_player_id[player["player"]["team"]["abbreviation"]]
275
+ else:
276
+ raw_player_id = player["player"]["playerId"].split(".")[-1]
277
+ player_id = YAHOO_PLAYER_ID_MAP.get(raw_player_id, raw_player_id)
278
+
279
  if player_id not in stat_map[week]:
280
  stat_map[week][player_id] = {}
281
  stats = player["stats"]
282
  for stat in stats:
283
  if stat_key := YAHOO_TO_STAT_MAP[yahoo_stat_type].get(stat["statId"]):
284
  if stat_key in stat_map[week][player_id]:
285
+ stat_map[week][player_id][stat_key] += float(stat["value"] or 0.0)
286
  else:
287
+ stat_map[week][player_id][stat_key] = float(stat["value"] or 0.0)
288
  # else:
289
  # # remove after mapping all intended
290
  # stat_map[week][player_id][stat["statId"]] = stat["value"]
 
319
  )
320
  add_yahoo_stat_type_to_stat_map(stats_json["weeklyStatsFootballKicking"]["nfl"]["200"]["2023"], "KICKING", stat_map)
321
  return_stats = stats_json["weeklyStatsFootballReturns"]["nfl"]["200"]["2023"]
322
+ add_yahoo_stat_type_to_stat_map(stats_json["weeklyStatsFootballDefense"]["nfl"]["200"]["2023"], "DEFENSE", stat_map)
323
 
324
  return stat_map
325