Skip to content
A package to work with NBA player tracking stats using the NBA Stats API
Python
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
nba_stats_tracking
tests
.gitignore
.travis.yml
LICENSE
README.md
requirements.txt
setup.py

README.md

Build Status PyPI version

A package to work with NBA player tracking stats using the NBA Stats API.

Features

  • Works with both tracking stats and tracking shot stats
  • Aggregate stats across multiple seasons
  • Aggregate tracking shot stats across multiple filters (ex Wide Open and 18-22 seconds left on the shot clock)
  • Generate game logs

Installation

requires Python >=3.6

pip install nba_stats_tracking

Notes

It looks like prior to 2018-19 blocked shots aren't included in the FGA totals

Example Usage

Aggregating Multiple Tracking Shot Stat Filters and/or Seasons

from nba_stats_tracking import tracking_shots

seasons = ['2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20']
season_types = ['Regular Season', 'Playoffs']
def_distances = ['6+ Feet - Wide Open', '4-6 Feet - Open']
general_ranges = ['Catch and Shoot']

stats, league_totals = tracking_shots.aggregate_full_season_tracking_shot_stats_for_seasons('player', seasons, season_types, close_def_dists=def_distances, general_ranges=general_ranges)

for stat in stats:
    print(stat)
print(league_totals)

tracking_shots.aggregate_full_season_tracking_shot_stats_for_seasons takes 3 required args entity_type, seasons and season_types

Options for entity_type are 'player', 'team' or 'opponent'

seasons is a list of seasons, format ex. '2018-19'

season_types is a list of season types. Season types are 'Regular Season' and 'Playoffs'

It also takes optional kwargs for each tracking shot filter option. The default for each filter is all shots for that filter.

close_def_dists - list, options are: '', '0-2 Feet - Very Tight','2-4 Feet - Tight','4-6 Feet - Open','6+ Feet - Wide Open'
shot_clocks - list, options are: '', '24-22', '22-18 Very Early', '18-15 Early', '15-7 Average', '7-4 Late', '4-0 Very Late', 'ShotClock Off'
shot_dists - list, options are: '', '>=10.0'
touch_times - list, options are: '', 'Touch < 2 Seconds', 'Touch 2-6 Seconds', 'Touch 6+ Seconds'
dribble_ranges - list, options are: '', '0 Dribbles', '1 Dribble', '2 Dribbles', '3-6 Dribbles', '7+ Dribbles'
general_ranges - list, options are: 'Overall', 'Catch and Shoot', 'Pullups', 'Less Than 10 ft'
periods - list of ints
location - string, 'Home' or 'Road'

Generating Tracking Shot Game Logs

from nba_stats_tracking import tracking_shots

def_distances = ['6+ Feet - Wide Open', '4-6 Feet - Open']
general_ranges = ['Catch and Shoot']
date_from = '02/02/2020'
date_to = '02/03/2020'

game_logs = tracking_shots.generate_tracking_shot_game_logs('player', date_from, date_to, close_def_dists=def_distances, general_ranges=general_ranges)
for game_log in game_logs:
    print(game_log)

tracking_shots.generate_tracking_shot_game_logs takes 3 required args entity_type, date_from and date_to

Options for entity_type are 'player', 'team' or 'opponent'

date_from and date_to are strings formatted MM/DD/YYYY

It also takes optional kwargs for each tracking shot filter option the same way as above.

Aggregating Multiple Tracking Shot Stat Filters and Grouping by Season

from nba_stats_tracking import tracking_shots

seasons = ['2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20']
season_types = ['Regular Season']
def_distances = ['6+ Feet - Wide Open', '4-6 Feet - Open']
general_ranges = ['Catch and Shoot']

stats = tracking_shots.get_tracking_shot_stats('player', seasons, season_types, close_def_dists=def_distances, general_ranges=general_ranges)

for stat in stats:
    print(stat)

tracking_shots.aggregate_full_season_tracking_shot_stats_for_seasons takes 3 required args entity_type, seasons and season_types

Options for entity_type are 'player', 'team' or 'opponent'

seasons is a list of seasons, format ex. '2018-19'

season_types is a list of season types. Season types are 'Regular Season' and 'Playoffs'

It also takes optional kwargs for each tracking shot filter option the same way as above.

Aggregating Multiple Seasons of Tracking Stats

from nba_stats_tracking import tracking

stat_measure = 'SpeedDistance'
seasons = ['2018-19', '2019-20']
season_types = ['Regular Season']
entity_type = 'player'
stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(stat_measure, seasons, season_types, entity_type)

for stat in stats:
    print(stat)

print('-----------------------')
print(league_totals)

tracking.aggregate_full_season_tracking_stats_for_seasons takes 4 args stat_measure, seasons, season_types and entity_type

Options for stat_measure are 'Drives', 'Defense', 'CatchShoot', 'Passing', 'Possessions', 'PullUpShot', 'Rebounding', 'Efficiency', 'SpeedDistance', 'ElbowTouch', 'PostTouch', 'PaintTouch'

seasons is a list of seasons, format ex. '2018-19'

season_types is a list of season types. Season types are 'Regular Season' and 'Playoffs'

Options for entity_type are 'player' or 'team'

Generating Tracking Game Logs

from nba_stats_tracking import tracking

stat_measure = 'CatchShoot'
entity_type = 'player'
date_from = '02/02/2020'
date_to = '02/03/2020'

game_logs = tracking.generate_tracking_game_logs(stat_measure, entity_type, date_from, date_to)
for game_log in game_logs:
    print(game_log)

tracking.generate_tracking_game_logs takes 4 args stat_measure, entity_type, date_from and date_to

Options for stat_measure are 'Drives', 'Defense', 'CatchShoot', 'Passing', 'Possessions', 'PullUpShot', 'Rebounding', 'Efficiency', 'SpeedDistance', 'ElbowTouch', 'PostTouch', 'PaintTouch'

Options for entity_type are 'player' or 'team'

date_from and date_to are strings formatted MM/DD/YYYY

Get Opponent Tracking Stats For An Individual Team

from nba_stats_tracking import tracking

stat_measure = 'CatchShoot'
seasons = ['2019-20']
season_types = ['Regular Season']
entity_type = 'team'
opponent_team_id = 1610612738

# stats will be each team's stats against opponent_team_id
# league_totals will be aggregate opponent stats for opponents of opponent_team_id
stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(stat_measure, seasons, season_types, entity_type, opponent_team_id=opponent_team_id)

for stat in stats:
    print(stat)
print(league_totals)

To get opponent stats for all teams, just run this for each team id

You can’t perform that action at this time.