Does Hockey Roster Turnover Relate to Team Performance?

python
API
visualization
sports
hockey
Author

Dan MacGuigan

Published

January 5, 2024

Today we’re going to practice Python coding and API usage by exploring data for the National Hockey League.

While watching my favorite team this year (the Philadelphia Flyers), I’ve felt like I barely know the players. It seems like there was a lot of turnover in the roster over the past couple of years.

Can we quantify this roster turnover? Which seasons did the Flyers roster experience the most turnover?

To answer this question, we will turn to the NHL’s own stats database. Unfortunately, we can only download 50 records at a time using their nice web browser interface. So instead, we’ll need to use an Application Programming Interface, or API.

Fortunately, some folks have put together nice documentation here and here for the NHL API.

To start, we’ll use the requests and json Python libraries. Make sure you have them installed.

Let’s do a toy example where we pull the current NHL standings. I’m pulling heavily from this tutorial.

import requests
import json
test = requests.get('https://api-web.nhle.com/v1/standings/now') # pull data
test_data = test.text # get just the data
parse_json = json.loads(test_data) # parse the JSON data into a Python dictionary
print(json.dumps(parse_json, indent=4)) # print the new dictionary object
{
    "wildCardIndicator": false,
    "standings": [
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 4,
            "conferenceL10Sequence": 1,
            "conferenceName": "Western",
            "conferenceRoadSequence": 2,
            "conferenceSequence": 1,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 2,
            "divisionL10Sequence": 1,
            "divisionName": "Central",
            "divisionRoadSequence": 1,
            "divisionSequence": 1,
            "gameTypeId": 2,
            "gamesPlayed": 38,
            "goalDifferential": 34,
            "goalDifferentialPctg": 0.894737,
            "goalAgainst": 92,
            "goalFor": 126,
            "goalsForPctg": 3.315789,
            "homeGamesPlayed": 20,
            "homeGoalDifferential": 19,
            "homeGoalsAgainst": 51,
            "homeGoalsFor": 70,
            "homeLosses": 5,
            "homeOtLosses": 2,
            "homePoints": 28,
            "homeRegulationPlusOtWins": 13,
            "homeRegulationWins": 13,
            "homeTies": 0,
            "homeWins": 13,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 17,
            "l10GoalsAgainst": 18,
            "l10GoalsFor": 35,
            "l10Losses": 0,
            "l10OtLosses": 2,
            "l10Points": 18,
            "l10RegulationPlusOtWins": 8,
            "l10RegulationWins": 8,
            "l10Ties": 0,
            "l10Wins": 8,
            "leagueHomeSequence": 4,
            "leagueL10Sequence": 1,
            "leagueRoadSequence": 5,
            "leagueSequence": 1,
            "losses": 9,
            "otLosses": 4,
            "placeName": {
                "default": "Winnipeg"
            },
            "pointPctg": 0.710526,
            "points": 54,
            "regulationPlusOtWinPctg": 0.657895,
            "regulationPlusOtWins": 25,
            "regulationWinPctg": 0.605263,
            "regulationWins": 23,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": 15,
            "roadGoalsAgainst": 41,
            "roadGoalsFor": 56,
            "roadLosses": 4,
            "roadOtLosses": 2,
            "roadPoints": 26,
            "roadRegulationPlusOtWins": 12,
            "roadRegulationWins": 10,
            "roadTies": 0,
            "roadWins": 12,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 0,
            "streakCode": "W",
            "streakCount": 5,
            "teamName": {
                "default": "Winnipeg Jets",
                "fr": "Jets de Winnipeg"
            },
            "teamCommonName": {
                "default": "Jets"
            },
            "teamAbbrev": {
                "default": "WPG"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/WPG_light.svg",
            "ties": 0,
            "waiversSequence": 31,
            "wildcardSequence": 0,
            "winPctg": 0.657895,
            "wins": 25
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 1,
            "conferenceL10Sequence": 4,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 2,
            "conferenceSequence": 1,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 1,
            "divisionL10Sequence": 3,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 1,
            "divisionSequence": 1,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": 24,
            "goalDifferentialPctg": 0.648649,
            "goalAgainst": 102,
            "goalFor": 126,
            "goalsForPctg": 3.405405,
            "homeGamesPlayed": 18,
            "homeGoalDifferential": 11,
            "homeGoalsAgainst": 53,
            "homeGoalsFor": 64,
            "homeLosses": 5,
            "homeOtLosses": 0,
            "homePoints": 26,
            "homeRegulationPlusOtWins": 12,
            "homeRegulationWins": 11,
            "homeTies": 0,
            "homeWins": 13,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 13,
            "l10GoalsAgainst": 24,
            "l10GoalsFor": 37,
            "l10Losses": 3,
            "l10OtLosses": 0,
            "l10Points": 14,
            "l10RegulationPlusOtWins": 7,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 7,
            "leagueHomeSequence": 5,
            "leagueL10Sequence": 9,
            "leagueRoadSequence": 3,
            "leagueSequence": 2,
            "losses": 10,
            "otLosses": 1,
            "placeName": {
                "default": "NY Rangers"
            },
            "pointPctg": 0.716216,
            "points": 53,
            "regulationPlusOtWinPctg": 0.675676,
            "regulationPlusOtWins": 25,
            "regulationWinPctg": 0.567568,
            "regulationWins": 21,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": 13,
            "roadGoalsAgainst": 49,
            "roadGoalsFor": 62,
            "roadLosses": 5,
            "roadOtLosses": 1,
            "roadPoints": 27,
            "roadRegulationPlusOtWins": 13,
            "roadRegulationWins": 10,
            "roadTies": 0,
            "roadWins": 13,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "New York Rangers",
                "fr": "Rangers de New York"
            },
            "teamCommonName": {
                "default": "Rangers"
            },
            "teamAbbrev": {
                "default": "NYR"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/NYR_light.svg",
            "ties": 0,
            "waiversSequence": 32,
            "wildcardSequence": 0,
            "winPctg": 0.702703,
            "wins": 26
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 1,
            "conferenceL10Sequence": 3,
            "conferenceName": "Western",
            "conferenceRoadSequence": 5,
            "conferenceSequence": 2,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 1,
            "divisionL10Sequence": 2,
            "divisionName": "Central",
            "divisionRoadSequence": 3,
            "divisionSequence": 2,
            "gameTypeId": 2,
            "gamesPlayed": 40,
            "goalDifferential": 21,
            "goalDifferentialPctg": 0.525,
            "goalAgainst": 127,
            "goalFor": 148,
            "goalsForPctg": 3.7,
            "homeGamesPlayed": 21,
            "homeGoalDifferential": 28,
            "homeGoalsAgainst": 63,
            "homeGoalsFor": 91,
            "homeLosses": 5,
            "homeOtLosses": 0,
            "homePoints": 32,
            "homeRegulationPlusOtWins": 16,
            "homeRegulationWins": 15,
            "homeTies": 0,
            "homeWins": 16,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 8,
            "l10GoalsAgainst": 33,
            "l10GoalsFor": 41,
            "l10Losses": 2,
            "l10OtLosses": 1,
            "l10Points": 15,
            "l10RegulationPlusOtWins": 7,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 7,
            "leagueHomeSequence": 1,
            "leagueL10Sequence": 5,
            "leagueRoadSequence": 13,
            "leagueSequence": 3,
            "losses": 12,
            "otLosses": 3,
            "placeName": {
                "default": "Colorado"
            },
            "pointPctg": 0.6625,
            "points": 53,
            "regulationPlusOtWinPctg": 0.6,
            "regulationPlusOtWins": 24,
            "regulationWinPctg": 0.55,
            "regulationWins": 22,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": -7,
            "roadGoalsAgainst": 64,
            "roadGoalsFor": 57,
            "roadLosses": 7,
            "roadOtLosses": 3,
            "roadPoints": 21,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 7,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 1,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Colorado Avalanche",
                "fr": "Avalanche du Colorado"
            },
            "teamCommonName": {
                "default": "Avalanche"
            },
            "teamAbbrev": {
                "default": "COL"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/COL_light.svg",
            "ties": 0,
            "waiversSequence": 27,
            "wildcardSequence": 0,
            "winPctg": 0.625,
            "wins": 25
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 3,
            "conferenceL10Sequence": 7,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 3,
            "conferenceSequence": 2,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 1,
            "divisionL10Sequence": 3,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 2,
            "divisionSequence": 1,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": 25,
            "goalDifferentialPctg": 0.675676,
            "goalAgainst": 98,
            "goalFor": 123,
            "goalsForPctg": 3.324324,
            "homeGamesPlayed": 17,
            "homeGoalDifferential": 15,
            "homeGoalsAgainst": 42,
            "homeGoalsFor": 57,
            "homeLosses": 3,
            "homeOtLosses": 3,
            "homePoints": 25,
            "homeRegulationPlusOtWins": 10,
            "homeRegulationWins": 9,
            "homeTies": 0,
            "homeWins": 11,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 4,
            "l10GoalsAgainst": 31,
            "l10GoalsFor": 35,
            "l10Losses": 3,
            "l10OtLosses": 2,
            "l10Points": 12,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 4,
            "l10Ties": 0,
            "l10Wins": 5,
            "leagueHomeSequence": 8,
            "leagueL10Sequence": 16,
            "leagueRoadSequence": 4,
            "leagueSequence": 4,
            "losses": 8,
            "otLosses": 6,
            "placeName": {
                "default": "Boston"
            },
            "pointPctg": 0.702703,
            "points": 52,
            "regulationPlusOtWinPctg": 0.567568,
            "regulationPlusOtWins": 21,
            "regulationWinPctg": 0.513514,
            "regulationWins": 19,
            "roadGamesPlayed": 20,
            "roadGoalDifferential": 10,
            "roadGoalsAgainst": 56,
            "roadGoalsFor": 66,
            "roadLosses": 5,
            "roadOtLosses": 3,
            "roadPoints": 27,
            "roadRegulationPlusOtWins": 11,
            "roadRegulationWins": 10,
            "roadTies": 0,
            "roadWins": 12,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 2,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Boston Bruins",
                "fr": "Bruins de Boston"
            },
            "teamCommonName": {
                "default": "Bruins"
            },
            "teamAbbrev": {
                "default": "BOS"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/BOS_light.svg",
            "ties": 0,
            "waiversSequence": 30,
            "wildcardSequence": 0,
            "winPctg": 0.621622,
            "wins": 23
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 5,
            "conferenceL10Sequence": 1,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 1,
            "conferenceSequence": 3,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 3,
            "divisionL10Sequence": 1,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 1,
            "divisionSequence": 2,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": 24,
            "goalDifferentialPctg": 0.615385,
            "goalAgainst": 99,
            "goalFor": 123,
            "goalsForPctg": 3.153846,
            "homeGamesPlayed": 17,
            "homeGoalDifferential": 10,
            "homeGoalsAgainst": 46,
            "homeGoalsFor": 56,
            "homeLosses": 5,
            "homeOtLosses": 0,
            "homePoints": 24,
            "homeRegulationPlusOtWins": 12,
            "homeRegulationWins": 11,
            "homeTies": 0,
            "homeWins": 12,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 16,
            "l10GoalsAgainst": 22,
            "l10GoalsFor": 38,
            "l10Losses": 2,
            "l10OtLosses": 0,
            "l10Points": 16,
            "l10RegulationPlusOtWins": 8,
            "l10RegulationWins": 8,
            "l10Ties": 0,
            "l10Wins": 8,
            "leagueHomeSequence": 10,
            "leagueL10Sequence": 3,
            "leagueRoadSequence": 1,
            "leagueSequence": 5,
            "losses": 12,
            "otLosses": 2,
            "placeName": {
                "default": "Florida",
                "fr": "Floride"
            },
            "pointPctg": 0.666667,
            "points": 52,
            "regulationPlusOtWinPctg": 0.641026,
            "regulationPlusOtWins": 25,
            "regulationWinPctg": 0.589744,
            "regulationWins": 23,
            "roadGamesPlayed": 22,
            "roadGoalDifferential": 14,
            "roadGoalsAgainst": 53,
            "roadGoalsFor": 67,
            "roadLosses": 7,
            "roadOtLosses": 2,
            "roadPoints": 28,
            "roadRegulationPlusOtWins": 13,
            "roadRegulationWins": 12,
            "roadTies": 0,
            "roadWins": 13,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 0,
            "streakCode": "W",
            "streakCount": 7,
            "teamName": {
                "default": "Florida Panthers",
                "fr": "Panthers de la Floride"
            },
            "teamCommonName": {
                "default": "Panthers"
            },
            "teamAbbrev": {
                "default": "FLA"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/FLA_light.svg",
            "ties": 0,
            "waiversSequence": 28,
            "wildcardSequence": 0,
            "winPctg": 0.641026,
            "wins": 25
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 2,
            "conferenceL10Sequence": 5,
            "conferenceName": "Western",
            "conferenceRoadSequence": 4,
            "conferenceSequence": 3,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 1,
            "divisionL10Sequence": 3,
            "divisionName": "Pacific",
            "divisionRoadSequence": 2,
            "divisionSequence": 1,
            "gameTypeId": 2,
            "gamesPlayed": 38,
            "goalDifferential": 45,
            "goalDifferentialPctg": 1.184211,
            "goalAgainst": 98,
            "goalFor": 143,
            "goalsForPctg": 3.763158,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": 33,
            "homeGoalsAgainst": 43,
            "homeGoalsFor": 76,
            "homeLosses": 4,
            "homeOtLosses": 1,
            "homePoints": 29,
            "homeRegulationPlusOtWins": 14,
            "homeRegulationWins": 13,
            "homeTies": 0,
            "homeWins": 14,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 11,
            "l10GoalsAgainst": 25,
            "l10GoalsFor": 36,
            "l10Losses": 2,
            "l10OtLosses": 2,
            "l10Points": 14,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 6,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 2,
            "leagueL10Sequence": 8,
            "leagueRoadSequence": 11,
            "leagueSequence": 6,
            "losses": 11,
            "otLosses": 3,
            "placeName": {
                "default": "Vancouver"
            },
            "pointPctg": 0.671053,
            "points": 51,
            "regulationPlusOtWinPctg": 0.631579,
            "regulationPlusOtWins": 24,
            "regulationWinPctg": 0.605263,
            "regulationWins": 23,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": 12,
            "roadGoalsAgainst": 55,
            "roadGoalsFor": 67,
            "roadLosses": 7,
            "roadOtLosses": 2,
            "roadPoints": 22,
            "roadRegulationPlusOtWins": 10,
            "roadRegulationWins": 10,
            "roadTies": 0,
            "roadWins": 10,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 0,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Vancouver Canucks",
                "fr": "Canucks de Vancouver"
            },
            "teamCommonName": {
                "default": "Canucks"
            },
            "teamAbbrev": {
                "default": "VAN"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/VAN_light.svg",
            "ties": 0,
            "waiversSequence": 29,
            "wildcardSequence": 0,
            "winPctg": 0.631579,
            "wins": 24
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 5,
            "conferenceL10Sequence": 6,
            "conferenceName": "Western",
            "conferenceRoadSequence": 3,
            "conferenceSequence": 4,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 3,
            "divisionL10Sequence": 3,
            "divisionName": "Central",
            "divisionRoadSequence": 2,
            "divisionSequence": 3,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": 19,
            "goalDifferentialPctg": 0.513514,
            "goalAgainst": 116,
            "goalFor": 135,
            "goalsForPctg": 3.648649,
            "homeGamesPlayed": 20,
            "homeGoalDifferential": 11,
            "homeGoalsAgainst": 70,
            "homeGoalsFor": 81,
            "homeLosses": 6,
            "homeOtLosses": 2,
            "homePoints": 26,
            "homeRegulationPlusOtWins": 11,
            "homeRegulationWins": 6,
            "homeTies": 0,
            "homeWins": 12,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 8,
            "l10GoalsAgainst": 32,
            "l10GoalsFor": 40,
            "l10Losses": 2,
            "l10OtLosses": 2,
            "l10Points": 14,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 7,
            "leagueL10Sequence": 10,
            "leagueRoadSequence": 10,
            "leagueSequence": 7,
            "losses": 10,
            "otLosses": 5,
            "placeName": {
                "default": "Dallas"
            },
            "pointPctg": 0.662162,
            "points": 49,
            "regulationPlusOtWinPctg": 0.540541,
            "regulationPlusOtWins": 20,
            "regulationWinPctg": 0.405405,
            "regulationWins": 15,
            "roadGamesPlayed": 17,
            "roadGoalDifferential": 8,
            "roadGoalsAgainst": 46,
            "roadGoalsFor": 54,
            "roadLosses": 4,
            "roadOtLosses": 3,
            "roadPoints": 23,
            "roadRegulationPlusOtWins": 9,
            "roadRegulationWins": 9,
            "roadTies": 0,
            "roadWins": 10,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 2,
            "streakCode": "OT",
            "streakCount": 1,
            "teamName": {
                "default": "Dallas Stars",
                "fr": "Stars de Dallas"
            },
            "teamCommonName": {
                "default": "Stars"
            },
            "teamAbbrev": {
                "default": "DAL"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/DAL_light.svg",
            "ties": 0,
            "waiversSequence": 26,
            "wildcardSequence": 0,
            "winPctg": 0.594595,
            "wins": 22
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 3,
            "conferenceL10Sequence": 14,
            "conferenceName": "Western",
            "conferenceRoadSequence": 6,
            "conferenceSequence": 5,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 2,
            "divisionL10Sequence": 7,
            "divisionName": "Pacific",
            "divisionRoadSequence": 3,
            "divisionSequence": 2,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": 18,
            "goalDifferentialPctg": 0.461538,
            "goalAgainst": 110,
            "goalFor": 128,
            "goalsForPctg": 3.282051,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": 20,
            "homeGoalsAgainst": 45,
            "homeGoalsFor": 65,
            "homeLosses": 4,
            "homeOtLosses": 2,
            "homePoints": 28,
            "homeRegulationPlusOtWins": 10,
            "homeRegulationWins": 9,
            "homeTies": 0,
            "homeWins": 13,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -13,
            "l10GoalsAgainst": 41,
            "l10GoalsFor": 28,
            "l10Losses": 7,
            "l10OtLosses": 0,
            "l10Points": 6,
            "l10RegulationPlusOtWins": 3,
            "l10RegulationWins": 2,
            "l10Ties": 0,
            "l10Wins": 3,
            "leagueHomeSequence": 3,
            "leagueL10Sequence": 30,
            "leagueRoadSequence": 15,
            "leagueSequence": 8,
            "losses": 12,
            "otLosses": 5,
            "placeName": {
                "default": "Vegas"
            },
            "pointPctg": 0.628205,
            "points": 49,
            "regulationPlusOtWinPctg": 0.461538,
            "regulationPlusOtWins": 18,
            "regulationWinPctg": 0.410256,
            "regulationWins": 16,
            "roadGamesPlayed": 20,
            "roadGoalDifferential": -2,
            "roadGoalsAgainst": 65,
            "roadGoalsFor": 63,
            "roadLosses": 8,
            "roadOtLosses": 3,
            "roadPoints": 21,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 7,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 4,
            "streakCode": "L",
            "streakCount": 2,
            "teamName": {
                "default": "Vegas Golden Knights",
                "fr": "Golden Knights de Vegas"
            },
            "teamCommonName": {
                "default": "Golden Knights"
            },
            "teamAbbrev": {
                "default": "VGK"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/VGK_light.svg",
            "ties": 0,
            "waiversSequence": 24,
            "wildcardSequence": 0,
            "winPctg": 0.564103,
            "wins": 22
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 6,
            "conferenceL10Sequence": 2,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 6,
            "conferenceSequence": 4,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 3,
            "divisionL10Sequence": 1,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 3,
            "divisionSequence": 2,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": 16,
            "goalDifferentialPctg": 0.410256,
            "goalAgainst": 120,
            "goalFor": 136,
            "goalsForPctg": 3.487179,
            "homeGamesPlayed": 16,
            "homeGoalDifferential": 10,
            "homeGoalsAgainst": 51,
            "homeGoalsFor": 61,
            "homeLosses": 3,
            "homeOtLosses": 3,
            "homePoints": 23,
            "homeRegulationPlusOtWins": 10,
            "homeRegulationWins": 8,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 14,
            "l10GoalsAgainst": 28,
            "l10GoalsFor": 42,
            "l10Losses": 1,
            "l10OtLosses": 3,
            "l10Points": 15,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 6,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 14,
            "leagueL10Sequence": 4,
            "leagueRoadSequence": 8,
            "leagueSequence": 9,
            "losses": 13,
            "otLosses": 4,
            "placeName": {
                "default": "Carolina",
                "fr": "Caroline"
            },
            "pointPctg": 0.615385,
            "points": 48,
            "regulationPlusOtWinPctg": 0.538462,
            "regulationPlusOtWins": 21,
            "regulationWinPctg": 0.461538,
            "regulationWins": 18,
            "roadGamesPlayed": 23,
            "roadGoalDifferential": 6,
            "roadGoalsAgainst": 69,
            "roadGoalsFor": 75,
            "roadLosses": 10,
            "roadOtLosses": 1,
            "roadPoints": 25,
            "roadRegulationPlusOtWins": 11,
            "roadRegulationWins": 10,
            "roadTies": 0,
            "roadWins": 12,
            "seasonId": 20232024,
            "shootoutLosses": 2,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 5,
            "teamName": {
                "default": "Carolina Hurricanes",
                "fr": "Hurricanes de la Caroline"
            },
            "teamCommonName": {
                "default": "Hurricanes"
            },
            "teamAbbrev": {
                "default": "CAR"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/CAR_light.svg",
            "ties": 0,
            "waiversSequence": 22,
            "wildcardSequence": 0,
            "winPctg": 0.564103,
            "wins": 22
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 13,
            "conferenceL10Sequence": 11,
            "conferenceName": "Western",
            "conferenceRoadSequence": 1,
            "conferenceSequence": 6,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 6,
            "divisionL10Sequence": 5,
            "divisionName": "Pacific",
            "divisionRoadSequence": 1,
            "divisionSequence": 3,
            "gameTypeId": 2,
            "gamesPlayed": 35,
            "goalDifferential": 32,
            "goalDifferentialPctg": 0.914286,
            "goalAgainst": 87,
            "goalFor": 119,
            "goalsForPctg": 3.4,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": 1,
            "homeGoalsAgainst": 56,
            "homeGoalsFor": 57,
            "homeLosses": 7,
            "homeOtLosses": 5,
            "homePoints": 19,
            "homeRegulationPlusOtWins": 7,
            "homeRegulationWins": 7,
            "homeTies": 0,
            "homeWins": 7,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 0,
            "l10GoalsAgainst": 27,
            "l10GoalsFor": 27,
            "l10Losses": 4,
            "l10OtLosses": 2,
            "l10Points": 10,
            "l10RegulationPlusOtWins": 3,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 26,
            "leagueL10Sequence": 23,
            "leagueRoadSequence": 2,
            "leagueSequence": 10,
            "losses": 9,
            "otLosses": 6,
            "placeName": {
                "default": "Los Angeles"
            },
            "pointPctg": 0.657143,
            "points": 46,
            "regulationPlusOtWinPctg": 0.542857,
            "regulationPlusOtWins": 19,
            "regulationWinPctg": 0.514286,
            "regulationWins": 18,
            "roadGamesPlayed": 16,
            "roadGoalDifferential": 31,
            "roadGoalsAgainst": 31,
            "roadGoalsFor": 62,
            "roadLosses": 2,
            "roadOtLosses": 1,
            "roadPoints": 27,
            "roadRegulationPlusOtWins": 12,
            "roadRegulationWins": 11,
            "roadTies": 0,
            "roadWins": 13,
            "seasonId": 20232024,
            "shootoutLosses": 4,
            "shootoutWins": 1,
            "streakCode": "OT",
            "streakCount": 1,
            "teamName": {
                "default": "Los Angeles Kings",
                "fr": "Kings de Los Angeles"
            },
            "teamCommonName": {
                "default": "Kings"
            },
            "teamAbbrev": {
                "default": "LAK"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/LAK_light.svg",
            "ties": 0,
            "waiversSequence": 25,
            "wildcardSequence": 0,
            "winPctg": 0.571429,
            "wins": 20
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 2,
            "conferenceL10Sequence": 8,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 11,
            "conferenceSequence": 5,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 2,
            "divisionL10Sequence": 5,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 7,
            "divisionSequence": 3,
            "gameTypeId": 2,
            "gamesPlayed": 38,
            "goalDifferential": -6,
            "goalDifferentialPctg": -0.157895,
            "goalAgainst": 125,
            "goalFor": 119,
            "goalsForPctg": 3.131579,
            "homeGamesPlayed": 20,
            "homeGoalDifferential": -4,
            "homeGoalsAgainst": 65,
            "homeGoalsFor": 61,
            "homeLosses": 4,
            "homeOtLosses": 6,
            "homePoints": 26,
            "homeRegulationPlusOtWins": 10,
            "homeRegulationWins": 8,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -3,
            "l10GoalsAgainst": 35,
            "l10GoalsFor": 32,
            "l10Losses": 3,
            "l10OtLosses": 3,
            "l10Points": 11,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 4,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 6,
            "leagueL10Sequence": 17,
            "leagueRoadSequence": 17,
            "leagueSequence": 11,
            "losses": 10,
            "otLosses": 10,
            "placeName": {
                "default": "NY Islanders"
            },
            "pointPctg": 0.605263,
            "points": 46,
            "regulationPlusOtWinPctg": 0.447368,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.368421,
            "regulationWins": 14,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": -2,
            "roadGoalsAgainst": 60,
            "roadGoalsFor": 58,
            "roadLosses": 6,
            "roadOtLosses": 4,
            "roadPoints": 20,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 6,
            "roadTies": 0,
            "roadWins": 8,
            "seasonId": 20232024,
            "shootoutLosses": 3,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "New York Islanders",
                "fr": "Islanders de New York"
            },
            "teamCommonName": {
                "default": "Islanders"
            },
            "teamAbbrev": {
                "default": "NYI"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/NYI_light.svg",
            "ties": 0,
            "waiversSequence": 21,
            "wildcardSequence": 0,
            "winPctg": 0.473684,
            "wins": 18
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 10,
            "conferenceL10Sequence": 9,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 4,
            "conferenceSequence": 6,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 6,
            "divisionL10Sequence": 6,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 2,
            "divisionSequence": 4,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": 7,
            "goalDifferentialPctg": 0.179487,
            "goalAgainst": 109,
            "goalFor": 116,
            "goalsForPctg": 2.974359,
            "homeGamesPlayed": 18,
            "homeGoalDifferential": -4,
            "homeGoalsAgainst": 52,
            "homeGoalsFor": 48,
            "homeLosses": 7,
            "homeOtLosses": 2,
            "homePoints": 20,
            "homeRegulationPlusOtWins": 8,
            "homeRegulationWins": 6,
            "homeTies": 0,
            "homeWins": 9,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -3,
            "l10GoalsAgainst": 30,
            "l10GoalsFor": 27,
            "l10Losses": 3,
            "l10OtLosses": 3,
            "l10Points": 11,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 21,
            "leagueL10Sequence": 19,
            "leagueRoadSequence": 6,
            "leagueSequence": 12,
            "losses": 13,
            "otLosses": 6,
            "placeName": {
                "default": "Philadelphia",
                "fr": "Philadelphie"
            },
            "pointPctg": 0.589744,
            "points": 46,
            "regulationPlusOtWinPctg": 0.435897,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.358974,
            "regulationWins": 14,
            "roadGamesPlayed": 21,
            "roadGoalDifferential": 11,
            "roadGoalsAgainst": 57,
            "roadGoalsFor": 68,
            "roadLosses": 6,
            "roadOtLosses": 4,
            "roadPoints": 26,
            "roadRegulationPlusOtWins": 9,
            "roadRegulationWins": 8,
            "roadTies": 0,
            "roadWins": 11,
            "seasonId": 20232024,
            "shootoutLosses": 2,
            "shootoutWins": 3,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "Philadelphia Flyers",
                "fr": "Flyers de Philadelphie"
            },
            "teamCommonName": {
                "default": "Flyers"
            },
            "teamAbbrev": {
                "default": "PHI"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/PHI_light.svg",
            "ties": 0,
            "waiversSequence": 19,
            "wildcardSequence": 1,
            "winPctg": 0.512821,
            "wins": 20
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 11,
            "conferenceL10Sequence": 11,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 5,
            "conferenceSequence": 7,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 5,
            "divisionL10Sequence": 4,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 3,
            "divisionSequence": 3,
            "gameTypeId": 2,
            "gamesPlayed": 36,
            "goalDifferential": 10,
            "goalDifferentialPctg": 0.277778,
            "goalAgainst": 119,
            "goalFor": 129,
            "goalsForPctg": 3.583333,
            "homeGamesPlayed": 18,
            "homeGoalDifferential": 3,
            "homeGoalsAgainst": 66,
            "homeGoalsFor": 69,
            "homeLosses": 7,
            "homeOtLosses": 2,
            "homePoints": 20,
            "homeRegulationPlusOtWins": 5,
            "homeRegulationWins": 4,
            "homeTies": 0,
            "homeWins": 9,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 0,
            "l10GoalsAgainst": 35,
            "l10GoalsFor": 35,
            "l10Losses": 4,
            "l10OtLosses": 2,
            "l10Points": 10,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 22,
            "leagueL10Sequence": 21,
            "leagueRoadSequence": 7,
            "leagueSequence": 13,
            "losses": 10,
            "otLosses": 7,
            "placeName": {
                "default": "Toronto"
            },
            "pointPctg": 0.625,
            "points": 45,
            "regulationPlusOtWinPctg": 0.416667,
            "regulationPlusOtWins": 15,
            "regulationWinPctg": 0.305556,
            "regulationWins": 11,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": 7,
            "roadGoalsAgainst": 53,
            "roadGoalsFor": 60,
            "roadLosses": 3,
            "roadOtLosses": 5,
            "roadPoints": 25,
            "roadRegulationPlusOtWins": 10,
            "roadRegulationWins": 7,
            "roadTies": 0,
            "roadWins": 10,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 4,
            "streakCode": "W",
            "streakCount": 2,
            "teamName": {
                "default": "Toronto Maple Leafs",
                "fr": "Maple Leafs de Toronto"
            },
            "teamCommonName": {
                "default": "Maple Leafs"
            },
            "teamAbbrev": {
                "default": "TOR"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/TOR_light.svg",
            "ties": 0,
            "waiversSequence": 23,
            "wildcardSequence": 0,
            "winPctg": 0.527778,
            "wins": 19
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 12,
            "conferenceL10Sequence": 5,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 7,
            "conferenceSequence": 8,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 7,
            "divisionL10Sequence": 4,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 4,
            "divisionSequence": 5,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": 1,
            "goalDifferentialPctg": 0.027027,
            "goalAgainst": 130,
            "goalFor": 131,
            "goalsForPctg": 3.540541,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": -6,
            "homeGoalsAgainst": 69,
            "homeGoalsFor": 63,
            "homeLosses": 8,
            "homeOtLosses": 2,
            "homePoints": 20,
            "homeRegulationPlusOtWins": 9,
            "homeRegulationWins": 7,
            "homeTies": 0,
            "homeWins": 9,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 3,
            "l10GoalsAgainst": 34,
            "l10GoalsFor": 37,
            "l10Losses": 3,
            "l10OtLosses": 1,
            "l10Points": 13,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 23,
            "leagueL10Sequence": 12,
            "leagueRoadSequence": 9,
            "leagueSequence": 14,
            "losses": 14,
            "otLosses": 2,
            "placeName": {
                "default": "New Jersey"
            },
            "pointPctg": 0.594595,
            "points": 44,
            "regulationPlusOtWinPctg": 0.567568,
            "regulationPlusOtWins": 21,
            "regulationWinPctg": 0.459459,
            "regulationWins": 17,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": 7,
            "roadGoalsAgainst": 61,
            "roadGoalsFor": 68,
            "roadLosses": 6,
            "roadOtLosses": 0,
            "roadPoints": 24,
            "roadRegulationPlusOtWins": 12,
            "roadRegulationWins": 10,
            "roadTies": 0,
            "roadWins": 12,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 0,
            "streakCode": "W",
            "streakCount": 2,
            "teamName": {
                "default": "New Jersey Devils",
                "fr": "Devils du New Jersey"
            },
            "teamCommonName": {
                "default": "Devils"
            },
            "teamAbbrev": {
                "default": "NJD"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/NJD_light.svg",
            "ties": 0,
            "waiversSequence": 20,
            "wildcardSequence": 2,
            "winPctg": 0.567568,
            "wins": 21
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 8,
            "conferenceL10Sequence": 10,
            "conferenceName": "Western",
            "conferenceRoadSequence": 9,
            "conferenceSequence": 7,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 6,
            "divisionL10Sequence": 6,
            "divisionName": "Central",
            "divisionRoadSequence": 4,
            "divisionSequence": 4,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": 0,
            "goalDifferentialPctg": 0.0,
            "goalAgainst": 122,
            "goalFor": 122,
            "goalsForPctg": 3.128205,
            "homeGamesPlayed": 22,
            "homeGoalDifferential": 0,
            "homeGoalsAgainst": 66,
            "homeGoalsFor": 66,
            "homeLosses": 10,
            "homeOtLosses": 0,
            "homePoints": 24,
            "homeRegulationPlusOtWins": 12,
            "homeRegulationWins": 9,
            "homeTies": 0,
            "homeWins": 12,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -2,
            "l10GoalsAgainst": 34,
            "l10GoalsFor": 32,
            "l10Losses": 4,
            "l10OtLosses": 1,
            "l10Points": 11,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 5,
            "leagueHomeSequence": 13,
            "leagueL10Sequence": 18,
            "leagueRoadSequence": 20,
            "leagueSequence": 15,
            "losses": 17,
            "otLosses": 1,
            "placeName": {
                "default": "Nashville"
            },
            "pointPctg": 0.551282,
            "points": 43,
            "regulationPlusOtWinPctg": 0.487179,
            "regulationPlusOtWins": 19,
            "regulationWinPctg": 0.384615,
            "regulationWins": 15,
            "roadGamesPlayed": 17,
            "roadGoalDifferential": 0,
            "roadGoalsAgainst": 56,
            "roadGoalsFor": 56,
            "roadLosses": 7,
            "roadOtLosses": 1,
            "roadPoints": 19,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 6,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 2,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Nashville Predators",
                "fr": "Predators de Nashville"
            },
            "teamCommonName": {
                "default": "Predators"
            },
            "teamAbbrev": {
                "default": "NSH"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/NSH_light.svg",
            "ties": 0,
            "waiversSequence": 15,
            "wildcardSequence": 1,
            "winPctg": 0.538462,
            "wins": 21
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 4,
            "conferenceL10Sequence": 6,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 14,
            "conferenceSequence": 9,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 2,
            "divisionL10Sequence": 2,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 7,
            "divisionSequence": 4,
            "gameTypeId": 2,
            "gamesPlayed": 40,
            "goalDifferential": -5,
            "goalDifferentialPctg": -0.125,
            "goalAgainst": 136,
            "goalFor": 131,
            "goalsForPctg": 3.275,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": 12,
            "homeGoalsAgainst": 55,
            "homeGoalsFor": 67,
            "homeLosses": 5,
            "homeOtLosses": 3,
            "homePoints": 25,
            "homeRegulationPlusOtWins": 11,
            "homeRegulationWins": 10,
            "homeTies": 0,
            "homeWins": 11,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 5,
            "l10GoalsAgainst": 30,
            "l10GoalsFor": 35,
            "l10Losses": 4,
            "l10OtLosses": 0,
            "l10Points": 12,
            "l10RegulationPlusOtWins": 5,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 9,
            "leagueL10Sequence": 15,
            "leagueRoadSequence": 24,
            "leagueSequence": 16,
            "losses": 16,
            "otLosses": 5,
            "placeName": {
                "default": "Tampa Bay"
            },
            "pointPctg": 0.5375,
            "points": 43,
            "regulationPlusOtWinPctg": 0.45,
            "regulationPlusOtWins": 18,
            "regulationWinPctg": 0.4,
            "regulationWins": 16,
            "roadGamesPlayed": 21,
            "roadGoalDifferential": -17,
            "roadGoalsAgainst": 81,
            "roadGoalsFor": 64,
            "roadLosses": 11,
            "roadOtLosses": 2,
            "roadPoints": 18,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 6,
            "roadTies": 0,
            "roadWins": 8,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "Tampa Bay Lightning",
                "fr": "Lightning de Tampa Bay"
            },
            "teamCommonName": {
                "default": "Lightning"
            },
            "teamAbbrev": {
                "default": "TBL"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/TBL_light.svg",
            "ties": 0,
            "waiversSequence": 12,
            "wildcardSequence": 3,
            "winPctg": 0.475,
            "wins": 19
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 9,
            "conferenceL10Sequence": 3,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 8,
            "conferenceSequence": 10,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 5,
            "divisionL10Sequence": 2,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 5,
            "divisionSequence": 6,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": 14,
            "goalDifferentialPctg": 0.378378,
            "goalAgainst": 102,
            "goalFor": 116,
            "goalsForPctg": 3.135135,
            "homeGamesPlayed": 18,
            "homeGoalDifferential": 8,
            "homeGoalsAgainst": 44,
            "homeGoalsFor": 52,
            "homeLosses": 7,
            "homeOtLosses": 1,
            "homePoints": 21,
            "homeRegulationPlusOtWins": 9,
            "homeRegulationWins": 9,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 6,
            "l10GoalsAgainst": 31,
            "l10GoalsFor": 37,
            "l10Losses": 2,
            "l10OtLosses": 1,
            "l10Points": 15,
            "l10RegulationPlusOtWins": 5,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 7,
            "leagueHomeSequence": 19,
            "leagueL10Sequence": 6,
            "leagueRoadSequence": 12,
            "leagueSequence": 17,
            "losses": 14,
            "otLosses": 4,
            "placeName": {
                "default": "Pittsburgh"
            },
            "pointPctg": 0.567568,
            "points": 42,
            "regulationPlusOtWinPctg": 0.459459,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.432432,
            "regulationWins": 16,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": 6,
            "roadGoalsAgainst": 58,
            "roadGoalsFor": 64,
            "roadLosses": 7,
            "roadOtLosses": 3,
            "roadPoints": 21,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 7,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 2,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "Pittsburgh Penguins",
                "fr": "Penguins de Pittsburgh"
            },
            "teamCommonName": {
                "default": "Penguins"
            },
            "teamAbbrev": {
                "default": "PIT"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/PIT_light.svg",
            "ties": 0,
            "waiversSequence": 18,
            "wildcardSequence": 4,
            "winPctg": 0.513514,
            "wins": 19
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 8,
            "conferenceL10Sequence": 13,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 10,
            "conferenceSequence": 11,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 4,
            "divisionL10Sequence": 8,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 6,
            "divisionSequence": 7,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": -24,
            "goalDifferentialPctg": -0.648649,
            "goalAgainst": 114,
            "goalFor": 90,
            "goalsForPctg": 2.432432,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": -11,
            "homeGoalsAgainst": 56,
            "homeGoalsFor": 45,
            "homeLosses": 6,
            "homeOtLosses": 4,
            "homePoints": 22,
            "homeRegulationPlusOtWins": 7,
            "homeRegulationWins": 5,
            "homeTies": 0,
            "homeWins": 9,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -13,
            "l10GoalsAgainst": 35,
            "l10GoalsFor": 22,
            "l10Losses": 4,
            "l10OtLosses": 2,
            "l10Points": 10,
            "l10RegulationPlusOtWins": 3,
            "l10RegulationWins": 1,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 17,
            "leagueL10Sequence": 25,
            "leagueRoadSequence": 16,
            "leagueSequence": 18,
            "losses": 13,
            "otLosses": 6,
            "placeName": {
                "default": "Washington"
            },
            "pointPctg": 0.567568,
            "points": 42,
            "regulationPlusOtWinPctg": 0.405405,
            "regulationPlusOtWins": 15,
            "regulationWinPctg": 0.324324,
            "regulationWins": 12,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": -13,
            "roadGoalsAgainst": 58,
            "roadGoalsFor": 45,
            "roadLosses": 7,
            "roadOtLosses": 2,
            "roadPoints": 20,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 7,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 4,
            "shootoutWins": 3,
            "streakCode": "L",
            "streakCount": 2,
            "teamName": {
                "default": "Washington Capitals",
                "fr": "Capitals de Washington"
            },
            "teamCommonName": {
                "default": "Capitals"
            },
            "teamAbbrev": {
                "default": "WSH"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/WSH_light.svg",
            "ties": 0,
            "waiversSequence": 17,
            "wildcardSequence": 5,
            "winPctg": 0.486486,
            "wins": 18
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 7,
            "conferenceL10Sequence": 15,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 12,
            "conferenceSequence": 12,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 4,
            "divisionL10Sequence": 7,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 5,
            "divisionSequence": 5,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": 7,
            "goalDifferentialPctg": 0.179487,
            "goalAgainst": 134,
            "goalFor": 141,
            "goalsForPctg": 3.615385,
            "homeGamesPlayed": 20,
            "homeGoalDifferential": 7,
            "homeGoalsAgainst": 68,
            "homeGoalsFor": 75,
            "homeLosses": 7,
            "homeOtLosses": 3,
            "homePoints": 23,
            "homeRegulationPlusOtWins": 9,
            "homeRegulationWins": 8,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -6,
            "l10GoalsAgainst": 40,
            "l10GoalsFor": 34,
            "l10Losses": 6,
            "l10OtLosses": 0,
            "l10Points": 8,
            "l10RegulationPlusOtWins": 2,
            "l10RegulationWins": 1,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 15,
            "leagueL10Sequence": 27,
            "leagueRoadSequence": 21,
            "leagueSequence": 19,
            "losses": 16,
            "otLosses": 4,
            "placeName": {
                "default": "Detroit"
            },
            "pointPctg": 0.538462,
            "points": 42,
            "regulationPlusOtWinPctg": 0.435897,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.358974,
            "regulationWins": 14,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": 0,
            "roadGoalsAgainst": 66,
            "roadGoalsFor": 66,
            "roadLosses": 9,
            "roadOtLosses": 1,
            "roadPoints": 19,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 6,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 2,
            "streakCode": "W",
            "streakCount": 2,
            "teamName": {
                "default": "Detroit Red Wings",
                "fr": "Red Wings de Detroit"
            },
            "teamCommonName": {
                "default": "Red Wings"
            },
            "teamAbbrev": {
                "default": "DET"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/DET_light.svg",
            "ties": 0,
            "waiversSequence": 13,
            "wildcardSequence": 6,
            "winPctg": 0.487179,
            "wins": 19
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 11,
            "conferenceL10Sequence": 2,
            "conferenceName": "Western",
            "conferenceRoadSequence": 7,
            "conferenceSequence": 8,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 4,
            "divisionL10Sequence": 1,
            "divisionName": "Pacific",
            "divisionRoadSequence": 4,
            "divisionSequence": 4,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": -9,
            "goalDifferentialPctg": -0.230769,
            "goalAgainst": 115,
            "goalFor": 106,
            "goalsForPctg": 2.717949,
            "homeGamesPlayed": 20,
            "homeGoalDifferential": 2,
            "homeGoalsAgainst": 57,
            "homeGoalsFor": 59,
            "homeLosses": 8,
            "homeOtLosses": 3,
            "homePoints": 21,
            "homeRegulationPlusOtWins": 8,
            "homeRegulationWins": 7,
            "homeTies": 0,
            "homeWins": 9,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 18,
            "l10GoalsAgainst": 14,
            "l10GoalsFor": 32,
            "l10Losses": 0,
            "l10OtLosses": 2,
            "l10Points": 18,
            "l10RegulationPlusOtWins": 8,
            "l10RegulationWins": 7,
            "l10Ties": 0,
            "l10Wins": 8,
            "leagueHomeSequence": 20,
            "leagueL10Sequence": 2,
            "leagueRoadSequence": 18,
            "leagueSequence": 20,
            "losses": 14,
            "otLosses": 9,
            "placeName": {
                "default": "Seattle"
            },
            "pointPctg": 0.525641,
            "points": 41,
            "regulationPlusOtWinPctg": 0.384615,
            "regulationPlusOtWins": 15,
            "regulationWinPctg": 0.307692,
            "regulationWins": 12,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": -11,
            "roadGoalsAgainst": 58,
            "roadGoalsFor": 47,
            "roadLosses": 6,
            "roadOtLosses": 6,
            "roadPoints": 20,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 5,
            "roadTies": 0,
            "roadWins": 7,
            "seasonId": 20232024,
            "shootoutLosses": 4,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 6,
            "teamName": {
                "default": "Seattle Kraken",
                "fr": "Kraken de Seattle"
            },
            "teamCommonName": {
                "default": "Kraken"
            },
            "teamAbbrev": {
                "default": "SEA"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/SEA_light.svg",
            "ties": 0,
            "waiversSequence": 10,
            "wildcardSequence": 2,
            "winPctg": 0.410256,
            "wins": 16
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 7,
            "conferenceL10Sequence": 9,
            "conferenceName": "Western",
            "conferenceRoadSequence": 11,
            "conferenceSequence": 9,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 5,
            "divisionL10Sequence": 5,
            "divisionName": "Central",
            "divisionRoadSequence": 5,
            "divisionSequence": 5,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": 4,
            "goalDifferentialPctg": 0.108108,
            "goalAgainst": 108,
            "goalFor": 112,
            "goalsForPctg": 3.027027,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": 10,
            "homeGoalsAgainst": 52,
            "homeGoalsFor": 62,
            "homeLosses": 7,
            "homeOtLosses": 0,
            "homePoints": 24,
            "homeRegulationPlusOtWins": 11,
            "homeRegulationWins": 9,
            "homeTies": 0,
            "homeWins": 12,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -2,
            "l10GoalsAgainst": 26,
            "l10GoalsFor": 24,
            "l10Losses": 4,
            "l10OtLosses": 0,
            "l10Points": 12,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 12,
            "leagueL10Sequence": 14,
            "leagueRoadSequence": 25,
            "leagueSequence": 21,
            "losses": 16,
            "otLosses": 2,
            "placeName": {
                "default": "Arizona"
            },
            "pointPctg": 0.540541,
            "points": 40,
            "regulationPlusOtWinPctg": 0.459459,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.405405,
            "regulationWins": 15,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": -6,
            "roadGoalsAgainst": 56,
            "roadGoalsFor": 50,
            "roadLosses": 9,
            "roadOtLosses": 2,
            "roadPoints": 16,
            "roadRegulationPlusOtWins": 6,
            "roadRegulationWins": 6,
            "roadTies": 0,
            "roadWins": 7,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 2,
            "streakCode": "L",
            "streakCount": 2,
            "teamName": {
                "default": "Arizona Coyotes",
                "fr": "Coyotes de l'Arizona"
            },
            "teamCommonName": {
                "default": "Coyotes"
            },
            "teamAbbrev": {
                "default": "ARI"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/ARI_light.svg",
            "ties": 0,
            "waiversSequence": 14,
            "wildcardSequence": 3,
            "winPctg": 0.513514,
            "wins": 19
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 10,
            "conferenceL10Sequence": 4,
            "conferenceName": "Western",
            "conferenceRoadSequence": 10,
            "conferenceSequence": 10,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 3,
            "divisionL10Sequence": 2,
            "divisionName": "Pacific",
            "divisionRoadSequence": 6,
            "divisionSequence": 5,
            "gameTypeId": 2,
            "gamesPlayed": 35,
            "goalDifferential": 16,
            "goalDifferentialPctg": 0.457143,
            "goalAgainst": 112,
            "goalFor": 128,
            "goalsForPctg": 3.657143,
            "homeGamesPlayed": 17,
            "homeGoalDifferential": 13,
            "homeGoalsAgainst": 51,
            "homeGoalsFor": 64,
            "homeLosses": 6,
            "homeOtLosses": 1,
            "homePoints": 21,
            "homeRegulationPlusOtWins": 9,
            "homeRegulationWins": 8,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 12,
            "l10GoalsAgainst": 28,
            "l10GoalsFor": 40,
            "l10Losses": 3,
            "l10OtLosses": 0,
            "l10Points": 14,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 6,
            "l10Ties": 0,
            "l10Wins": 7,
            "leagueHomeSequence": 18,
            "leagueL10Sequence": 7,
            "leagueRoadSequence": 23,
            "leagueSequence": 22,
            "losses": 15,
            "otLosses": 1,
            "placeName": {
                "default": "Edmonton"
            },
            "pointPctg": 0.557143,
            "points": 39,
            "regulationPlusOtWinPctg": 0.485714,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.457143,
            "regulationWins": 16,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": 3,
            "roadGoalsAgainst": 61,
            "roadGoalsFor": 64,
            "roadLosses": 9,
            "roadOtLosses": 0,
            "roadPoints": 18,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 8,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 2,
            "streakCode": "W",
            "streakCount": 6,
            "teamName": {
                "default": "Edmonton Oilers",
                "fr": "Oilers d'Edmonton"
            },
            "teamCommonName": {
                "default": "Oilers"
            },
            "teamAbbrev": {
                "default": "EDM"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/EDM_light.svg",
            "ties": 0,
            "waiversSequence": 16,
            "wildcardSequence": 4,
            "winPctg": 0.542857,
            "wins": 19
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 6,
            "conferenceL10Sequence": 8,
            "conferenceName": "Western",
            "conferenceRoadSequence": 12,
            "conferenceSequence": 11,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 4,
            "divisionL10Sequence": 4,
            "divisionName": "Central",
            "divisionRoadSequence": 6,
            "divisionSequence": 6,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": -12,
            "goalDifferentialPctg": -0.324324,
            "goalAgainst": 119,
            "goalFor": 107,
            "goalsForPctg": 2.891892,
            "homeGamesPlayed": 18,
            "homeGoalDifferential": 6,
            "homeGoalsAgainst": 57,
            "homeGoalsFor": 63,
            "homeLosses": 6,
            "homeOtLosses": 0,
            "homePoints": 24,
            "homeRegulationPlusOtWins": 11,
            "homeRegulationWins": 10,
            "homeTies": 0,
            "homeWins": 12,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 0,
            "l10GoalsAgainst": 31,
            "l10GoalsFor": 31,
            "l10Losses": 4,
            "l10OtLosses": 0,
            "l10Points": 12,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 5,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 11,
            "leagueL10Sequence": 13,
            "leagueRoadSequence": 27,
            "leagueSequence": 23,
            "losses": 17,
            "otLosses": 1,
            "placeName": {
                "default": "St Louis"
            },
            "pointPctg": 0.527027,
            "points": 39,
            "regulationPlusOtWinPctg": 0.486486,
            "regulationPlusOtWins": 18,
            "regulationWinPctg": 0.432432,
            "regulationWins": 16,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": -18,
            "roadGoalsAgainst": 62,
            "roadGoalsFor": 44,
            "roadLosses": 11,
            "roadOtLosses": 1,
            "roadPoints": 15,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 6,
            "roadTies": 0,
            "roadWins": 7,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "St. Louis Blues",
                "fr": "Blues de St. Louis"
            },
            "teamCommonName": {
                "default": "Blues"
            },
            "teamAbbrev": {
                "default": "STL"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/STL_light.svg",
            "ties": 0,
            "waiversSequence": 11,
            "wildcardSequence": 5,
            "winPctg": 0.513514,
            "wins": 19
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 12,
            "conferenceL10Sequence": 7,
            "conferenceName": "Western",
            "conferenceRoadSequence": 8,
            "conferenceSequence": 12,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 5,
            "divisionL10Sequence": 4,
            "divisionName": "Pacific",
            "divisionRoadSequence": 5,
            "divisionSequence": 6,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": -9,
            "goalDifferentialPctg": -0.230769,
            "goalAgainst": 127,
            "goalFor": 118,
            "goalsForPctg": 3.025641,
            "homeGamesPlayed": 17,
            "homeGoalDifferential": 1,
            "homeGoalsAgainst": 49,
            "homeGoalsFor": 50,
            "homeLosses": 7,
            "homeOtLosses": 1,
            "homePoints": 19,
            "homeRegulationPlusOtWins": 9,
            "homeRegulationWins": 7,
            "homeTies": 0,
            "homeWins": 9,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": 8,
            "l10GoalsAgainst": 23,
            "l10GoalsFor": 31,
            "l10Losses": 3,
            "l10OtLosses": 1,
            "l10Points": 13,
            "l10RegulationPlusOtWins": 6,
            "l10RegulationWins": 6,
            "l10Ties": 0,
            "l10Wins": 6,
            "leagueHomeSequence": 25,
            "leagueL10Sequence": 11,
            "leagueRoadSequence": 19,
            "leagueSequence": 24,
            "losses": 17,
            "otLosses": 5,
            "placeName": {
                "default": "Calgary"
            },
            "pointPctg": 0.5,
            "points": 39,
            "regulationPlusOtWinPctg": 0.435897,
            "regulationPlusOtWins": 17,
            "regulationWinPctg": 0.358974,
            "regulationWins": 14,
            "roadGamesPlayed": 22,
            "roadGoalDifferential": -10,
            "roadGoalsAgainst": 78,
            "roadGoalsFor": 68,
            "roadLosses": 10,
            "roadOtLosses": 4,
            "roadPoints": 20,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 7,
            "roadTies": 0,
            "roadWins": 8,
            "seasonId": 20232024,
            "shootoutLosses": 4,
            "shootoutWins": 0,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Calgary Flames",
                "fr": "Flames de Calgary"
            },
            "teamCommonName": {
                "default": "Flames"
            },
            "teamAbbrev": {
                "default": "CGY"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/CGY_light.svg",
            "ties": 0,
            "waiversSequence": 9,
            "wildcardSequence": 6,
            "winPctg": 0.435897,
            "wins": 17
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 16,
            "conferenceL10Sequence": 12,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 9,
            "conferenceSequence": 13,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 8,
            "divisionL10Sequence": 5,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 4,
            "divisionSequence": 6,
            "gameTypeId": 2,
            "gamesPlayed": 38,
            "goalDifferential": -27,
            "goalDifferentialPctg": -0.710526,
            "goalAgainst": 134,
            "goalFor": 107,
            "goalsForPctg": 2.815789,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": -20,
            "homeGoalsAgainst": 71,
            "homeGoalsFor": 51,
            "homeLosses": 10,
            "homeOtLosses": 2,
            "homePoints": 16,
            "homeRegulationPlusOtWins": 6,
            "homeRegulationWins": 3,
            "homeTies": 0,
            "homeWins": 7,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -6,
            "l10GoalsAgainst": 37,
            "l10GoalsFor": 31,
            "l10Losses": 4,
            "l10OtLosses": 2,
            "l10Points": 10,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 29,
            "leagueL10Sequence": 22,
            "leagueRoadSequence": 14,
            "leagueSequence": 25,
            "losses": 17,
            "otLosses": 5,
            "placeName": {
                "default": "Montr\u00e9al"
            },
            "pointPctg": 0.486842,
            "points": 37,
            "regulationPlusOtWinPctg": 0.342105,
            "regulationPlusOtWins": 13,
            "regulationWinPctg": 0.210526,
            "regulationWins": 8,
            "roadGamesPlayed": 19,
            "roadGoalDifferential": -7,
            "roadGoalsAgainst": 63,
            "roadGoalsFor": 56,
            "roadLosses": 7,
            "roadOtLosses": 3,
            "roadPoints": 21,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 5,
            "roadTies": 0,
            "roadWins": 9,
            "seasonId": 20232024,
            "shootoutLosses": 3,
            "shootoutWins": 3,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Montr\u00e9al Canadiens",
                "fr": "Canadiens de Montr\u00e9al"
            },
            "teamCommonName": {
                "default": "Canadiens"
            },
            "teamAbbrev": {
                "default": "MTL"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/MTL_light.svg",
            "ties": 0,
            "waiversSequence": 8,
            "wildcardSequence": 7,
            "winPctg": 0.421053,
            "wins": 16
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 9,
            "conferenceL10Sequence": 12,
            "conferenceName": "Western",
            "conferenceRoadSequence": 14,
            "conferenceSequence": 13,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 7,
            "divisionL10Sequence": 7,
            "divisionName": "Central",
            "divisionRoadSequence": 7,
            "divisionSequence": 7,
            "gameTypeId": 2,
            "gamesPlayed": 37,
            "goalDifferential": -8,
            "goalDifferentialPctg": -0.216216,
            "goalAgainst": 120,
            "goalFor": 112,
            "goalsForPctg": 3.027027,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": -2,
            "homeGoalsAgainst": 63,
            "homeGoalsFor": 61,
            "homeLosses": 7,
            "homeOtLosses": 2,
            "homePoints": 22,
            "homeRegulationPlusOtWins": 7,
            "homeRegulationWins": 6,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -2,
            "l10GoalsAgainst": 30,
            "l10GoalsFor": 28,
            "l10Losses": 5,
            "l10OtLosses": 0,
            "l10Points": 10,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 2,
            "l10Ties": 0,
            "l10Wins": 5,
            "leagueHomeSequence": 16,
            "leagueL10Sequence": 24,
            "leagueRoadSequence": 29,
            "leagueSequence": 26,
            "losses": 17,
            "otLosses": 4,
            "placeName": {
                "default": "Minnesota"
            },
            "pointPctg": 0.486486,
            "points": 36,
            "regulationPlusOtWinPctg": 0.351351,
            "regulationPlusOtWins": 13,
            "regulationWinPctg": 0.297297,
            "regulationWins": 11,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": -6,
            "roadGoalsAgainst": 57,
            "roadGoalsFor": 51,
            "roadLosses": 10,
            "roadOtLosses": 2,
            "roadPoints": 14,
            "roadRegulationPlusOtWins": 6,
            "roadRegulationWins": 5,
            "roadTies": 0,
            "roadWins": 6,
            "seasonId": 20232024,
            "shootoutLosses": 2,
            "shootoutWins": 3,
            "streakCode": "L",
            "streakCount": 4,
            "teamName": {
                "default": "Minnesota Wild",
                "fr": "Wild du Minnesota"
            },
            "teamCommonName": {
                "default": "Wild"
            },
            "teamAbbrev": {
                "default": "MIN"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/MIN_light.svg",
            "ties": 0,
            "waiversSequence": 7,
            "wildcardSequence": 7,
            "winPctg": 0.432432,
            "wins": 16
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 15,
            "conferenceL10Sequence": 14,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 13,
            "conferenceSequence": 14,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 7,
            "divisionL10Sequence": 6,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 6,
            "divisionSequence": 7,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": -16,
            "goalDifferentialPctg": -0.410256,
            "goalAgainst": 133,
            "goalFor": 117,
            "goalsForPctg": 3.0,
            "homeGamesPlayed": 18,
            "homeGoalDifferential": -7,
            "homeGoalsAgainst": 59,
            "homeGoalsFor": 52,
            "homeLosses": 9,
            "homeOtLosses": 1,
            "homePoints": 17,
            "homeRegulationPlusOtWins": 8,
            "homeRegulationWins": 6,
            "homeTies": 0,
            "homeWins": 8,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -4,
            "l10GoalsAgainst": 37,
            "l10GoalsFor": 33,
            "l10Losses": 5,
            "l10OtLosses": 1,
            "l10Points": 9,
            "l10RegulationPlusOtWins": 4,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 28,
            "leagueL10Sequence": 26,
            "leagueRoadSequence": 22,
            "leagueSequence": 27,
            "losses": 19,
            "otLosses": 4,
            "placeName": {
                "default": "Buffalo"
            },
            "pointPctg": 0.461538,
            "points": 36,
            "regulationPlusOtWinPctg": 0.410256,
            "regulationPlusOtWins": 16,
            "regulationWinPctg": 0.358974,
            "regulationWins": 14,
            "roadGamesPlayed": 21,
            "roadGoalDifferential": -9,
            "roadGoalsAgainst": 74,
            "roadGoalsFor": 65,
            "roadLosses": 10,
            "roadOtLosses": 3,
            "roadPoints": 19,
            "roadRegulationPlusOtWins": 8,
            "roadRegulationWins": 8,
            "roadTies": 0,
            "roadWins": 8,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 0,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "Buffalo Sabres",
                "fr": "Sabres de Buffalo"
            },
            "teamCommonName": {
                "default": "Sabres"
            },
            "teamAbbrev": {
                "default": "BUF"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/BUF_light.svg",
            "ties": 0,
            "waiversSequence": 6,
            "wildcardSequence": 8,
            "winPctg": 0.410256,
            "wins": 16
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 14,
            "conferenceL10Sequence": 10,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 15,
            "conferenceSequence": 15,
            "date": "2024-01-06",
            "divisionAbbrev": "M",
            "divisionHomeSequence": 8,
            "divisionL10Sequence": 7,
            "divisionName": "Metropolitan",
            "divisionRoadSequence": 8,
            "divisionSequence": 8,
            "gameTypeId": 2,
            "gamesPlayed": 40,
            "goalDifferential": -23,
            "goalDifferentialPctg": -0.575,
            "goalAgainst": 146,
            "goalFor": 123,
            "goalsForPctg": 3.075,
            "homeGamesPlayed": 22,
            "homeGoalDifferential": -12,
            "homeGoalsAgainst": 76,
            "homeGoalsFor": 64,
            "homeLosses": 11,
            "homeOtLosses": 3,
            "homePoints": 19,
            "homeRegulationPlusOtWins": 8,
            "homeRegulationWins": 7,
            "homeTies": 0,
            "homeWins": 8,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -4,
            "l10GoalsAgainst": 40,
            "l10GoalsFor": 36,
            "l10Losses": 3,
            "l10OtLosses": 3,
            "l10Points": 11,
            "l10RegulationPlusOtWins": 3,
            "l10RegulationWins": 1,
            "l10Ties": 0,
            "l10Wins": 4,
            "leagueHomeSequence": 27,
            "leagueL10Sequence": 20,
            "leagueRoadSequence": 26,
            "leagueSequence": 28,
            "losses": 19,
            "otLosses": 8,
            "placeName": {
                "default": "Columbus"
            },
            "pointPctg": 0.425,
            "points": 34,
            "regulationPlusOtWinPctg": 0.3,
            "regulationPlusOtWins": 12,
            "regulationWinPctg": 0.225,
            "regulationWins": 9,
            "roadGamesPlayed": 18,
            "roadGoalDifferential": -11,
            "roadGoalsAgainst": 70,
            "roadGoalsFor": 59,
            "roadLosses": 8,
            "roadOtLosses": 5,
            "roadPoints": 15,
            "roadRegulationPlusOtWins": 4,
            "roadRegulationWins": 2,
            "roadTies": 0,
            "roadWins": 5,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 1,
            "streakCode": "W",
            "streakCount": 1,
            "teamName": {
                "default": "Columbus Blue Jackets",
                "fr": "Blue Jackets de Columbus"
            },
            "teamCommonName": {
                "default": "Blue Jackets"
            },
            "teamAbbrev": {
                "default": "CBJ"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/CBJ_light.svg",
            "ties": 0,
            "waiversSequence": 5,
            "wildcardSequence": 9,
            "winPctg": 0.325,
            "wins": 13
        },
        {
            "conferenceAbbrev": "E",
            "conferenceHomeSequence": 13,
            "conferenceL10Sequence": 16,
            "conferenceName": "Eastern",
            "conferenceRoadSequence": 16,
            "conferenceSequence": 16,
            "date": "2024-01-06",
            "divisionAbbrev": "A",
            "divisionHomeSequence": 6,
            "divisionL10Sequence": 8,
            "divisionName": "Atlantic",
            "divisionRoadSequence": 8,
            "divisionSequence": 8,
            "gameTypeId": 2,
            "gamesPlayed": 34,
            "goalDifferential": -7,
            "goalDifferentialPctg": -0.205882,
            "goalAgainst": 122,
            "goalFor": 115,
            "goalsForPctg": 3.382353,
            "homeGamesPlayed": 20,
            "homeGoalDifferential": 1,
            "homeGoalsAgainst": 67,
            "homeGoalsFor": 68,
            "homeLosses": 10,
            "homeOtLosses": 0,
            "homePoints": 20,
            "homeRegulationPlusOtWins": 9,
            "homeRegulationWins": 7,
            "homeTies": 0,
            "homeWins": 10,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -10,
            "l10GoalsAgainst": 44,
            "l10GoalsFor": 34,
            "l10Losses": 7,
            "l10OtLosses": 0,
            "l10Points": 6,
            "l10RegulationPlusOtWins": 3,
            "l10RegulationWins": 2,
            "l10Ties": 0,
            "l10Wins": 3,
            "leagueHomeSequence": 24,
            "leagueL10Sequence": 29,
            "leagueRoadSequence": 31,
            "leagueSequence": 29,
            "losses": 20,
            "otLosses": 0,
            "placeName": {
                "default": "Ottawa"
            },
            "pointPctg": 0.411765,
            "points": 28,
            "regulationPlusOtWinPctg": 0.382353,
            "regulationPlusOtWins": 13,
            "regulationWinPctg": 0.323529,
            "regulationWins": 11,
            "roadGamesPlayed": 14,
            "roadGoalDifferential": -8,
            "roadGoalsAgainst": 55,
            "roadGoalsFor": 47,
            "roadLosses": 10,
            "roadOtLosses": 0,
            "roadPoints": 8,
            "roadRegulationPlusOtWins": 4,
            "roadRegulationWins": 4,
            "roadTies": 0,
            "roadWins": 4,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 1,
            "streakCode": "L",
            "streakCount": 2,
            "teamName": {
                "default": "Ottawa Senators",
                "fr": "S\u00e9nateurs d'Ottawa"
            },
            "teamCommonName": {
                "default": "Senators",
                "fr": "S\u00e9nateurs"
            },
            "teamAbbrev": {
                "default": "OTT"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/OTT_light.svg",
            "ties": 0,
            "waiversSequence": 4,
            "wildcardSequence": 10,
            "winPctg": 0.411765,
            "wins": 14
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 16,
            "conferenceL10Sequence": 13,
            "conferenceName": "Western",
            "conferenceRoadSequence": 13,
            "conferenceSequence": 14,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 8,
            "divisionL10Sequence": 6,
            "divisionName": "Pacific",
            "divisionRoadSequence": 7,
            "divisionSequence": 7,
            "gameTypeId": 2,
            "gamesPlayed": 38,
            "goalDifferential": -32,
            "goalDifferentialPctg": -0.842105,
            "goalAgainst": 127,
            "goalFor": 95,
            "goalsForPctg": 2.5,
            "homeGamesPlayed": 22,
            "homeGoalDifferential": -19,
            "homeGoalsAgainst": 71,
            "homeGoalsFor": 52,
            "homeLosses": 15,
            "homeOtLosses": 1,
            "homePoints": 13,
            "homeRegulationPlusOtWins": 5,
            "homeRegulationWins": 4,
            "homeTies": 0,
            "homeWins": 6,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -10,
            "l10GoalsAgainst": 31,
            "l10GoalsFor": 21,
            "l10Losses": 6,
            "l10OtLosses": 1,
            "l10Points": 7,
            "l10RegulationPlusOtWins": 3,
            "l10RegulationWins": 3,
            "l10Ties": 0,
            "l10Wins": 3,
            "leagueHomeSequence": 32,
            "leagueL10Sequence": 28,
            "leagueRoadSequence": 28,
            "leagueSequence": 30,
            "losses": 24,
            "otLosses": 1,
            "placeName": {
                "default": "Anaheim"
            },
            "pointPctg": 0.355263,
            "points": 27,
            "regulationPlusOtWinPctg": 0.315789,
            "regulationPlusOtWins": 12,
            "regulationWinPctg": 0.236842,
            "regulationWins": 9,
            "roadGamesPlayed": 16,
            "roadGoalDifferential": -13,
            "roadGoalsAgainst": 56,
            "roadGoalsFor": 43,
            "roadLosses": 9,
            "roadOtLosses": 0,
            "roadPoints": 14,
            "roadRegulationPlusOtWins": 7,
            "roadRegulationWins": 5,
            "roadTies": 0,
            "roadWins": 7,
            "seasonId": 20232024,
            "shootoutLosses": 0,
            "shootoutWins": 1,
            "streakCode": "L",
            "streakCount": 1,
            "teamName": {
                "default": "Anaheim Ducks",
                "fr": "Ducks d'Anaheim"
            },
            "teamCommonName": {
                "default": "Ducks"
            },
            "teamAbbrev": {
                "default": "ANA"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/ANA_light.svg",
            "ties": 0,
            "waiversSequence": 3,
            "wildcardSequence": 8,
            "winPctg": 0.342105,
            "wins": 13
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 14,
            "conferenceL10Sequence": 15,
            "conferenceName": "Western",
            "conferenceRoadSequence": 15,
            "conferenceSequence": 15,
            "date": "2024-01-06",
            "divisionAbbrev": "C",
            "divisionHomeSequence": 8,
            "divisionL10Sequence": 8,
            "divisionName": "Central",
            "divisionRoadSequence": 8,
            "divisionSequence": 8,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": -58,
            "goalDifferentialPctg": -1.487179,
            "goalAgainst": 148,
            "goalFor": 90,
            "goalsForPctg": 2.307692,
            "homeGamesPlayed": 17,
            "homeGoalDifferential": -9,
            "homeGoalsAgainst": 52,
            "homeGoalsFor": 43,
            "homeLosses": 9,
            "homeOtLosses": 1,
            "homePoints": 15,
            "homeRegulationPlusOtWins": 7,
            "homeRegulationWins": 5,
            "homeTies": 0,
            "homeWins": 7,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -20,
            "l10GoalsAgainst": 43,
            "l10GoalsFor": 23,
            "l10Losses": 7,
            "l10OtLosses": 1,
            "l10Points": 5,
            "l10RegulationPlusOtWins": 2,
            "l10RegulationWins": 1,
            "l10Ties": 0,
            "l10Wins": 2,
            "leagueHomeSequence": 30,
            "leagueL10Sequence": 31,
            "leagueRoadSequence": 30,
            "leagueSequence": 31,
            "losses": 26,
            "otLosses": 2,
            "placeName": {
                "default": "Chicago"
            },
            "pointPctg": 0.307692,
            "points": 24,
            "regulationPlusOtWinPctg": 0.282051,
            "regulationPlusOtWins": 11,
            "regulationWinPctg": 0.205128,
            "regulationWins": 8,
            "roadGamesPlayed": 22,
            "roadGoalDifferential": -49,
            "roadGoalsAgainst": 96,
            "roadGoalsFor": 47,
            "roadLosses": 17,
            "roadOtLosses": 1,
            "roadPoints": 9,
            "roadRegulationPlusOtWins": 4,
            "roadRegulationWins": 3,
            "roadTies": 0,
            "roadWins": 4,
            "seasonId": 20232024,
            "shootoutLosses": 1,
            "shootoutWins": 0,
            "streakCode": "L",
            "streakCount": 4,
            "teamName": {
                "default": "Chicago Blackhawks",
                "fr": "Blackhawks de Chicago"
            },
            "teamCommonName": {
                "default": "Blackhawks"
            },
            "teamAbbrev": {
                "default": "CHI"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/CHI_light.svg",
            "ties": 0,
            "waiversSequence": 2,
            "wildcardSequence": 9,
            "winPctg": 0.282051,
            "wins": 11
        },
        {
            "conferenceAbbrev": "W",
            "conferenceHomeSequence": 15,
            "conferenceL10Sequence": 16,
            "conferenceName": "Western",
            "conferenceRoadSequence": 16,
            "conferenceSequence": 16,
            "date": "2024-01-06",
            "divisionAbbrev": "P",
            "divisionHomeSequence": 7,
            "divisionL10Sequence": 8,
            "divisionName": "Pacific",
            "divisionRoadSequence": 8,
            "divisionSequence": 8,
            "gameTypeId": 2,
            "gamesPlayed": 39,
            "goalDifferential": -81,
            "goalDifferentialPctg": -2.076923,
            "goalAgainst": 160,
            "goalFor": 79,
            "goalsForPctg": 2.025641,
            "homeGamesPlayed": 19,
            "homeGoalDifferential": -34,
            "homeGoalsAgainst": 73,
            "homeGoalsFor": 39,
            "homeLosses": 11,
            "homeOtLosses": 2,
            "homePoints": 14,
            "homeRegulationPlusOtWins": 6,
            "homeRegulationWins": 6,
            "homeTies": 0,
            "homeWins": 6,
            "l10GamesPlayed": 10,
            "l10GoalDifferential": -28,
            "l10GoalsAgainst": 43,
            "l10GoalsFor": 15,
            "l10Losses": 10,
            "l10OtLosses": 0,
            "l10Points": 0,
            "l10RegulationPlusOtWins": 0,
            "l10RegulationWins": 0,
            "l10Ties": 0,
            "l10Wins": 0,
            "leagueHomeSequence": 31,
            "leagueL10Sequence": 32,
            "leagueRoadSequence": 32,
            "leagueSequence": 32,
            "losses": 27,
            "otLosses": 3,
            "placeName": {
                "default": "San Jose"
            },
            "pointPctg": 0.269231,
            "points": 21,
            "regulationPlusOtWinPctg": 0.230769,
            "regulationPlusOtWins": 9,
            "regulationWinPctg": 0.179487,
            "regulationWins": 7,
            "roadGamesPlayed": 20,
            "roadGoalDifferential": -47,
            "roadGoalsAgainst": 87,
            "roadGoalsFor": 40,
            "roadLosses": 16,
            "roadOtLosses": 1,
            "roadPoints": 7,
            "roadRegulationPlusOtWins": 3,
            "roadRegulationWins": 1,
            "roadTies": 0,
            "roadWins": 3,
            "seasonId": 20232024,
            "shootoutLosses": 3,
            "shootoutWins": 0,
            "streakCode": "L",
            "streakCount": 10,
            "teamName": {
                "default": "San Jose Sharks",
                "fr": "Sharks de San Jose"
            },
            "teamCommonName": {
                "default": "Sharks"
            },
            "teamAbbrev": {
                "default": "SJS"
            },
            "teamLogo": "https://assets.nhle.com/logos/nhl/svg/SJS_light.svg",
            "ties": 0,
            "waiversSequence": 1,
            "wildcardSequence": 10,
            "winPctg": 0.230769,
            "wins": 9
        }
    ]
}


Ok, this is cool! We can see all of the data is in the standings item. But it’s difficult to scroll through the whole data structure.

Let’s see if we can figure out how many wins the Philadelphia Flyers have this year. We’ll go step by step, but you could write most of this code as a single line.

standings = parse_json['standings'] # get the standings 
flyers = next(item for item in standings if item['teamName']['default'] == 'Philadelphia Flyers') # find the list item with teamName 'Philadelphia Flyers'
flyers_wins = flyers['wins'] # find the wins item in the Flyers dictionary
print("The Philadelphia Flyers have", flyers_wins, "wins") 
The Philadelphia Flyers have 20 wins


Nice! So that’s the basics of how to navigate these data structures in Python. Let’s try something more involved.

Let’s pull the current roster for the Philadelphia Flyers

roster = requests.get('https://api-web.nhle.com/v1/roster/PHI/current') # pull current roster
roster_data = roster.text # get just the data
roster_dict = json.loads(roster_data) # parse the JSON data into a Python dictionary
print(json.dumps(roster_dict, indent=4)) # print the new dictionary object
{
    "forwards": [
        {
            "id": 8474715,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8474715.png",
            "firstName": {
                "default": "Cam"
            },
            "lastName": {
                "default": "Atkinson"
            },
            "sweaterNumber": 89,
            "positionCode": "R",
            "shootsCatches": "R",
            "heightInInches": 68,
            "weightInPounds": 175,
            "heightInCentimeters": 173,
            "weightInKilograms": 79,
            "birthDate": "1989-06-05",
            "birthCity": {
                "default": "Riverside"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Connecticut"
            }
        },
        {
            "id": 8481553,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8481553.png",
            "firstName": {
                "default": "Bobby"
            },
            "lastName": {
                "default": "Brink"
            },
            "sweaterNumber": 10,
            "positionCode": "R",
            "shootsCatches": "R",
            "heightInInches": 68,
            "weightInPounds": 169,
            "heightInCentimeters": 173,
            "weightInKilograms": 77,
            "birthDate": "2001-07-08",
            "birthCity": {
                "default": "Minnetonka"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Minnesota"
            }
        },
        {
            "id": 8480220,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8480220.png",
            "firstName": {
                "default": "Noah"
            },
            "lastName": {
                "default": "Cates"
            },
            "sweaterNumber": 27,
            "positionCode": "L",
            "shootsCatches": "L",
            "heightInInches": 74,
            "weightInPounds": 194,
            "heightInCentimeters": 188,
            "weightInKilograms": 88,
            "birthDate": "1999-02-05",
            "birthCity": {
                "default": "Stillwater"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Minnesota"
            }
        },
        {
            "id": 8476461,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8476461.png",
            "firstName": {
                "default": "Sean"
            },
            "lastName": {
                "default": "Couturier"
            },
            "sweaterNumber": 14,
            "positionCode": "C",
            "shootsCatches": "L",
            "heightInInches": 76,
            "weightInPounds": 210,
            "heightInCentimeters": 193,
            "weightInKilograms": 95,
            "birthDate": "1992-12-07",
            "birthCity": {
                "default": "Phoenix"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Arizona"
            }
        },
        {
            "id": 8475235,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8475235.png",
            "firstName": {
                "default": "Nicolas"
            },
            "lastName": {
                "default": "Deslauriers"
            },
            "sweaterNumber": 44,
            "positionCode": "L",
            "shootsCatches": "L",
            "heightInInches": 73,
            "weightInPounds": 218,
            "heightInCentimeters": 185,
            "weightInKilograms": 99,
            "birthDate": "1991-02-22",
            "birthCity": {
                "default": "LaSalle"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Quebec",
                "fr": "Qu\u00e9bec"
            }
        },
        {
            "id": 8480797,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8480797.png",
            "firstName": {
                "default": "Joel"
            },
            "lastName": {
                "default": "Farabee"
            },
            "sweaterNumber": 86,
            "positionCode": "L",
            "shootsCatches": "L",
            "heightInInches": 72,
            "weightInPounds": 186,
            "heightInCentimeters": 183,
            "weightInKilograms": 84,
            "birthDate": "2000-02-25",
            "birthCity": {
                "default": "Syracuse"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "New York"
            }
        },
        {
            "id": 8482159,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8482159.png",
            "firstName": {
                "default": "Tyson"
            },
            "lastName": {
                "default": "Foerster"
            },
            "sweaterNumber": 71,
            "positionCode": "R",
            "shootsCatches": "R",
            "heightInInches": 74,
            "weightInPounds": 215,
            "heightInCentimeters": 188,
            "weightInKilograms": 98,
            "birthDate": "2002-01-18",
            "birthCity": {
                "default": "Alliston"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8480028,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8480028.png",
            "firstName": {
                "default": "Morgan"
            },
            "lastName": {
                "default": "Frost"
            },
            "sweaterNumber": 48,
            "positionCode": "C",
            "shootsCatches": "L",
            "heightInInches": 72,
            "weightInPounds": 193,
            "heightInCentimeters": 183,
            "weightInKilograms": 88,
            "birthDate": "1999-05-14",
            "birthCity": {
                "default": "Aurora"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8477903,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8477903.png",
            "firstName": {
                "default": "Garnet"
            },
            "lastName": {
                "default": "Hathaway"
            },
            "sweaterNumber": 19,
            "positionCode": "R",
            "shootsCatches": "R",
            "heightInInches": 74,
            "weightInPounds": 212,
            "heightInCentimeters": 188,
            "weightInKilograms": 96,
            "birthDate": "1991-11-23",
            "birthCity": {
                "default": "Naples"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Florida",
                "fr": "Floride"
            }
        },
        {
            "id": 8478439,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8478439.png",
            "firstName": {
                "default": "Travis"
            },
            "lastName": {
                "default": "Konecny"
            },
            "sweaterNumber": 11,
            "positionCode": "R",
            "shootsCatches": "R",
            "heightInInches": 70,
            "weightInPounds": 192,
            "heightInCentimeters": 178,
            "weightInKilograms": 87,
            "birthDate": "1997-03-11",
            "birthCity": {
                "default": "London",
                "sk": "Lond\u00fdn"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8476872,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8476872.png",
            "firstName": {
                "default": "Scott"
            },
            "lastName": {
                "default": "Laughton"
            },
            "sweaterNumber": 21,
            "positionCode": "C",
            "shootsCatches": "L",
            "heightInInches": 73,
            "weightInPounds": 191,
            "heightInCentimeters": 185,
            "weightInKilograms": 87,
            "birthDate": "1994-05-30",
            "birthCity": {
                "default": "Oakville"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8480068,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8480068.png",
            "firstName": {
                "default": "Ryan"
            },
            "lastName": {
                "default": "Poehling"
            },
            "sweaterNumber": 25,
            "positionCode": "C",
            "shootsCatches": "L",
            "heightInInches": 74,
            "weightInPounds": 204,
            "heightInCentimeters": 188,
            "weightInKilograms": 93,
            "birthDate": "1999-01-03",
            "birthCity": {
                "default": "Lakeville"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Minnesota"
            }
        },
        {
            "id": 8480015,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8480015.png",
            "firstName": {
                "default": "Owen"
            },
            "lastName": {
                "default": "Tippett"
            },
            "sweaterNumber": 74,
            "positionCode": "R",
            "shootsCatches": "R",
            "heightInInches": 73,
            "weightInPounds": 210,
            "heightInCentimeters": 185,
            "weightInKilograms": 95,
            "birthDate": "1999-02-16",
            "birthCity": {
                "default": "Peterborough"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        }
    ],
    "defensemen": [
        {
            "id": 8475176,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8475176.png",
            "firstName": {
                "default": "Ryan"
            },
            "lastName": {
                "default": "Ellis"
            },
            "sweaterNumber": 94,
            "positionCode": "D",
            "shootsCatches": "R",
            "heightInInches": 70,
            "weightInPounds": 180,
            "heightInCentimeters": 178,
            "weightInKilograms": 82,
            "birthDate": "1991-01-03",
            "birthCity": {
                "default": "Hamilton"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8477499,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8477499.png",
            "firstName": {
                "default": "Rasmus"
            },
            "lastName": {
                "default": "Ristolainen"
            },
            "sweaterNumber": 55,
            "positionCode": "D",
            "shootsCatches": "R",
            "heightInInches": 76,
            "weightInPounds": 208,
            "heightInCentimeters": 193,
            "weightInKilograms": 94,
            "birthDate": "1994-10-27",
            "birthCity": {
                "default": "Turku",
                "sv": "\u00c5bo"
            },
            "birthCountry": "FIN"
        },
        {
            "id": 8477948,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8477948.png",
            "firstName": {
                "default": "Travis"
            },
            "lastName": {
                "default": "Sanheim"
            },
            "sweaterNumber": 6,
            "positionCode": "D",
            "shootsCatches": "L",
            "heightInInches": 76,
            "weightInPounds": 222,
            "heightInCentimeters": 193,
            "weightInKilograms": 101,
            "birthDate": "1996-03-29",
            "birthCity": {
                "default": "Elkhorn"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Manitoba"
            }
        },
        {
            "id": 8476372,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8476372.png",
            "firstName": {
                "default": "Nick"
            },
            "lastName": {
                "default": "Seeler"
            },
            "sweaterNumber": 24,
            "positionCode": "D",
            "shootsCatches": "L",
            "heightInInches": 75,
            "weightInPounds": 197,
            "heightInCentimeters": 191,
            "weightInKilograms": 89,
            "birthDate": "1993-06-03",
            "birthCity": {
                "default": "Eden Prairie"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "Minnesota"
            }
        },
        {
            "id": 8471686,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8471686.png",
            "firstName": {
                "default": "Marc"
            },
            "lastName": {
                "default": "Staal"
            },
            "sweaterNumber": 18,
            "positionCode": "D",
            "shootsCatches": "L",
            "heightInInches": 76,
            "weightInPounds": 208,
            "heightInCentimeters": 193,
            "weightInKilograms": 94,
            "birthDate": "1987-01-13",
            "birthCity": {
                "default": "Thunder Bay"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8480336,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8480336.png",
            "firstName": {
                "default": "Sean"
            },
            "lastName": {
                "default": "Walker"
            },
            "sweaterNumber": 26,
            "positionCode": "D",
            "shootsCatches": "R",
            "heightInInches": 71,
            "weightInPounds": 191,
            "heightInCentimeters": 180,
            "weightInKilograms": 87,
            "birthDate": "1994-11-13",
            "birthCity": {
                "default": "Keswick"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Ontario"
            }
        },
        {
            "id": 8481546,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8481546.png",
            "firstName": {
                "default": "Cam"
            },
            "lastName": {
                "default": "York"
            },
            "sweaterNumber": 8,
            "positionCode": "D",
            "shootsCatches": "L",
            "heightInInches": 72,
            "weightInPounds": 194,
            "heightInCentimeters": 183,
            "weightInKilograms": 88,
            "birthDate": "2001-01-05",
            "birthCity": {
                "default": "Anaheim"
            },
            "birthCountry": "USA",
            "birthStateProvince": {
                "default": "California",
                "fr": "Californie",
                "sk": "Kalifornia",
                "sv": "Kalifornien"
            }
        },
        {
            "id": 8481178,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8481178.png",
            "firstName": {
                "default": "Egor",
                "cs": "Jegor",
                "de": "Yegor",
                "es": "Yegor",
                "fi": "Yegor",
                "sk": "Jegor",
                "sv": "Yegor"
            },
            "lastName": {
                "default": "Zamula"
            },
            "sweaterNumber": 5,
            "positionCode": "D",
            "shootsCatches": "L",
            "heightInInches": 75,
            "weightInPounds": 200,
            "heightInCentimeters": 191,
            "weightInKilograms": 91,
            "birthDate": "2000-03-30",
            "birthCity": {
                "default": "Chelyabinsk",
                "cs": "\u010celjabinsk",
                "fi": "T\u0161eljabinsk",
                "sk": "\u010celjabinsk"
            },
            "birthCountry": "RUS"
        }
    ],
    "goalies": [
        {
            "id": 8481035,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8481035.png",
            "firstName": {
                "default": "Samuel"
            },
            "lastName": {
                "default": "Ersson"
            },
            "sweaterNumber": 33,
            "positionCode": "G",
            "shootsCatches": "L",
            "heightInInches": 75,
            "weightInPounds": 194,
            "heightInCentimeters": 191,
            "weightInKilograms": 88,
            "birthDate": "1999-10-20",
            "birthCity": {
                "default": "Falun"
            },
            "birthCountry": "SWE"
        },
        {
            "id": 8479394,
            "headshot": "https://assets.nhle.com/mugs/nhl/20232024/PHI/8479394.png",
            "firstName": {
                "default": "Carter"
            },
            "lastName": {
                "default": "Hart"
            },
            "sweaterNumber": 79,
            "positionCode": "G",
            "shootsCatches": "L",
            "heightInInches": 74,
            "weightInPounds": 196,
            "heightInCentimeters": 188,
            "weightInKilograms": 89,
            "birthDate": "1998-08-13",
            "birthCity": {
                "default": "Sherwood Park"
            },
            "birthCountry": "CAN",
            "birthStateProvince": {
                "default": "Alberta"
            }
        }
    ]
}


Pretty messy. How about we just identify the keys in the dictionary?

roster_dict.keys()
dict_keys(['forwards', 'defensemen', 'goalies'])


Nice, so now let’s access the forwards element, then try to spit out the first player name.

lastName = roster_dict['forwards'][0]['lastName']['default'] # access the 1st (0th) element of the forwards list, then get their last name
firstName = roster_dict['forwards'][0]['firstName']['default'] # access the 1st (0th) element of the forwards list, then get their first name
print("Let's meet our first Flyers forward: ", firstName, " ", lastName, "!", sep='') # sep='' prints the output without spaces between the elements 
Let's meet our first Flyers forward: Cam Atkinson!


Now let’s try printing a list of all Flyers players on the current roster.

print("Introducing the full Flyers lineup!")
print("")
print("FORWARDS:")
for x in roster_dict['forwards']: # loop through all items in the roster_dict forwards list
  print(x['firstName']['default'], x['lastName']['default'])
print("")
print("DEFENSEMEN:")
for x in roster_dict['defensemen']: # loop through all items in the roster_dict defensemen list
  print(x['firstName']['default'], x['lastName']['default'])
print("")
print("GOALIES:")
for x in roster_dict['goalies']: # loop through all items in the roster_dict goalies list
  print(x['firstName']['default'], x['lastName']['default'])
Introducing the full Flyers lineup!

FORWARDS:
Cam Atkinson
Bobby Brink
Noah Cates
Sean Couturier
Nicolas Deslauriers
Joel Farabee
Tyson Foerster
Morgan Frost
Garnet Hathaway
Travis Konecny
Scott Laughton
Ryan Poehling
Owen Tippett

DEFENSEMEN:
Ryan Ellis
Rasmus Ristolainen
Travis Sanheim
Nick Seeler
Marc Staal
Sean Walker
Cam York
Egor Zamula

GOALIES:
Samuel Ersson
Carter Hart


After a bit of digging here, it looks like we can access historic team rosters in a similar manner.

roster = requests.get('https://api-web.nhle.com/v1/roster/PHI/19931994') # pull roster for 1993-1994 season
roster_data = roster.text # get just the data
roster_dict = json.loads(roster_data) # parse the JSON data into a Python dictionary

print("Introducing the 1993-1994 Flyers lineup!")
print("")
print("FORWARDS:")
for x in roster_dict['forwards']: # loop through all items in the roster_dict forwards list
  print(x['firstName']['default'], x['lastName']['default'])
print("")
print("DEFENSEMEN:")
for x in roster_dict['defensemen']: # loop through all items in the roster_dict defensemen list
  print(x['firstName']['default'], x['lastName']['default'])
print("")
print("GOALIES:")
for x in roster_dict['goalies']: # loop through all items in the roster_dict goalies list
  print(x['firstName']['default'], x['lastName']['default'])
Introducing the 1993-1994 Flyers lineup!

FORWARDS:
Josef Beranek
Claude Boivin
Rod Brind'Amour
Dave Brown
Viacheslav Butsayev
John Conroy
Jim Cummins
Rob DiMaio
Kevin Dineen
Pelle Eklund
Andre Faust
Brent Fedyk
Todd Hlushko
Dan Kordic
Mark Lamb
Eric Lindros
Mark Recchi
Mikael Renberg
Dave Tippett
Claude Vilgrain
Chris Winnes

DEFENSEMEN:
Jason Bowen
Aris Brimanis
Jeff Finley
Garry Galley
Greg Hawgood
Milos Holan
Stewart Malgunas
Ryan Mcgill
Yves Racine
Rob Ramage
Bob Wilkie
Dmitry Yushkevich
Rob Zettler

GOALIES:
Frederic Chabot
Dominic Roussel
Tommy Soderstrom


Now for the real question. How much turnover does the Flyers roster have from year to year? When did we see peak turnover?

For this, we’ll need to loop through all of the Flyers seasons, pull the rosters, and compare with the previous year’s roster.

Let’s start by just looping through rosters year-by-year. The Flyers first season was in 1967-1968.

The NHL API uses the format YEARYEAR to name its seasons. E.g. the season starting in 1967 is 19671968.

Also, let’s start in 1968, since there was no roster continuity for the 1967 season.

Lastly, we’ll need to skip the 2004-2005 season, as it was canceled due to a player lockout. Let’s just pretend there were not roster changes that season.

for i in range(1968, 2024): 
  j = i + 1 # get next year
  k = i - 1 # get previous year
  season = str(i) + str(j)
  prev_season = str(k) + str(i)

  if i == 2004:
    roster_dict = prev_roster_dict

  else: 
    roster = requests.get('https://api-web.nhle.com/v1/roster/PHI/' + season) # pull roster
    roster_data = roster.text # get just the data
    roster_dict = json.loads(roster_data) # parse the JSON data into a Python dictionary

  if season == 1968: # use a conditional to skip this pull request for future years
    prev_roster = requests.get('https://api-web.nhle.com/v1/roster/PHI/' + season) # pull previous season roster
    prev_roster_data = prev_roster.text # get just the data
    prev_roster_dict = json.loads(prev_roster_data) # parse the JSON data into a Python dictionary

  lastName = roster_dict['forwards'][0]['lastName']['default'] # access the 1st (0th) element of the forwards list, then get their last name
  firstName = roster_dict['forwards'][0]['firstName']['default'] # access the 1st (0th) element of the forwards list, then get their first name

  print(i, "-", j, " season: ", firstName, " ", lastName, sep='')

  prev_roster = roster
1968-1969 season: Serge Bernier ID = 8445446
1969-1970 season: Serge Bernier ID = 8445446
1970-1971 season: Serge Bernier ID = 8445446
1971-1972 season: Serge Bernier ID = 8445446
1972-1973 season: Bill Barber ID = 8445252
1973-1974 season: Bill Barber ID = 8445252
1974-1975 season: Bill Barber ID = 8445252
1975-1976 season: Bill Barber ID = 8445252
1976-1977 season: Bill Barber ID = 8445252
1977-1978 season: Bill Barber ID = 8445252
1978-1979 season: Bill Barber ID = 8445252
1979-1980 season: Bill Barber ID = 8445252
1980-1981 season: Greg Adams ID = 8444898
1981-1982 season: Greg Adams ID = 8444898
1982-1983 season: Ray Allison ID = 8444913
1983-1984 season: Ray Allison ID = 8444913
1984-1985 season: Ray Allison ID = 8444913
1985-1986 season: Bo Berglund ID = 8445434
1986-1987 season: Ray Allison ID = 8444913
1987-1988 season: Craig Berube ID = 8445440
1988-1989 season: Keith Acton ID = 8444897
1989-1990 season: Keith Acton ID = 8444897
1990-1991 season: Keith Acton ID = 8444897
1991-1992 season: Keith Acton ID = 8444897
1992-1993 season: Keith Acton ID = 8444897
1993-1994 season: Josef Beranek ID = 8455575
1994-1995 season: Shawn Antoski ID = 8445017
1995-1996 season: Shawn Antoski ID = 8445017
1996-1997 season: Rod Brind'Amour ID = 8445735
1997-1998 season: Rod Brind'Amour ID = 8445735
1998-1999 season: Mikael Andersson ID = 8444963
1999-2000 season: Mikael Andersson ID = 8444963
2000-2001 season: Tomas Divisek ID = 8467500
2001-2002 season: Jesse Boulerice ID = 8465067
2002-2003 season: Tony Amonte ID = 8455429
2003-2004 season: Tony Amonte ID = 8455429
2004-2005 season: Tony Amonte ID = 8455429
2005-2006 season: Donald Brashear ID = 8459246
2006-2007 season: Dimitri Afanasenkov ID = 8467397
2007-2008 season: Jesse Boulerice ID = 8465067
2008-2009 season: Arron Asham ID = 8465025
2009-2010 season: Arron Asham ID = 8465025
2010-2011 season: Blair Betts ID = 8467361
2011-2012 season: Daniel Brière ID = 8464975
2012-2013 season: Jason Akeson ID = 8475917
2013-2014 season: Jason Akeson ID = 8475917
2014-2015 season: Jason Akeson ID = 8475917
2015-2016 season: Pierre-Edouard Bellemare ID = 8477930
2016-2017 season: Pierre-Edouard Bellemare ID = 8477930
2017-2018 season: Sean Couturier ID = 8476461
2018-2019 season: Nicolas Aube-Kubel ID = 8477979
2019-2020 season: Andy Andreoff ID = 8476404
2020-2021 season: Wade Allison ID = 8479322
2021-2022 season: Wade Allison ID = 8479322
2022-2023 season: Wade Allison ID = 8479322
2023-2024 season: Cam Atkinson ID = 8474715


Looking good. However, it will be annoying to compare first and last names every season. Also, what if two players have the same name?

Fortunately, the NHL API assigns each player a unique id attribute, so we can use those instead of names.

perc_returning_dict = {} # dict to save percent of returning roster year by year

for i in range(1968, 2024): 
  j = i + 1 # get next year
  k = i - 1 # get previous year
  season = str(i) + str(j)
  prev_season = str(k) + str(i)

  if i == 2004:
    roster_dict = prev_roster_dict

  else: 
    roster = requests.get('https://api-web.nhle.com/v1/roster/PHI/' + season) # pull roster
    roster_data = roster.text # get just the data
    roster_dict = json.loads(roster_data) # parse the JSON data into a Python dictionary

  if season == 1968: # use a conditional to skip this pull request for future years
    prev_roster = requests.get('https://api-web.nhle.com/v1/roster/PHI/' + season) # pull previous season roster
    prev_roster_data = prev_roster.text # get just the data
    prev_roster_dict = json.loads(prev_roster_data) # parse the JSON data into a Python dictionary
  
  prev_roster_ids = [] # create list to contain previous year roster player IDs
  for x in prev_roster_dict: # loop through the dictionary
      for y in prev_roster_dict[x]: # loop through each player
        prev_roster_ids.append(y['id']) # and extract ID

  count = 0 # keep track of how many players are on the roster
  returning = 0 # keep track of how many players returned from the previous season
  for x in roster_dict:
    for y in roster_dict[x]: # loop through each player
      #print(y['id'])
      if y['id'] in prev_roster_ids:
        returning = returning + 1
      count = count + 1 

  perc_returning = round(returning / count * 100, 1)
  print(perc_returning, "% of players returned for the ", i, "-", j, " season", sep="")

  perc_returning_dict[i] = perc_returning # append each year's values to the dictionary

  prev_roster_dict = roster_dict # do this to avoid extra data pull requests
70.0% of players returned for the 1968-1969 season
69.2% of players returned for the 1969-1970 season
63.3% of players returned for the 1970-1971 season
53.8% of players returned for the 1971-1972 season
75.0% of players returned for the 1972-1973 season
83.3% of players returned for the 1973-1974 season
70.4% of players returned for the 1974-1975 season
78.6% of players returned for the 1975-1976 season
68.8% of players returned for the 1976-1977 season
75.9% of players returned for the 1977-1978 season
64.7% of players returned for the 1978-1979 season
65.5% of players returned for the 1979-1980 season
71.0% of players returned for the 1980-1981 season
62.9% of players returned for the 1981-1982 season
64.7% of players returned for the 1982-1983 season
74.2% of players returned for the 1983-1984 season
65.6% of players returned for the 1984-1985 season
73.5% of players returned for the 1985-1986 season
62.5% of players returned for the 1986-1987 season
73.2% of players returned for the 1987-1988 season
69.4% of players returned for the 1988-1989 season
68.3% of players returned for the 1989-1990 season
74.3% of players returned for the 1990-1991 season
47.6% of players returned for the 1991-1992 season
44.1% of players returned for the 1992-1993 season
51.4% of players returned for the 1993-1994 season
51.5% of players returned for the 1994-1995 season
60.5% of players returned for the 1995-1996 season
66.7% of players returned for the 1996-1997 season
71.9% of players returned for the 1997-1998 season
42.2% of players returned for the 1998-1999 season
66.7% of players returned for the 1999-2000 season
52.8% of players returned for the 2000-2001 season
51.4% of players returned for the 2001-2002 season
48.8% of players returned for the 2002-2003 season
58.5% of players returned for the 2003-2004 season
100.0% of players returned for the 2004-2005 season
42.5% of players returned for the 2005-2006 season
46.9% of players returned for the 2006-2007 season
55.6% of players returned for the 2007-2008 season
51.4% of players returned for the 2008-2009 season
54.5% of players returned for the 2009-2010 season
61.3% of players returned for the 2010-2011 season
51.5% of players returned for the 2011-2012 season
56.4% of players returned for the 2012-2013 season
66.7% of players returned for the 2013-2014 season
54.5% of players returned for the 2014-2015 season
75.9% of players returned for the 2015-2016 season
69.7% of players returned for the 2016-2017 season
62.5% of players returned for the 2017-2018 season
60.5% of players returned for the 2018-2019 season
58.8% of players returned for the 2019-2020 season
75.0% of players returned for the 2020-2021 season
47.6% of players returned for the 2021-2022 season
71.4% of players returned for the 2022-2023 season
65.2% of players returned for the 2023-2024 season


So now that we have a dictionary with our data values, let’s make some figures! We’ll use the plotly Python library. We’ll also need the pandas library to format our data as a DataFrame object.

import plotly.express as px
import pandas as pd

df = pd.DataFrame(perc_returning_dict.items(), columns=['Year', '% Roster Returning']) # convert dictionary to two column data frame

fig = px.bar(df, x='Year', y='% Roster Returning', title = "Philadelphia Flyers Roster Continuity")

fig.update_layout(
    margin=dict(l=20, r=20, b=20))

fig.show()


Pretty bare bones. Let’s make it prettier. Let’s also drop the 2004-2005 season, since it was a lockout year.

import plotly.express as px
import pandas as pd

perc_returning_dict[2004] = None

df = pd.DataFrame(perc_returning_dict.items(), columns=['Year', '% Roster Returning']) # convert dictionary to two column data frame

fig = px.bar(df, x='Year', y='% Roster Returning', title = "Philadelphia Flyers Roster Continuity", template="plotly_dark") # use a dark template for contrast
fig.update_traces(marker_color = "#F74902") # make the bars "Flyers orange"

fig.update_layout(
    margin=dict(l=20, r=20, b=20))

fig.show()


How well does roster continuity correlated with team performance? Do years with higher continuity also have more wins?

The NHL API does not have an easy way to pull team win-loss records for each season. To get win percentage per season, let’s pull league standings on the season end date from every year. Note that have to look at only regulation wins, since the NHL used to allow ties.

s = requests.get('https://api-web.nhle.com/v1/standings-season')
s_data = s.text # get just the data
s_dict = json.loads(s_data) # parse the JSON data into a Python dictionary
s_seasons = s_dict['seasons']

flyers_win_perc = {} # dict to contain win percentage for each year

for i in range(1968, 2024): 
  j = i + 1 # get next year
  year = int(str(i) + str(j))
  if i != 2004: # skip the lockout year
    season = next(item for item in s_seasons if item['id'] == year) # find the flyers in this seasons standings
    season_end = season['standingsEnd']
    stand = requests.get('https://api-web.nhle.com/v1/standings/' + season_end) # pull data from the end of the season
    stand_dict = json.loads(stand.text) # convert to dict
    flyers = next(item for item in stand_dict['standings'] if item['teamName']['default'] == 'Philadelphia Flyers') # find the list item with teamName 'Philadelphia Flyers'
    flyers_winP = flyers['regulationWinPctg'] # find the regulation win percentage item in the Flyers dictionary
    #print(json.dumps(flyers, indent=4)) # print the new dictionary object
    print(i, "-", j, " season win %: ", round(flyers_winP * 100, 1), sep="")
    flyers_win_perc[i] = round(flyers_winP * 100, 1)
  else:
    flyers_win_perc[i] = None
1968-1969 season win %: 26.3
1969-1970 season win %: 22.4
1970-1971 season win %: 35.9
1971-1972 season win %: 33.3
1972-1973 season win %: 47.4
1973-1974 season win %: 64.1
1974-1975 season win %: 63.7
1975-1976 season win %: 63.7
1976-1977 season win %: 60.0
1977-1978 season win %: 56.2
1978-1979 season win %: 50.0
1979-1980 season win %: 60.0
1980-1981 season win %: 51.2
1981-1982 season win %: 47.5
1982-1983 season win %: 61.3
1983-1984 season win %: 51.2
1984-1985 season win %: 65.0
1985-1986 season win %: 61.3
1986-1987 season win %: 56.2
1987-1988 season win %: 46.2
1988-1989 season win %: 43.8
1989-1990 season win %: 35.0
1990-1991 season win %: 40.0
1991-1992 season win %: 37.5
1992-1993 season win %: 38.1
1993-1994 season win %: 38.1
1994-1995 season win %: 52.1
1995-1996 season win %: 50.0
1996-1997 season win %: 51.2
1997-1998 season win %: 47.6
1998-1999 season win %: 42.7
1999-2000 season win %: 47.6
2000-2001 season win %: 46.3
2001-2002 season win %: 47.6
2002-2003 season win %: 47.6
2003-2004 season win %: 46.3
2005-2006 season win %: 41.5
2006-2007 season win %: 22.0
2007-2008 season win %: 43.9
2008-2009 season win %: 41.5
2009-2010 season win %: 42.7
2010-2011 season win %: 50.0
2011-2012 season win %: 45.1
2012-2013 season win %: 41.7
2013-2014 season win %: 42.7
2014-2015 season win %: 30.5
2015-2016 season win %: 34.1
2016-2017 season win %: 30.5
2017-2018 season win %: 37.8
2018-2019 season win %: 34.1
2019-2020 season win %: 44.9
2020-2021 season win %: 30.4
2021-2022 season win %: 24.4
2022-2023 season win %: 31.7
2023-2024 season win %: 35.9


Now let’s plot regulation win percentage by season.

import plotly.express as px
import pandas as pd

df = pd.DataFrame(flyers_win_perc.items(), columns=['Year', 'Regulation Win %']) # convert dictionary to two column data frame

fig = px.bar(df, x='Year', y='Regulation Win %', title = "Philadelphia Flyers Season Performance", template="plotly_dark") # use a dark template for contrast
fig.update_traces(marker_color = "white") # make the bars "Flyers orange"

# reduce margin size (for better viewing on mobile)
fig.update_layout(
    margin=dict(l=20, r=20, b=20))

fig.show()


What about regulation win percentage vs roster retention?

import plotly.express as px
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

perc_returning_dict[2004] = None

df_1 = pd.DataFrame(flyers_win_perc.items(), columns=['Year', 'Regulation Win %']) # convert dictionary to two column data frame

df_2 = pd.DataFrame(perc_returning_dict.items(), columns=['Year', '% Roster Returning']) # convert dictionary to two column data frame

df = pd.merge(df_1, df_2, on="Year")

fig = make_subplots(specs=[[{"secondary_y": True}]])

# Add traces
fig.add_trace(go.Scatter(x=df["Year"], y=df['Regulation Win %'], name="Regulation Win %", marker = dict(color = 'white')), secondary_y=False)

fig.add_trace(go.Scatter(x=df['Year'], y=df['% Roster Returning'], name="% Roster Returning", marker = dict(color="#F74902")), secondary_y=True)

# Add figure title
fig.update_layout(title_text="Philadelphia Flyers Roster Continuity vs Wins")

# Set x-axis title
fig.update_xaxes(title_text="Year")

# Set y-axes titles
fig.update_yaxes(title_text="Regulation Win %", secondary_y=False)
fig.update_yaxes(title_text="% Roster Returning", secondary_y=True)

# theme, hide grid lines, put legend on top
# also reduce margin size (for better viewing on mobile)
# automargin increases the margin size to prevent ticklabels from being cut off or overlapping with axis titles
fig.update_layout(template = "plotly_dark", 
                  yaxis2=dict(showgrid=False), 
                  yaxis=dict(showgrid=False), 
                  margin=dict(l=20, r=20,b=20),
                  legend=dict(orientation="h", 
                    yanchor="bottom", 
                    y=1.02, 
                    xanchor="right", 
                    x=1))

fig.show()


Neat! We can see the Flyer’s “Broad Street Bullies” period in the 70s and early 80s where they had a dominant win percentage, thanks in no small part to their consistent roster.

We can also see a few cases where there’s a lag between winning and roster retention. The Flyers winning percentage drops for 5 straight seasons from 1984-1989 and bottoms out around 40% until 1994. But roster retention stays high until 1990, when the Flyers enter a period of roster turmoil. In fact, Wikipedia lists 1991-1994 as the “Rebuilding years.”

How about another performance metric, like goal differential proportion? This is a team’s goal differential (goals for - goals against) divided by the number of games played. So the larger this number, the more the team is outscoring opponents on average. Negative goal differential proportion means opposing teams outscored the Flyers, while positive values indicate the Flyers outscored other teams.

First let’s gather the data.

s = requests.get('https://api-web.nhle.com/v1/standings-season')
s_data = s.text # get just the data
s_dict = json.loads(s_data) # parse the JSON data into a Python dictionary
s_seasons = s_dict['seasons']

flyers_goalP_dict = {} # dict to contain win percentage for each year

for i in range(1968, 2024): 
  j = i + 1 # get next year
  year = int(str(i) + str(j))
  if i != 2004: # skip the lockout year
    season = next(item for item in s_seasons if item['id'] == year) # find the flyers in this seasons standings
    season_end = season['standingsEnd']
    stand = requests.get('https://api-web.nhle.com/v1/standings/' + season_end) # pull data from the end of the season
    stand_dict = json.loads(stand.text) # convert to dict
    flyers = next(item for item in stand_dict['standings'] if item['teamName']['default'] == 'Philadelphia Flyers') # find the list item with teamName 'Philadelphia Flyers'
    flyers_goalP = flyers['goalDifferentialPctg'] # find the regulation win percentage item in the Flyers dictionary
    #print(json.dumps(flyers, indent=4)) # print the new dictionary object
    print(i, "-", j, " goal differential proportion: ", flyers_goalP, sep="")
    flyers_goalP_dict[i] = flyers_goalP
  else:
    flyers_goalP_dict[i] = None
1968-1969 goal differential proportion: -0.671053
1969-1970 goal differential proportion: -0.368421
1970-1971 goal differential proportion: -0.230769
1971-1972 goal differential proportion: -0.461538
1972-1973 goal differential proportion: 0.512821
1973-1974 goal differential proportion: 1.397436
1974-1975 goal differential proportion: 1.4
1975-1976 goal differential proportion: 1.7375
1976-1977 goal differential proportion: 1.375
1977-1978 goal differential proportion: 1.2
1978-1979 goal differential proportion: 0.4125
1979-1980 goal differential proportion: 0.9125
1980-1981 goal differential proportion: 0.8
1981-1982 goal differential proportion: 0.15
1982-1983 goal differential proportion: 1.075
1983-1984 goal differential proportion: 0.75
1984-1985 goal differential proportion: 1.3375
1985-1986 goal differential proportion: 1.175
1986-1987 goal differential proportion: 0.8125
1987-1988 goal differential proportion: 0.0
1988-1989 goal differential proportion: 0.275
1989-1990 goal differential proportion: -0.0875
1990-1991 goal differential proportion: -0.1875
1991-1992 goal differential proportion: -0.2625
1992-1993 goal differential proportion: 0.0
1993-1994 goal differential proportion: -0.238095
1994-1995 goal differential proportion: 0.375
1995-1996 goal differential proportion: 0.902439
1996-1997 goal differential proportion: 0.695122
1997-1998 goal differential proportion: 0.597561
1998-1999 goal differential proportion: 0.426829
1999-2000 goal differential proportion: 0.707317
2000-2001 goal differential proportion: 0.402439
2001-2002 goal differential proportion: 0.512195
2002-2003 goal differential proportion: 0.54878
2003-2004 goal differential proportion: 0.52439
2005-2006 goal differential proportion: 0.097561
2006-2007 goal differential proportion: -1.085366
2007-2008 goal differential proportion: 0.182927
2008-2009 goal differential proportion: 0.317073
2009-2010 goal differential proportion: 0.134146
2010-2011 goal differential proportion: 0.439024
2011-2012 goal differential proportion: 0.390244
2012-2013 goal differential proportion: -0.166667
2013-2014 goal differential proportion: 0.012195
2014-2015 goal differential proportion: -0.231707
2015-2016 goal differential proportion: -0.04878
2016-2017 goal differential proportion: -0.207317
2017-2018 goal differential proportion: 0.097561
2018-2019 goal differential proportion: -0.45122
2019-2020 goal differential proportion: 0.521739
2020-2021 goal differential proportion: -0.678571
2021-2022 goal differential proportion: -1.060976
2022-2023 goal differential proportion: -0.670732
2023-2024 goal differential proportion: 0.179487


Now let’s plot goal differential and win percentage together.

# make a bar plot
import plotly.express as px
import pandas as pd
import numpy as np

df_1 = pd.DataFrame(flyers_win_perc.items(), columns=['Year', 'Regulation Win %']) # convert dictionary to two column data frame

df_2 = pd.DataFrame(perc_returning_dict.items(), columns=['Year', '% Roster Returning']) # convert dictionary to two column data frame

df_3  = pd.DataFrame(flyers_goalP_dict.items(), columns=['Year', 'Goal Differential Proportion']) # convert dictionary to two column data frame

df = pd.merge(pd.merge(df_1, df_2, on="Year"), df_3, on="Year")

df = df.dropna()

fig = px.bar(df, x='Year', y='Goal Differential Proportion', color="Regulation Win %", title = "Philadelphia Flyers Season Performance", template="plotly_dark") # use a dark template for contrast

fig.update_yaxes(title_text="Goal Differential per Game")

fig.update_layout(coloraxis=dict(colorbar=dict(orientation='h', y=-0.5, xanchor="right", x=1, yanchor="bottom")))

fig.update_layout(
    margin=dict(l=20, r=20, b=20))

fig.show()


Oof, 2006-2007 was a rough season. In fact, the Flyers finished dead last in the standings that year.

Ok, let’s try combining all of this information in one figure.

import plotly.express as px
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

perc_returning_dict[2004] = None

df_1 = pd.DataFrame(flyers_win_perc.items(), columns=['Year', 'Regulation Win %']) # convert dictionary to two column data frame

df_2 = pd.DataFrame(perc_returning_dict.items(), columns=['Year', '% Roster Returning']) # convert dictionary to two column data frame

df_3  = pd.DataFrame(flyers_goalP_dict.items(), columns=['Year', 'Goal Differential Proportion']) # convert dictionary to two column data frame

df = pd.merge(pd.merge(df_1, df_2, on="Year"), df_3, on="Year")

fig = px.scatter(df, x='Regulation Win %', y='Goal Differential Proportion', color='% Roster Returning', template="plotly_dark", color_continuous_scale="Viridis", hover_name="Year", title="Philadelphia Flyers Season Stats")

fig.update_traces(marker=dict(size=10, line=dict(width=0.5, color='white'))) # add white outline around points

fig.update_yaxes(title_text="Goal Differential per Game")

fig.update_layout(margin=dict(l=20, r=20, b=20), 
  coloraxis=dict(colorbar=dict(orientation='h', y=-0.5, xanchor="right", x=1, yanchor="bottom")))

fig.show()


This figure shows the expected strong positive relationship between winning percentage and goal differential. However, the relationship between team performance and roster continuity is less clear.

The Flyers’ best seasons all had relatively high roster continuity. But the Flyers also had relatively good seasons with high roster turnover.

For example, in 1998, the Flyers had a positive goal differential, won 43% of their games in regulation, and placed 7th overall in the league. But that season had their lowest ever roster retention, with only 42% of players returning.

Well I think that’s enough for this dataset. See you in the next post!