0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

STATCAST で遊ぶ vol.3

Last updated at Posted at 2025-01-26

 環境、データともに前回からのものを引き続き利用します。
STATCAST で遊ぶ vol.2

バレル率とホームラン数

 MLB STATCAST において、バレル(Barrels)とは、打球速度(初速)と発射角(打球の打ち出し角度)が完璧な組み合わせを持つ打球で、最低期待打率 .500、期待長打率 1.500 と定義されています。

 バレル率は、ある打者が、バレルで打った数 ÷ 全打球で計算されます。

 バレル率が高ければ高いほど、打率は上がり、長打も多くなるわけですからバレル率とホームランは相関していそうです。相関とは、この場合「バレル率の高い選手ほど、ホームラン数も多い」という関係のことを表現しています。

 では、前回の復習になりますが、CSV データから、バレル率とホームラン数を数値変数にしてみましょう。

player_batting <- read.csv("./2024_batting_d-bs-s.csv")
barrel_batted_rate <- as.numeric(player_batting$barrel_batted_rate)
home_run <- as.numeric(player_batting$home_run)

 バレル率(barrel_batted_rate)とホームラン数(home_run)の変数ができたので、これを散布図にしてみましょう。

plot(home_run, barrel_batted_rate)

2c62e818-e569-4d55-8aca-7b741512a5f1.png

 ざっくり図を見て理解できるのは、バレル率(Y軸)が高ければ、ホームラン数(X軸)も多いということがわかると思います。このように散布図が右肩上がりのときは、相関していると見ていいでしょう。

 試しに、バレル率と相関していなそうなデータで調べてみましょう。選手の年齢との関係を調べてみましょう。

player_age <- as.numeric(player_batting$player_age)
plot(player_age, barrel_batted_rate)

326af0df-61eb-4d64-ad77-9b853000ce27.png

 全然、関係なさそうですね。バレル率が高いからと言って、年齢も高いということは言えなそうですね。

標準化してみる

 さて、バレル率は、率というくらいですから比率のデータで、ホームラン数は、積み上げた値です。
このように、単位の違うものを見比べるときに、スコア化されているとわかりやすくなります。

 よく用いられるのは、 z得点と偏差値ですが、まず、バレル率とホームラン数を z得点で標準化します。 z得点は平均すると0、標準偏差は1になるように変換することです。式は、次のようになります。

z得点 = \frac{x - μ}{σ}

 x は、データの値、μ(ミュー) は平均、σ(シグマ)は標準偏差です。
ということで、バレル率とホームラン数の平均と標準偏差を求める必要がありますね。
ここでは、標本=母集団なので、標本分散を採用しましょう。
 平均、分散、標準偏差の順番に求めて、z得点を求めてみましょう。

barrel_batted_rate_avg <- mean(barrel_batted_rate) # バレル率平均
barrel_batted_rate_avg
[1] 9.16124
home_run_avg <- mean(home_run) # ホームラン数平均
home_run_avg
[1] 21.67442
barrel_batted_rate_varp <- var(barrel_batted_rate) * (length(barrel_batted_rate) - 1) / length(barrel_batted_rate) # バレル率分散
barrel_batted_rate_varp
[1] 17.19943
home_run_varp <- var(home_run) * (length(home_run) - 1) / length(home_run) # ホームラン数分散
home_run_varp
[1] 82.79322
barrel_batted_rate_stdevp <- sqrt(barrel_batted_rate_varp) # バレル率標準偏差
barrel_batted_rate_stdevp
[1] 4.147219
home_run_stdevp <- sqrt(home_run_varp) # ホームラン数標準偏差
home_run_stdevp
[1] 9.099078
z_barrel_batted_rate <- (barrel_batted_rate - barrel_batted_rate_avg) / barrel_batted_rate_stdevp
z_barrel_batted_rate
  [1]  1.239085594 -0.135329306  0.853284920 -0.087104222
    〜略〜
