def test_get_stats(self): df = get_stats('LaMarcus Aldridge') expected_columns = ['Season', 'Age', 'Tm', 'Lg', 'Pos', 'G', 'GS', 'MP', 'FG', 'FGA', 'FG%', '3P', '3PA', '3P%', '2P', '2PA', '2P%', 'eFG%', 'FT', 'FTA', 'FT%', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'PTS'] self.assertListEqual(list(df.columns), expected_columns) df = get_stats('LaMarcus Aldridge', career=True) expected_columns = ['Season', 'Tm', 'Lg', 'G', 'GS', 'MP', 'FG', 'FGA', 'FG%', '3P', '3PA', '3P%', '2P', '2PA', '2P%', 'eFG%', 'FT', 'FTA', 'FT%', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'PTS'] self.assertListEqual(list(df.columns), expected_columns) df = get_stats('LaMarcus Aldridge', playoffs=True, career=True) expected_columns = ['Season', 'Tm', 'Lg', 'G', 'GS', 'MP', 'FG', 'FGA', 'FG%', '3P', '3PA', '3P%', '2P', '2PA', '2P%', 'eFG%', 'FT', 'FTA', 'FT%', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'PTS'] self.assertListEqual(list(df.columns), expected_columns)
def test_get_stats(self): expected_columns = [ 'SEASON', 'AGE', 'TEAM', 'LEAGUE', 'POS', 'G', 'GS', 'MP', 'FG', 'FGA', 'FG%', '3P', '3PA', '3P%', '2P', '2PA', '2P%', 'eFG%', 'FT', 'FTA', 'FT%', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'PTS' ] df = get_stats('LaMarcus Aldridge') self.assertCountEqual(list(df.columns), expected_columns) df = get_stats('LaMarcus Aldridge', career=True) self.assertCountEqual(list(df.columns), expected_columns) df = get_stats('LaMarcus Aldridge', playoffs=True, career=True) self.assertCountEqual(list(df.columns), expected_columns)
def player(): if request.method == 'GET': return f"The URL /player is accessed directly. Try going to '/' to search for player" form_data = request.form name = form_data['player'] year = form_data['year'] name = name.title() try: stats = get_stats(name, 'PER_GAME', ask_matches=False) except: return render_template('error.html') pl = stats[[ 'SEASON', 'TEAM', 'PTS', 'TRB', 'AST', 'STL', 'BLK', 'FG%', '3P%' ]] cur_season = pl.loc[pl['SEASON'] == year] pic = get_player_headshot(name, ask_matches=False) return render_template('base.html', data=cur_season.to_html( classes='table table-striped', index=False, col_space=100, justify='match-parent'), name=name, pic=pic, year=year)
def view_mvp_candidates(): mvp_candidates = [ 'LeBron James', 'Giannis Antetokounmpo', 'James Harden', 'Anthony Davis', 'Kawhi Leonard', 'Jimmy Butler', 'Chris Paul' ] display_rank = 1 for mvp_candidate in mvp_candidates: print(f"Our Ranking #{display_rank}: {mvp_candidate}") display_rank += 1 print() mvp_candidate = input("Whose stats would like to see? ") # ADD Check Condition Here. # Loop if Player not one of the above. # Error when entry is 1. game_logs = get_game_logs(mvp_candidate, '2019-10-22', '2020-03-01', playoffs=False) game_stats = get_stats(mvp_candidate, stat_type='PER_GAME', playoffs=False, career=False) print(f"-----------{mvp_candidate}'s 2019-2020 GAME LOGS-----------") print(game_logs) print(f"-----------{mvp_candidate}'s CAREER GAME STATS-----------") print(game_stats)
def scrap_roster(roster=None, suffixes=None): if roster is not None: for raw_player_name in roster["PLAYER"]: try: player_name = clean_player_name(raw_player_name) player_data = get_stats(player_name, suffixes=suffixes) print(player_data) except: scrap_failures.append(raw_player_name)
def player_stats(player, stat_type, playoffs, career): print("Saving into excel sheet... ") writer = ExcelWriter("./Excel-Sheets/%s_STATS__%s_REGULAR.xlsx" % (player.upper(), stat_type)) sheet_name = player.upper() + "- REGULAR" if playoffs: writer = ExcelWriter("./Excel-Sheets/%s_STATS_%s_PLAYOFFS.xlsx" % (player.upper(), stat_type)) sheet_name = player.upper() + "-PLAYOFFS" player_stats_df = get_stats(player, stat_type, playoffs, career) player_stats_df.to_excel(writer, sheet_name=sheet_name, startrow=0, startcol=0, index=False, header=True) writer.save()
def get_missing_win_shares(injury_report, team): team_injuries = injury_report.loc[injury_report['TEAM'] == team] team_injuries = team_injuries.loc[team_injuries['STATUS'] == 'Out'] team_injuries = list(team_injuries['PLAYER']) win_shares = 0 for player in team_injuries: try: player_stats = get_stats(player, stat_type='ADVANCED').tail(1) if not player_stats.loc[player_stats['SEASON'] == '2019-20'].empty: win_shares += list(player_stats['WS'])[0] except: pass return round(win_shares)
def get_player_df(players, stat_type, stat, playoffs, player_labels): """ Get dataframe from basketball_scraper :param players: list of player names :return: """ if not player_labels: player_labels = players players_df = [] for player, player_label in zip(players, player_labels): player_df = bball_players.get_stats(player, stat_type, playoffs) player_df = df_format(player_df, stat) players_df.append((player_df, player_label)) return players_df
def get_playoff_minutes(row): p = row['PLAYER'] print('processing: ' + p) # fix encoding issue from bballref table scrape # č = ć, but is coming in as just Ä, which is invalid try: player = p.encode('cp1252').decode() except: print('encoding error ' + p) index = p.find('Ä') while index > -1 and index <= len(p): try: s = 'Ä' + p[index + 1] s.encode('cp1252').decode() index += 1 except: p = p[:index + 1] + '‡' + p[index + 1:] index = p.find('Ä', index) player = p.encode('cp1252', 'ignore').decode() print('encoding error fixed: ' + player) try: player_df = get_stats(player, stat_type='TOTALS', playoffs=True, career=True, ask_matches=False) if not player_df.empty: return player_df['MP'].sum() except (ValueError, IndexError): return 0 except: print('api error ' + player) return 0
def user_input(): team_or_player = input("What stats would you like to see: (1)Team or (2)Player ") if team_or_player == '1': user_team = input("What team would you like to view? ") user_season = int(input("Enter the desired season: ")) user_stats = input("Enter the number for what stat you would like to see: \n1.) Roster List\n" "2.) Team Stats\n" "3.) Team Opponent Stats\n" "4.) Roster Stats\n" "5.) Misc Stats\n") print_or_excel = input("Would you like to save information in an excel sheet (Y/N)? ").upper() if user_stats == '1': if print_or_excel == 'Y': roster_list(user_team, user_season) print("Saved") elif print_or_excel == 'N': print(get_roster(user_team, user_season)) elif user_stats == '2': data_format = input("Enter data format: (TOTAL | PER_GAME): ").upper() if print_or_excel == 'Y': team_stats(user_team, user_season, data_format) print(get_team_stats(user_team, user_season, data_format)) elif print_or_excel == 'N': print(get_team_stats(user_team, user_season, data_format)) elif user_stats == '3': data_format = input("Enter data format: (TOTAL | PER_GAME: ").upper() if print_or_excel == 'Y': team_opp_stats(user_team, user_season, data_format) print(get_opp_stats(user_team, user_season, data_format)) elif print_or_excel == 'N' or 'n': print(get_opp_stats(user_team, user_season, data_format)) elif user_stats == '4': user_playoffs = input("Would you like playoff roster stats? (Y/N) ") data_format = input("Enter data format: (TOTAL | PER_GAME): ").upper() playoffs = False if user_playoffs == 'Y': playoffs = True if print_or_excel == 'Y': roster_stats(user_team, user_season, data_format, playoffs) print(get_roster_stats(user_team, user_season, data_format, playoffs)) elif print_or_excel == 'N': print(get_roster_stats(user_team, user_season, data_format, playoffs)) elif user_stats == '5': if print_or_excel == 'Y': team_misc(user_team, user_season) print(get_team_misc(user_team, user_season)) elif print_or_excel == 'N': print(get_team_misc(user_team, user_season)) elif team_or_player == '2': user_player = input('What player do you like to view? ') print_or_excel = input("Save into excel sheet? (Y/N): ").upper() user_stats = input("Enter the number for what stat you would like to see: \n" "1.) Player Stats\n" "2.) Game Logs\n") user_playoffs = input("Playoff Stats? (Y/N): ").upper() if user_stats == '1': stat_type = input("Enter stat type: (PER_GAME | PER_MINUTE | PER_POSS | ADVANCED): ").upper() user_career = input("Career Stats? (Y/N): ").upper() if user_playoffs == 'Y': playoffs = True else: playoffs = False if user_career == 'Y': career = True else: career = False if print_or_excel == "Y": player_stats(user_player, stat_type, playoffs, career) print(get_stats(user_player, stat_type, playoffs, career)) elif print_or_excel == "N": print(get_stats(user_player, stat_type, playoffs, career)) elif user_stats == '2': user_start_date = input("Enter start date: (YYYY-MM-DD): ").upper() user_end_date = input("Enter end date: (YYYY-MM-DD): ") if user_playoffs == 'Y': playoffs = True else: playoffs = False if print_or_excel == "Y": player_game_logs(user_player, user_start_date, user_end_date, playoffs) print(get_game_logs(user_player, user_start_date, user_end_date, playoffs)) elif print_or_excel == "N": print(get_game_logs(user_player, user_start_date, user_end_date, playoffs))
#Get team roster stats bulls_2020 = get_roster_stats('CHI', 2020) #Select individual player bulls_2020[bulls_2020.PLAYER == "Coby White"] ''' Get individual players name - Player full name (e.g. 'LaMarcus Aldridge') stat_type - One of 'PER_GAME', 'PER_MINUTE', 'PER_POSS', 'ADVANCED' playoffs - Whether to return Playoff stats or not. One of True|False. Default value is False career - Whether to return career stats or not. One of True|False. Default value is False ''' coby = get_stats("Coby White", stat_type='ADVANCED', playoffs=False, career=False) coby.head(10) d = get_player_headshot('Coby White') d = get_shot_chart('2019-12-28', 'TOR', 'BOS') #Import college players from sportsreference.ncaab.roster import Player as pl player_ncaa = pl('kenyon-martin-1') #get available object variables dir(player_ncaa) player_ncaa.dataframe.iloc[-2, :]
#Script to get NBA roster from a certain year from basketball_reference_scraper.teams import get_roster roster = get_roster('CLE', 2016) print("\nCleveland Cavaliers 2016 Roster:") print(roster) #Script to retrieve an indiviual player's stats by year from basketball_reference_scraper.players import get_stats stats = get_stats('Collin Sexton', stat_type='PER_GAME') print("\nCollin Sexton Stats:") print(stats) #Script to get NBA standing on a certain date from basketball_reference_scraper.seasons import get_standings standings = get_standings() print("\nCurrent NBA Standings:") print(standings)
s = get_team_stats('GSW', 2019, data_format='PER_GAME') print(s) s = get_opp_stats('GSW', 2019, data_format='PER_GAME') print(s) s = get_roster_stats('GSW', 2019, data_format='PER_GAME', playoffs=False) print(s) s = get_team_misc('GSW', 2019) print(s) from basketball_reference_scraper.players import get_stats, get_game_logs s = get_stats('Stephen Curry', stat_type='PER_GAME', playoffs=False, career=False) print(s) df = get_game_logs('LeBron James', '2010-01-19', '2014-01-20', playoffs=False) print(df) from basketball_reference_scraper.seasons import get_schedule, get_standings s = get_schedule(2018, playoffs=False) print(s) s = get_standings(date='2020-01-06') print(s) from basketball_reference_scraper.box_scores import get_box_scores
#Documentation for library #https://github.com/vishaalagartha/basketball_reference_scraper #dependencies import pandas as pd import numpy as np import os from basketball_reference_scraper.players import get_stats, get_game_logs, get_player_headshot import scipy.stats as st import matplotlib.pyplot as plt # GEt stats player_input = input("Please Enter an NBA Player: ") player_stats = get_stats(player_input) #Graphing x = (player_stats["MP"]) xx = x.dropna() y = player_stats["FGA"] yy = y.dropna() plt.scatter(x, y) plt.xlabel("Minutes") plt.ylabel("Points") #Linear Regression #import scipy.stats as st cor = round(st.pearsonr(x, y)[0], 2) print(f"The correlation between minutes and game score is {cor}") model = st.linregress(xx, yy)