Source code for pbpstats.data_loader.stats_nba.base

from pbpstats import (
    G_LEAGUE_GAME_ID_PREFIX,
    G_LEAGUE_STRING,
    NBA_GAME_ID_PREFIX,
    NBA_STRING,
    PLAY_IN_STRING,
    PLAYOFFS_STRING,
    REGULAR_SEASON_STRING,
    WNBA_GAME_ID_PREFIX,
    WNBA_STRING,
)


[docs]class StatsNbaLoaderBase(object): """ Base Class for all stats.nba.com data loaders This class should not be instantiated directly """
[docs] def make_list_of_dicts(self, results_set_index=0): """ Creates list of dicts from source data :param int results_set_index: Index results are in. Default is 0 :returns: list of dicts with data for results """ headers = self.source_data["resultSets"][results_set_index]["headers"] rows = self.source_data["resultSets"][results_set_index]["rowSet"] deduped_rows = self.dedupe_events_row_set(rows) return [dict(zip(headers, row)) for row in deduped_rows]
[docs] @staticmethod def dedupe_events_row_set(events_row_set): """ Dedupes list of results while preserving order Used to dedupe events rowSets pbp response because some games have duplicate events :param list events_row_set: List of results from API Response :returns: deduped list of results """ deduped_events_row_set = [] for sublist in events_row_set: if sublist not in deduped_events_row_set: deduped_events_row_set.append(sublist) return deduped_events_row_set
@property def data(self): """ returns data from response JSON as a list of dicts """ return self.make_list_of_dicts() @property def league(self): """ Returns League for game id. First 2 in game id represent league - 00 for nba, 10 for wnba, 20 for g-league """ if self.game_id[0:2] == NBA_GAME_ID_PREFIX: return NBA_STRING elif self.game_id[0:2] == G_LEAGUE_GAME_ID_PREFIX: return G_LEAGUE_STRING elif self.game_id[0:2] == WNBA_GAME_ID_PREFIX: return WNBA_STRING @property def season(self): """ Returns season for game id 4th and 5th characters in game id represent season year ex. for 2016-17 season 4th and 5th characters would be 16 and season should return 2016-17 For WNBA just returns season year """ digit4 = int(self.game_id[3]) digit5 = int(self.game_id[4]) if digit4 == 9: if digit5 == 9: return "1999" if self.league == WNBA_STRING else "1999-00" else: return ( f"19{digit4}{digit5}" if self.league == WNBA_STRING else f"19{digit4}{digit5}-{digit4}{digit5 + 1}" ) elif digit5 == 9: return ( f"20{digit4}{digit5}" if self.league == WNBA_STRING else f"20{digit4}{digit5}-{digit4 + 1}0" ) else: return ( f"20{digit4}{digit5}" if self.league == WNBA_STRING else f"20{digit4}{digit5}-{digit4}{digit5 + 1}" ) @property def season_type(self): """ Returns season type for game id 3rd character in game id represent season type - 2 for reg season, 4 for playoffs, 5 for play in """ if self.game_id[2] == "4": return PLAYOFFS_STRING elif self.game_id[2] == "2": return REGULAR_SEASON_STRING elif self.game_id[2] == "5": return PLAY_IN_STRING @property def league_id(self): """ Returns League Id for league. 00 for nba, 10 for wnba, 20 for g-league """ if self.league_string == NBA_STRING: return NBA_GAME_ID_PREFIX elif self.league_string == WNBA_STRING: return WNBA_GAME_ID_PREFIX elif self.league_string == G_LEAGUE_STRING: return G_LEAGUE_GAME_ID_PREFIX