「FC Python」 でサッカーのデータ分析を学ぶことができる。 コンテンツは英語しかないが簡単な内容であり、1 つ 1 つのコンテンツも短いので翻訳サイトを使いながらでも進めることはできる。 これが無料で展開されているのはありがたい! 今回はパスの表現を学んだのでまとめる。
作るもののイメージ
今回は次のようなサッカーのピッチと 3 本のパスを描く。
「FC Python」のページとしては下記のページを参考にした。
- Drawing a Pitchmap - Adding Lines & Circles in Matplotlib | FC Python
- Drawing a Pass Map in Python | FC Python
開発環境
検証で使う開発環境は手軽に始められる Google Colaboratory を使用する。
ライブラリ
ライブラリは次のものを使用する。
- pandas
- numpy
- matplotlib
実際に作成する
ピッチを描く
まずはピッチを描いてみる。 直線 1 本ずつ組み合わせて描いていく形になる。 最後にセンターサークルで円を描いている。
import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Arc %matplotlib inline fig=plt.figure() ax=fig.add_subplot(1,1,1) # ゴールライン、タッチライン plt.plot([0,0],[0,90], color="black") plt.plot([0,130],[90,90], color="black") plt.plot([130,130],[90,0], color="black") plt.plot([130,0],[0,0], color="black") # センターライン plt.plot([65,65],[0,90], color="black") #左ペナルティエリア plt.plot([16.5,16.5],[65,25],color="black") plt.plot([0,16.5],[65,65],color="black") plt.plot([16.5,0],[25,25],color="black") #右ペナルティエリア plt.plot([130,113.5],[65,65],color="black") plt.plot([113.5,113.5],[65,25],color="black") plt.plot([113.5,130],[25,25],color="black") #左ゴールエリア plt.plot([0,5.5],[54,54],color="black") plt.plot([5.5,5.5],[54,36],color="black") plt.plot([5.5,0.5],[36,36],color="black") #右ゴールエリア plt.plot([130,124.5],[54,54],color="black") plt.plot([124.5,124.5],[54,36],color="black") plt.plot([124.5,130],[36,36],color="black") #センターサークル centreCircle = plt.Circle((65,45),9.15,color="black",fill=False) ax.add_patch(centreCircle) plt.show()
plt.show()
を実行するとピッチが表示される。
パスを描く
次はパスを描く。 パスを描くと言っても大げさなものではなく、こちらも直線で表現する。 今回のパスのイメージは、次の 3 本を想定している。
まずは 1 のボランチからのバックパスを表現する。 ピッチを描いたコードの最下部に追加をする。
#センターサークル (これより上は省略) centreCircle = plt.Circle((65,45),9.15,color="black",fill=False) ax.add_patch(centreCircle) #追加部分ここから data = pd.DataFrame(np.array([[45, 25, 60, 45]]), columns=['Xstart', 'Xend', 'Ystart', 'Yend']) plt.plot([int(data["Xstart"][0]),int(data["Xend"][0])], [int(data["Ystart"][0]),int(data["Yend"][0])], color="blue") plt.plot(int(data["Xstart"][0]),int(data["Ystart"][0]),"o", color="green") #追加部分ここまで plt.show()
これでボランチからのバックパスを表現できた。 青の線の端に緑の点があるが、これはパスの始点を想定している。
「ボランチからバックパス」、「ボランチから逆サイドへの展開」「ボランチから縦パス」を表現するために、データを追加する。 また、途中の処理もループに変更する。
#センターサークル (これより上は省略) centreCircle = plt.Circle((65,45),9.15,color="black",fill=False) ax.add_patch(centreCircle) #追加部分ここから data = pd.DataFrame(np.array([[45, 25, 60, 45],[55, 90, 65, 30],[60, 120, 50, 70]]), columns=['Xstart', 'Xend', 'Ystart', 'Yend']) for i in range(len(data)): plt.plot([int(data["Xstart"][i]),int(data["Xend"][i])], [int(data["Ystart"][i]),int(data["Yend"][i])], color="blue") plt.plot(int(data["Xstart"][i]),int(data["Ystart"][i]),"o", color="green") #追加部分ここまで plt.show()
まとめ
「FC Python」 のコンテンツを通してパスマップの描き方を学ぶことができた。 「FC Python」 には他にも Python を使ったサッカーの分析を学べるコンテンツが揃っている。 サッカーのデータ分析の知見はなかなか見かけないのでどんどん使いこなしていくぞ!!