Advertisement
palmux

partite_anno_celtics

Nov 16th, 2024
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.75 KB | Sports | 0 0
  1. from nba_api.stats.endpoints import leaguegamefinder, boxscoretraditionalv2
  2. import pandas as pd
  3. import time
  4.  
  5. class CelticsStats:
  6.     def __init__(self, team_id='1610612738', start_date='2024-10-22', season_id='22024'):
  7.         """
  8.        Inizializza l'oggetto per gestire le statistiche dei Boston Celtics.
  9.        
  10.        :param team_id: ID della squadra (default: Boston Celtics).
  11.        :param start_date: Data di inizio per filtrare le partite.
  12.        :param season_id: ID della stagione NBA (es: '22024' per la stagione 2024-2025).
  13.        """
  14.         self.team_id = team_id
  15.         self.start_date = start_date
  16.         self.season_id = season_id
  17.         self.season_games = None
  18.         self.team_stats = []
  19.         self.top_scorers = []
  20.         self.wins = 0
  21.         self.losses = 0
  22.  
  23.     def fetch_games(self):
  24.         """Scarica i dati delle partite della stagione specificata e li filtra."""
  25.         gamefinder = leaguegamefinder.LeagueGameFinder(team_id_nullable=self.team_id)
  26.         games = gamefinder.get_data_frames()[0]
  27.  
  28.         # Filtrare le partite della stagione e dopo la data di inizio
  29.         self.season_games = games[
  30.             (games['SEASON_ID'] == self.season_id) &
  31.             (games['GAME_DATE'] >= self.start_date)
  32.         ].sort_values('GAME_DATE')
  33.        
  34.         # Selezionare colonne rilevanti
  35.         self.season_games = self.season_games[['GAME_ID', 'GAME_DATE', 'MATCHUP', 'WL', 'PTS', 'PLUS_MINUS']]
  36.         self.season_games.reset_index(drop=True, inplace=True)
  37.         self.season_games.index += 1  # La colonna di indice parte da 1
  38.  
  39.     def process_games(self):
  40.         """Elabora le partite, calcolando statistiche di squadra e il miglior marcatore."""
  41.         for index, row in self.season_games.iterrows():
  42.             game_id = row['GAME_ID']
  43.             matchup = row['MATCHUP']
  44.             game_date = row['GAME_DATE']
  45.             result = row['WL']
  46.             points = row['PTS']
  47.  
  48.             # Incrementare W-L
  49.             if result == 'W':
  50.                 self.wins += 1
  51.             else:
  52.                 self.losses += 1
  53.             w_l_record = f"{self.wins}-{self.losses}"
  54.  
  55.             # Recuperare le statistiche della partita
  56.             boxscore = boxscoretraditionalv2.BoxScoreTraditionalV2(game_id=game_id)
  57.             player_stats = boxscore.player_stats.get_data_frame()
  58.             team_stats_boxscore = boxscore.team_stats.get_data_frame()
  59.  
  60.             # Ottenere il punteggio dell'altra squadra
  61.             opponent_stats = team_stats_boxscore[team_stats_boxscore['TEAM_ABBREVIATION'] != 'BOS']
  62.             opponent_points = opponent_stats['PTS'].iloc[0]
  63.  
  64.             # Filtrare solo i giocatori dei Boston Celtics
  65.             celtics_stats = player_stats[player_stats['TEAM_ABBREVIATION'] == 'BOS']
  66.  
  67.             # Calcolare statistiche di squadra
  68.             team_fg_pct = celtics_stats['FG_PCT'].mean() * 100 if not celtics_stats['FG_PCT'].isna().all() else 0
  69.             team_2pt_attempts = celtics_stats['FGA'] - celtics_stats['FG3A']
  70.             team_2pt_made = celtics_stats['FGM'] - celtics_stats['FG3M']
  71.             team_2pt_pct = (team_2pt_made.sum() / team_2pt_attempts.sum()) * 100 if team_2pt_attempts.sum() > 0 else 0
  72.             team_3pt_pct = celtics_stats['FG3_PCT'].mean() * 100 if not celtics_stats['FG3_PCT'].isna().all() else 0
  73.             team_ft_pct = celtics_stats['FT_PCT'].mean() * 100 if not celtics_stats['FT_PCT'].isna().all() else 0
  74.             team_reb = celtics_stats['REB'].sum()
  75.             team_ast = celtics_stats['AST'].sum()
  76.             team_tov = celtics_stats['TO'].sum()
  77.             team_stl = celtics_stats['STL'].sum()
  78.  
  79.             # Aggiungere statistiche di squadra
  80.             self.team_stats.append({
  81.                 'GAME_DATE': game_date,
  82.                 'MATCHUP': matchup,
  83.                 'PTS_team': points,
  84.                 'PTS_opponent': opponent_points,
  85.                 'W_L': w_l_record,
  86.                 'TEAM_FG%': team_fg_pct,
  87.                 'TEAM_2PT%': team_2pt_pct,
  88.                 'TEAM_3PT%': team_3pt_pct,
  89.                 'TEAM_FT%': team_ft_pct,
  90.                 'TEAM_REB': team_reb,
  91.                 'TEAM_AST': team_ast,
  92.                 'TEAM_TOV': team_tov,
  93.                 'TEAM_STL': team_stl
  94.             })
  95.  
  96.             # Trovare il miglior marcatore
  97.             top_scorer = celtics_stats.loc[celtics_stats['PTS'].idxmax()]
  98.             self.top_scorers.append({
  99.                 'GAME_DATE': game_date,
  100.                 'MATCHUP': matchup,
  101.                 'PLAYER_NAME': top_scorer['PLAYER_NAME'],
  102.                 'PTS_player': top_scorer['PTS']
  103.             })
  104.  
  105.             # Pausa per evitare di sovraccaricare l'API
  106.             time.sleep(1)
  107.  
  108.     def get_final_dataframe(self):
  109.         """Crea un DataFrame finale combinando statistiche di squadra e migliori marcatori."""
  110.         team_stats_df = pd.DataFrame(self.team_stats)
  111.         top_scorers_df = pd.DataFrame(self.top_scorers)
  112.         final_df = pd.merge(
  113.             team_stats_df,
  114.             top_scorers_df,
  115.             on=['GAME_DATE', 'MATCHUP'],
  116.             suffixes=('_team', '_player')
  117.         )
  118.         return final_df
  119.  
  120.     def display_results(self):
  121.         """Mostra i risultati finali."""
  122.         final_df = self.get_final_dataframe()
  123.         print("\nStatistiche di squadra e migliori marcatori:")
  124.         print(final_df[['GAME_DATE', 'MATCHUP', 'PTS_team', 'PTS_opponent', 'W_L', 'TEAM_FG%', 'TEAM_2PT%',
  125.                         'TEAM_3PT%', 'TEAM_FT%', 'TEAM_REB', 'TEAM_AST', 'TEAM_TOV',
  126.                         'TEAM_STL', 'PLAYER_NAME', 'PTS_player']])
  127.  
  128.  
  129. # Esempio di utilizzo
  130. if __name__ == "__main__":
  131.     celtics_stats = CelticsStats()
  132.     celtics_stats.fetch_games()
  133.     celtics_stats.process_games()
  134.     celtics_stats.display_results()
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement