月別アーカイブ: 2018年7月

スタッツリーダー争いの推移を見てみる

スタッツリーダー争いはシーズンを観る中での楽しみのひとつになっています。各スタッツリーダーは先日のアワードイベントで賞を受賞し、かつ今回はGQに写真掲載というおまけつきでしたが、スタッツリーダーがシーズン60試合の中でどう争われていたのか、それをこの記事では見てみたいと思います。

得点王争い

ご存知の通り新潟のガードナーが得点王に輝きましたが、得点王争いはガードナーが2位のファジーカスを突き放しており、かつファジーカスも3位以下を突き放したという結果になりました。推移を見てもふたりの得点ぶりはまったく危なげないもので、コンスタントに各試合で得点を重ねています。他に目立つところではシーズン後半になって千葉のエドワーズがどんどん得点力を上げてきたところでしょうか。

f:id:rintaromasuda:20180729075615j:plain

順位は逆だったもののこの傾向は2016-17シーズンと同じで、このまま行けば2018-19シーズンもふたりの独壇場である可能性は高いと思います。ここに割り込んでくるような選手の登場を期待したいところではありますが。

ついでに日本人(帰化選手を除く)で得点力の高かった選手もプロットしてみました。ここにいるような選手にはもっと得点をとってもらって、個人的にはBリーグに平均20点取るような日本人選手が誕生を楽しみにしています。やはり得点はバスケットの華ですからね。盛り上がって欲しいところです。

f:id:rintaromasuda:20180729080102j:plain

アシスト王争い

確かアシストはアシストとみなされるパスの条件が緩和されたとかで、以前よりも高い数値が出るようになったと聞いています。しかしながらいずれにせよここは宇都と並里の一騎打ちとなっており、3位の五十嵐を見ると分かりますが他の追随を許しません。ふたりとも後半戦になるにつれどんどんアシスト数を伸ばしていますね。

f:id:rintaromasuda:20180729171520j:plain

宇都は富山に残りましたが、新しいメンバーをチームに迎えており、それがどのように彼のアシストに変化を及ぼすのか楽しみなところです。並里は琉球で岸本、橋本と組む3ガード体制の中でどのようなプレイを見せてくれるでしょうか。そちらもとても注目です。

スリーポイント王争い

スリーポイント王には栃木の喜多川が輝きましたが、下の推移を見ると分かる通りここはデッドヒートでした。富山の大塚も三河の金丸も一時点ではトップに立っています。最終的には後半に数値を伸ばした喜多川が逃げ切った感じですね。

f:id:rintaromasuda:20180729172011j:plain

上の推移はスリーポイントシュート成功確率についてですが、他のスタッツのようにスリーポイントシュートの試合平均成功数を見てみると結果は大分違っています。こちらは試合平均2.5本も決めている辻が圧倒的に他を引き離しており、確率で1位だった喜多川はこちらでも一番下となりました。

f:id:rintaromasuda:20180729171951j:plain

フリースロー王争い

フリースローと言えば金丸というくらい既にイメージが確立してしまっている感がありますが、さすがの唯一90%超え、シーズンを通して安定したフリースローを見せていました。喜多川はスリーポイントと同じくぐんぐん後半に確率を伸ばしています。

f:id:rintaromasuda:20180729173133j:plain

しかしやはりと言いますか、ここの面子はスリーポイントの面子とあまり変わらないですね。シューターのみなさんの正確さには驚かされるばかりです。この面子に食い込むような新しいシューター人材がBリーグに現れるのはいつになるでしょうか?

リバウンド王争い

2016-17シーズンではリバウンド王だったロシターですが、今シーズンは後半あまりリバウンド数が伸びなかったのでしょうか、安定してリバウンドを稼いでいたファジーカスに追いつくことができなかったばかりか、最後に伸ばしてきたバッツにも交わされてしまいました。高いリバウンド力はロシターの魅力のひとつなので、来シーズンも是非期待したいですね。

f:id:rintaromasuda:20180729173147j:plain

インサイドはやはり外国人選手中心なので難しいところもありますが、ここに絡んでくるような日本人ビッグマンもいずれは登場して欲しいものです。日本のバスケットが次のレベルに進むための関門のひとつではないかと思います。

スティール王争い

スティールは後半に一気に伸ばしたパーカーがキングとなりました。試合の大事なところで決めるスティールは値千金ですよね。ここで注目したいのはまだ2年目の新人である、昨年の新人王ベンドラメがいいところまで食い込んでいることです。そういえば渋谷は昨年のスティール王広瀬も在籍しています。是非ベンドラメには若い力でBリーグを盛り上げて欲しいと期待しています。

f:id:rintaromasuda:20180729173204j:plain

ブロックショット王争い

サビートのブロックショットと決まった後のパフォーマンスが有名になったこともあり、サビートがぶっちぎりで受賞しているかと思ったブロックショット王ですが、実は滋賀のフィッシャーと接戦を繰り広げていました。フィッシャーについてはあまり注目していなかったので、昨シーズンの契約状況は確認しておりませんが、もしまだBリーグでプレイするなら注目したい選手のひとりです。

f:id:rintaromasuda:20180729173216j:plain

関連記事

ガードナーとファジーカスの得点王争いについては以下でも分析しています。

スリーポイントシュートについては以下でも分析しています。


栃木ブレックスが手に入れるのは比江島の高い決定力

比江島が三河から栃木に移籍するというニュースが大きな話題になりました。このオフはサプライズ移籍の報が続いておりますが、流石にこれ以上のサプライズニュースは出ないのではないかというくらいのビッグニュースでしたね。余談ですがこうしてオフシーズンに移籍自体が大きなニュースになるのは、Bリーグの今後にとってとても素晴らしいことだと思います。

さて比江島が栃木に入るとどのようなインパクトがあるでしょうか。昨シーズンの栃木のメンバーと比江島の数字を比べながら考察してみましょう。

2017-18の栃木ブレックスの得点内訳

下の図は2017-18シーズンにブレックスの各選手を総得点の多い順に左から並べたものです。赤線はその選手まででチームの総得点の何%を占めているのかを表しています。ブレックスはロシター、喜多川、遠藤、そしてボーズマンの4人でチームの50%の得点を挙げているのが分かります。

f:id:rintaromasuda:20180619220844j:plain

栃木は全員バスケットと謳っているとおり、ロシターを例外として渡邉まで各選手がかなり万遍なく点数を挙げている印象です。比江島の得点力であれば今後はロシターと並んでチームの主力得点源となるのは間違いないと思いますが、それが他の選手の得点にどう影響するのかも見ものです。比江島はアシストも得意としていますから、例えばロシターのインサイドプレイや喜多川のスリーポイントが比江島のプレイからクリエイトされるシーンも楽しみにできそうです。

比江島の決定力の高さを表すFG%, eFG%, TS%

2017-18シーズンにおける栃木主要選手と比江島のFG%(フィールドゴール%)と、それからeFG%*1、TS%*2と呼ばれる3つの%を見てみましょう。

PLAYER FG% eFG% TS%
ライアン・ロシター 46.5% 49.1% 49.1%
比江島 慎 50.5% 55.1% 57.9%
喜多川 修平 41.2% 51.4% 54.5%
遠藤 祐亮 37.1% 43.9% 45.8%
セドリック・ボーズマン 46.4% 49.2% 54.8%
ジェフ・ギブス 49.2% 51.6% 58.4%
竹内 公輔 49.4% 50.1% 52.5%
田臥 勇太 47.7% 48.2% 52.8%
鵤 誠司 39.3% 42.2% 44.3%
生原 秀将 39.1% 44.9% 48.8%
渡邉 裕規 35.1% 43.2% 44.7%

