エンジニアレポート

非エンジニアがPythonを用いて、サッカーのセットプレーを可視化した話

2020年08月24日 Python

フットボール事業部の高橋です。

主にサッカー競技団体向けに営業、コンサルティングを行っております。

今までコードすら書いたことのなかった非エンジニア人間の私ですが、現在Pythonを学んでいます。

先日Pythonを用いてサッカーのコーナーキックを分析し、当社の運営するFootball LABにコラムを執筆しましたので、今回はそのコラムでどのようにPythonを用いたのか、その実装方法について紹介したいと思います。

コラムはこちら↓
精度の高いキッカーは?2019J1リーグのコーナーキックを振り返る

1.データの用意と確認

データは当社で保有しているものを使用します。当社では、すべてのボールタッチプレーに対して、時間、位置、選手、内容、結果といった情報を管理していますので、それをもとに前処理を行います。

データは以下のDataFrameに格納されています。

  • Kicker:コーナーキックを蹴った選手。
  • KickFoot:キッカーの蹴った足。左足が1、右足が2。
  • CKside:攻撃方向に向かって左からのコーナーキックが1、右が2。
  • Target:次にプレーした選手。
  • GoalF:次にプレーした選手がシュートし、得点したかどうかのフラグ。
  • ShotF:次にプレーした選手がシュートを打ったかどうかのフラグ。
  • ShotAreaX、ShotAreaY:ペナルティーエリアを9分割したピッチ上でのシュート位置(3×3)。次の選手がペナルティーエリアの外でプレーした、シュートを打てなかった場合は0とする。

2.ラストパス数の多いキッカーを調べる

キッカーごとに集計を行い、上図のようなDataFrameを作成していきましょう。ちなみにラストパスはパスを受けた味方選手がシュートを放った場合にカウントします。

まずは各項目のSeriesを作成します。

次に、これらのSeriesを用いてDataFrameを作成します。

これで、DataFrameが完成しました。確認すると永戸選手と、福森選手のラストパス数、アシスト数が突出していることが分かりますね。

3.キッカーとターゲットの組み合わせ

キッカーとターゲットの組み合わせを調べていきましょう。KickerとTargetでグループ化を行い、シュート数とゴール数を集計します。

シュートエリアの可視化

永戸選手がキッカーのデータを使ってシュートエリアを図に表しましょう。
まず蹴った足、サイドごとにデータを分け、シュートエリアの割合を求めます。

次にヒートマップで可視化していきます。ピッチ図も合わせて描きましょう。

これで、シュートエリアがヒートマップで可視化されます。またピッチ図を描くことによってより分かりやすくなりますね。ちなみに中央のエリアの幅はゴールポスト間の幅となります。

またコードは割愛しますが、コラムでは座標をプロットして、得点した際のシュート位置を図示しました。

これを見ると永戸選手がどの位置を狙ってプレーしていたか、どこから得点を決めたかが一目瞭然ですね。


今回はPythonを用いて、明治安田生命J1リーグのコーナーキックのデータを可視化する方法をご紹介しました。

今振り返ると、学習の初め1〜2か月は意味もよくわからずソースコードを教科書通りに書くような状況で、なかなか腹落ちした感覚が得られず非常に辛かったですね。

しかし、小さな成果物を作るたびに社内メンバーに共有してフィードバックを得ているので、なんとか学習を継続することができていますし、今回はコラムも執筆することができました。

これからもどんどんPythonを活用して、アナリティクスの観点からサッカー界の発展に貢献していきたいと思います。

エンジニア募集中

データスタジアムでは一緒に働いていただけるエンジニアを絶賛募集中です!

野球、サッカー、バスケをはじめとして色々なスポーツの仕事があります。

AWSやAzure、動画やAIなど技術的にもチャレンジできる職場です。

テクノロジーの力で、日本のスポーツを一緒に発展させていきましょう!

<募集中のポジション(2020年8月1日現在)>

開発エンジニア(速報サービス)

開発エンジニア(スポーツチーム向けサービス)

インフラエンジニア

最新記事

エンジニアトップ エンジニアインタビュー エンジニアレポート

  • 採用情報
  • おしらせ
  • 掲載事例

ページトップヘ