こんにちは。TATです。
今日のテーマは「Jリーグの試合データを収集して可視化してみる」です。
久しぶりにデータ分析します。
最近、SorareというNFTを活用したサッカーのカードゲームの存在を知りました。
こちらが僕のアカウントです。始めたばかりなので雑魚ですw
このゲームでは5人の選手でチームを編成して競い合います。
結果はなんと現実世界の試合結果で決まります。
各選手の活躍がスコア化されて、それらのスコアで争います。
実際の試合結果がスコアに影響を与えるので、選手の応援にも力が入ります。
上位に入ることができれば賞金(イーサリアムでもらえます)とかレアカードがもらえたりします。
ゲームで勝つために重要なのが選手選びです。当たり前ですね。
ただ、ゲームの仕組みを理解すると、ただひたすらにスーパースター選手を集めればいいというものでもありません。
スコアに影響するのは、ゴールやアシストはもちろん、ファウルやイエローカード、パスミスなんかも考慮されます。
機械的にスコア化される仕組みになっているので、そこまで有名な選手ではなくても結構高いスコアをはじき出すこともあります。
基本的には、試合に出場していることが大前提です。
出場なしだと点数もありません。
よって、スーパースターを5人集めるよりかは、確実に試合に出ている選手を5人集める方が大事になります。
Jリーグも参加しており、日本人選手も獲得可能です。
このような仕組みを知れば、僕のやるべきことは明確です。
データ分析してコスパ良い選手探そうぜということになりますw
今回はその第一弾ということで、Jリーグの試合データを収集して分析してみます。
選手ではなくてチームにフォーカスして分析します。選手は今後別記事で分析していきます。
目次
【Sorare攻略大作戦】Jリーグの試合データを収集して可視化してみる【Pythonでデータ分析】
サクッとデータ収集
まずは分析するためのデータ収集です。
これにはPythonのスクレイピングを使います。
スクレイピングについてはこれまでの記事でいろいろと解説してきているので、ここではコードには触れずに結果だけ出します。
今回いろいろ探して良さそうなサイトを見つけました。
JLEAGUE.JPです。Jリーグの公式サイトらしいです。
ここの右上にある「クラブ」をクリックするとチーム一覧が見れます。
J3までのチームが揃っています。
ここからコンサドーレ札幌をクリックして、「成績・データ」を選択すると、こんな感じで過去試合の結果がまとまっています。
「2021年」を変更すれば過去シーズンの結果も確認できます。
データを収集した2021年12月13日時点では、2015年からのデータを見ることができました。
ということで、各チームの2015年以降の試合データを全て収集します。
まずはクラブ一覧ページから各クラブのURLを取得します。
次に各クラブのページから、試合結果を年ごとに収集すればOKです。
収集したものを全部がっちゃんこするとこんな感じになります。
ここから少しデータ整形します。
このままでは全て文字データなので、可能な部分は全て数値データに変換しつつ、スコアから得点数と失点数を取り出したり、警告/退場を警告と退場に分けたりしました。
最後の仕上げに、クラブ一覧ページから取得したデータをくっつけます。
これでJ1ごととかリーグごとで分析することも可能になります。
リーグの判定は2021年のものです。
毎年数チームが入れ替わっていますが、ここでは2021年時点で所属しているリーグを過去分にも適用します。
合体したらこんな感じです。
チーム名とnameが同じデータになってますが、めんどいのでこのまま突き進みますw
これでデータの準備は完了です。
まずはデータの全体像を把握する
まずはデータの全体像を把握します。
describe関数で基本的な統計データを見る
describe関数で基本的な統計データを見てみます。
データは全部で16,034個あることがわかります。
なかなかの量です。
留意しておくべき点は、このデータは各チームごとに取得しています。
ゆえにデータがそれぞれダブっています。
鹿島アントラーズ対川崎フロンターレの試合があるとすると、鹿島アントラーズのデータと川崎フロンターレのデータで同じ試合が出てきます。
こういったことを考慮しながらデータを見る必要があります。
平均(mean)で見ると得点数の方が失点数よりも高いことがわかりますね。
入場者数を見ると、最高で10万人ですが、最低で0人です。
これはコロナによる無観客試合ですね。
1試合あたりのシュート数の平均は9.88と約10回、得点数の平均は約1.3点ほどなので、ざっくり7~8回のシュートで1回ゴールが決まっていることになります。
相関関係を見る
次にpairplotで相関関係を見てみます。
細かくてすみませんw
データを見ると、そこまで強い相関を持つデータはありません。
シュート数が増えると得点数も増えているように見えますが、大きな相関はありません。
相関係数を見るとこんな感じです。
みた感じ相関がありそうなシュート数と得点数でも0.36です。
総じて強い相関のあるデータはありません。
リーグごとにデータをみる
ここからは、少しデータに少し首を突っ込んでいきます。
まずはリーグごとにデータを見てみます。
平均値で比較する
リーグごとに各データの平均値をみてみます。
得点数で見ると、J1が飛び抜けています。失点数はJ3が飛び抜けています。
J1とJ2には攻撃力、J2とJ3には守備力に大きな差が見られます。
そして観客の差はやはりすごいですね。
得点数と失点数をちょこっと深掘りする
ここで少し得点数と失点数を詳しく見ていきます。
2点以上になるとJ1が多くなることから、全体的な平均得点数が高いことがわかります。
次に失点数です。
J1やJ2に比べて、J3は失点数2の割合が多いことがわかります。
あまり深い分析はしてないですが、ざっくりデータを見た感じだと、J1とJ2の差は攻撃力、J2とJ3の差は守備力です。
チームごとにデータを見る
最後にチームごとにデータを見ていきます。
ここが一番大事です。
全チームを見ると数が多すぎるので、J1に絞ってみていきます。
平均値で比較する
まずはチームごとの平均値を見てみます。
カオスですみませんw
川崎フロンターレはシュート数でも得点数でもCK数でもFK数でも高い数値を出してますね。
失点数も低いです。
このデータだと少し見にくいで、ちょっとカラムを絞って見ていきます。
得点力の高いチームはどこか
まずは得点力を見てみます。
2015年以降の得点数を比較してみましょう。
年ごとにデータを分けてみました。
ご覧の通り、川崎フロンターレがぶち抜いています。
その他、横浜F・マリノス、鹿島アントラーズも高いですね。
積み上げの棒グラフだとみにくいので、ヒートマップにもしてみました。
こうすると各年ごとの得点数の平均が比較しやすくなります。
2015年で見るとサンフレッチェ広島とか浦和レッズも強かったことがわかります。
直近だと川崎フロンターレと横浜F・マリノスの2強で、ちょっと下がったところに鹿島アントラーズとヴィッセル神戸がいる感じです。
特に2020年の川崎フロンターレは周囲をぶち抜いていることがわかります。
守備力の高いチームはどこか?
次に失点数を見てみます。
こちらは低ければ低いほど良いことになります。
ここでも川崎フロンターレが強いですね。
セレッソ大阪も守備が強いことがわかります。
こちらの結果も先ほど同様にヒートマップでもみてみます。
2021年だと名古屋グランパスが良い結果です。
2020年から失点数が激減しています。
2019年からマッシモ・フィッカデンティ監督がチームを率いていますので、この影響が大きそうです。
横浜F・マリノスも2021年から守備力が安定しています。
マリノスは今年7月からケビン・マスカット氏が就任しています。
彼の影響でしょうか。
2021年の1月〜6月の平均失点数は2.07点で、7月以降は1.00点でした。確実に影響ありそうです。
ここまでの内容を見ていると、監督の変更はチームのパフォーマンスに大きく影響しそうな感じがします。
決定力の高いチームはどこか
最後に、決定力についてみてみます。
これは「平均得点数 ÷ 平均シュート数 * 100」で算出します。
これでシュートが決まる確率(%)がはじき出せます。
マックスで18%なので、だいたい5回打てば1回点が決まるイメージですね。
2021年の数値を見てみると、川崎フロンターレ、横浜F・マリノス、ヴィッセル神戸が16%でトップです。
ヴィッセル神戸は効率よいですね。
ちなみにこのヒートマップは前年度との差を可視化することも容易です。
こうすることで年ごとの変化を確認できます。
前年データのない2015年は空白になります。
2021年のデータを見ると、徳島ヴォルティスと柏レイソルの決定力が大きく下がっています。
ヴィッセル神戸は一番上昇していますね。
こういった変化はチーム編成や監督によって変わってくるので、気にしておくと面白いかもです。
Sorareを効率よく攻略するにはどうするか?
ここまでの結果を踏まえて当初の目的に戻ります。
このデータ分析の目的は、SorareというNFTを活用したサッカーゲームを攻略することです。
Sorareでは実際の試合での各選手の活躍がスコア化されて勝敗が決まります。
試合に出場していないと点数すらつかないので、スタメン選手を揃えるのが基本になります。
今回はJリーグのチームを分析したので、ここではチーム観点から見ていきます。
Sorareのチームは5人編成
まず、Sorareでは5人の選手でチームを編成します。
GK, DF, MF, FWで1人ずつ選んで、最後にExtra枠を1人追加してチームができます。
ポジションごとにスコアの基準が異なるので、別途戦略を考える必要があります。
GK、DFは失点の少ないチームから選出すべき
GKとDFについては、失点がとにかく大きくマイナスに響きます。
したがって、勝敗に関わらず、とにかく失点数の少ないチームの選手を選ぶべきです。
引き分けでも失点ゼロでなんどもピンチから救っていると得点は高くなります。
2021年の結果をもとに、J1~J3含めて失点数の少ないチームトップ10を出してみました。
この辺りのチームが候補になってくるかと思います。
MF、FWは調子が安定して得点に絡める選手
MFやFWはやはり得点とアシストが大きく影響します。
効果的なパスとかもポイントになります。
よって、安定的に出場して活躍できる選手が選べると確実性が上がります。
チームで言えば、得点力の高いチーム、決定力の高いチーム、あとはCKとかセットプレーで得点が多いチームとかあれば、キッカーとなる選手はアシストの可能性も高まるので良いかもしれません。
先ほど同様に、2021年でJ1~J3で得点力の高いチームトップ10を出してみました。
この辺りが候補になってくるかと思います。
急激に状況改善したチームから選手をとればコスパ良し
コスパを考えると、状況が改善したチーム、あるいはしそうなチームから選手をゲットするのがよい感じがします。
というのも、すでに活躍している選手を獲得しようとすると、すでに値段が高騰している場合が少なくありません。
特にJ1で人気の選手とかだと数万円とか下手したら数十万円とかになることもあります。
お金があれば問題ないですが、僕みたいな貧乏症には厳しいので、そういった場合は少し工夫が必要です。
J2やJ3の注目度の高くない選手でも、活躍によっては得点が高くなる可能性はあります。
また、監督変更やチーム編成などでパフォーマンスが大きく変わり場合もあります。
こういった際に、注目される前に選手を取得することができれば高騰前に獲得することが可能です。
変化が見えてきた時点ですでに選手の価値が爆上げしている可能性も十分にあると思うので、なかなか難しいとは思いますが。。。
うまくいけば高騰後に売却してお金儲けだって可能になります。
こうしたデータ分析の結果を活用しながらうまく攻略していきたいところです。
データ分析にはPythonが最適です。
本記事で紹介した分析は全てPythonで行なっています。
Pythonを使うと短いコードでわりと簡単にデータの収集や分析をすることができ、Webスクレイピングやデータ分析、AI関連に強くて、世界中で人気を集めている言語です。
すっきりとしたコード体系で、誰でもきれいなコードが書けるような設計になっています。
過去の記事では、データ分析としてPythonをご紹介している記事や、Pythonでできることをまとめたものがありますので、もしPythonにご興味があれば合わせてご覧ください。
僕自身も社会人になってからPythonを独学しました。それくらい学びやすい言語でもあります。
【いますぐ始められます】データ分析をするならPythonが最適です。【学習方法もご紹介します!】
【人気上昇中】今人気のプログラミング言語「Python」は何ができるのか?できることまとめます【転職でも有利です】
まとめ
いかがでしたでしょうか。
ここでは、Sorare攻略のために、Jリーグのチームデータを収集して分析してみました。
SorareはNFTを活用したサッカーゲームで、実際の試合結果で勝敗が決まります。
こちらが僕のアカウントです。始めたばかりなので雑魚ですw
今回の分析で得られた知見を活かして、効率的にSorareが攻略できれば嬉しいですね。
ここではチームに焦点を当てて分析をしてきましたが、今後は選手データも収集して分析していこうと思います。
いずれはヨーロッパリーグの選手データやチームでーたも分析したいですね。
いろいろと考えるほどワクワクが広がっていきますw
ここまで読んでくださり、ありがとうございました。