def test_get_tracking_results_for_team_speed_distance():
    with open("tests/data/tracking/2019-20/team-playoffs/SpeedDistance.json"
              ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.speed_distance
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.dist_miles == 301.0
            assert stat.dist_miles_off == 161.5
            assert stat.dist_miles_def == 139.5
def test_get_tracking_results_for_player_pullup_shoot():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/PullUpShot.json"
    ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.pull_up
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.fga == 217
            assert stat.fg3pct == stat.fg3m / stat.fg3a
            assert round(stat.efg, 3) == 0.327
def test_get_tracking_results_for_player_rebounding():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/Rebounding.json"
    ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.rebounding
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.oreb_contest == 72
            assert stat.dreb_contest == 93
            assert stat.contested_oreb_pct == stat.oreb_contest / stat.oreb
            assert stat.contested_dreb_pct == stat.dreb_contest / stat.dreb
def test_get_tracking_results_for_team_possessions():
    with open(
            "tests/data/tracking/2019-20/team-playoffs/Possessions.json") as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.possessions
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.touches == 6711
            assert stat.time_of_poss == 358.2
            assert stat.pts_per_touch == stat.points / stat.touches
def test_get_tracking_results_for_player_post_touch():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/PostTouch.json"
    ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.post_touches
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.post_touches == 198
            assert stat.points == 109
            assert stat.pass_pct == stat.passes / stat.post_touches
            assert stat.assist_pct == stat.assists / stat.post_touches
            assert stat.turnover_pct == stat.turnovers / stat.post_touches
            assert stat.foul_pct == stat.fouls / stat.post_touches
            assert stat.pts_per_post_touch == stat.points / stat.post_touches
def test_get_tracking_results_for_player_passing():
    with open("tests/data/tracking/2019-20/player-regular-season/Passing.json"
              ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.passing
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.passes_made == 2223
            assert stat.assists == 228
            assert stat.potential_assists == 424
            assert stat.pts_per_assist == stat.assist_pts / stat.assists
            assert stat.assists_per_pass == stat.assists / stat.passes_made
            assert (stat.potential_assists_per_pass == stat.potential_assists /
                    stat.passes_made)
def test_get_tracking_results_for_team_catch_shoot():
    with open(
            "tests/data/tracking/2019-20/team-playoffs/CatchShoot.json") as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.catch_and_shoot
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.fga == 408
            assert stat.fg3pct == stat.fg3m / stat.fg3a
            assert round(stat.efg, 3) == 0.542

    assert league_totals.fga == 4477
def test_get_tracking_results_for_team_elbow_touch():
    with open(
            "tests/data/tracking/2019-20/team-playoffs/ElbowTouch.json") as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.elbow_touches
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.elbow_touches == 140
            assert stat.points == 92
            assert stat.pass_pct == stat.passes / stat.elbow_touches
            assert stat.assist_pct == stat.assists / stat.elbow_touches
            assert stat.turnover_pct == stat.turnovers / stat.elbow_touches
            assert stat.foul_pct == stat.fouls / stat.elbow_touches
            assert stat.pts_per_elbow_touch == stat.points / stat.elbow_touches
def test_get_tracking_results_for_team_passing():
    with open("tests/data/tracking/2019-20/team-playoffs/Passing.json") as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.passing
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.passes_made == 4690
            assert stat.assists == 385
            assert stat.potential_assists == 722
            assert stat.pts_per_assist == stat.assist_pts / stat.assists
            assert stat.assists_per_pass == stat.assists / stat.passes_made
            assert (stat.potential_assists_per_pass == stat.potential_assists /
                    stat.passes_made)
def test_get_tracking_results_for_team_efficiency():
    with open(
            "tests/data/tracking/2019-20/team-playoffs/Efficiency.json") as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.shooting
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.drive_pts == 436
            assert stat.catch_shoot_pts == 454
            assert stat.pull_up_pts == 409
            assert stat.paint_touch_pts == 292
            assert stat.post_touch_pts == 55
            assert stat.elbow_touch_pts == 92
def test_get_tracking_results_for_player_efficiency():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/Efficiency.json"
    ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.shooting
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.drive_pts == 145
            assert stat.catch_shoot_pts == 193
            assert stat.pull_up_pts == 142
            assert stat.paint_touch_pts == 262
            assert stat.post_touch_pts == 109
            assert stat.elbow_touch_pts == 43
def test_get_tracking_results_for_player_defense():
    with open("tests/data/tracking/2019-20/player-regular-season/Defense.json"
              ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.defense
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.def_rim_fga == 185
            assert stat.blocks == 39
            assert stat.def_rim_fgpct == stat.def_rim_fgm / stat.def_rim_fga
示例#13
0
def test_player_aggregate_full_season_tracking_stats_for_seasons():
    with open('tests/data/player_2020_speed_distance_response.json') as f:
        tracking_2020_response_json = json.loads(f.read())

    with open('tests/data/player_2019_speed_distance_response.json') as f:
        tracking_2019_response_json = json.loads(f.read())

    entity_type = 'player'
    measure_type = 'SpeedDistance'
    seasons = ['2018-19', '2019-20']
    season_types = ['Regular Season']

    url_2020 = generate_url(measure_type, seasons[1], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2020,
                  json=tracking_2020_response_json,
                  status=200)

    url_2019 = generate_url(measure_type, seasons[0], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2019,
                  json=tracking_2019_response_json,
                  status=200)

    stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, seasons, season_types, entity_type)
    assert len(stats) == 645
    for stat in stats:
        if stat['PLAYER_ID'] == 203932:
            assert stat['MIN'] == 4035.0
            assert stat['DIST_FEET'] == 1604918
    assert league_totals['MIN'] == 961707.0
    assert league_totals['DIST_FEET'] == 379831114
def test_get_tracking_results_for_player_catch_shoot():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/CatchShoot.json"
    ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.catch_and_shoot
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.points == 184
            assert stat.fgm == 66
            assert stat.fga == 198
            assert stat.fg3m == 52
            assert stat.fg3a == 160
            assert stat.fg3pct == stat.fg3m / stat.fg3a
            assert round(stat.efg, 3) == 0.465

    assert league_totals.fga == 54954
def test_get_tracking_results_for_player_speed_distance():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/SpeedDistance.json"
    ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.speed_distance
    season = "2019-20"
    season_type = SeasonType.regular_season

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 529

    for stat in stats:
        if stat.player_id == 203932:
            assert stat.season == f"{season} {season_type}"
            assert stat.team_id == 1610612753
            assert stat.minutes == 2017.0
            assert stat.dist_miles == 150.5
            assert stat.dist_miles_off == 83.4
            assert stat.dist_miles_def == 67.2
def test_team_aggregate_full_season_tracking_stats_for_seasons():
    with open("tests/data/tracking/2019-20/team-regular-season/CatchShoot.json"
              ) as f:
        tracking_2020_response_json = json.loads(f.read())

    with open("tests/data/tracking/2018-19/team-regular-season/CatchShoot.json"
              ) as f:
        tracking_2019_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.catch_and_shoot
    seasons = ["2018-19", "2019-20"]
    season_types = [SeasonType.regular_season]

    url_2020 = generate_url(measure_type, seasons[1], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2020,
                  json=tracking_2020_response_json,
                  status=200)

    url_2019 = generate_url(measure_type, seasons[0], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2019,
                  json=tracking_2019_response_json,
                  status=200)

    stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, seasons, season_types, entity_type)
    minutes = 0
    assert len(stats) == 30
    for stat in stats:
        if stat.team_id == 1610612737:
            assert stat.team_name == "Atlanta Hawks"
            assert stat.team_abbreviation == "ATL"
            assert stat.minutes == 36135.0
            assert stat.fgm == 1406
            assert stat.fga == 3962
            assert stat.points == 4141
            assert stat.fg3m == 1329
            assert stat.fg3a == 3719
            assert stat.fg3pct == stat.fg3m / stat.fg3a
        minutes += stat.minutes

    assert league_totals.minutes == 1106520.0
    assert league_totals.fgm == 44236
    assert league_totals.fga == 117893
    assert league_totals.points == 127215
    assert league_totals.fg3m == 38743
    assert league_totals.fg3a == 105039
示例#17
0
def test_team_aggregate_full_season_tracking_stats_for_seasons():
    with open('tests/data/team_2020_catch_and_shoot_response.json') as f:
        tracking_2020_response_json = json.loads(f.read())

    with open('tests/data/team_2019_catch_and_shoot_response.json') as f:
        tracking_2019_response_json = json.loads(f.read())

    entity_type = 'team'
    measure_type = 'CatchShoot'
    seasons = ['2018-19', '2019-20']
    season_types = ['Regular Season']

    url_2020 = generate_url(measure_type, seasons[1], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2020,
                  json=tracking_2020_response_json,
                  status=200)

    url_2019 = generate_url(measure_type, seasons[0], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2019,
                  json=tracking_2019_response_json,
                  status=200)

    stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, seasons, season_types, entity_type)
    assert len(stats) == 30
    for stat in stats:
        if stat['TEAM_ID'] == 1610612737:
            assert stat == {
                'TEAM_ID': 1610612737,
                'TEAM_NAME': 'Atlanta Hawks',
                'TEAM_ABBREVIATION': 'ATL',
                'MIN': 32170.0,
                'CATCH_SHOOT_FGM': 1243,
                'CATCH_SHOOT_FGA': 3537,
                'CATCH_SHOOT_PTS': 3658,
                'CATCH_SHOOT_FG3M': 1172,
                'CATCH_SHOOT_FG3A': 3313
            }
    assert league_totals == {
        'MIN': 956470.0,
        'CATCH_SHOOT_FGM': 37981,
        'CATCH_SHOOT_FGA': 101524,
        'CATCH_SHOOT_PTS': 109049,
        'CATCH_SHOOT_FG3M': 33087,
        'CATCH_SHOOT_FG3A': 90075
    }