[125] -0.641692690 -1.268618785  1.070297799 -0.665805233
[129] -0.882818112
z_home_run <- (home_run - home_run_avg) / home_run_stdevp
z_home_run
  [1]  1.13479424  1.90410295  0.47538678 -0.51372442
    〜略〜
[125] -0.07411944 -1.06323064  1.24469549  0.47538678
[129] -0.84342815

 検算してみます。平均が 0、標準偏差が 1になればいいわけですから、各z得点の平均を式に含めて、標準偏差を計算して、1になれば、合っていると言えそうです。

sqrt(mean((z_barrel_batted_rate - mean(z_barrel_batted_rate)) ** 2))
[1] 1
sqrt(mean((z_home_run - mean(z_home_run)) ** 2))
[1] 1

((z得点 - z得点の平均)を2乗し、その平均を取るということは、二乗和 ÷ データ個数と同じことになります。その平方根を取れば、標準偏差になります。

 どちらも 1でした。合っていそうです。

z得点同士で、散布図を描いてみましょう。

plot(z_barrel_batted_rate, z_home_run)

繰り返しになりますので、画像は載せませんが、X軸、Y軸の目盛りの数字以外は、同じ図が描けていると思います。

偏差値

 z得点が求まっていれば、偏差値を計算するのは簡単です。
偏差値は、平均が50、標準偏差が10になるように標準化するものですから、求めたz得点を10倍し、50を足すことで求められます。z得点は、平均が0、標準偏差が1ですから、10倍すれば標準偏差は10になります。そして、50を足せば、平均も50になるということです。

sts_barrel_batted_rate <- z_barrel_batted_rate * 10 + 50
sts_barrel_batted_rate
  [1] 62.39086 48.64671 58.53285 49.12896 42.85970 56.84497
    〜略〜
[121] 51.05796 47.44108 45.27095 41.41294 43.58307 37.31381
[127] 60.70298 43.34195 41.17182
sts_home_run <- z_home_run * 10 + 50
sts_home_run
  [1] 61.34794 69.04103 54.75387 44.86276 45.96177 48.15979
    〜略〜
[121] 52.55584 51.45683 52.55584 40.46671 49.25881 39.36769
[127] 62.44695 54.75387 41.56572
summary(sts_barrel_batted_rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  29.84   43.34   49.13   50.00   56.84   92.77 
summary(sts_home_run)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  28.38   43.76   48.16   50.00   54.75   89.92 
sqrt(mean((sts_barrel_batted_rate - mean(sts_barrel_batted_rate)) ** 2))
[1] 10
sqrt(mean((sts_home_run - mean(sts_home_run)) ** 2))
[1] 10

 どちらも、平均値が 50、標準偏差 10 になっていますね。

大谷翔平はどうなってるのか?

 バレル率とホームラン数の標準化をやってみましたが、算出できたデータセットの要約と大谷翔平のデータと比べてみましょう。
 61番目が大谷翔平のデータです。

summary(z_barrel_batted_rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-2.0161 -0.6658 -0.0871  0.0000  0.6845  4.2773 
summary(z_home_run)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-2.1622 -0.6236 -0.1840  0.0000  0.4754  3.9922 
z_barrel_batted_rate[61]
[1] 2.975189
z_home_run[61]
[1] 3.552622

 平均は 0なのですから、大谷翔平が、バレル率、ホームラン数ともに大きく上回っています。でも、summary を見ると、最大値は、大谷翔平を大きくバレル率で上回る選手がいるようですね。
誰でしょうか。まあ、予想通りなんですが、アーロン・ジャッジです。
 ジャッジのデータは91番目。

z_barrel_batted_rate[91]
[1] 4.277266
z_home_run[91]
[1] 3.992227

まとめ

 今回は、単純化して、バレル率のみを取り上げましたが、STATCAST には、打球速度の平均、発射角の平均等の面白い、かつ使えるデータが沢山あります。
 平均値であるとはいえ、初速と発射角が分かれば、到達距離が計算できますよね。また、大谷、ジャッジとホームランバッターばかりを取り上げましたが、打者にも色々なタイプがいます。
その辺も、今後、探っていきたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?