Jon Solow
commited on
Commit
·
63e7059
1
Parent(s):
6947348
Add a new method to grab stats from stats.txt
Browse files- 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
|