まずFG%が見ていきたいのですが、比江島はインサイドの選手であるロシター、ギブス、竹内よりも高いFG%を誇っています。通常FG%はゴールの近くでシュートを打つ事の多いインサイド陣がアウトサイド陣を上回るので、比江島の決定力が如何に高いのかよく分かります。

下は以前にツイートしたものですが、実際にリーグ内の得点力の高い日本人選手と比べてみても、比江島のFG%は頭ひとつ抜け出しているのです。

次にeFG%を見てみると、これも抜けて高いのが分かります。eFG%はスリーポイントシューターに下駄を履かせる感じの指標ですが、比江島はシーズン129本中51本成功と39.5%のスリーポイント成功率を誇っており、41.7%の確率でスリーポイント王となった喜多川と比べても見劣りしない成功率を誇っています。「あいつ、外からも打てるのか?!」というスラムダンクの1シーンが思い浮かぶようです。

TS%はフリースローも考慮に入れた指標ですが、比江島はフリースローの成功率向上には余地はあるものの、これもフリースローに安定感のあるギブスを除いては比江島がトップです。

上の表はシーズントータルのスタッツを用いて計算したものですが、それぞれの%が1試合ごとにどうだったかを計算し、引用したツイート内の画像のように分布をプロットしてみましょう。出場時間がなかった試合とフィールドゴール試投がなかった試合は除いています。

f:id:rintaromasuda:20180723222022j:plain

f:id:rintaromasuda:20180723222033j:plain

f:id:rintaromasuda:20180723222042j:plain

比江島が安定して高い決定力を保っていたことが分かると思います。

まとめ

比江島が入ることで、安定感のあるロシターの得点力と、高い確率でスリーポイントを決める喜多川の得点力に加え、高い確率でフィールドゴールを決める比江島の決定力が栃木のオフェンスに加わりそうです。また比江島を起点に作られる新しいオフェンスパターンにも注目が集まりますね。2018-19シーズンの栃木のゲームが楽しみです。

*1:Effective Field Goal%、こちらのNBAのサイトなどにも情報がありますが、スリーポイントシュートの成功の場合はシュート1.5本分の成功とみなす改造版FG%です。

*2:TS%)とはフリースローを打った回数(FTA)も考慮に入れて、総得点(PTS)とフィールドゴールを打った回数(FGA)と共に以下のように求める指標です: PTS / 2 * (FGA + 0.44 * FTA)(×100は省略しています。)

個人の2017-18シーズン1試合最高値を振り返る(動画付き)

Bリーグの2017-18シーズンも閉幕、FIBAワールドカップの二次予選まではしばしお預け、渡辺雄太が挑戦したNBAサマーリーグも終わってしまい、すっかりバスケットボールに渇望している今日この頃のバスケファンの皆様、いかがお過ごしでしょうか。

この記事では少しでもその渇望を満たす為にという訳ではないですが、2017-18シーズンの様々な個人の1試合最高値を振り返ってみようかなと思います。見つけられる限り動画のリンクも貼っておきますので、バスケシーズンが待ちきれない皆さんはぜひこちらもどうぞ。ちなみにB3はデータがないので対象外となっています。

最高得点

TEAM PLAYER DAY VS PTS
愛媛 チェハーレス・タプスコット 2018.04.20 愛媛 VS 青森 50

愛媛のタプスコットが青森とのゲームでなんと50点を記録しています。残念ながら動画は見つけられませんでしたが、Bリーグの公式ページにレポートがあります。この日の愛媛は121点も取ったようなので、タプスコットの他にも4人の選手が2桁の得点を挙げたようです。

最高フィールドゴール成功率

TEAM PLAYER DAY VS FGM FGA
三河 桜木 ジェイアール 2017.11.12 新潟 VS 三河 10 10
千葉 マイケル・パーカー 2017.09.01 千葉 VS 横浜 10 10

フィールドゴール成功率の最高が100%なのは当たり前なのですが、その中で一番フィールドゴール成功数が多かったのは、1試合で10本すべて決めたこの両者の記録でした。さすがふたりとも堅実なプレイが光るベテランというところでしょうか。ただしパーカーの方はアーリーカップにおける記録です。

ジェイアールの方の動画はこちらです。

最高フィールドゴール成功数

次にフィールドゴールを決めた回数です。こちらは最高得点を出したときのタプスコットが19回決めたのがトップでした

最高スリーポイント成功数

TEAM PLAYER DAY VS 3FGM
千葉 富樫 勇樹 2017.11.12 千葉 VS A東京 11

有名な記録かと思いますが、アルバルク東京戦で11月に富樫が11本のスリーポイントを含む42得点を挙げた試合がありました。それがスリーポイント成功数の最高記録です。

最高アシスト成功数

TEAM PLAYER DAY VS AS
滋賀 並里 成 2018.04.21 西宮 VS 滋賀 16

これも有名かと思いますが、我らがファンタジスタ並里が1試合で16アシストというBリーグ記録を樹立した試合がありました。ちなみにこの日の並里は得点も12点挙げているので、ダブルダブルです。

最高リバウンド数

TEAM PLAYER DAY VS TR DR OR
京都 ジョシュア・スミス 2018.03.04 京都 VS 栃木 25 17 8
香川 レジナルド・ウォーレン 2018.04.29 青森 VS 香川 25 13 12
FE名古屋 ジョシュ・ホーキンソン 2018.05.05 FE名古屋 VS 青森 25 17 8

最高リバウンド数は25本で、対象者は3人いました。香川のウォーレンはオフェンスリバウンドを12本も取るというすごい活躍ぶりです。

最高スティール数

TEAM PLAYER DAY VS ST
三遠 川嶋 勇人 2017.09.02 富山 VS 三遠 8
横浜 ジェフリー・パーマー 2017.12.23 横浜 VS 北海道 7
群馬 仁平 拓海 2017.11.05 群馬 VS 東京Z 7

スティールは三遠の川嶋が8回という記録をアーリーカップで出しています。レギュラーシーズンだと横浜のパーマー、群馬の仁平がそれぞれ7回という記録を出しています。以下はパーマーのゲームの動画です。

最高ブロックショット

TEAM PLAYER DAY VS BS
横浜 ハシーム・サビート 2017.12.02 横浜 VS 琉球 8

ブロックは皆さんの想像通りこのかた横浜のサビートです。なんと8本も決めています。

最高出場時間

TEAM PLAYER DAY VS MIN
山形 佐藤 正成 2017.12.23 岩手 VS 山形 47.78

レポートによるとこのゲームは2度の延長戦を経て決着がついたものすごいタフな試合だったようですね。佐藤はその死闘で約48分コートに立っていたようです。本当にお疲れ様です。

まとめ

2017-18シーズンを個人の最高記録で振り返ってみました。2018-19シーズンはどんな記録が生まれるでしょうか。今から楽しみです。

スクレイピングでBリーグ全選手の試合ごとスタッツを取得する

このブログはBリーグ観戦の肴になりそうなデータ分析の結果を主なコンテンツにしていますが、ときどきその裏でどういう技術的なことをやっているのかについても書きたいと思っています。これはその第1号です。よってこの記事の内容はBリーグやバスケットに直接の関係はありません。

はじめに

これまでの分析記事の多くは、Bリーグ公式のスタッツページにある各選手のシーズントータルのスタッツを取得し、それを使用して書きました。ちなみに具体的にどのように取得したかと言うと、例えばB1の2017-18シーズンのデータが欲しい場合はこうしました。

  1. スタッツのページに普通にブラウザでアクセス
  2. ページに表示される選手のスタッツ一覧表をすべて選択してコピー
  3. コピーしたものをExcelに張り付ける
  4. 張り付けたものをCSV(カンマ区切り)ファイルとして保存

CSVファイルを作ってしまえば、あとはRにしろPythonにしろ読み込んでしまえば、好きに加工したり分析したり何でもできます。Excel上で分析するのもいいでしょうし、データベースのテーブルにしてしまってSQLを駆使する人もいるかもしれません。私はRを使うか、もしくはExcelを使っています。

これからやりたいこと

最近はシーズントータルのスタッツを使った分析では段々と物足りなくなってきて、選手の試合ごとのスタッツを使った分析したくなってきました。ありがたいことに各選手の試合ごとのスタッツも公式ページで取得できます。例えばニック・ファジーカスの2017-18シーズン全試合のスタッツはこのページで取得できます。

数人の選手のデータが必要なだけであれば、上述のやり方で試合ごとスタッツの情報をコピーしてからExcelに貼り付けてデータを作ってもそこまで手間ではありません。しかしこれをB1、B2と合わせて何百人もいるすべての選手に対して行うのはいささか大変です。

そこで自動的にB1、B2全選手の試合ごとスタッツのページにアクセスし、必要な情報を読み取り、最後にそれをCSVファイルとして保存してくれるプログラムを書きたいと思います。このようにWebページから情報を読み取る行為を一般的にWebスクレイピングと呼びます(もしくは単にスクレイピング。)

この記事で必要なもの

Webスクレイピングをするプログラムを書くのに一番人気の言語はPythonではないかと推測しますが、この記事ではRを使います。単純に私が分析にRを使っているからです。Rのプログラムを書き実行するのにはR Studioというソフトウェアが便利なので、それも使用します。

またRはパッケージと呼ばれる拡張機能が充実しているのですが、その中からrvestというWebスクレイピングに便利なものをインストールしたいと思います。インストールの方法は次のセクションで説明します。

またGoogle Chromeも使用します。

まず試しに簡単なスクレイピングをやってみる

まずお試しで上述のファジーカスの2017-18シーズンの試合ごとスタッツの情報を取得してみましょう。R Studioの使い方はこの記事では説明しませんが、Windowsで言うところのCTRL + ENTERを押すと、カーソルがある行のコードがコンソールにて実行されることは覚えておくと便利です。

まずは簡単なことから始めてみます。ファジーカスの2017-18の情報のみスクレイピングして、それをCSVファイルにして保存しましょう。

if (!require(rvest)) {
install.packages("rvest")
library(rvest)
}
url <- "https://www.bleague.jp/roster_detail/?tab=1&year=2017&PlayerID=8490"
page <- read_html(url, encoding = "utf-8")
tables <- html_table(page)
games <- tables[[4]]
write.csv(games, "Fazekas.csv")

最初のif()の箇所は全体で「rvestパッケージがなかったらインストールしてからロードしてね。あったら単にロードしてね。」という意味です。

次のread_html()というのがページにアクセスしている部分です。ここでこのページにリクエストが投げられ、ページの内容(つまりHTMLのテキスト)を取得することができます。

続くhtml_table()というのはrvestの便利な関数で、いわゆる<table>、<td>、<tr>などのタグで書かれたHTMLのテーブルとその中身を抜き出してくれます。このページの場合、ページ内の4番目のテーブルが試合ごとのスタッツが入っているテーブルなので、4を指定して抜き出しています。ちなみにRのインデックスは0ではなく1から始まります。

変数gamesはRでdata.frameと呼ばれている型なのですが、いわゆるテーブル形式でデータを保持するのに使用される型です。上記のプログラムを実行すると、gamesの最初の3行は以下のようになっています。見事にファジーカスの試合ごとスタッツが取得されています。

DAY VS S MIN PTS FGM FGA FG% 3FGM 3FGA 3FG% FTM FTA FT% OR DR TR AS TO ST BS BSR F FD DUNK EFF
2018.01.14 B.BLACK VS B.WHITE 17:58 6 3 11 27.3% 0 5 0.0% 0 0 0.0% 2 8 10 1 2 1 0 0 1 0 0 8
2018.01.26 川崎 VS 千葉 28:44 22 9 17 52.9% 0 1 0.0% 4 4 100.0% 3 13 16 4 3 1 1 0 3 5 0 33
2018.01.27 川崎 VS 千葉 24:37 26 11 19 57.9% 2 6 33.3% 2 2 100.0% 0 8 8 2 5 0 1 0 4 3 0 24

最後にgamesに名前を付けて保存すればCSVファイルの完成です。

全選手のデータを取得するためにプログラムを改造する

では上記のプログラムを全選手のデータを取得する為に改造してみましょう。大まかな方針は以下のようになります。

  1. 各選手の情報が載っているページのURLを手に入れる
  2. 各選手のページに順番にアクセスし、html_table()を使って試合ごとのスタッツを抜き出す
  3. 各選手の結果をすべて結合し、ひとつのdata.frameにまとめる
  4. まとめた結果のdata.frameをCSVとして保存する

こうして見ると、そんなに手間ではなさそうです。実際にこの中で少し難しいのは手順1のみです。

もちろん実際にデータを使う段階になると、スクレイピングで取得したデータそのものをそのまま使うのではなく、少し加工してから使う必要がある場合がほとんどです。なので手順4の後にやらなければならないこともたくさんあります。この記事ではそこには触れません。

各選手のページのURLを手に入れるためのスクレイピング

上の例でファジーカスのスタッツを手に入れる為のURLが出てきました。

https://www.bleague.jp/roster_detail/?tab=1&year=2017&PlayerID=8490

どうやらtabというのがB1/B2、yearがシーズン、PlayerIDが各選手を表しているようです。よって各選手のPlayerIDさえ分からればB1、B2全選手の2016-17、2017-18両シーズンの試合ごとスタッツが手に入りそうです。

この各選手のPlayerIDですが、これを手に入れるためにはスクレイピングが必要です(Bリーグのシステム担当者に知り合いでもいない限り。)つまりスクレイピングをする為に、別のスクレイピングが必要ということになります。私はスクレイピングをやるのがこれが初めてですが、おそらくよくあることでしょう。

スクレイピングをするべきは、Bリーグのスタッツトップページの以下の赤枠内のリンク部分です。ちなみにトップページURLのパラメータはどうやら各選手のページと同様のルールに従っているようです。

https://www.bleague.jp/stats/?tab=1&year=2017

f:id:rintaromasuda:20180713082933p:plain

テーブルに記載されている情報なので上述のrvestのhtml_table()を使えばいいかと一瞬思いましたが、それだとリンクではなく文字列(つまり選手の名前)の方が取得されてしまうので上手く行きません。ではどうすればいいでしょう。

CSSセレクタを利用して一連のルールに従う要素を抜き出す

説明はあと回しにして、このようにRを書くとスクレイピングで該当のリンクの情報を抜き出すことができます。

if (!require(rvest)) {
install.packages("rvest")
library(rvest)
}
url_top <- "https://www.bleague.jp/stats/?tab=1&year=2017"
html_top <- read_html(url_top, encoding = "utf-8")
urls_player <- html_top %>%
html_nodes("#tbl-player > tbody > tr > td:nth-child(3) > a") %>%
html_attr("href")
urls_player <- paste(urls_player, "&year=2017", sep = "")

試しに出力してみると、URLが取得できているのがわかります。ちなみにyear=2017は自分で付与しないといけないことが判明したので、paste()というRの関数を用いて取得したURL文字列にくっつけています。

> head(urls_player)
[1] "https://www.bleague.jp/roster_detail/?PlayerID=9040&year=2017"
[2] "https://www.bleague.jp/roster_detail/?PlayerID=8490&year=2017"
[3] "https://www.bleague.jp/roster_detail/?PlayerID=8593&year=2017"
[4] "https://www.bleague.jp/roster_detail/?PlayerID=12595&year=2017"
[5] "https://www.bleague.jp/roster_detail/?PlayerID=8503&year=2017"
[6] "https://www.bleague.jp/roster_detail/?PlayerID=10819&year=2017"

