예제 #1
0
def create_game_logs_file(team_id):
    """Creates file for each NBA team containing game info from last season

    :param team_id: ID number of the team
    """
    # team game log
    path = os.path.join(TEAM_BASE_PATH, TEAM_DICT[team_id] + '.json')
    if not os.path.exists(path):
        print("Retrieving team " + TEAM_DICT[team_id] +
              " game log, season stats ... Please wait.")
        game_logs = team.TeamGameLogs(team_id, '2016-17').json
        with open(path, 'w') as outfile:
            json.dump(game_logs, outfile)

    # playoff game log
    playoff_path = os.path.join(TEAM_PLAYOFF_PATH,
                                TEAM_DICT[team_id] + '.json')
    if not os.path.exists(playoff_path):
        playoff_games = team.TeamGameLogs(team_id, '2016-17',
                                          constants.SeasonType.Playoffs).json
        if len(playoff_games['resultSets'][0]['rowSet']):
            with open(playoff_path, 'w') as playoff_files:
                json.dump(playoff_games, playoff_files)

    # season stats
    season_path = os.path.join(TEAM_SEASON_PATH, TEAM_DICT[team_id] + '.json')
    if not os.path.exists(season_path):
        season_stats = team.TeamSeasons(team_id).json
        with open(season_path, 'w') as season_files:
            json.dump(season_stats, season_files)
예제 #2
0
    def get_team_game_log(self) -> Dict[str, pd.DataFrame]:
        """Retrieve individual team game log data using API.
        """
        regular = pd.DataFrame()
        post = pd.DataFrame()
        for _team in self.team_list.itertuples(index=False):
            self.logger.info(f'Retrieving team game log data for {_team.TEAM_ID}')

            data = team.TeamGameLogs(_team.TEAM_ID, season=self.season).info()
            regular = regular.append(data, ignore_index=True)
            data = team.TeamGameLogs(_team.TEAM_ID, season_type=SeasonType.Playoffs, season=self.season).info()
            post = post.append(data, ignore_index=True)
            time.sleep(0.5)

        return {'Regular': regular, 'Post': post}
예제 #3
0
def test():
    team_id = TEAMS['ATL']['id']
    player_id = get_player('Lebron', 'James')
    assert team.TeamList()
    assert team.TeamSummary(team_id)
    team_details = team.TeamDetails(team_id)
    assert team_details
    assert team_details.background()
    assert team_details.history()
    assert team.TeamCommonRoster(team_id)
    assert team.TeamGeneralSplits(team_id)
    assert team.TeamOpponentSplits(team_id)
    assert team.TeamLastNGamesSplits(team_id)
    assert team.TeamInGameSplits(team_id)
    assert team.TeamClutchSplits(team_id)
    assert team.TeamShootingSplits(team_id)
    assert team.TeamPerformanceSplits(team_id)
    assert team.TeamLineups(team_id)
    assert team.TeamPlayers(team_id)
    assert team.TeamPlayerOnOffDetail(team_id)
    assert team.TeamPlayerOnOffSummary(team_id)
    assert team.TeamGameLogs(team_id)
    assert team.TeamShotTracking(team_id)
    assert team.TeamReboundTracking(team_id)
    assert team.TeamPassTracking(team_id)
    assert team.TeamVsPlayer(team_id, player_id)
예제 #4
0
def get_gameDataWithPlayersAndPoints(teamName, season):
    team_id = TEAMS[teamName]['id']
    df = team.TeamGameLogs(team_id, season).info()
    print(df[:5])
    #   For each game get the players who played and the points and add them to the dataframe line
    for g in df["Game_ID"]:
        print(g)
        player_stats = game.BoxscoreAdvanced(g).sql_players_advanced()
        print("columns:::", list(player_stats))
        print(player_stats)

        players = player_stats["PLAYER_NAME"].values
        minutes = player_stats["MIN"].values
        #points = player_stats["PTS"].values
        teamStartIndices = np.where(
            player_stats["START_POSITION"].values == 'F')[0]
        home_team_players = players[:teamStartIndices[2]]
        away_team_players = players[:teamStartIndices[2]]

        #   Remove players who didn't play
        notPlayingPlayers = np.where(player_stats["MIN"].isnull())[0]
        players = np.delete(players, notPlayingPlayers)
        #points = np.delete(points, notPlayingPlayers)
        #player_stats["PLAYER_NAME"] = players
        #df = df.assign(player_stats=pd.Series(player_stats).values)
        print("------")

        break
    return df
예제 #5
0
def custom_boxscore(roster_id):

    game_logs = team.TeamGameLogs(roster_id)

    df_game_logs = game_logs.info()
    df_game_logs['GAME_DATE'] = pd.to_datetime(df_game_logs['GAME_DATE'])
    df_game_logs['DAYS_REST'] = df_game_logs['GAME_DATE'] - df_game_logs[
        'GAME_DATE'].shift(-1)
    df_game_logs['DAYS_REST'] = df_game_logs['DAYS_REST'].astype(
        'timedelta64[D]')

    df_all = pd.DataFrame()  ##blank dataframe

    dates = df_game_logs['GAME_DATE']

    for date in dates:

        game_info = team.TeamPassTracking(roster_id,
                                          date_from=date,
                                          date_to=date).passes_made()
        game_info[
            'GAME_DATE'] = date  ## We need to append the date to this so we can  join back

        temp_df = game_info.groupby(['GAME_DATE']).sum()
        temp_df.reset_index(level=0, inplace=True)

        ##now to get the shot info. For the most part, we're just reusing code we've already written
        open_info = team.TeamShotTracking(
            roster_id, date_from=date,
            date_to=date).closest_defender_shooting()
        open_info['OPEN'] = open_info['CLOSE_DEF_DIST_RANGE'].map(
            lambda x: True if 'Open' in x else False)

        temp_df['OPEN_SHOTS'] = open_info.loc[open_info['OPEN'] == True,
                                              'FGA'].sum()
        temp_df['OPEN_EFG'] = (
            open_info.loc[open_info['OPEN'] == True, 'FGM'].sum() +
            (.5 * open_info.loc[open_info['OPEN'] == True, 'FG3M'].sum())) / (
                open_info.loc[open_info['OPEN'] == True, 'FGA'].sum())
        temp_df['COVERED_EFG'] = (
            open_info.loc[open_info['OPEN'] == False, 'FGM'].sum() +
            (.5 * open_info.loc[open_info['OPEN'] == False, 'FG3M'].sum())) / (
                open_info.loc[open_info['OPEN'] == False, 'FGA'].sum())

        ##append this to our bigger dataframe
        df_all = df_all.append(temp_df)

    df_boxscore = pd.merge(df_game_logs,
                           df_all[[
                               'PASS', 'FG2M', 'FG2_PCT', 'OPEN_SHOTS',
                               'OPEN_EFG', 'COVERED_EFG'
                           ]],
                           how='left',
                           left_on=df_game_logs['GAME_DATE'],
                           right_on=df_all['GAME_DATE'])
    df_boxscore['PASS_AST'] = df_boxscore['PASS'] / df_boxscore['AST']
    df_boxscore['RESULT'] = df_boxscore['WL'].map(lambda x: 1
                                                  if 'W' in x else 0)

    return df_boxscore
