Loading [MathJax]/jax/input/TeX/config.js

2025年7月29日火曜日

nba_apiを使いNBAデータを取得する

NBAデータ取得

NBAデータを分析する場合には、まず最初にデータ取得が必要です。
Kaggleなどのデータサイトから検索してもいいし、データサイトからスクレイピングしてる方もいると思います。
そしてPythonのライブラリからもNBAデータを提供してるものがあるので、それを使ってみたいと思います。
nba_apiです。
使用するには
pip install nba_api
でライブラリをインストールします。

nba_apiライブラリ

nba_apiには、沢山のメソッドがあり、かなり詳しいデータが手に入りますが、反面、どこに何のデータが入ってるか使い方に迷います。
https://github.com/swar/nba_api/tree/masterのサイトにexampleなどもありますが少ししかありません。
https://github.com/swar/nba_api/tree/master/docs/nba_api/stats/endpointsから、メソッド名で当たりをつけ、どれが探してるデータか一つ一つ読んで見つけましょう。

今回は、レギュラーシーズンデータを取得してみたいと思います。
PlayerGameLogsが良さそうなので、それを使います。
  1. #! /usr/bin/env python  
  2.   
  3. import numpy as np  
  4. import pandas as pd  
  5. from nba_api.stats.endpoints import playergamelogs  
  6.   
  7. season_df = playergamelogs.PlayerGameLogs(  
  8.     season_nullable = '2024-25',  
  9. ).player_game_logs.get_data_frame()  
  10.   
  11. print(season_df.head(50))  
  12.     
  13.     

引数 season_nullable に取得したいシーズン '2024-25' を入れます。

player_game_logs.get_data_frame()でデータフレーム形式で取得出来ます。


この様にデータ取得出来ました。

2025年6月18日水曜日

NBA選手シーズンごとの平均リバウンド

NBA選手のシーズン当たりのリバウンド

シーズン毎の得点に続き、シーズン毎のリバウンドを可視化してみます。

外れ値を省くために、1シーズン40試合以上出場した選手で構成しています。

  1. #! /usr/bin/env python  
  2.   
  3. import numpy as np  
  4. import pandas as pd  
  5. import matplotlib.pyplot as plt  
  6. import seaborn as sns  
  7.   
  8. sns.set()  
  9.   
  10. fn = "data/player_per_game.csv"  
  11. df = pd.read_csv(fn)  
  12.   
  13. df2 = df[df["g"] >= 40]   
  14.   
  15. desc = df2.groupby("season")["TRB"].describe()  
  16. print(desc)  

結果


1950年代から60年代がレギュラー選手当たり1試合平均5リバウンド以上と高いですね。maxは歴代シーズンリバウンド王です。
ウィルト・チェンバレン選手やビル・ラッセル選手が1試合当たり20リバウンド以上と今では考えられない数値を叩き出しています。
3ポイントが導入された1980年以降は平均4リバウンド台を安定して推移しています。

現代バスケは3ポイントが重視され、戦略や平均得点が変わっていく中、レギュラー選手たちの平均リバウンド回数は1980年から意外に安定していることが分かります。

2025年6月15日日曜日

NBA選手シーズンごとの平均得点

NBA選手のシーズン当たりの得点

 データを元にシーズン毎の平均得点の推移をグラフ化してみます。

外れ値を省くために、1シーズン40試合以上出場した選手で構成しています。

  1. #! /usr/bin/env python    
  2. import numpy as np  
  3. import pandas as pd  
  4. import matplotlib.pyplot as plt  
  5. import seaborn as sns  
  6.   
  7.   
  8. fn = "data/player_per_game.csv"  
  9. df = pd.read_csv(fn, index_col=0)  
  10.   
  11. df2 = df[df["g"] >= 40]  
  12.   
  13. des = df2.groupby("season")["PPG"].describe()  
  14. print(des)  


  1. plt.figure(figsize=(206))  
  2. plt.xlim(19502024)  
  3. plt.title("points per season")  
  4. sns.lineplot(data=des[["mean""min""max"]])  
  5. plt.show()  

結果



最高得点(max)はシーズン得点王なのでよく知られている通りです。
1962年のウィルト・チェンバレン選手や1987年のマイケル・ジョーダン選手はグラフの山を作っています。
平均を見ると概ね10点超える辺りがレギュラー選手の得点と言えます。
1960〜70年代一時12点台と高く、2000年代に一時落ちてますが3Pが増えた現在は11点台となっています。

nba_apiを使いNBAデータを取得する

NBAデータ取得 NBAデータを分析する場合には、まず最初にデータ取得が必要です。 Kaggleなどのデータサイトから検索してもいいし、データサイトからスクレイピングしてる方もいると思います。 そしてPythonのライブラリからもNBAデータを提供してるものがあるので、それを使っ...