さて、プログラムの中になんだか「#tbl-player > tbody …」というおまじないみたいな文字列が出てきましたね。これはCSSセレクタと呼ばれるものです。スクレイピングをするときには絶対に外せない部分だと思います。

CSSについて詳しくなる必要はまったくありません(私も詳しくありません。)簡単に言うとCSSとはWebページの見た目を整えるためのものであり、デザイナーさんなどが「このルールに従う一連の文字は赤色にしてね!」みたいな処理をするために使うものです。そしてその「一連の~」をが指示するときにCSSセレクタを使います。これをスクレイピングでも流用して「このルールに従う一連のHTML要素を抜き出してください!」とやるわけです。

ちなみにCSSセレクタと同じ目的でXPathという記述方法もあり、rvestではXPathも使用できますが、今回はCSSセレクタのみ使います。おそらくCSSセレクタだけで事足りる場合がほとんどだと思います。

ではあなたが欲しいページの要素のCSSセレクタをどのように知ればいいのでしょうか?これにはGoogle Chrome(や他のブラウザの)開発者ツールを使用すると便利です。

BリーグのスタッツトップページGoogle Chromeで開き、以下のようにします。

  1. F12ボタンを押す。すると開発者ツールが開きます。
  2. 開発者ツール左上にある矢印ボタンを押します
  3. あなたが気になっているページ内要素をクリックします(右クリックで「検証」を選んでも可)
  4. そうするとツール内で対応するHTML要素がハイライトされるので、それを右クリックをします。
  5. Copy -> Copy selectorを選びます

f:id:rintaromasuda:20180713143853p:plain

これでクリップボードCSSセレクタがコピーされました。ファジーカスのリンク(つまり<a>要素)でCopy selectorしたときの値はこのようになりました。

#tbl-player > tbody > tr:nth-child(2) > td:nth-child(3) > a

ただこのままだと、ファジーカスの行のリンクだけを指し示しているCSSセレクタになってしまいます。この列にある<a>要素をすべてを指すためには、すべての行を指すようにしなければならないため、tr:nth-child(2)を少しいじって以下のように変更します。

#tbl-player > tbody > tr > td:nth-child(3) > a

これですべての<a>要素が抜き出せました。あとはこの要素からhref属性を抜き出すことでURLが文字列として手に入ります。上記のプログラムの中に%>%という文字列が出てきましたが、これは「パイプ」と呼ばれるもので「まずAをやって、そして次にBをやって、最後にCをやって」みたいな処理の連鎖を「A %>% B %>% C」のように記述するやり方です。上記の例では「まずはこのCSSセレクタでa要素を取得して、その後にhref属性の値を取得してね!」という処理をパイプを使って書いています。

複数のdata.frameを結合する

私はすべての選手のすべての試合のデータをひとつのファイルにまとめたいので、その前段階としてすべてのデータをひとつのdata.frameにまとめます。これにはrbind()という関数を使います。Row bind、つまり行ベースで結合するということです。

改造版のコード

ではこれですべてのピースが揃ったはずなので、がっちゃんこしたプログラムを書いてみましょう。

if (!require(rvest)) {
install.packages("rvest")
library(rvest)
}
result <- data.frame()
for (year in c(2016, 2017)) {
for (league in c(1, 2)) {
url_top <- paste("https://www.bleague.jp/stats/",
"?tab=",
as.character(league),
"&year=",
as.character(year),
sep = "")
print(url_top)
html_top <- read_html(url_top, encoding = "utf-8")
urls_player <- html_top %>%
html_nodes("#tbl-player > tbody > tr > td:nth-child(3) > a") %>%
html_attr("href")
urls_player <- paste(urls_player, "&year=", as.character(year), sep = "")
for (url in urls_player) {
html_player <- read_html(url, encoding = "utf-8")
tables_player <- html_table(html_player)
df_game <- tables_player[[4]]
result <- rbind(result, df_game)
}
}
}
write.csv(result, file = "player_games.csv")
if (!require(readr)) {
install.packages("readr")
library(readr)
}
readr::write_excel_csv(result, "player_games_excel.csv")

実行するとかなり長い時間がかかりますが、すべての選手ページにアクセスし、試合ごとのスタッツを読み取り、最後にひとつのファイルが作成されるのが確認できます。write_excel_csv()というのはおまけで、作成したCSVExcelで開きたいときはこちらの方法で保存するのがおすすめです。

最後の問題点

せっかくデータができたのですが、これだとどの行がどの選手のデータなのか分かりません。なので各行に選手の名前と、それから上で出てきたPlayerIDを追加しておきましょう。多分このIDはそのうち役に立つと思います。

またフィルタするのに役立ちそうなので、どちらのシーズンのデータなのか、B1なのかB2なのかもデータとして足しておきましょう。

以上を踏まえて以下のようにプログラムを変更しました。これがこの記事での最終形です。

if (!require(rvest)) {
install.packages("rvest")
library(rvest)
}
result <- data.frame()
for (year in c(2016, 2017)) {
for (league in c(1, 2)) {
url_top <- paste("https://www.bleague.jp/stats/",
"?tab=",
as.character(league),
"&year=",
as.character(year),
sep = "")
print(url_top)
html_top <- read_html(url_top, encoding = "utf-8")
urls_player <- html_top %>%
html_nodes("#tbl-player > tbody > tr > td:nth-child(3) > a") %>%
html_attr("href")
urls_player <- paste(urls_player, "&year=", as.character(year), sep = "")
names_player <- html_top %>%
html_nodes("#tbl-player > tbody > tr > td:nth-child(3) > a") %>%
html_text(trim = TRUE)
startStr <- "PlayerID="
endStr <- "&"
ids_player <- substring(urls_player,
regexpr(startStr, urls_player) + nchar(startStr),
regexpr(endStr, urls_player) - nchar(endStr))
index <- 0
for (url in urls_player) {
index = index + 1
html_player <- read_html(url, encoding = "utf-8")
tables_player <- html_table(html_player)
df_game <- tables_player[[4]]
df_game$PLAYER <- names_player[index]
df_game$PID <- ids_player[index]
df_game$YEAR <- year
df_game$LEAGUE <- league
result <- rbind(result, df_game)
}
}
}
write.csv(result, file = "player_games.csv")
if (!require(readr)) {
install.packages("readr")
library(readr)
}
readr::write_excel_csv(result, "player_games_excel.csv")

名前の取得のところはhref属性を取得している部分とほぼ同じ要領で$lt;a>のテキストを取得しています。選手のIDの取得は若干複雑になってしまいましたが、要はURLの中にある”PlayerID=xxxxxx&”のxxxxxxの部分を抜き出しているだけです。

まとめ

Webスクレイピングを使用し、Bリーグの全選手の試合ごとデータを取得しました。スクレイピングをする方法は色々あると思いますが、ひとつの参考になれば幸いです。

前述のとおりもう少し後処理をしないとデータ分析で使うためには不十分ですが、それが終わりましたらバシバシまたこれでバスケ観戦がより楽しくなるような分析結果がお届けできると思います。

技術的なことでもなんでも、質問がありましたらお気軽にどうぞ。もしスクレイピングをする気はないけど私が作ったデータが欲しい!分析したい!という人がいたら、何かしらの方法(おそらくgithubかなんかに上げます)でお渡ししますのでそれもご遠慮なく。

参考書籍

rvestパッケージのことやR全般のことは概ね以下の書籍を参考にしました。

Rプログラミング本格入門: 達人データサイエンティストへの道

Rプログラミング本格入門: 達人データサイエンティストへの道

