エンジニアレポート

Pythonでサッカーのインフォグラフィックを作る

2020年04月14日 エンジニア

フットボール事業部の猪ノ口です。主にサッカーのコンテンツ配信サービスに携わっています。今回はPythonを用いてサッカーデータの可視化、具体的には「パスソナー」の作成についてお話ししたいと思います。

「パスソナー」という言葉を聞いたことはありますでしょうか?

アメリカの大学講師が編み出したとされる、各エリア(または選手)でのパスの方向・頻度・距離を可視化するものです。
百聞は一見に如かず、ということで早速実装していきましょう。

1.環境・データの用意

今回は機械学習の前処理で主に使用されるライブラリを活用しますので、それらの環境が予め揃っているGoogle Colabを使用したいと思います。ローカルであればAnacondaで構築した環境があればよいですね。

データは当社で保有しているものを使用します。当社では、ワンプレー毎にプレーの種類や座標などの情報を管理しておりますので、それを元に以下の前処理を行います。

  • 座標から、ピッチを横6・縦9の計54分割
  • 54分割したエリア毎に、パス方向・パス本数・パス距離を算出(成功したパスのみに限る)
  • テーブルデータとしてcsvに出力

単体で見るよりも比較した方がより分かりやすくなりますので、オフに監督交代のあった清水エスパルスの2019シーズン最終節と2020シーズン開幕節のパスソナーを出してみたいと思います。

2.データの確認

まずはデータを線形代数におけるベクトルや行列として扱えるpandasというライブラリを使用し、1で用意したcsvを読み込みます。今回読み込んだcsvはDataFrameという2次元データ(行列)に格納されていますので、その中身を見てみます。

出力結果

  • AreaX、AreaY:54分割したピッチ上での位置。Xは1が左サイド、6が右サイド、Yは1が自陣ゴール、9が敵陣ゴールとなります。
  • PassDirection:8分割したパスの方向。1が前方向、2が右前方向、3が右方向…と時計回りになっています。
  • PassDistance:パスの距離(m)です。
  • PassCount:パス本数です。

これを活用して可視化していきましょう。

3.グラフの用意

可視化は2次元グラフをピッチに見立て、そのグラフ上に情報をプロットしていきます。これにはmatplotplibというグラフ描画ライブラリを使用します。今回はパスのデータを横6:縦9の単位で集計していますので、それに合わせて2次元グラフを6:9で用意、またX軸の最大値を6、Y軸の最大値を9とします。

4.数値のプロット

まずは各エリアでの総パス本数を数字でプロットしてみましょう。先ほど確認したように、データがエリア・方向単位になっているため、エリア単位に集計します。

このデータでループを行い、テキストとして数値をプロットしていきます。なお見栄えのため座標はやや調整しています。

扇なし数値のみ

5.扇形のプロット

続いて、パスソナーの神髄である扇形をプロットします。扇形は、座標はもちろんのこと半径の長さ、始まりの角度、終わりの角度、色などを指定します。

この角度が少しややこしいのですが、3でX軸、Y軸を設定した都合上、0度がグラフ上の右、90度がグラフ上の上となります。なのでピッチに当てはめると攻撃方向(真上)は90度となります。

扇形1つあたりの角度は360/8=45度となるため、上方向の扇形は112.5度~67.5度となります。右上方向は67.5~22.5度となります。全てIF文で分岐させてもよいのですが、算出するようにしてみました。ただ、もっとよい実装方法があるかもしれません。

4と同様に表示位置を綺麗にするため座標は調整し、パス距離に応じて色も指定します。15m未満を短距離として薄いオレンジ、25m未満を中距離としてオレンジ、それ以上を濃いオレンジとしています。

これで扇形がプロットでき、2019シーズン最終節のパスソナーが完成しました。

扇を設置2019

続いて、読み込むCSVファイルだけ変更し、同じソースコードで2020シーズンの開幕節を出してみます。

扇を設置2020

2020シーズンになって、パスの絶対量が増えたことは一目瞭然ですね。2019シーズンは中距離のパスがほとんどだったのに対し、2020シーズンは短距離のパスが非常に増えていることも分かります。

6.おまけ

背景が真っ白だと寂しいので、少し装飾してみます。以下のコードで、グラフを透過させることができます。

コードは割愛しますが、画像処理ライブラリを使用してピッチ画像の上にグラフを重ねると、それっぽく見せることができます。

背景設置

7.まとめ

Matplotlibは今回のように実体にあてはめてデータの可視化に活用することができます。ヒートマップやフォーメーションはもちろんのこと、グラフをゴールポストに見立てることもできると思います。また画像処理ライブラリを活用すれば、リッチな見せ方もできそうです。

エンジニア募集中!

データスタジアムでは一緒に働いていただけるエンジニアを募集しています。野球、サッカー、バスケなどスポーツが好きな方であれば、とても面白い仕事ができる会社です。興味を持たれた方はぜひこちらをご覧ください。

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

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

ページトップヘ