def test_outputting_2019_regular_season_box_scores_for_avery_bradley_as_csv( self): regular_season_player_box_scores( player_identifier="bradlav01", season_end_year=2019, output_type=OutputType.CSV, output_file_path="./test-avery-2019.csv")
def set_season_schedule(player_ids): df = pd.DataFrame() for id in player_ids: client.regular_season_player_box_scores( player_identifier=id, season_end_year=2020, output_type=OutputType.CSV, output_file_path=f"./csv/boxscores/{id}_box_scores.csv") for id in player_ids: df_season_schedule = pd.read_csv( f"./csv/boxscores/{id}_box_scores.csv") df_season_schedule['slug'] = id df = pd.concat([df, df_season_schedule]) df['date'] = pd.to_datetime(df['date']) dates = df['date'] dates = dates.reset_index() dates = dates.date.unique() dates.sort() last_game_date = pd.Timestamp((max(dates))).to_datetime64() game_fifteen_date = pd.Timestamp(dates[-14]).to_datetime64() boxscores = (df.loc[(df['date'] >= game_fifteen_date) & (df['date'] <= last_game_date)]) boxscores = boxscores.reset_index() return boxscores
def test_outputting_2019_regular_season_box_scores_for_avery_bradley_as_csv(self): output_file_path = os.path.join( os.path.dirname(__file__), "./output/test-avery-2019.csv", ) regular_season_player_box_scores( player_identifier="bradlav01", season_end_year=2019, output_type=OutputType.CSV, output_file_path=output_file_path, )
def test_get_first_20202_regular_season_box_score_for_russell_westbrook( self): result = regular_season_player_box_scores( player_identifier="westbru01", season_end_year=2020) self.assertEqual( datetime.strptime("2019-10-24", "%Y-%m-%d").date(), result[0]["date"]) self.assertEqual(Team.HOUSTON_ROCKETS, result[0]["team"]) self.assertEqual(Outcome.LOSS, result[0]["outcome"]) self.assertEqual(1972, result[0]["seconds_played"]) self.assertEqual(Team.MILWAUKEE_BUCKS, result[0]["opponent"]) self.assertEqual(7, result[0]["made_field_goals"]) self.assertEqual(17, result[0]["attempted_field_goals"]) self.assertEqual(3, result[0]["made_three_point_field_goals"]) self.assertEqual(7, result[0]["attempted_three_point_field_goals"]) self.assertEqual(7, result[0]["made_free_throws"]) self.assertEqual(11, result[0]["attempted_free_throws"]) self.assertEqual(4, result[0]["offensive_rebounds"]) self.assertEqual(12, result[0]["defensive_rebounds"]) self.assertEqual(7, result[0]["assists"]) self.assertEqual(2, result[0]["steals"]) self.assertEqual(1, result[0]["blocks"]) self.assertEqual(3, result[0]["turnovers"]) self.assertEqual(3, result[0]["personal_fouls"]) self.assertEqual(24, result[0]["points_scored"]) self.assertEqual(23.1, result[0]["game_score"]) self.assertEqual(0, result[0]["plus_minus"])
def test_outputting_2019_regular_season_box_scores_for_avery_bradley_as_json(self): results = regular_season_player_box_scores( player_identifier="bradlav01", season_end_year=2019, output_type=OutputType.JSON, ) self.assertIsNotNone(results) self.assertEqual(63, len(json.loads(results)))
def getSeasonHigh(season): seasonHigh = client.regular_season_player_box_scores( player_identifier="cartevi01", season_end_year=season, ) gameTotals = [dict_item['points_scored'] for dict_item in seasonHigh] return max(gameTotals)
def test_get_season_box_scores_removes_games_that_player_did_not_participate_in(self): # Jabari Brown was a DNP in his first game in the gamelog for the 2014-2015 season # https://www.basketball-reference.com/players/b/brownja01/gamelog/2015 # The date for the DNP was 2015-03-10 while the first game he was active was on 2015-03-12 # The first game that is returned should be on 2015-03-12 results = regular_season_player_box_scores(player_identifier="brownja01", season_end_year=2015) self.assertIsNotNone(results) self.assertEqual(19, len(results)) self.assertEqual(datetime.strptime("2015-03-12", "%Y-%m-%d").date(), results[0]["date"])
def test_outputting_2019_regular_season_box_scores_for_avery_bradley_as_csv( self): output_file_path = os.path.join( os.path.dirname(__file__), "./output/test-avery-2019.csv", ) expected_file_path = os.path.join( os.path.dirname(__file__), "./output/expected/test-avery-2019.csv") regular_season_player_box_scores( player_identifier="bradlav01", season_end_year=2019, output_type=OutputType.CSV, output_file_path=output_file_path, ) with open(output_file_path, 'r', encoding="utf8") as output_file, \ open(expected_file_path, 'r', encoding="utf8") as expected_file: output_lines = output_file.readlines() expected_lines = expected_file.readlines() self.assertEqual(output_lines, expected_lines) os.remove(output_file_path)
def get_player_boxscores(starting_year, year_range, player): player_avg = 0 total_games_vs_opp = 0 for val in range(year_range): try: boxscores = client.regular_season_player_box_scores( player_identifier=play['identifier'], season_end_year=starting_year + val, ) except client.InvalidPlayerAndSeason: continue for game in boxscores: if game['opponent'].name == opp: player_avg += FantasySites.calculate_fantasy_value( game, fantasy_site) total_games_vs_opp += 1 return player_avg / total_games_vs_opp, total_games_vs_opp
def player_stats(value): data = [] for i in range(2020, 1990, -1): total_assists = 0 total_steals = 0 total_blocks = 0 total_rebounds = 0 total_points = 0 total_seconds_played = 0 try: current_season = client.regular_season_player_box_scores( player_identifier=value, season_end_year=i) for game in current_season: total_assists += game["assists"] total_steals += game["steals"] total_blocks += game["blocks"] total_rebounds += game["offensive_rebounds"] + game[ "defensive_rebounds"] total_points += game["points_scored"] total_seconds_played += game["seconds_played"] total_assists /= len(current_season) total_steals /= len(current_season) total_blocks /= len(current_season) total_rebounds /= len(current_season) total_points /= len(current_season) total_seconds_played /= len(current_season) total_seconds_played /= 60 data.append({ "season": i, "assist": total_assists, "steal": total_steals, "block": total_blocks, "rebound": total_rebounds, "point": total_points, "minutes": total_seconds_played }) except InvalidPlayerAndSeason: break return data
from basketball_reference_web_scraper import client from basketball_reference_web_scraper.data import OutputType import csv import sys bbref_name_map = {} with open('./nba/inputs/{}/bbref.csv'.format(sys.argv[1]), 'rt') as f: data = csv.reader(f) for row in data: if row[0] == 'Player Name': continue else: bbref_name_map[row[0]] = row[1] for name in bbref_name_map.keys(): print(name.replace(" ", "").replace(".", "").lower()) client.regular_season_player_box_scores( player_identifier=bbref_name_map[name], season_end_year=sys.argv[2], output_type=OutputType.CSV, output_file_path="./nba/inputs/{}/players/{}.csv".format( sys.argv[1], name.replace(" ", "").replace(".", "").lower()))
season_end_year=2020, output_type=OutputType.CSV, output_file_path= "C:\\Users\\NWHAL\\Documents\\nba_project\\2020_player_season_totals.csv" ) print("collecting advanced player stats") client.players_advanced_season_totals( season_end_year=2020, output_type=OutputType.CSV, output_file_path= "C:\\Users\\NWHAL\\Documents\\nba_project\\2020_advanced_player_season_totals.csv" ) '''client.play_by_play( home_team=Team.BOSTON_CELTICS, year=2018, month=10, day=16, output_type=OutputType.CSV, output_file_path="./2018_10_06_BOS_PBP.csv" ) client.regular_season_player_box_scores( player_identifier="westbru01", season_end_year=2018, output_type=OutputType.CSV, output_file_path="./2017_2018_russell_westbrook_regular_season_box_scores.csv" ) client.search( term="Ko",
def test_get_2019_regular_season_box_scores_for_russell_westbrook(self): result = regular_season_player_box_scores(player_identifier="westbru01", season_end_year=2019) self.assertIsNotNone(result) self.assertEqual(len(result), 73)
def get_player_box_scores(player_slug_year): ''' Get game by game player box scores. Input: player_slug_year: pandas data frame of name, slug, and season_end_year (see the function find_player_name_active_years for more info) Returns: player_game_raw_data: game by game box score data for every player queried. Returns raw data. ''' player_slug_year = player_slug_year.reset_index() player_slug_year = player_slug_year.drop(columns=['index']) player_game_raw_data = pd.DataFrame() counter = 0 error_counter = 0 error_gate = 0 while counter < len(player_slug_year): player_name = player_slug_year['name'][counter] identifier = player_slug_year['slug'][counter] year = player_slug_year['season_end_year'][counter] try: temp = pd.DataFrame( client.regular_season_player_box_scores( player_identifier=identifier, season_end_year=year)) temp['name'] = player_name temp['slug'] = identifier temp['season_end_year'] = year player_game_raw_data = pd.concat([player_game_raw_data, temp], axis=0) except: temp = pd.DataFrame() if len(temp) > 0: print( f'Player {counter + 1} out of {len(player_slug_year)} completed' ) counter += 1 else: print( f'!!Player {counter + 1} out of {len(player_slug_year)} retrying' ) from basketball_reference_web_scraper import client time.sleep(5) error_counter += 1 if error_counter == 9: print( f'!!SKIPPED Player {counter + 1} out of {len(player_slug_year)} retrying' ) counter += 1 error_counter = 0 error_gate = 1 player_game_raw_data = player_game_raw_data.reset_index() player_game_raw_data = player_game_raw_data.drop(columns=['index']) return player_game_raw_data, error_gate
from basketball_reference_web_scraper import client from basketball_reference_web_scraper.data import OutputType, Team print(client.season_schedule(season_end_year=2021)) client.players_advanced_season_totals( season_end_year=2018, output_type=OutputType.CSV, output_file_path="./2017_2018_player_season_totals.csv" ) client.play_by_play( home_team=Team.BOSTON_CELTICS, year=2018, month=10, day=16, output_type=OutputType.CSV, output_file_path="./2018_10_06_BOS_PBP.csv" ) client.regular_season_player_box_scores( player_identifier="westbru01", season_end_year=2018, output_type=OutputType.CSV, output_file_path="./2017_2018_russell_westbrook_regular_season_box_scores.csv" )