CHANGES IN THE NEW NBA Play-by-Play FORMAT
We are launching an updated version of our play-by-play dataset that includes new columns and slight modifications to the to existing columns.
Summary (tl;dr)
- The existing column structure (except for converted x,y columns) remains unchanged, with no relocations. All new columns are appended at the end.
- The updated version enhances tagging for shots, event locations, turnovers, fouls, and violations.
- To improve clarity, some play types will not be abbreviated, and some play types will be displayed differently than before.
- Each substitution occurs in a row for “entered” and “left (the court)” players.
- Court coordinates are explained here for the new version.
Details
(1) COLUMN STRUCTURE
The existing column structure remains unchanged, with no relocations. All new columns are appended at the end, except for converted x,y columns.
(2) NEW FIELDS
We have enriched the play-by-play data by adding new fields at the end of the columns that familiarize you with the old ones. This way, the new dataset remains compatible with the old format. The newly added fields are:
- home_team
- away_team
- team_possession
- time_actual
- qualifiers1
- qualifiers2
- qualifiers3
- qualifiers4
- area
- area_detail
- official_id
These new fields provide more detailed context and information about each play, enhancing your analysis capabilities without disrupting workflows.
| Field | Description | Purpose | Example Value |
|---|---|---|---|
home_team |
The name or abbreviation of the home team | Identifies the home team in the game | BOS (Boston Celtics) |
away_team |
The name or abbreviation of the away team | Identifies the away team in the game | IND (Indiana Pacers) |
team_possession |
Indicates which team has possession of the ball | Provides information on current ball possession | BOS (Boston Celtics) |
time_actual |
The exact timestamp of the event in ISO 8601 format | Offers precise timing for the event | 2024-05-26T00:40:56.0Z |
qualifiers1 |
Additional qualifier for the event | Provides extra context or specific details about the play | pointsinthepaint |
qualifiers2 |
Another qualifier for the event | Adds further detail about the play | left |
qualifiers3 |
An additional qualifier for the event | Offers more granularity about the event | 0-8 Center |
qualifiers4 |
Yet another qualifier for the event | Provides comprehensive details about the play | Above the Break 3 |
area |
The general area of the court where the event took place | Indicates the broad location of the court | right |
area_detail |
More specific area details within the area |
Provides detailed spatial information | 24+ Right Center |
official_id |
Identifier for the official (referee) involved in the event | Tracks which official was present or made a call during the play |
(3) DEPRECATED FIELDS AND COORDINATES
converted_x and the converted_y are no longer needed since the new original_x and original_y range from 0 to 100 and are easy to interpret. Here’s a sample of how new coordinates spatially translate to the court.
Court coordinates are explained here for the new version.
(4) PLAYER IDs
Player column now lists the player ID and player name together, like 1626167/Myles Turner
(5) SUBSTITUTIONS
In the new format, entered and left players are shown in two separate rows for the event of substitutions. In the old format, we used to show both players in the same rows.
(6) SHOTS
Some of the shot types were previously tagged as ‘unknown’. All shots will keep being tagged as a ‘shot’ on COLUMN-V (event_type), and types of shots on COLUMN-AL (type) are now being tagged as follows:
3PT Driving Floating Bank Jump Shot → 3pt driving floating bank jump shot
3PT Fadeaway Jumper → 3pt fadeaway jumper
3PT Floating Jump Shot → 3pt floating jump shot
3PT Jump Bank Shot → 3pt jump bank shot
3PT Jump Shot → 3pt jump shot
3PT Pullup Jump Shot → 3pt pullup jump shot
3PT Running Jump Shot → 3pt running jump shot
3PT Running Pull-Up Jump Shot → 3pt running pull-up jump shot
3PT Step Back Bank Jump Shot → 3pt step back bank jump shot
3PT Step Back Jump Shot → 3pt step back jump shot
3PT Turnaround Fadeaway Bank Jump Shot → 3pt turnaround fadeaway bank jump shot
3PT Turnaround Jump Shot → 3pt turnaround jump shot
Cutting Dunk Shot → cutting dunk shot
Cutting Finger Roll Layup Shot → cutting finger roll layup shot
Cutting Layup Shot → cutting layup shot
Driving Dunk → driving dunk
Driving Floating Bank Jump Shot → driving floating bank jump shot
Driving Floating Jump Shot → driving floating jump shot
Driving Layup → driving layup
Driving Reverse Dunk Shot → driving reverse dunk shot
Driving Reverse Layup → driving reverse layup
Dunk → dunk
Fadeaway Jumper → fadeaway jumper
Floating Jump Shot → floating jump shot
Hook Bank Shot → hook bank shot
Hook Shot → hook shot
Jump Bank Shot → jump bank shot
Jump Shot → jump shot
Layup → layup
Pullup Jump Shot → pullup jump shot
Putback Dunk → putback dunk
Putback Layup → putback layup
Running Alley Oop Dunk Shot → running alley-oop dunk shot
Running Alley Oop Layup Shot → running alley-oop layup shot
Running Pull-Up Jump Shot → running pull-up jump shot
Running Reverse Dunk Shot → running reverse dunk shot
Step Back Bank Jump Shot → step back bank jump shot
Tip Dunk Shot → tip dunk shot
Tip Layup Shot → tip layup shot
Turnaround Fadeaway → turnaround fadeaway
Turnaround Fadeaway Bank Jump Shot → turnaround fadeaway bank jump shot
Turnaround Fadeaway Shot → turnaround fadeaway shot
Turnaround Hook Shot → turnaround hook shot
Turnaround Jump Shot → turnaround jump shot
(7) FREE THROWS
Free throws will keep being tagged as a ‘free throw’ on COLUMN-V (event_type) and types of free throws on COLUMN-AL (type) are now being tagged as follows:
Free Throw 1 of 1 → free throw 1/1
Free Throw 1 of 2 → free throw 1/2
Free Throw 1 of 3 → free throw 1/3
Free Throw 2 of 2 → free throw 2/2
Free Throw 2 of 3 → free throw 2/3
Free Throw 3 of 3 → free throw 3/3
Free Throw Flagrant 1 of 1 → free throw flagrant 1/1
Free Throw Flagrant 1 of 2 → free throw flagrant 1/2
Free Throw Flagrant 1 of 3 → free throw flagrant 1/3
Free Throw Flagrant 2 of 2 → free throw flagrant 2/2
Free Throw Flagrant 2 of 3 → free throw flagrant 2/3
Free Throw Flagrant 3 of 3 → free throw flagrant 3/3
Free Throw Clear Path 1 of 2 → free throw clear path 1/2
Free Throw Clear Path 2 of 2 → free throw clear path 2/2
Free Throw Technical → free throw technical
(8) TURNOVERS
Some types of turnovers were not previously tagged. All turnovers are now being tagged as follows:
Offensive Goaltending Turnover → offensive goaltending
Offensive Foul Turnover → offensive foul
Turnover Shot Clock → shot clock
Discontinue Dribble Turnover → discontinue dribble
Double Dribble Turnover → double dribble
Step Out of Bounds Turnover → step out of bounds
Backcourt Turnover → backcourt
Traveling Turnover → traveling
Inbound Turnover → inbound
Out of Bounds Bad Pass Turnover → out of bounds bad pass
Out of Bounds Lost Ball Turnover → out of bounds lost ball
Palming Turnover → palming
Punched Ball Turnover → punched ball
No Turnover → no turnover
Lost Ball Turnover → lost ball
Bad Pass Turnover → bad pass
Illegal Assist Turnover → illegal assist
Illegal Screen Turnover → illegal screen
Kicked Ball Violation Turnover → kicked ball
Lane Violation Turnover → lane violation
Basket from Below Turnover → basket from below
Jump Ball Violation Turnover → jump ball violation
Too Many Players → too many players
3 Second Violation Turnover → 3-second violation
5 Second Violation → 5-second violation
8 Second Violation → 8-second violation
(9) VIOLATIONS
Some types of violations were not previously tagged. All violations are now being tagged as follows:
Delay of Game → delay of game
Defensive Goaltending → defensive goaltending
Lane Violation → lane
Double Lane violation → double lane
Jump Ball Violation → jump ball
Kicked Ball Violation → kicked ball
(10) WORDING CHANGES on event_type (Column-V)
To improve clarity, some play types will not be abbreviated, and some play types will be displayed differently than before.
sub → substitution
free throw 1 of 2 → free throw 1/2
miss → shot
(11) COACH CHALLENGES
Coach challenges are now being captured as an “event_type” and can be found on
event_type = timeout (Column-V)
type = coach challenge (Column-AL)
result = successful/unsuccessful (Column-AJ)
(12) TECHNICAL FOULS
Double technical calls were not being appropriately tagged before. With the new version, a double technical call will appear as a “technical foul” in the event_type (Column-V) and as a “double technical” in the type (Column-AL).
Technical fouls called on coaches were not being appropriately tagged before. With the new version, a technical foul on a coach will appear as a “technical foul” in the event_type (Column-V) and as a “coach technical foul” in the type (Column-AL).
Technical fouls called on coaches are now being captured as an “event_type” and can be found on Column-V.
(13) GAME-IDs AND DATASET NAMES
Game-IDs are now trimmed, no more leading zeros or apostrophes.
Dataset names now comply with the naming conventions of other BigDataBall datasets (team/player/DFS).
(14) HISTORICAL SEASONS
New format will not be applied to the seasons played before 2025-26.
Frequently Asked Questions for Play-by-Play Dataset
Comments 2
Hello,
Will folks who bought historical data files in recent years be eligible for an upgrade? Any schedule for when they will roll out?
Can you say more about the change in court coordinates? What is the motivation to going to a percentage?
Thanks!
Author
No ETA but, yes we are actively working on converting as many past seasons as possible into the new format. We’ll see how far we can progress and completed seasons will be freely replaced for previous purchasers.
As mentioned earlier in the article, the switch was due to a force majeure situation caused by disabled sources.