def test_player_aggregate_full_season_tracking_stats_for_seasons():
    with open(
            "tests/data/tracking/2019-20/player-regular-season/SpeedDistance.json"
    ) as f:
        tracking_2020_response_json = json.loads(f.read())

    with open(
            "tests/data/tracking/2018-19/player-regular-season/SpeedDistance.json"
    ) as f:
        tracking_2019_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.player
    measure_type = TrackingMeasureType.speed_distance
    seasons = ["2018-19", "2019-20"]
    season_types = [SeasonType.regular_season]

    url_2020 = generate_url(measure_type, seasons[1], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2020,
                  json=tracking_2020_response_json,
                  status=200)

    url_2019 = generate_url(measure_type, seasons[0], season_types[0],
                            entity_type)
    responses.add(responses.GET,
                  url_2019,
                  json=tracking_2019_response_json,
                  status=200)

    stats, league_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, seasons, season_types, entity_type)
    assert len(stats) == 659
    for stat in stats:
        if stat.player_id == 203932:
            assert stat.minutes == 4584.0
            assert stat.dist_feet == 1821576
    assert league_totals.minutes == 1101624.0
    assert league_totals.dist_feet == 434945971
def test_get_tracking_results_for_opponent_drives():
    with open("tests/data/tracking/2019-20/opponent-regular-season/Drives.json"
              ) as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.drives
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type,
                       season,
                       season_type,
                       entity_type,
                       OpponentTeamID=1610612761)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    _, opponent_totals = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type],
        entity_type,
        OpponentTeamID=1610612761)
    assert opponent_totals.games_played == 71
def test_get_tracking_results_for_team_defense():
    with open("tests/data/tracking/2019-20/team-playoffs/Defense.json") as f:
        tracking_response_json = json.loads(f.read())

    entity_type = PlayerOrTeam.team
    measure_type = TrackingMeasureType.defense
    season = "2019-20"
    season_type = SeasonType.playoffs

    url = generate_url(measure_type, season, season_type, entity_type)

    responses.add(responses.GET, url, json=tracking_response_json, status=200)

    stats, _ = tracking.aggregate_full_season_tracking_stats_for_seasons(
        measure_type, [season], [season_type], entity_type)
    assert len(stats) == 16

    for stat in stats:
        if stat.team_id == 1610612738:
            assert stat.season == f"{season} {season_type}"
            assert stat.minutes == 4155.0
            assert stat.def_rim_fga == 400
            assert stat.blocks == 82
            assert stat.def_rim_fgpct == stat.def_rim_fgm / stat.def_rim_fga