Back

WSBA Hockey

WSBA Hockey preview

WeakSide Breakout's Python package for hockey data, primarily including National Hockey League schedule, play-by-play, roster, standings, and shift information.

WSBA HOCKEY

WSBA128

A Python package for scraping and analyzing hockey data under the motto: Evaluating, analyzing, and understanding the game of hockey through the lens of different analytical methods.

INSTALLATION AND USAGE

pip install wsba_hockey
import wsba_hockey as wsba

ALL FEATURES

SCRAPING

NHL Play-by-Play (of any game frame up to a full season)

Functions:

wsba.nhl_scrape_game(2024020918,split_shifts=False,remove=['game-end'])
wsba.nhl_scrape_season(20242025,split_shifts=False,remove=['game-end'],local=True)

Reusing Scrapy-backed Sessions

import wsba_hockey as wsba

with wsba.make_pooled_session() as session:
    games = [2024020918, 2024020919]
    pbp = [wsba.nhl_scrape_game(game, session=session) for game in games]

The session uses Scrapy internally while preserving the package's synchronous API. Scrapy remote control is disabled because it is not used by the client.

NHL Season Information

wsba.nhl_scrape_schedule(20242025)
wsba.nhl_scrape_seasons_info(seasons=[20212022,20222023,20232024,20242025])
wsba.nhl_scrape_standings()

NHL Rosters and Player Information

wsba.nhl_scrape_roster(20242025)
wsba.nhl_scrape_player_info([8477956, 8479987])
wsba.nhl_scrape_team_info()

NHL Draft Rankings and Prospects

wsba.nhl_scrape_draft_rankings()
wsba.nhl_scrape_prospects('BOS')

NHL EDGE Data

wsba.nhl_scrape_edge(20252026,'skater',[8477956, 8479987])
wsba.nhl_scrape_edge(20252026,'goalie',[8480280])
wsba.nhl_scrape_edge(20252026,'team',['BOS'])

NHL Event Tracking Data

wsba.nhl_scrape_event_data({2023020001: [101, 102]})

DATA ANALYTICS

Expected Goals

pbp = wsba.nhl_scrape_game(2024020918,split_shifts=False,remove=['game-end'])
pbp = wsba.nhl_apply_xG(pbp)

Goal Impacts and Shot Analysis

Stat Aggregation

pbp = wsba.nhl_scrape_season(20232024, local = True)
wsba.nhl_calculate_stats(
    pbp,
    'skater',
    ['5v5', '4v4', '3v3'],
    season_types=[2, 3],
)

Shot Plotting (Plots, Heatmaps, etc.)

pbp = wsba.nhl_scrape_season(20212022, remove=[], local=True)

plots = wsba.nhl_plot_events(
    pbp,
    group="game",
    entities=[2021020002],
    events=["goal", "shot-on-goal", "missed-shot", "blocked-shot"],
    strengths=["5v5"],
    season_types=2,
    legend=True,
    rotation=0,
    display_range="full",
)
plots[2021020002].savefig("skater_events.png", bbox_inches="tight")

Sample Plot:

Sample Plot

REPOSITORY

Team Information

wsba.repo_load_teaminfo()
wsba.repo_load_rosters(seasons=[20212022,20222023,20232024,20242025])

Schedule

wsba.repo_load_schedule(seasons=[20212022,20222023,20232024,20242025])

DOCUMENTATION

View full documentation here: WSBA Hockey Package Documentation

EXPORTING DATA

Tabular scraping functions return Polars DataFrames that can be written directly to CSV or Parquet:

data = wsba.nhl_scrape_edge(20252026, "skater", [8477956])
data.write_csv("edge.csv")
data.write_parquet("edge.parquet")

API fields that contain lists or structs, such as player badges and EDGE detail data, are stored as JSON strings in the returned table so both formats remain portable.