追記1(2018年7月14日)

今回作成したプログラムとそこから出力したふたつのCSVですが、githubに上げておきました。

bleaguebydata/blog/2018071301 at master · rintaromasuda/bleaguebydata · GitHub

当然ですがBリーグが公式にサポートしているファイルでもないですし、私のプログラムやその他の原因で間違いが含まれている可能性もあります。ご了承ください。

またデータの後処理はしていません。データの処理は分析者の都合によって変わってくるので敢えてそのままにしている部分もありますが、明らかなもの(例えば選手の名前に半角スペースが含まれている場合と全角スペースが含まれている場合がある)も直していませんので、そちらも使用時にはご注意ください。

宇都直輝の2035分をデータで振り返る

2017-18シーズンの宇都直輝のスタッツはすごいです。

59試合に出場しリーグでただひとり2000分を超えるプレー時間を記録(ちなみにプレー時間リーグ2位はチームメイトの大塚裕土)、試合平均得点は日本人最多の17.0点、そしてご存知の通りアシスト王を受賞、そしてターンオーバー数でもリーグ最多となりました。

2035分も出場したシーズンを闘ったあとで残留プレイオフ、そして最終的には熊本との入れ替え戦があり、その後は日本代表としての活動もあったわけですから、その精力的なバスケットへの取り組みには頭が下がります。

宇都のオフェンスが富山全体のオフェンスに占める割合

宇都が富山の攻撃の起点であることは疑いようがないと思いますが、それは数値にするとどれくらいでしょうか?以下の記事の中で各チームの得点効率というものを求めましたが、その前提として各チームのポゼッション数というものを求めました。これは簡単に言えばチームのオフェンス機会がどのくらいあったのかを表す数字でした。

記事にあるように富山には4529回のオフェンス機会があった訳ですが、この中で宇都で終わったオフェンスはどのくらいあったでしょうか?宇都のフィールドゴール数、フリースロー数(に0.44をかけたもの)、ターンオーバー数を合計してから4529で割ると約0.26です。これはつまり富山の攻撃の約26%が宇都のシュート、もしくはターンオーバーで終わっているということになります。

これにアシストの数も足すと約36%になりますので、それも考慮に入れると富山の攻撃の約36%は宇都のシュートかターンオーバー、もしくは宇都のアシストからのシュートで終わっているということになります。宇都がパスした先でシュートが外れたり、ターンオーバーが起きたりといった場合もあるので(これらはアシストに記録されない)、実際にはもう少し高い割合で宇都を起点にしているはずです。

上述のようにチームの1/4以上のオフェンスで起点になっている宇都ですから、その調子いかんでチーム全体のオフェンスが左右されることになりそうです。*1

宇都の疲労について考察する

ここまで長時間出場し、かつチームのオフェンスの起点になっている選手ですから疲労は相当なものだと思います。特に宇都の場合、失礼ながらあまり外からのシュートが得意ではなく、ダイナミックにドライブして点を取りに行くスタイルです。これは非常に体力を消耗する点の取り方ではないかと思います(なので宇都のプレーは華があり、見ていて気持ちがいいわけですが。)

シーズンが進むに連れて宇都の得点力は落ちていかなかったでしょうか、以下のグラフはx軸がシーズン60試合を、y軸が各試合の「出場1分あたりの得点数」を表しています。

f:id:rintaromasuda:20180708233638j:plain

シーズン後半に進むに連れて宇都の得点力が落ちているということはなさそうです。しかし得点力のアップダウンになにやら周期性がありそうです。この「出場1分あたりの得点数」を、前日にも試合があったかどうか、つまり連戦だったかどうかで分けて見てみましょう(出場59試合中31試合が連戦。)

f:id:rintaromasuda:20180709083704j:plain

かなり如実に差が付きました。Bリーグのスケジュール上、連戦の場合は同じチームを相手に戦っている場合がほとんどです。なので相手側の要因は最小限のはず。やはり連戦だとどうしても疲労が得点力に影響するのではないでしょうか。

同じ要領でアシスト数とターンオーバー数についても見てみると、アシストではさらに如実にパフォーマンスの差がありそうです。ターンオーバーは中央値は同じようなものですが、やはり連戦時の方が多くターンオーバーを出していたようです。

f:id:rintaromasuda:20180709083952j:plain
f:id:rintaromasuda:20180709084002j:plain

ついでにフィールドゴール%について見てみると、やはり連戦のときの方が数字が落ちています。

f:id:rintaromasuda:20180709083734j:plain

ちなみに出場時間を見ると、むしろ連戦時の方が宇都はコートに長く立っています。これは不十分だったかもしれないが次の日に備えて宇都を休ませていた結果かもしれませんし、単純に連戦時の方がゲームが厳しくなり、宇都が長くプレーせざるを得なかったのかもしれません。

f:id:rintaromasuda:20180709065718j:plain

まとめ

大活躍した2017-18シーズンの宇都直輝のスタッツを振り返ってみました。正直シーズンMVPでもおかしくないほどの数字だと思います。

来シーズンのグラウジーズ千葉ジェッツふなばしから阿部友和が移籍するということなので、阿部を上手く使い宇都の力をうまく温存することがシーズンを勝ち切る為のひとつの大事なポイントとなりそうです。そこに注目していきたいと思います。

*1:ちなみにこの考え方はUSG%と呼ばれNBAで採用されており、この記事なんかが参考になると思います。

機械学習でBリーグの選手を13タイプに分類してみた

今回の記事は半分ネタです。

ご存知の通りバスケットはひとつのチームから5人がコートに立つスポーツです。よって往々にして選手は5つの役割に分割して語られがちです。それを1番から5番と呼んだり、ポイントガード、シューティングガード、スモールフォワード、パワーフォワード、センターと呼んだりします。

しかし同じポジションに分類されるプレイヤーでもプレースタイルは実に様々です。例えば先日の日本代表の面子を見てみても、富樫、篠山、宇都は同じ1番もしくはポイントガードと分類される選手ですが、そのプレーはかなり異なっています。

上のような議論を考慮し、バスケットプレイヤーをもっと細かく分類しようという試みは既になされています。例えば以下のWiredの記事中ではAyasdiという会社のインターンが、NBAの選手を13のグループに分類した例が紹介されています。

今回はこれをヒントに、機械学習を使ってB1の選手を13のグループに分けて(この行為をクラスタリングと呼びます)みたいと思います。機械学習はどの選手とどの選手が似たタイプだと判断するでしょうか。

機械学習のパラメータとして利用したスタッツ

今回機械学習に使ったスタッツの値ですが、まず前提としてどの値も出場時間平均にして使うことにしました。総計を使う、または出場試合平均を使うという手もありましたが、そんなに出番がなかった選手にも光が当たる可能性を増やしたく、出場時間平均を使いました。これに伴い、あまりにも出場時間が少ない(100分に満たない)選手は対象外としました。

以下が実際に使用したスタッツです。逆に言うとこれ以外のスタッツは結果に影響ありません。

  • 2点シュートを打った本数の出場時間(分)平均
  • フリースローを打った本数の出場時間(分)平均
  • リバウンドを取った数の出場時間(分)平均
  • ブロックショットをした数の出場時間(分)平均
  • 3点シュートを打った本数の出場時間(分)平均
  • アシストをした数の出場時間(分)平均
  • スティールをした数の出場時間(分)平均

本当は2点シュートの本数はゴールに近い、遠いで分けたかったのですがデータがありませんでしたのでひとまとめでやります。

シュート系のスタッツですが、シュートを決めた数ではなく打った数であることに注意してください。つまり、例えばスリーポイントをたくさん打った選手であれば、成功確率が高かろうが低かろうが同じタイプの選手として分類される傾向にある、ということになります。