예제 #6
0
def teams(teamid):
    """Specific team pages.
    """
    team_summary = team.TeamSummary(teamid)
    team_summary_info = team_summary.info()
    team_season_ranks = team_summary.season_ranks()

    team_common_roster = team.TeamCommonRoster(teamid)
    roster = team_common_roster.roster()
    coaches = team_common_roster.coaches()

    season = team_summary_info[0]["SEASON_YEAR"]

    team_game_log = team.TeamGameLogs(teamid, season=season)
    team_games = team_game_log.info()

    playoffs_teamgamelogs = team.TeamGameLogs(teamid,
                                              season=season,
                                              season_type="Playoffs")
    playoffs_team_games = playoffs_teamgamelogs.info()

    team_season = team.TeamSeasons(teamid)
    team_season_info = team_season.info()

    for i in team_season_info:
        if (i["YEAR"] == season):
            current_season_info = i

    return render_template("teams.html",
                           title=team_summary_info[0]["TEAM_CITY"] + " " +
                           team_summary_info[0]["TEAM_NAME"],
                           teamid=teamid,
                           team_summary_info=team_summary_info,
                           team_season_ranks=team_season_ranks,
                           season=season,
                           team_games=team_games,
                           playoffs_team_games=playoffs_team_games,
                           team_season=team_season_info,
                           roster=roster,
                           coaches=coaches,
                           current_season_info=current_season_info,
                           team_img=TEAM_ID_DATA)
예제 #7
0
def get_team_game_logs(team_id, season='2016-17'):
    try:
        team_info = pd.read_pickle('team_game_logs/' + str(team_id) + '-' +
                                   season + '.pckl')
    except FileNotFoundError:
        print('File not found')
        team_info = team.TeamGameLogs(team_id, season=season)
        team_info = team_info.info()
        team_info.to_pickle('team_game_logs/' + str(team_id) + '-' + season +
                            '.pckl')
    return team_info
