Jon Solow commited on
Commit
63e7059
·
1 Parent(s): 6947348

Add a new method to grab stats from stats.txt

Browse files
Files changed (1) hide show
  1. src/stats.py +172 -0
src/stats.py CHANGED
@@ -10,6 +10,7 @@ from domain.playoffs import (
10
  DEFENSE_PLAYER_ID_TO_ROSTER_TEAM_NAMES,
11
  ROSTER_TEAM_NAMES_TO_DEFENSE_PLAYER_ID,
12
  PLAYOFF_TEAM_DEF_PLAYER,
 
13
  )
14
  from login import get_stat_overrides
15
  from queries.nflverse.github_data import get_player_kicking_stats, get_player_stats, get_team_defense_stats
@@ -547,3 +548,174 @@ def get_scores_map() -> dict[int, dict[str, float]]:
547
  scores_map[week][player_id] = score
548
 
549
  return scores_map
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  DEFENSE_PLAYER_ID_TO_ROSTER_TEAM_NAMES,
11
  ROSTER_TEAM_NAMES_TO_DEFENSE_PLAYER_ID,
12
  PLAYOFF_TEAM_DEF_PLAYER,
13
+ CURRENT_PLAYOFF_WEEK,
14
  )
15
  from login import get_stat_overrides
16
  from queries.nflverse.github_data import get_player_kicking_stats, get_player_stats, get_team_defense_stats
 
548
  scores_map[week][player_id] = score
549
 
550
  return scores_map