最後になりますが、例えばシュートの本数とブロックショットの数では桁が違うので、すべての尺度のスケールを揃えるためにZ得点と呼ばれる値に各値を変換してから用いてます。Z得点は偏差値だと思ってもらえればいいと思います。実際Z得点に10をかけてから50を足せば偏差値です。大体の場合において-3〜3くらいの範囲に収まります。

クラスタリング手法

今回はk平均法と呼ばれる方法を用います。この手法の細かい点の説明は省きますが、注意しなければいけないポイントとして以下があります。

  • k平均法は初期値に依存して結果が変わってしまう
  • k平均法は最初にいくつのグループに分類するか決めなければならない

初期値に関しては、今回は最初に設定したランダムな値をベースに出た結果を採用することにしました。グループの数は引用した記事と同じ13としました。

クラスタリング結果

まずは13のグループのそれぞれの人数と、各スタッツのZ得点の平均を見てみましょう。若干見づらいですが、平均のZ得点が1.5を超えたものに関しては数値を太字にしています。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
1 27 0.96 -0.75 -0.73 -0.81 -0.60 0.31 -0.32
2 17 0.05 -0.56 -0.42 -0.48 -0.30 1.51 0.51
3 11 1.08 1.16 1.58 1.11 0.16 1.64 1.11
4 19 -0.95 2.06 1.90 1.64 1.12 -0.23 -0.26
5 29 -0.51 -0.25 -0.44 -0.60 -0.52 0.10 0.04
6 8 -0.73 0.79 0.11 -0.37 -0.57 0.61 2.31
7 13 0.76 0.51 0.35 1.18 1.11 -0.31 -0.04
8 16 -1.20 -0.45 -0.37 -0.03 0.01 -1.01 -1.11
9 33 0.61 -0.94 -0.83 -0.64 -0.58 -0.91 -0.66
10 16 0.73 0.09 0.35 -0.31 -0.29 -0.71 -0.23
11 21 0.48 -0.55 -0.47 -0.84 -0.70 0.06 1.66
12 13 -1.19 0.90 0.83 1.45 2.36 1.14 -0.48
13 14 -1.23 0.64 0.58 1.24 0.79 -0.68 -0.84

ではひとつずつグループを見ていきましょう。

グループ1

グループ1に属する選手はスリーポイントを平均以上に打ちました。スティールは平均的ですが、その他のスタッツはすべて平均を下回っています。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
1 27 0.96 -0.75 -0.73 -0.81 -0.60 0.31 -0.32

このグループには以下の選手が属しました。時間あたりのスリーポイント本数の多い順に並べています。

TEAM PLAYER PO MIN
京都 坂東 拓 SG 286.68
琉球 津山 尚大 PG/SG 765.10
栃木 渡邉 裕規 PG 679.50
栃木 山崎 稜 SG 236.23
三河 狩俣 昌也 PG 680.98
栃木 喜多川 修平 SF 1161.83
三遠 田渡 修人 SG 1686.48
滋賀 長谷川 智伸 SG/SF 1341.20
千葉 石井 講祐 SG 1141.28
三河 松井 啓十郎 SG 701.92
富山 上江田 勇樹 SG/SF 1066.22
富山 岡田 優 SG 244.63
富山 橋本 尚明 SG 939.37
北海道 関野 剛平 SG/SF 1117.43
滋賀 高橋 耕陽 SG/SF 1068.63
川崎 谷口 光貴 SG 478.60
琉球 須田 侑太郎 SF 1046.85
SR渋谷 清水 太志郎 PG/SG 396.43
島根 山本 エドワード PG 904.37
川崎 小澤 智将 SG 170.42
栃木 前村 雄大 PG/SG 126.18
島根 相馬 卓弥 SG 1474.38
A東京 ザック・バランスキー SF/PF 1066.48
西宮 谷 直樹 SF 1515.97
川崎 長谷川 技 SG/SF 1402.47
島根 後藤 翔平 PG 723.58
滋賀 菅原 洋介 SG/SF 374.18

グループ2

グループ2を特徴づけるのはなんと言ってもスティール数です。またアシストでも悪くない値が出ています。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
2 17 0.05 -0.56 -0.42 -0.48 -0.30 1.51 0.51

このグループには以下の選手が属しました。時間あたりのスティール数の多い順に並べています。

TEAM PLAYER PO MIN
名古屋D 柏木 真介 PG 372.72
千葉 トニー・ガフニー PF 360.67
滋賀 田中 大地 SF 143.52
千葉 西村 文男 PG 669.95
SR渋谷 広瀬 健太 SF 956.82
大阪 合田 怜 PG 1027.23
SR渋谷 ベンドラメ 礼生 PG 1512.57
A東京 馬場 雄大 SF 831.13
京都 綿貫 瞬 PG 654.55
三河 橋本 竜馬 PG 1313.88
千葉 アキ・チェンバース SF 1205.85
千葉 阿部 友和 PG 497.67
西宮 大塚 勇人 PG 259.38
北海道 桜井 良太 SF 1198.57
栃木 鵤 誠司 PG 1137.77
名古屋D 中東 泰斗 SG 1424.68
三遠 川嶋 勇人 PG 1352.63

グループ3

グループ3は非常に興味深いです。まずグループ2に続きスティールの値が高いです。またフリースローをはじめとして、全体的にシュートを打った回数が多いグループです。アシストも1を超えています。ブロックショットだけは平均的なようです。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
3 11 1.08 1.16 1.58 1.11 0.16 1.64 1.11

このグループには以下の選手が属しました。時間あたりの2点シュートを打った本数の多い順に並べています。

TEAM PLAYER PO MIN
島根 タイラー・ストーン PF 310.60
三遠 ウェンデル・ホワイト SF/PF 773.88
栃木 セドリック・ボーズマン SF 814.48
栃木 ライアン・ロシター PF/C 1611.45
北海道 ディジョン・トンプソン SF/PF 415.90
北海道 グレゴリー・ウィッティントン SF/PF 334.03
栃木 ジェフ・ギブス PF/C 766.75
富山 ドリュー・ヴァイニー SF/PF 696.72
西宮 ドゥレイロン・バーンズ SG/SF 1142.70
京都 ジュリアン・マブンガ PF 1030.80
横浜 ジェフリー・パーマー SF/PF 1115.00

グループ4

グループ4は2点シュートとフリースローの本数が多く、またリバウンドも多いです。逆にスリーポイントは少ないことからインサイドの選手が属していると思われます。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
4 19 -0.95 2.06 1.90 1.64 1.12 -0.23 -0.26

このグループには以下の選手が属しました。時間あたりのフリースローを打った本数の多い順に並べています。

TEAM PLAYER PO MIN
新潟 ダバンテ・ガードナー C 1771.73
京都 ジョシュア・スミス C 1394.12
滋賀 ベンキー・ジョイス PF 735.67
島根 ジョシュ・スコット PF/C 1352.27
富山 クリント・チャップマン PF 453.83
大阪 エグゼビア・ギブソン C 716.72
千葉 ギャビン・エドワーズ PF 1741.97
川崎 ニック・ファジーカス C 1794.27
A東京 アレックス・カーク C 1564.98
大阪 キース・ベンソン C 692.17
名古屋D ジャスティン・バーレル PF/C 1280.90
川崎 ジュフ・バンバ SF/PF 159.02
富山 デクスター・ピットマン C 1015.27
SR渋谷 ロバート・サクレ C 1582.55
川崎 ジョシュ・デービス PF 1257.37
島根 ギャレット・スタツ C 348.03
西宮 キャメロン・リドリー PF/C 632.32
横浜 ウィリアム・マクドナルド PF/C 926.60
西宮 ハーバート・ヒル PF/C 728.25