예제 #8
0
def load_team_game_data_at_year(teamName, year):
  teamId = TEAMS[teamName]['id']
  season = get_season(year)
  header = ['Team_ID', 'Game_ID', 'GAME_DATE', 'MATCHUP', 'WL', 'MIN', 'FGM',
            'FGA', 'FG_PCT', 'FG3M',
            'FG3A', 'FG3_PCT', 'FTM', 'FTA', 'FT_PCT',
            'OREB', 'DREB', 'REB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'PTS']
  gameData = team.TeamGameLogs(teamId, season).info()
  gameData = gameData[header]
  gameData['Season'] = season

  return gameData
예제 #9
0
def teams_and_season(teamid, season):
    # season example: "2016-17"
    # type example: "Regular Season" or "Playoffs"
    team_game_log = team.TeamGameLogs(teamid, season=season)
    team_games = team_game_log.info()

    playoffs_teamgamelogs = team.TeamGameLogs(teamid,
                                              season=season,
                                              season_type="Playoffs")
    playoffs_team_games = playoffs_teamgamelogs.info()

    team_summary = team.TeamSummary(teamid, season=season)
    team_summary_info = team_summary.info()
    team_season_ranks = team_summary.season_ranks()

    team_common_roster = team.TeamCommonRoster(teamid)
    roster = team_common_roster.roster()
    coaches = team_common_roster.coaches()

    team_season = team.TeamSeasons(teamid)
    team_season_info = team_season.info()

    for i in team_season_info:
        if (i["YEAR"] == season):
            current_season_info = i

    return render_template("teams.html",
                           title=team_summary_info[0]["TEAM_CITY"] + " " +
                           team_summary_info[0]["TEAM_NAME"],
                           teamid=teamid,
                           team_summary_info=team_summary_info,
                           team_season_ranks=team_season_ranks,
                           season=season,
                           team_games=team_games,
                           playoffs_team_games=playoffs_team_games,
                           current_season_info=current_season_info,
                           team_img=TEAM_ID_DATA)
예제 #10
0
def get_gameDataWithTeamsAndPoints(teamName, season):
    teamsPlayingArray = []
    teamPointsArray = []

    team_id = TEAMS[teamName]['id']
    df = team.TeamGameLogs(team_id, season).info()

    gameIds = df["Game_ID"].values
    #   For each game get the teams who played and the points and add them to the dataframe line
    i = 0
    percentDone = 0
    for matchup in df["MATCHUP"]:
        print("%s %f " % (teamName, i / len(gameIds)))
        teamsVector = np.zeros(2 * len(teamToIndex))
        pointsVector = np.zeros(2 * len(teamToIndex))
        team_stats = game.Boxscore(gameIds[i]).team_stats()
        home = 0
        if '@' in matchup:
            home = 0
        else:
            home = 1
        teams = matchup.split(" ")
        ##        if(teams[0] not in teamToIndex.keys() or )
        t1Index = teamToIndex[teams[0]]
        t2Index = teamToIndex[teams[2]]
        if (team_stats["TEAM_ID"].values[0] == teamName):
            teamNamePoints = team_stats["PTS"].values[0]
            otherPoints = team_stats["PTS"].values[1]
        else:
            teamNamePoints = team_stats["PTS"].values[1]
            otherPoints = team_stats["PTS"].values[0]
        if home:
            teamsVector[t1Index] = 1
            teamsVector[t2Index + len(teamToIndex)] = 1

            pointsVector[t1Index] = teamNamePoints
            pointsVector[t2Index + len(teamToIndex)] = otherPoints
        else:
            teamsVector[t2Index] = 1
            teamsVector[t1Index + len(teamToIndex)] = 1
            pointsVector[t2Index] = otherPoints
            pointsVector[t1Index + len(teamToIndex)] = teamNamePoints

        teamsPlayingArray.append(teamsVector)
        teamPointsArray.append(pointsVector)
        i += 1
    df = df.assign(teams=pd.Series(teamsPlayingArray).values)
    df = df.assign(points=pd.Series(teamPointsArray).values)
    return df
예제 #11
0
def get_games_list(team_abbr):

    gamelogs = team.TeamGameLogs(team_id=TEAMS[team_abbr]['id']).json

    headers = gamelogs['resultSets'][0]['headers']

    games_playbyplay = gamelogs['resultSets'][0]['rowSet']

    game_id_list = []

    for single_game in games_playbyplay:
        game_id = single_game[1]
        game_id_list.append(game_id)

    return game_id_list
예제 #12
0
def load_custom_data(teamName, season, opponentTeam):
    #df = team.TeamOpponentSplits(TEAMS[teamName]['id'],location='Home',season=get_season(season),
    #                               opponent_team_id =TEAMS[opponentTeam]['id']).by_opponent()
    df = game.BoxscoreSummary(game_id='0041400122').line_score()
    #df = team.TeamGameLogs(TEAMS[teamName]['id'], get_season(season)).info()
    lf = Scoreboard().east_conf_standings_by_day()
    #df = team.TeamYearOverYearSplits(TEAMS[teamName]['id'], measure_type='Advanced',season=get_season(season), opponent_team_id =TEAMS[opponentTeam]['id']).by_year()
    #df = team.TeamOpponentSplits(TEAMS[teamName]['id'], measure_type='Advanced', season=get_season(season),                                 opponent_team_id=TEAMS[opponentTeam]['id']).by_opponent()
    print(list(lf))
    print(lf)
    print(list(df))
    print(df)
    #print(list(df))
    #return df
    df1 = team.TeamGameLogs(TEAMS[teamName]['id'], get_season(season)).info()
    #df1 = team.TeamLineups(TEAMS['MIL']['id']).overall()
    print(list(df1))
    return df1
예제 #13
0
 def load_team_game_logs(self):
     print("saving team game logs to database")
     print("=================================")
     for season in self.seasons:
         for team in TEAMS.itervalues():
             # check if logs already stored
             if self.db.team_game_logs.count({"SEASON_ID": season_to_season_id(season),
                                         "TEAM_ID": team['id']}) > 0:
                 print("team game logs for {} {} already exists, skipping".format(season, team['name']))
                 continue
             print("storing team game logs for {} {}".format(season, team['name']))
             ap = nba_py_team.TeamGameLogs(team_id=team['id'], season=season)
             results = ap.info()
             if isinstance(results, pandas.DataFrame):
                 results = results.to_dict("records")
             for result in results:
                 result['SEASON_ID'] = season_to_season_id(season)
                 result['TEAM_ID'] = str(result['Team_ID'])
                 del result['Team_ID']
             self.db.team_game_logs.insert_many(results)
예제 #14
0
def load_player_game_data_at_year(teamName, year):
  teamId = TEAMS[teamName]['id']
  season = get_season(year)
  gameData = team.TeamGameLogs(teamId, season).info()
  playerData = pd.DataFrame()
  header = ['GAME_ID', 'TEAM_ID', 'PLAYER_ID', 'START_POSITION',
            'MIN', 'FGM', 'FGA', 'FG_PCT', 'FG3M', 'FG3A', 'FG3_PCT',
            'FTM', 'FTA', 'FT_PCT', 'OREB', 'DREB', 'REB', 'AST', 'STL',
            'BLK', 'TO', 'PF', 'PTS', 'PLUS_MINUS']
  visited = set()
  i = 1
  for g in gameData["Game_ID"]:
    print(i)
    i += 1
    if (g in visited):
      continue
    visited.add(g)
    temp = game.Boxscore(g).player_stats()
    temp = temp[header]
    playerData = playerData.append(temp)

    time.sleep(5)

  return playerData
예제 #15
0
 def testAll(self):
     assert team.TeamList()
     assert team.TeamSummary(self.teamId)
     team_details = team.TeamDetails(self.teamId)
     assert team_details
     # assert team_details.background()
     # assert team_details.history()
     assert team.TeamCommonRoster(self.teamId)
     assert team.TeamGeneralSplits(self.teamId)
     assert team.TeamOpponentSplits(self.teamId)
     assert team.TeamLastNGamesSplits(self.teamId)
     assert team.TeamInGameSplits(self.teamId)
     assert team.TeamClutchSplits(self.teamId)
     assert team.TeamShootingSplits(self.teamId)
     assert team.TeamPerformanceSplits(self.teamId)
     assert team.TeamLineups(self.teamId)
     assert team.TeamPlayers(self.teamId)
     assert team.TeamPlayerOnOffDetail(self.teamId)
     assert team.TeamPlayerOnOffSummary(self.teamId)
     assert team.TeamGameLogs(self.teamId)
     assert team.TeamShotTracking(self.teamId)
     assert team.TeamReboundTracking(self.teamId)
     assert team.TeamPassTracking(self.teamId)
     assert team.TeamVsPlayer(self.teamId, self.playerId)
예제 #16
0
def get_teamBoxScore(teamName, season):
    #Use nba_py to load data
    team_id = TEAMS[teamName]['id']
    df = team.TeamGameLogs(team_id, season).info()
    #print("game_logs:::",df)
    return df
예제 #17
0
    seasonid = int(season[:4] + season[-2:])

    #if 1:
    print('\nQuerying Team Data...')

    start_time = time.time()

    game_list = pd.DataFrame()
    # Loop through teams here
    for teamid in team_list.index:
        if teamid:
            #error_ct = 0
            #while error_ct < 3:
            #try:
            print('  Querying ' + team_list.ix[teamid].TEAM_NAME + ' data...')
            game_temp = team.TeamGameLogs(teamid, season=season).info()
            '''
                    error_ct = 3
                except:
                    print '  Failed!'
                    error_ct += 1
                    time.sleep(1)
            '''

            game_temp.set_index('Game_ID', inplace=True)

            # Add Home Game flag for unique games
            mask = game_temp.MATCHUP.str.contains('vs.')

            game_temp['Home_Flag'] = mask.astype(int)
예제 #18
0
team_list = team.TeamList().info(
)  # retrieve list of dicts that stores team info

# store game logs for each team in json file
for t in team_list:

    if t['ABBREVIATION'] is None:
        continue

    filepath = "team_stats_2010/" + t['ABBREVIATION'] + '.json'
    print(filepath)
    logs = None

    for year in range(2010, int(t['MAX_YEAR']) + 1):
        next_year = str((year + 1) % 100)

        if len(next_year) == 1:
            next_year = '0' + next_year

        season = str(year) + '-' + next_year
        print(season)
        season_log = team.TeamGameLogs(t['TEAM_ID'], season=season).info()

        if not logs:
            logs = season_log
        else:
            logs += season_log

    with open(filepath, 'w') as f:
        json.dump(logs, f)