551
+
552
+
553
+ LIVE_YAHOO_STAT_COLUMNS = {
554
+ "f": [
555
+ "f-" + "unknown01",
556
+ "f-" + "unknown02",
557
+ "f-" + "unknown03",
558
+ "f-" + "unknown04",
559
+ "f-" + "unknown05",
560
+ "f-" + "unknown06",
561
+ "f-" + "unknown07",
562
+ "f-" + "unknown08",
563
+ "f-" + "unknown09",
564
+ "f-" + "unknown10",
565
+ "f-" + "unknown11",
566
+ "f-" + "unknown12",
567
+ "f-" + "unknown13",
568
+ "f-" + "unknown14",
569
+ "f-" + "unknown15",
570
+ "f-" + "unknown16",
571
+ ],
572
+ "k": [
573
+ "k-" + "unknown01",
574
+ "k-" + "unknown02",
575
+ "k-" + "unknown03",
576
+ "k-" + "unknown04",
577
+ "k-" + "unknown05",
578
+ "k-" + "unknown06",
579
+ "k-" + "unknown07",
580
+ "k-" + "unknown08",
581
+ "k-" + "unknown09",
582
+ "k-" + "unknown10",
583
+ "k-" + "unknown11",
584
+ "k-" + "unknown12",
585
+ "k-" + "unknown13",
586
+ "k-" + "unknown14",
587
+ "k-" + "unknown15",
588
+ "k-" + "unknown16",
589
+ ],
590
+ "n": [
591
+ "n-" + "unknown01",
592
+ "n-" + "unknown02",
593
+ "n-" + "unknown03",
594
+ "n-" + "unknown04",
595
+ ],
596
+ "o": [
597
+ "o-" + "unknown01",
598
+ "o-" + "unknown02",
599
+ "o-" + "unknown03",
600
+ ],
601
+ "q": [
602
+ "q" + "unknown01",
603
+ "q" + "unknown02",
604
+ "q" + "unknown03",
605
+ PASS_YD.key,
606
+ "q" + "unknown05",
607
+ "q" + "unknown06",
608
+ "q" + "unknown07",
609
+ "q" + "unknown08",
610
+ "q" + "unknown09",
611
+ "q" + "unknown10",
612
+ "q" + "unknown11",
613
+ "q" + "unknown12",
614
+ ],
615
+ "r": [
616
+ "r-" + "unknown01",
617
+ RUSH_YD.key,
618
+ "r-" + "unknown03",
619
+ "r-" + "unknown04",
620
+ "r-" + "unknown05",
621
+ "r-" + "unknown06",
622
+ "r-" + "unknown07",
623
+ ],
624
+ "t": [
625
+ "t-" + "unknown01",
626
+ "t-" + "unknown02",
627
+ "t-" + "unknown03",
628
+ "t-" + "unknown04",
629
+ "t-" + "unknown05",
630
+ "t-" + "unknown06",
631
+ "t-" + "unknown07",
632
+ "t-" + "unknown08",
633
+ "t-" + "unknown09",
634
+ "t-" + "unknown10",
635
+ "t-" + "unknown11",
636
+ "t-" + "unknown12",
637
+ "t-" + "unknown13",
638
+ "t-" + "unknown14",
639
+ "t-" + "unknown15",
640
+ "t-" + "unknown16",
641
+ "t-" + "unknown17",
642
+ "t-" + "unknown18",
643
+ "t-" + "unknown19",
644
+ "t-" + "unknown20",
645
+ "t-" + "unknown21",
646
+ "t-" + "unknown22",
647
+ "t-" + "unknown23",
648
+ "t-" + "unknown24",
649
+ "t-" + "unknown25",
650
+ ],
651
+ "w": [
652
+ "w-" + "unknown01",
653
+ "w-" + "unknown02",
654
+ "w-" + "unknown03",
655
+ "w-" + "unknown04",
656
+ "w-" + "unknown05",
657
+ "w-" + "unknown06",
658
+ "w-" + "unknown07",
659
+ "w-" + "unknown08",
660
+ ],
661
+ "x": [
662
+ "x-" + "unknown01",
663
+ "x-" + "unknown02",
664
+ "x-" + "unknown03",
665
+ "x-" + "unknown04",
666
+ "x-" + "unknown05",
667
+ ],
668
+ "z": [
669
+ "z-" + "unknown01",
670
+ "z-" + "unknown02",
671
+ "z-" + "unknown03",
672
+ "z-" + "unknown04",
673
+ "z-" + "unknown05",
674
+ "z-" + "unknown06",
675
+ "z-" + "unknown07",
676
+ "z-" + "unknown08",
677
+ "z-" + "unknown09",
678
+ "z-" + "unknown10",
679
+ "z-" + "unknown11",
680
+ "z-" + "unknown12",
681
+ "z-" + "unknown13",
682
+ ],
683
+ }
684
+
685
+
686
+ def process_stat_line(stat_line: str) -> dict[str, dict[str, float]]:
687
+ remove_unknown = True
688
+ values_list = stat_line.split("|")
689
+ stat_type = values_list.pop(0)
690
+ column_list = LIVE_YAHOO_STAT_COLUMNS.get(stat_type)
691
+ if not column_list:
692
+ return {}
693
+ yahoo_player_id = values_list.pop(0)
694
+ player_id = YAHOO_PLAYER_ID_MAP.get(yahoo_player_id, "")
695
+ if not player_id:
696
+ print(f"Player id not found {yahoo_player_id}")
697
+ assert len(values_list) == len(column_list)
698
+ stat_map = {}
699
+ for stat_key, stat_val in zip(column_list, values_list):
700
+ if remove_unknown and "unknown" in stat_key:
701
+ continue
702
+ if stat_val:
703
+ stat_map[stat_key] = int(stat_val)
704
+ return {player_id: stat_map}
705
+
706
+
707
+ def get_live_yahoo_stats_from_txt() -> dict[int, dict[str, dict[str, float]]]:
708
+ # new method using stats.txt and interpreting columnar data file
709
+ req = requests.get("https://relay-stream.sports.yahoo.com/nfl/stats.txt")
710
+ stats_text = req.text
711
+ stat_map: dict[int, dict[str, dict[str, float]]] = {w: {} for w in NFLVERSE_STAT_WEEK_TO_PLAYOFF_WEEK.values()}
712
+ current_week_stat_map: dict[str, dict[str, float]] = {}
713
+ for stat_line in stats_text.split("\n"):
714
+ parsed_stat_line = process_stat_line(stat_line)
715
+ for k, v in parsed_stat_line.items():
716
+ if k in current_week_stat_map:
717
+ current_week_stat_map[k].update(v)
718
+ else:
719
+ current_week_stat_map.update(parsed_stat_line)
720
+ stat_map[CURRENT_PLAYOFF_WEEK] = current_week_stat_map
721
+ return stat_map