グループ5

グループ5には残念ながらあまり特筆するべきところがありませんが、強いて言うならスティール数、アシスト数では平均的です。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
5 29 -0.51 -0.25 -0.44 -0.60 -0.52 0.10 0.04

このグループには以下の選手が属しました。時間あたりのスティール数の多い順に並べています。

TEAM PLAYER PO MIN
西宮 松崎 賢人 PG 558.20
富山 水戸 健史 SG 1042.53
横浜 高島 一貴 SG 1071.80
SR渋谷 伊藤 駿 PG 1010.48
西宮 道原 紀晃 PG/SG 1675.98
新潟 畠山 俊樹 PG 1268.30
西宮 岡田 優 SG 652.22
滋賀 横江 豊 PG 488.07
名古屋D 船生 誠也 SF 1262.17
琉球 渡辺 竜之佑 PG/SG 182.90
西宮 谷口 淳 PF 998.68
横浜 竹田 謙 SG 559.38
A東京 安藤 誓哉 PG 1347.63
A東京 菊地 祥平 SF 1045.72
横浜 蒲谷 正之 SG 318.43
横浜 佐藤 託矢 PF 975.53
三河 森川 正明 SF 184.32
横浜 満田 丈太郎 SG 1155.78
大阪 今野 翔太 SG 1335.73
大阪 藤高 宗一郎 SF 709.58
栃木 生原 秀将 PG 1005.67
北海道 川邉 亮平 SF 908.90
島根 岡本 飛竜 PG 730.65
滋賀 小林 遥太 PG 430.23
三河 村上 直 PG 477.05
京都 片岡 大晴 SG 1176.75
西宮 梁川 禎浩 SG 989.97
横浜 山田 謙治 PG 265.07
川崎 野本 建吾 SF/PF 447.55

グループ6

グループ6は圧倒的なアシスト力を誇るグループです。ガードの選手が属すると予想されますが、スリーポイントの本数は少ないことからシューターは属していないようです。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
6 8 -0.73 0.79 0.11 -0.37 -0.57 0.61 2.31

このグループには以下の選手が属しました。時間あたりのアシスト数の多い順に並べています。

TEAM PLAYER PO MIN
滋賀 並里 成 PG 1649.35
北海道 松島 良豪 PG 713.17
富山 宇都 直輝 PG 2035.30
三河 桜木 ジェイアール PF 1711.15
京都 伊藤 達哉 PG 1415.08
横浜 田渡 凌 PG 1043.53
三河 比江島 慎 PG/SG 1423.73
栃木 田臥 勇太 PG 1073.50

グループ7

グループ7はリバウンド数、ブロックショット数が多いことからインサイドの選手が予想されますが、スリーポイントの本数も0.76とわりかし多めなのが面白いです。外からも打てるインサイド選手ということでしょうか。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
7 13 0.76 0.51 0.35 1.18 1.11 -0.31 -0.04

このグループには以下の選手が属しました。時間あたりのスリーポイントの本数の多い順に並べています。

TEAM PLAYER PO MIN
島根 アル・ソーントン SF/PF 453.17
名古屋D クレイグ・ブラッキンズ PF/C 1290.08
西宮 コナー・ ラマート PF 680.67
SR渋谷 ジョシュ・ハレルソン PF/C 1406.72
三遠 ロバート・ドジャー PF 850.92
新潟 ラモント・ハミルトン PF/C 685.05
富山 サム・ウィラード PF 1416.00
大阪 デイビッド・ウェア SF/PF 988.73
島根 ブレンダン・レーン PF 352.78
滋賀 オマール・サムハン C 733.75
A東京 竹内 譲次 PF/C 1172.08
千葉 レオ・ライオンズ SF/PF 948.40
琉球 アイラ・ブラウン PF 1722.18

グループ8

このグループはリバウンド、ブロックショットでは平均的ですが、他のスタッツはあまり目立ったところがなかったようです。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
8 16 -1.20 -0.45 -0.37 -0.03 0.01 -1.01 -1.11

このグループには以下の選手が属しました。時間あたりのリバウンド数の多い順に並べています。

TEAM PLAYER PO MIN
富山 青木 ブレイク PF 358.58
名古屋D 大宮 宏正 PF 126.43
西宮 坂井 レオ PF/C 270.02
滋賀 樋口 大倫 PF 265.50
西宮 土屋 アリスター時生 C 135.12
千葉 伊藤 俊亮 C 148.17
富山 小原 翼 PF 312.95
三遠 比留木 謙司 PF 121.37
島根 波多野 和也 PF 922.93
西宮 石塚 裕也 PF 739.77
千葉 荒尾 岳 PF 118.30
島根 小阪 彰久 PF 334.07
富山 葛原 大智 SG 178.30
西宮 内藤 健太 SG 277.10
新潟 遥 天翼 SF 847.23
川崎 鎌田 裕也 PF/C 787.35

グループ9

グループ9はスリーポイントを平均より多く打っているものの、2点シュート、スティール、アシストなどでは平均よりぐっと落ちており、スリーポイントシュートが特徴のグループとなりました。また人数も33人と最多です。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
9 33 0.61 -0.94 -0.83 -0.64 -0.58 -0.91 -0.66

このグループには以下の選手が属しました。時間あたりのスリーポイント本数の多い順に並べています。

TEAM PLAYER PO MIN
京都 岡田 優介 SG 1410.28
大阪 安部 潤 PG/SG 214.88
名古屋D 安藤 周人 SG 1351.97
琉球 田代 直希 SF/PF 1145.53
SR渋谷 ルーベン・ボイキン PF 209.37
新潟 城宝 匡史 SG 1155.38
滋賀 狩野 祐介 SG 1379.80
名古屋D 中務 敏宏 SG/SF 489.28
新潟 池田 雄一 SF 1151.37
新潟 今村 佳太 SG/SF 859.73
SR渋谷 杉浦 佑成 SF 225.60
三遠 大石 慎之介 SG 207.55
三遠 岩田 涼太 SG/SF 178.60
富山 大塚 裕土 SG/SF 1849.85
京都 晴山 ケビン SF 1033.43
島根 佐藤 公威 SG 1796.42
SR渋谷 長谷川 智也 SG 1038.93
栃木 遠藤 祐亮 PG/SG 1431.63
千葉 原 修太 SG/SF 680.83
京都 内海 慎吾 SG 1110.30
三遠 鹿野 洵生 SF 1307.05
琉球 金城 茂之 SG 238.78
大阪 根来 新之助 SF/PF 1158.48
三河 西川 貴之 SF 959.50
島根 熊谷 宜之 SF 486.78
新潟 鵜澤 潤 PF 875.63
A東京 正中 岳城 SG 469.22
滋賀 佐藤 卓磨 SF/PF 477.55
西宮 セオン・エディ SG 367.75
SR渋谷 菊池 真人 PF 852.22
新潟 佐藤 優樹 SG 129.63
三遠 岡田 慎吾 SG 1083.22
川崎 栗原 貴宏 SF 796.18

グループ10

グループ10です。こちらもスリーポイントが特徴ですが、グループ9とは違って2点シュートもフリースローもそこそこ打っています。そこが違いですね。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
10 16 0.73 0.09 0.35 -0.31 -0.29 -0.71 -0.23

このグループには以下の選手が属しました。時間あたりのスリーポイント本数の多い順に並べています。

