今回は、Play-by-Play Dataに記録されているフィールドショットや試合時間などの情報を利用して、統計ソフトRによるフィールドショットの期待得点に関する密度推定のグラフの作成方法を紹介していきます。
使用するデータは、2022-23シーズンのPbP. BDBとTadd(過去記事参照)となります。
なお、NBA2022-23シーズンにおける平均得点の上位3プレイヤーはジョエル・エンビード、ルカ・ドンチッチ、デイミアン・リラードとなっていることから、今回はこれら3プレイヤーの期待得点に関する密度推定のグラフを作成していきます。(※NBA2022-23シーズンにおける平均得点の数値は、NBA公式ウェブサイトを参照しています。)
まずは、密度推定のグラフを作成する際に使用する各項目の内容から確認していきます。
※データ分析を実践する際に参考にしている書籍『Basketball Data Science: With Applications in R』の紹介記事も書きましたので、よろしければご確認ください。
分析で使用する項目<Play length、Period time、Total time、Shot distance、Expected points>
今回、密度推定によるグラフを作成する際には、下記の5項目を使用します。
- Play length:ショットクロックの経過時間を秒単位(0秒~24秒まで)で示す。
- Period time:クォーターの経過時間を秒単位(クォーター開始0秒~クォーター終了720秒まで)で示す。
- Total time:試合の経過時間を秒単位(試合開始0秒~試合終了2880秒まで)で示す。(※オーバータイムの場合は2880秒を超える数値が用いられる。)
- Shot distance:フィールドショットを放った地点からリングまでの距離(単位:フィート)を示す。
- Expected points:フィールドショットを放った際に獲得が期待される得点を示す。
今回は、上記の5項目を使用してPlay lengthの各時点に対応するフィールドショットの期待得点や、Shot distanceの各地点におけるフィールドショットの期待得点などを確認していきます。
フィールドショットの期待得点の推移<ジョエル・エンビード、ルカ・ドンチッチ、デイミアン・リラードのフィールドショットの期待得点を確認>
横軸にPlay length、Period time、Total time、Shot distanceの4項目をそれぞれ示し、縦軸にフィールドショットの期待得点を対応させた密度推定によるグラフは下記のとおりです。
上記のグラフを考慮すると、NBA2022-23シーズンにおけるジョエル・エンビード、ルカ・ドンチッチ、デイミアン・リラードのフィールドショットの期待得点に関しては、下記のような特徴を読み取ることが出来ます。
- ジョエル・エンビード:
①Play lengthに関しては、ショットクロック開始序盤に期待得点は最も高い約1.25点を示し、ショットクロックが進むにつれて減少していく。
②Period timeに関しては、600秒付近まで期待得点は約1.125点前後で推移していくが、600秒付近以降はクォーター終了まで期待得点は減少していく。
③Total timeに関してはPlay lengthと同様の傾向があり、試合開始直後に期待得点は最も高い約1.15点を示し、試合が進むにつれて減少していく。
④Shot distanceに関しては、0~約10フィートの区間は一貫して期待得点が減少し、ミドルレンジの区間(約10~22フィート)において期待得点は約1.0点前後で推移した後、約22フィート(スリーポイントラインの目安)以降は再び期待得点は減少していく。 - ルカ・ドンチッチ:
①Play lengthに関しては、ショットクロック開始~7秒付近まで期待得点は増加を続け、ピークである約1.2点に達した後、ショットクロック終了まで減少していく。
②Period timeに関しては、クォーター序盤において期待得点は減少傾向だが、240秒付近を境に一転して増加に転じる。クォーター中盤において期待得点は増加を続け480秒付近で1.15点を超えるが、クォーター終盤は再び期待得点は減少していく。
③Total timeに関しては、試合序盤において期待得点は増加を続け、960秒付近で1.175点を超えるが、その後は試合終了まで一貫して減少していく。
④Shot distanceに関しては、0~約17フィートの区間において期待得点は一貫して減少するが、約17~25フィートの区間においては若干の上昇傾向が見られ、期待得点が1.0点を超える水準まで上昇する。その後、約25フィート以降においては再び期待得点は減少していく。 - デイミアン・リラード:
①Play lengthに関しては、ショットクロック開始から期待得点は概ね増加傾向を示し、20秒付近で1.25点に近い水準となった後、ショットクロック終了まで減少していく。
②Period timeに関しては、クォーター序盤において期待得点は減少していくが、220秒付近を境に一転して増加に転じる。クォーター中盤においては400秒付近まで期待得点は増加を続けるが、400秒付近を境に再び減少していく。
③Total timeに関しては、試合開始から期待得点は増加を続け、1920秒付近で最も高い約1.175点を示した後、試合終了まで減少していく。
④Shot distanceに関しては、0~約10フィートの区間は一貫して期待得点が減少するが、ミドルレンジの区間(約10~22フィート)においては期待得点の若干の増加傾向が見られる。約22フィート以降は再び期待得点は減少していくが、40フィートの手前で小幅に増加した後、再び期待得点は減少していく。
なお、上記のグラフを出力するコマンドは下記のとおりです。
> library(BasketballAnalyzeR) #パッケージBasketballAnalyzeRの読み込み
> dts.PbP.2223 <- read.csv(file="PbP. BDB_2223.csv") # PbP. BDB2223の読み込み
> PbP2223 <- PbPmanipulation(dts.PbP.2223) # PbPmanipulation()でPbP2223を作成
> data2223 <- subset(PbP2223, player=="Joel Embiid" & result!="" | player=="Luka Doncic" & result!="" | player=="Damian Lillard" & result!="") #PbP2223からplayerが3プレイヤーと一致し、かつショットのresult欄が空欄となっている行を除外し、data2223へ格納
> pl <- c("Joel Embiid","Luka Doncic", "Damian Lillard") #c()を使ってJoel Embiid, Luka Doncic, Damian Lillardをplへ格納
> mypal <- colorRampPalette(c("red","green")) #colorRampPalette()でパレットを作成
> sel1 <- expectedpts(data=data2223, players=pl, col.team="transparent", palette=mypal, col.hline="transparent", var="playlength", xlab="Play length") #expectedpts()でplayersをplに指定し、playlengthに関する密度推定のグラフをsel1へ格納
> sel2 <-expectedpts(data=data2223, bw=300, players=pl, col.team="transparent", palette=mypal, col.hline="transparent", var="periodTime", xlab="Period time") #expectedpts()でバンド幅を300、playersをplに指定の上、periodTimeに関する密度推定のグラフを作成し、sel2へ格納
> sel3 <-expectedpts(data=data2223, bw=1200, players=pl, col.team="transparent", palette=mypal, col.hline="transparent", var="totalTime", xlab="Total time") #expectedpts()でバンド幅を1200、playersをplに指定の上、totalTimeに関する密度推定のグラフを作成し、sel3へ格納
> sel4 <-expectedpts(data=data2223, players=pl, col.team="transparent", palette=mypal, col.hline="transparent", var="shot_distance", xlab="Shot distance") #expectedpts()でplayersをplに指定の上、shot_distanceに関する密度推定のグラフを作成し、sel4へ格納
> library(gridExtra) #パッケージgridExtraの読み込み
> grid.arrange(sel1, sel2, sel3, sel4, nrow=2) #grid.arrange()を使ってグラフを2行2列で出力
次に、2022-23シーズンにおける平均得点1位と2位のジョエル・エンビードとルカ・ドンチッチに対象を絞って、対戦チームをプレーオフ進出の有無で区分した場合の期待得点を確認していきます。
対戦チームをプレーオフ進出の有無で区分した場合の期待得点の推移<ジョエル・エンビード、ルカ・ドンチッチのフィールドショットの期待得点を確認>
下記はジョエル・エンビードとルカ・ドンチッチに関して、対戦チームをプレーオフ進出の有無で区分した場合のフィールドショットの期待得点を示したグラフとなります。
なお、プレイヤー名の末尾にある“bot”はプレーオフ進出「無」のチームと対戦した場合の期待得点を表し、“top”はプレーオフ進出「有」のチームと対戦した場合の期待得点をそれぞれ表しています。
上記のグラフを考慮すると、対戦チームをプレーオフ進出の有無で区分した場合のジョエル・エンビードとルカ・ドンチッチのフィールドショットの期待得点に関して、下記のような特徴を読み取ることが出来ます。
- ジョエル・エンビード:全体的に“bot”(対戦チームがプレーオフ進出「無」)の場合の期待得点のほうが“top”(対戦チームがプレーオフ進出「有」)の場合の期待得点よりも高い数値を示している。なお、Total timeに関しては、オーバータイムの終盤において“top”の場合の期待得点が“bot”の場合の期待得点を上回っていることから、上位チームに対する最終局面での勝負強さが示唆される。
- ルカ・ドンチッチ: 全体的に“bot”の場合の期待得点のほうが“top”の場合の期待得点よりも高い数値を示している。なお、Total timeにおける試合序盤、Shot distanceにおける約15~35フィートの区間では、“top”の場合の期待得点が“bot”の場合の期待得点を上回っており、上位チームに対して高パフォーマンスを見せる局面を読み取ることが出来る。
なお、上記のグラフを出力するコマンドは下記のとおりです。
> Tadd2223 <- read.csv(file="Tadd_2223.csv") #Tadd2223の読み込み
> top <- subset(Tadd2223, Playoff=="Y")$team #プレーオフ進出有のチームをtopへ格納
> bot <- subset(Tadd2223, Playoff=="N")$team #プレーオフ進出無のチームをbotへ格納
> bot_top <- function(X, k) {
+ dts <- subset(subset(X, oppTeam %in% get(k)), team=="PHI" | team=="DAL")
+ dts$player <- paste(dts$player, k)
+ return(dts)
+ }
> data2223.PD <- rbind(bot_top(data2223, "top"), bot_top(data2223, "bot")) #bot_top()とrbind()を使ってプレイヤー名とtop、botを結合し、data2223.PDへ格納
> pl2 <- c("Joel Embiid top", "Joel Embiid bot", "Luka Doncic top", "Luka Doncic bot") #c()を使ってJoel Embiid, Luka Doncicのtop、botをpl2へ格納
> mypal2 <- colorRampPalette(c("yellow", "blue", "red"))
> sel5 <- expectedpts(data=data2223.PD, players=pl2, col.team="transparent", palette=mypal2, col.hline="transparent", var="playlength", xlab="Play length", x.range=NULL)
> sel6 <-expectedpts(data=data2223.PD, bw=300, players=pl2, col.team="transparent", palette=mypal2, col.hline="transparent", var="periodTime", xlab="Period time", x.range=NULL)
> sel7 <-expectedpts(data=data2223.PD, bw=1200, players=pl2, col.team="transparent", palette=mypal2, col.hline="transparent", var="totalTime", xlab="Total time", x.range=NULL)
> sel8 <-expectedpts(data=data2223.PD, players=pl2, col.team="transparent", palette=mypal2, col.hline="transparent", var="shot_distance", xlab="Shot distance", x.range=NULL)
> grid.arrange(sel5, sel6, sel7, sel8, nrow=2)
おわりに
今回は、フィールドショットに関する密度推定のグラフを用いて、平均得点で好成績を残したプレイヤーのフィールドショットに関する期待得点の推移を確認していきました。
対戦チームをプレーオフ進出の有無で区分した場合の期待得点もあわせて確認することで、特定の局面における各プレイヤーのフィールドショットの特徴を期待得点の側面から捉えることができました。
他プレイヤーに対しても同様の分析を行うことで、試合終盤などの緊張感のある局面や、プレーオフに進出するような上位チームに対して継続的に高いパフォーマンスを見せるプレイヤーを見つけることも可能になるかと思います。
なお、本記事は記事の最後に紹介している書籍を参考にして作成しています。
それでは、今回のトラッシュトークは以上です。
【参考書籍】
Paola Zuccolotto and Marica Manisera (2020), Basketball Data Science – with Applications in R. Chapman and Hall/CRC. ISBN 9781138600799.
※本書籍の紹介記事を書いていますので、よろしければご参考ください。