nhlscrapi.games package¶
Submodules¶
nhlscrapi.games.game module¶
-
class
nhlscrapi.games.game.Game(game_key=None, cum_stats={})[source]¶ Bases:
objectThis the primary interface to the collection of summary reports associated with every game. The supported reports include
PlayByPlay,TOI,Rosters, andFaceOffComparison.Reports can be either lazy loaded at time of property calls or all loaded at once by calling
load_all().Parameters: - game_key – either object
GameKeyor (season, game_type, game_num) tuple - cum_stats – dict, values are of type
AccumulateStatsto be collected in play-by-play
Example: # # example: using the Game object # from nhlscrapi.games.game import GameKey, Game from nhlscrapi.games.cumstats import Corsi gk = GameKey(2015, 2, 224) g = Game(gk, { 'Corsi': Corsi() }) # since play-by-play hasn't yet been loaded the RTSS report will # be parsed and the Corsi computed for each team print(g.cum_stats['Corsi'].share()) # load the rest of the reports g.load_all() # report back the game's linesman print(g.linesman)
-
away_coach¶ Returns: coach for the away team Return type: string
-
away_fo_summ¶ Returns: away face off summary Return type: dict keyed by player number
-
away_skaters¶ Returns: the skaters that dressed for the away team Return type: dict keyed by player number
-
away_toi¶ Returns: TOI shift summary for skaters on the away team Return type: dict keyed by player number, value ShiftSummary
-
cum_stats¶ Returns: the computed cumulative stats of AccumulateStatsfrom play-by-playReturn type: dict passed to ctor, values are type
-
event_summary= None¶ The
EventSummarysummary
-
face_off_comp= None¶ The
FaceOffComparisonsummary
-
home_coach¶ Returns: coach for the home team Return type: string
-
home_fo_summ¶ Returns: home face off summary Return type: dict keyed by player number
-
home_skaters¶ Returns: the skaters that dressed for the home team Return type: dict keyed by player number
-
home_toi¶ Returns: TOI shift summary for skaters on the home team Return type: dict keyed by player number, value ShiftSummary
-
linesman¶ Returns: the linesman for the game Return type: dict { number: 'name' }
-
load_all()[source]¶ Force all reports to be loaded and parsed instead of lazy loading on demand.
Returns: selforNoneif load fails
-
matchup¶ Return the game meta information displayed in report banners including team names, final score, game date, location, and attendance. Data format is
{ 'home': home, 'away': away, 'final': final, 'attendance': att, 'date': date, 'location': loc }
Returns: matchup banner info Return type: dict
-
play_by_play= None¶ The
PlayByPlaysummary
-
plays¶ Returns: the plays from the game Return type: list
-
refs¶ Returns: refs for the game Return type: dict { number: 'name' }
- game_key – either object
-
class
nhlscrapi.games.game.GameKey(season=2008, game_type=2, game_num=1, key_tup=None)[source]¶ Bases:
objectUnique identifier for a game. See constants for acceptable seasons and game counts. The key can be initialized by setting key_tup or the set of season, game type and game number.
Parameters: - season – the season number denoted by year season ends
- game_type – enum, (1) pre season, (2) regular season or (3) playoffs
- game_num – the index number of the game
- key_tup – tuple (season, game_type, game_num)
-
game_type¶ Code indicating pre season (1), regular season (2) or playoffs (3)
Returns: int
-
season¶ Season of the keyed game. Season year is denoted by when the season ends. See constants for acceptable range of seasons considered. Not all years have supported summary reports ... or any reports at all.
Returns: int
nhlscrapi.games.playbyplay module¶
-
class
nhlscrapi.games.playbyplay.Play(play_num=0, period=0, strength=0, time={'sec': 0, 'min': 20}, vis_on_ice={}, home_on_ice={}, event=None)[source]¶ Bases:
objectContains base level of state info about a given play.
-
event= None¶ An object that inherits from
Eventthat contains other specifics related to the given type of play
-
home_on_ice= None¶ Home skaters on the ice.
{ num: [position, name] }
-
period= None¶ Current period
-
play_num= None¶ Number of player who made the play
-
strength= None¶ Enum of type
Strengthindicating either even strength, shorthanded, or power play
-
time= None¶ Time remaining in the period
-
vis_on_ice= None¶ Visiting skaters on the ice.
{ num: [position, name] }
-
-
class
nhlscrapi.games.playbyplay.PlayByPlay(game_key, cum_stats={}, init_cs_teams=True)[source]¶ Bases:
nhlscrapi.games.repscrwrap.RepScrWrapAggregator of
Playobjects that maintains the play-by-play data for a given game. Allows for custom stats of typeAccumulateStatsto be computed for the game.Example: from nhlscrapi.games.game import GameKey from nhlscrapi.games.cumstats import ShotCt from nhlscrapi.games.playbyplay import PlayByPlay # define the game of interest and a stat accumulator pbp = PlayByPlay( game_key=GameKey(2015, 3, 224), cum_stats={ 'ShotCount': ShotCt() } ) # compute and print results shot_cts = pbp.compute_stats()['ShotCount'] print('Final Score: {}'.format(shot_cts.total))
-
compute_stats()[source]¶ Compute the stats defined in
self.cum_stats.Returns: collection of all computed AccumulateStatsReturn type: dict
-
cum_stats= None¶ Dictionary of
AccumulateStatsto be computed
-
init_cs_teams= None¶ Boolean, (default) True if the
AccumulateStatsobjects should have team names initialized.
-
-
nhlscrapi.games.playbyplay.Strength¶ Enum indicating play strength.
alias of
Enum
nhlscrapi.games.rosters module¶
-
class
nhlscrapi.games.rosters.Rosters(game_key)[source]¶ Bases:
nhlscrapi.games.repscrwrap.RepScrWrapRoster report contains all players that dressed for the game, healthy scratches, coaches and officials. The roster for either home or away is returned as
{ player_num: { 'pos': 'position', 'name': 'player name' { }Parameters: game_key – unique game identifier of type GameKey-
away_coach¶ Returns: the name of the away coach Return type: string
-
away_scratches¶ Returns: all away healthy scratches Returns: dict
-
away_skaters¶ Returns: all away skaters Return type: dict
-
home_coach¶ Returns: the name of the home coach Return type: string
-
home_scratches¶ Returns: all home healthy scratches Returns: dict
-
home_skaters¶ Returns: all home skaters Return type: dict
-
linesman¶ Returns: the linesman for the game Return type: dict, { num: 'lm_name' }
-
refs¶ Returns: the refs for the game Return type: dict, { num: 'ref_name' }
-
nhlscrapi.games.toi module¶
-
class
nhlscrapi.games.toi.ShiftSummary(player_num=0, player_name={}, shifts=[], by_period={})[source]¶ Bases:
objectPlayer’s shift summary
-
by_period= None¶ Summary table by period in the form
{ 'period': period_num, 'shifts': shift_count, 'avg': { 'min': min, 'sec': sec }, 'toi': { 'min': min, 'sec': sec }, 'ev_toi': { 'min': min, 'sec': sec }, 'pp_toi': { 'min': min, 'sec': sec }, 'sh_toi': { 'min': min, 'sec': sec } }
-
game_summ¶ Time on ice summary for the game
Returns: dict, same form as self.by_period
-
player_name= None¶ Player’s name:
{ 'first': '', 'last': '' }
-
player_num= None¶ The number of the player
-
shifts= None¶ List of all shifts in the form
[ { 'shift_num': shift_num, 'period': period_num, 'start': start_time # (elapsed) 'end': end_time # (elapsed) 'dur': length_of_shift, 'event': EventType.Goal or EventType.Penalty } ]
-
-
class
nhlscrapi.games.toi.TOI(game_key)[source]¶ Bases:
nhlscrapi.games.repscrwrap.RepScrWrapTime on ice summary report. Produces the time on ice per shift by player for both home and away.
Parameters: game_key – unique game identifier of type GameKey-
all_toi¶ Return
Returns: the scrapr.toi.ShiftSummaryby player for the home/away teamReturn type: dict { 'home/away': { player_num: shift_summary_obj } }
-
away_shift_summ¶ Returns: ShiftSummaryby player for the away teamReturn type: dict { player_num: shift_summary_obj }
-
home_shift_summ¶ Returns: ShiftSummaryby player for the home teamReturn type: dict { player_num: shift_summary_obj }
-
nhlscrapi.games.faceoffcomp module¶
-
class
nhlscrapi.games.faceoffcomp.FaceOffComparison(game_key)[source]¶ Bases:
nhlscrapi.games.repscrwrap.RepScrWrapFace-off Comparison and summary report. Produces the by player and head-to-head matchup face off totals by zone and overall. For either home or away the full summary data takes the following form
{ player_num: { 'off/def/neut/all': { 'won': won, 'total': total } } }
Parameters: game_key – unique game identifier of type GameKey-
away_fo¶ Property that returns the full by player face-off summary for the away team.
Returns: dict keyed by player num
-
by_zone¶ Returns the faceoff win/total breakdown by zone for home and away as
{ 'home/away': { 'off/def/neut/all': { 'won': won, 'total': total } } }
Returns: dict
-
fo_pct¶ Get the by team overall face-off win %.
Returns: dict, { 'home': %, 'away': % }
-
fo_pct_by_zone¶ Get the by team face-off win % by zone. Format is
Returns: dict { 'home/away': { 'off/def/neut': % } }
-
head_to_head(home_num, away_num)[source]¶ Return the head-to-head face-off outcomes between two players. If the matchup didn’t happen,
{ }is returned.Parameters: - home_num – the number of the home team player
- away_num – the number of the away team player
Returns: dict, either
{ }or the following{ 'home/away': { 'off/def/neut/all': { 'won': won, 'total': total } } }
-
home_fo¶ Property that returns the full by player face-off summary for the home team.
Returns: dict keyed by player num
-
team_totals¶ Returns the overall faceoff win/total breakdown for home and away as
Returns: dict, { 'home/away': { 'won': won, 'total': total } }
-
nhlscrapi.games.eventsummary module¶
-
class
nhlscrapi.games.eventsummary.EventSummary(game_key)[source]¶ Bases:
nhlscrapi.games.repscrwrap.RepScrWrapEvent summary report. Produces the team shot/face-off summary by strength as well as the by player stats including scoring, TOI by situation et c.
Parameters: game_key – unique game identifier of type GameKey-
away_fo¶ Away team face off summary by strength.
Returns: dict of the form { 'ev/pp/sh/tot': { 'won': goals, 'total': shots } }
-
away_players¶ Property that returns the away team by player summary..
Returns: dict of the form { 'num': { 'pos': pos, 'name': { 'first': first, 'last': last }, 'g/a/p/pm/pn/pim/shifts/s/ab/ms/ht/gv/tk/bs': value 'fo': { 'won': won, 'tot': total }, 'toi': { 'tot/avg/pp/sh/ev': { 'min': mins, 'sec': secs } } } }
-
away_shots¶ Property that returns the away team shot summary by situation.
Returns: dict of the form { 'agg': { 'ev/pp/sh/tot': { 'g': goals, 's': shots } }, 'det': { '5v5/5v4/5v3/et c': { 'g': goals, 's': shots } } }
-
filter_players(pl_filter)[source]¶ Return the subset home and away players that satisfy the provided filter function.
Parameters: pl_filter – function that takes a by player dictionary and returns bool Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
goal_scorers()[source]¶ Return home/away by player info for the game’s goal scorers.
Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
had_penalties()[source]¶ Return home/away by player info for players who had a penalty.
Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
home_fo¶ Home team face off summary by strength.
Returns: dict of the form { 'ev/pp/sh/tot': { 'won': goals, 'total': shots } }
-
home_players¶ Property that returns the home team by player summary..
Returns: dict of the form { 'num': { 'pos': pos, 'name': { 'first': first, 'last': last }, 'g/a/p/pm/pn/pim/shifts/s/ab/ms/ht/gv/tk/bs': value 'fo': { 'won': won, 'tot': total }, 'toi': { 'tot/avg/pp/sh/ev': { 'min': mins, 'sec': secs } } } }
-
home_shots¶ Property that returns the home team shot summary by situation.
Returns: dict of the form { 'agg': { 'ev/pp/sh/tot': { 'g': goals, 's': shots } }, 'det': { '5v5/5v4/5v3/et c': { 'g': goals, 's': shots } } }
-
point_getters()[source]¶ Return home/away by player info for the game’s point getters.
Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
sort_players(sort_key=None, sort_func=None, reverse=False)[source]¶ Return all home and away by player info sorted by either the provided key or function. Must provide at least one of the two parameters. Can sort either ascending or descending.
Parameters: - sort_key – (def None) dict key to sort on
- sort_func – (def None) sorting function
- reverse – (optional, def False) if True, sort descending
Returns: dict of the form
{ 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
top_by_func(sort_func)[source]¶ Return home/away by player info for the players on each team who come in first according to the provided sorting function. Will perform ascending sort.
Parameters: sort_func – function that yields the sorting quantity Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
top_by_key(sort_key)[source]¶ Return home/away by player info for the players on each team that are first in the provided category.
Parameters: sort_key – str, the dictionary key to be sorted on Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
top_toi()[source]¶ Return home/away by player info for the players on each team who logged the most time on ice.
Returns: dict of the form { 'home/away': { by_player_dict } }. Seehome_players()andaway_players()
-
nhlscrapi.games.gamesummary module¶
nhlscrapi.games.cumstats module¶
-
class
nhlscrapi.games.cumstats.AccumulateStats[source]¶ Bases:
objectBase class for accumulator classes. These classes keep tallies of specified events and are updated each time a play from
PlayByPlayis processed. Examples includeShotCtandScore. This class is not intended to be used directly.
-
class
nhlscrapi.games.cumstats.Corsi[source]¶ Bases:
nhlscrapi.games.cumstats.EvenStShotAttCtTallies even strength shots on goal for each team. Increments if
- the play event inherits from
Shot - play happened at even strength
Defined more for convention/nostalgia. Same as
EvenStShotAttCtThe Cori-share (% of shot attempts) for each team
Returns: dict, { 'home_name': %, 'away_name': % }
- the play event inherits from
-
class
nhlscrapi.games.cumstats.EvenStShotAttCt[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies even strength shots on goal for each team. Increments if
- the play event inherits from
ShotAttempt - play happened at even strength
- the play event inherits from
-
class
nhlscrapi.games.cumstats.EvenStShotCt[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies even strength shots on goal for each team. Increments if
- the play event inherits from
Shot - play happened at even strength
- the play event inherits from
-
class
nhlscrapi.games.cumstats.Fenwick[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies if a goal is scored. Also tracks shootout goals. Increments if
- the play event inherits from
ShotAttempt - the play event does not inherit from
Block - play happened at even strength
Returns: The Fenwick-share (% of unblocked even strength shot attempts) for each team Return type: dict, { 'home_name': %, 'away_name': % }
- the play event inherits from
-
class
nhlscrapi.games.cumstats.Score[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies if a goal is scored. Also tracks shootout goals. Increments if
- the play event inherits from
Goal - the play event inherits from
ShootOutGoal
- the play event inherits from
-
class
nhlscrapi.games.cumstats.ShootOut[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies shootout goals. Increments if
- the play event inherits from
ShootOutGoal
- the play event inherits from
-
class
nhlscrapi.games.cumstats.ShotAttemptCt[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies even strength shots on goal for each team. Increments if
- the play event inherits from
ShotAttempt
- the play event inherits from
-
class
nhlscrapi.games.cumstats.ShotCt[source]¶ Bases:
nhlscrapi.games.cumstats.ShotEventTallyBaseTallies shots on goal for each team. Increments if
- the play event inherits from
Shot
- the play event inherits from
-
class
nhlscrapi.games.cumstats.ShotEventTallyBase(count_play)[source]¶ Bases:
nhlscrapi.games.cumstats.TeamIncrementorBase class for all shot attempt based events
-
class
nhlscrapi.games.cumstats.TeamIncrementor(get_team=None, count_play=None)[source]¶ Bases:
nhlscrapi.games.cumstats.AccumulateStatsAccumulator base class for team vs team stats such as score, shot count et c.
Parameters: - get_team – function, takes a play and returns the team associated with it
- count_play – function, takes a play and returns True if it is a tally for the given accumulator’s definition.
-
tally= None¶ List of plays that lead to tallies, i.e. increments of the stat accumulator. E.g. a goal or shot.
nhlscrapi.games.events module¶
-
class
nhlscrapi.games.events.Event(event_type=0, desc='')[source]¶ Bases:
objectBase class for event codes in the RTSS play-by-play reports
-
desc= None¶ The RTSS description of the play.
-
event_type= None¶ The
EventTypeenum values corresponding to the event.
-
-
class
nhlscrapi.games.events.EventFactory[source]¶ Bases:
objectFactory for creating event objects corresponding to the different types of plays (events) in RTSS play by play data. Constructor selected based upon the event enum
EventType.Eventspassed.-
static
Create(event_type)[source]¶ Factory method creates objects derived from :py:class`.Event` with class name matching the :py:class`.EventType`.
Parameters: event_type – number for type of event Returns: constructed event corresponding to event_typeReturn type: Event
-
event_list= [<class 'nhlscrapi.games.events.Event'>, <class 'nhlscrapi.games.events.ShotAttempt'>, <class 'nhlscrapi.games.events.Shot'>, <class 'nhlscrapi.games.events.Goal'>, <class 'nhlscrapi.games.events.Miss'>, <class 'nhlscrapi.games.events.Block'>, <class 'nhlscrapi.games.events.Hit'>, <class 'nhlscrapi.games.events.FaceOff'>, <class 'nhlscrapi.games.events.Stoppage'>, <class 'nhlscrapi.games.events.PeriodEnd'>, <class 'nhlscrapi.games.events.GameEnd'>, <class 'nhlscrapi.games.events.ShootOutEnd'>, <class 'nhlscrapi.games.events.Penalty'>, <class 'nhlscrapi.games.events.Turnover'>, <class 'nhlscrapi.games.events.Takeaway'>, <class 'nhlscrapi.games.events.Giveaway'>, <class 'nhlscrapi.games.events.ShootOutAtt'>, <class 'nhlscrapi.games.events.ShootOutGoal'>]¶ List of available events loaded dynamically by following the subclass structure of
Event.
-
static
-
nhlscrapi.games.events.EventType¶ Enum indicating event type.
alias of
Enum
-
class
nhlscrapi.games.events.FaceOff[source]¶ Bases:
nhlscrapi.games.events.Event
-
class
nhlscrapi.games.events.Goal[source]¶ Bases:
nhlscrapi.games.events.Shot
-
class
nhlscrapi.games.events.Hit[source]¶ Bases:
nhlscrapi.games.events.Event
-
class
nhlscrapi.games.events.Penalty[source]¶ Bases:
nhlscrapi.games.events.Event
-
class
nhlscrapi.games.events.ShootOutAtt(event_type=12)[source]¶ Bases:
nhlscrapi.games.events.Event
-
class
nhlscrapi.games.events.ShotAttempt(event_type=1)[source]¶ Bases:
nhlscrapi.games.events.Event-
dist= None¶ Distance of shot in feet
-
is_penalty_shot= None¶ Flag indicating if it was a penalty shot
-
shooter= None¶ Shooter info
{ 'team': team, 'name': name, 'num': num }
-
shot_type= None¶ Description of shot, e.g. Wrist Shot, et c
-
-
class
nhlscrapi.games.events.Stoppage(event_type=11)[source]¶ Bases:
nhlscrapi.games.events.Event
nhlscrapi.games.repscrwrap module¶
-
class
nhlscrapi.games.repscrwrap.RepScrWrap(game_key, rep_reader)[source]¶ Bases:
objectLazy matchup reader base. Reports can be read in pieces. Only need to read matchup on read of first part. Serves as the base class for all wrappers of report scrapers.
Parameters: - game_key –
GameKeyof the game being loaded - rep_reader – object of type
nhlscrapi.scrapr.ReportLoader
-
matchup¶ Return the game meta information displayed in report banners including team names, final score, game date, location, and attendance. Data format is
{ 'home': home, 'away': away, 'final': final, 'attendance': att, 'date': date, 'location': loc }
Returns: matchup banner info Return type: dict
- game_key –
-
nhlscrapi.games.repscrwrap.dispatch_loader(scraper, loader_name)[source]¶ Decorator that enforces one time loading for scrapers. The one time loading is applied to partial loaders, e.g. only parse and load the home team roster once. This is not meant to be used directly.
Parameters: - scraper – property name (string) containing an object of type
scrapr.ReportLoader - loader_name – name of method that does the scraping/parsing
Returns: function wrapper
- scraper – property name (string) containing an object of type