TEAM PLAYER PO MIN
三遠 カルティエ・マーティン SG/SF 430.00
琉球 古川 孝敏 SF 1101.25
名古屋D ジェロウム・ティルマン PF 1042.20
三河 金丸 晃輔 SG/SF 1599.52
大阪 熊谷 尚也 SF/PF 1623.52
横浜 川村 卓也 SG 1685.23
千葉 小野 龍猛 SF/PF 1599.80
A東京 ジャワッド・ウィリアムズ PF 1165.58
横浜 湊谷 安玲久司朱 SG 104.25
名古屋D 張本 天傑 SF/PF 1180.25
北海道 折茂 武彦 SG 1114.48
北海道 野口 大介 PF 998.17
北海道 牧 全 SG 346.57
SR渋谷 満原 優樹 PF/C 1145.38
京都 永吉 佑也 PF/C 1508.92
大阪 橋本 拓哉 SG 1198.43

グループ11

グループ11は再びアシストが特徴的なグループです。ただスリーポイントは多めながら、2点シュートは少なめのグループです。アシストが得意なスリーポイントシューターというところでしょうか。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
11 21 0.48 -0.55 -0.47 -0.84 -0.70 0.06 1.66

このグループには以下の選手が属しました。時間あたりのスリーポイント本数の多い順に並べています。

TEAM PLAYER PO MIN
川崎 辻 直人 SG 1572.38
琉球 岸本 隆一 PG/SG 1529.52
千葉 富樫 勇樹 PG 1391.82
新潟 五十嵐 圭 PG 1829.97
琉球 二ノ宮 康平 PG 752.68
名古屋D 笹山 貴哉 PG 1433.50
川崎 藤井 祐眞 PG 1419.12
横浜 細谷 将司 PG 1346.97
琉球 石崎 巧 PG/SG 699.05
A東京 田中 大貴 SG 1552.17
大阪 木下 博之 PG 1088.40
北海道 伊藤 大司 PG 729.07
三遠 鈴木 達也 PG 1293.62
北海道 多嶋 朝飛 PG 1357.20
島根 渡邊 翔太 PG 1076.67
川崎 篠山 竜青 PG 1296.20
SR渋谷 山内 盛久 PG/SG 1225.80
A東京 小島 元基 PG 956.77
名古屋D 藤永 佳昭 PG 870.82
新潟 森井 健太 PG 355.38
富山 宮永 雄太 PG 405.13

グループ12

ブロックショットグループです。合わせてリバウンドや2点シュート、フリースローの本数も多いですね。はい、インサイドです。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
12 13 -1.19 0.90 0.83 1.45 2.36 1.14 -0.48

このグループには以下の選手が属しました。時間あたりのブロックショット数の多い順に並べています。

TEAM PLAYER PO MIN
横浜 ハシーム・サビート C 1396.60
SR渋谷 ブランデン・ドーソン SF/PF 122.43
滋賀 ディオール・フィッシャー PF/C 1777.80
栃木 アンドリュー・ネイミック C 253.22
北海道 ダニエル・ミラー C 1287.72
北海道 マーク・トラソリーニ PF/C 1484.45
琉球 ハッサン・マーティン PF/C 1612.88
千葉 マイケル・パーカー PF 1520.30
A東京 ランデン・ルーカス C 259.37
琉球 ヒルトン・アームストロング C 1259.58
京都 マーカス・ダブ PF 886.98
島根 ジャミール・マッケイ PF 131.10
大阪 グレッグ・スミス PF/C 438.32

グループ13

最後のグループになります。こちらもインサイドの選手が予想されますが、どちらかというとリバウンドが貢献だった選手のようです。

グループ 人数 3点シュート試投数 2点シュート試投数 フリースロー試投数 リバウンド数 ブロックショット スティール数 アシスト数
13 14 -1.23 0.64 0.58 1.24 0.79 -0.68 -0.84

このグループには以下の選手が属しました。時間あたりのリバウンド数の多い順に並べています。

TEAM PLAYER PO MIN
川崎 ルー・アマンドソン PF 445.30
三河 アイザック・バッツ C 1622.28
西宮 ジョーダン・ヴァンデンバーグ C 375.92
三河 コートニー・シムズ PF 471.50
A東京 ブレンダン・レーン PF/C 555.98
三河 ダニエル・オルトン PF 919.82
新潟 ジャレッド・バーグレン PF/C 446.33
三遠 スコット・モリソン C 1294.50
島根 ジーノ・ポマーレ PF/C 652.20
SR渋谷 ジャマール・ソープ SF/PF 259.00
栃木 竹内 公輔 PF/C 1549.95
新潟 オースティン・ダフォー PF 696.10
滋賀 ファイ サンバ C 1156.42
三遠 太田 敦也 C 1358.40

まとめ

冒頭で述べたとおり半分ネタだったのですが、個人的にはけっこう面白い結果が出たのではないかと思います。冒頭に挙げた例のうち、富樫と篠山が同じグループに入ってしまったのはご愛嬌ということで。

あと別の記事でも述べましたが、シーズンの途中で移籍があるとその選手に関するスタッツが複数できてしまいます。今回面白かったのが、その複数のデータが同じグループに属さなかったことです。やはりチームが変われば役割が変わってくるということなのでしょうか。

参考書籍

上述のAyasdiの話も合わせて、以下の書籍を参考にしました。

Basketball Analytics: Spatial Tracking

Basketball Analytics: Spatial Tracking

Amazon

B2ナンバーワン攻撃力を持つチームはFE名古屋で、勝率1位の秋田は6番手

B1の各チームの得点効率と勝率の相関関係についてはこちらの記事で分析しました。

同じ要領でB2各チームの2017-2018シーズンの得点効率と勝率の関係をみてみましょう。なお上の記事でも説明していますが、得点効率とは攻撃ターンが100回相手から回ってきたときに何点くらい取れそうなのか、というチームの攻撃力を示す数値です。

攻撃ターンが回ってきた回数に関しては(これをポゼッションと言います)、以下の式で近似しています。

ポゼッション数 = フィールドゴールを打った回数
- オフェンスリバウンドの回数
+ ターンオーバーの回数
+ 0.44 * フリースローを打った回数
得点効率 = 総得点数 / ポゼッション数 * 100

では上の式で得点効率を求めてみます。以下の図にチームの勝率と一緒にプロットしてみました。また図の下に数字を表にまとめておきます。

f:id:rintaromasuda:20180701232036j:plain

チーム 勝率 得点効率 総得点 ポゼッション
秋田 0.900 104.94 4798 4572
福岡 0.783 107.18 4865 4539
熊本 0.683 107.66 4863 4517
FE名古屋 0.650 109.03 4964 4553
福島 0.633 103.71 4862 4688
茨城 0.633 104.28 4576 4388
愛媛 0.550 105.70 5047 4775
広島 0.550 103.38 4766 4610
群馬 0.533 107.08 4812 4494
金沢 0.467 102.04 4594 4502
山形 0.417 100.86 4474 4436
信州 0.417 94.62 4225 4465
香川 0.367 96.00 4272 4450
仙台 0.350 99.52 4607 4629
東京Z 0.333 96.03 4305 4483
奈良 0.317 97.98 4325 4414
青森 0.300 102.72 4838 4710
岩手 0.117 87.51 3932 4493

ご覧の通りですが、気になるところをいくつか挙げます。

勝率1位の秋田ですが、得点効率が6位とは意外な結果でした。単純な予想としてはきっとディフェンスが良かったのだろうと思いますが、これはさらに分析してみないと分かりません。B1のときは上位チームは軒並み得点効率も抜けて良かったので、この秋田の結果は興味深いです。

得点効率1位はFE名古屋でした。FE名古屋はB2のスリーポイント王で、試合平均12.1点という数字をマークした福澤を擁します。福澤は来シーズンは茨城でプレーとのことですが、今後とも注目の選手だと言えそうです。FE名古屋の後は熊本、福岡、群馬と続きます。

また若干ではありますが、B1の方が相関関係は強かったようです。B1が相関係数0.864のところB2だと0.802という数字でした。