はじめに
僕はバスケ観戦が趣味で、BリーグやNBAといった国内外のリーグの試合をよく観ます。迫力のあるプレーを観るのも好きですが、試合のスタッツを見ることも好きです。昨今スタッツの分析はすごく行われるようになっており、NBAでは以下のサイトで見れるようなデータを取得できる API が提供されています。
今回は nba_api という Python の API クライアントを使って、とある選手のシュートチャートを描いてみようと思います。
NBA選手のシュートチャートを描いてみた
前提
今回は Google Colab を使って、コードを動かしていきます。
使うパッケージのバージョンは以下です。
- nba_api v1.5.0
- matplotlib v3.7.1
- seaborn v0.13.1
- pandas v2.0.3
また今回扱う選手は、僕の好きな D'Angelo Russell 選手の 2023-24 シーズンのスタッツを扱います。
本題
まずは必要なライブラリをインストールします。
!pip install nba_api
インストールが完了したら、レギュラーシーズンのシュートの情報を取得します。そして、取得した情報をもとにシュートチャートを描画します。
from nba_api.stats.endpoints import shotchartdetail
import pandas
import matplotlib.pyplot as plt
import seaborn as sns
player_id = '1626156'
season = '2023-24'
shot_chart = shotchartdetail.ShotChartDetail(
team_id=0,
player_id=player_id,
season_nullable=season,
season_type_all_star='Regular Season'
)
shot_chart_df = shot_chart.get_data_frames()[0]
plt.figure()
sns.scatterplot(
data=shot_chart_df,
x='LOC_X',
y='LOC_Y',
)
plt.show()
上記のコードを実行してみると、以下のようなチャートが描けました。
なんとなくではありますが、ゴール下やスリーポイントラインが見えてきますね。
このままだとラインが描画されないので、以下の記事に従ってラインを描画しました。
結果がこちらです。
改めて見ると、ウイングの位置からのスリーポイントやペイントエリア、ゴール下からたくさんシュートがシュートが決まっていることがわかります。
さいごに
今回は、NBA選手のシュートチャートを描いてみました。今回はシュートチャートでしたが、NBAではたくさんのスタッツが公開されていています。またどこかで提供されているスタッツを使って、何か分析してみようと思います。