概要

ggsoccerパッケージを用いて, ピッチの描画とイベントデータを扱う.

パッケージの準備

まず, ggsoccerパッケージのインストールを行う.

install.packages("ggsoccer")

次に, パッケージを読み込む. pacmanパッケージを使うとまとめて読み込めて便利.

ここでは,

  • ggplot2
  • tidyverse
  • ggsoccer

    を使用.

library(pacman)
p_load(ggplot2, tidyverse, ggsoccer)

how to

annotate_pointで描画に必要な引数を指定する. dimensionsについてはhelpを参照.

ggplot() +
  annotate_pitch(
  #ラインカラー
  colour = "white",
  #コートカラー
  fill = "green",
  #プロット制限を調整するか
  limits = TRUE,
  #ピッチの寸法を指定
  dimensions = pitch_opta) +
  #これをつけるとピッチだけになって軸の目盛りとかがなくなる
  theme_pitch()

ピッチサイズは競技場によって様々なのでアレンジ可能となっている. 以下pitch_customで調整.

pitch_custom <- list(
  #横
  length = 105,
  #縦
  width = 68,
  #ペナルティエリア
  penalty_box_length = 25,
  penalty_box_width = 50,
  #ゴールエリア
  six_yard_box_length = 8,
  six_yard_box_width = 26,
  #PKの位置
  penalty_spot_distance = 16,
  #ゴールの幅
  goal_width = 12,
  origin_x = 0,
  origin_y = 0
)

ggplot() +
  annotate_pitch(
  colour = "white",
  fill = "lightblue",
  limits = TRUE,
  #カスタムした寸法をここで適用
  dimensions = pitch_custom) +
  theme_pitch()

分析例

シュートデータをピッチ上にプロットし, 可視化してみる.
架空のシュートデータとして, df_shotsを用意, それぞれ外したかゴールしたかも含まれている.

#シュートデータの作成
df_shots <- tibble(
  X = c(90, 85, 82, 78, 83, 74, 94, 91),
  Y = c(43, 40, 52, 56, 44, 71, 60, 54), 
  Kind = c("Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Goal", "Goal")) %>% 
  mutate(Kind = as.factor(Kind))
df_shots
## # A tibble: 8 x 3
##       X     Y Kind 
##   <dbl> <dbl> <fct>
## 1    90    43 Miss 
## 2    85    40 Miss 
## 3    82    52 Miss 
## 4    78    56 Miss 
## 5    83    44 Miss 
## 6    74    71 Miss 
## 7    94    60 Goal 
## 8    91    54 Goal
#シュートデータのプロット
ggplot(data = df_shots, 
       aes(x = X, y = Y)) +
  annotate_pitch(
  colour = "white",
  fill = "green",
  limits = TRUE,
  dimensions = pitch_opta) +
  geom_point(aes(colour = Kind)) +
  theme_pitch()

展望

実際に選手にGPSをつけるなどして位置情報を取得し, イベントデータとして取り扱うことが可能.

参考

詳細は下記URLまたはggsoccerパッケージのヘルプを参照のこと.

https://github.com/Torvaney/ggsoccer