ボールの “ノビ” と空振り率

導入

いわゆる"ノビのあるストレート"の性能を評価したいと思います.

pitch f/x のデータから, ボールの垂直上方向変化に注目. 空振り率の高さを計算して, ノビについて考えます.

2013年のMLB全試合の全投球のデータを利用して, 集計していきます.

データ読み込み

library(data.table)
library(dplyr)
library(xtable)
library(magrittr)
library(ggplot2)
data_file = "../../../../Box Sync/pitch_fx/2013.csv"
dat = fread(data_file)

Read 0.0% of 764814 rows Read 9.2% of 764814 rows Read 22.2% of 764814 rows Read 28.8% of 764814 rows Read 35.3% of 764814 rows Read 41.8% of 764814 rows Read 49.7% of 764814 rows Read 56.2% of 764814 rows Read 64.1% of 764814 rows Read 71.9% of 764814 rows Read 79.8% of 764814 rows Read 88.9% of 764814 rows Read 99.4% of 764814 rows Read 764814 rows and 53 (of 53) columns from 0.381 GB file in 00:00:21

dat = dat %>% dplyr::filter(ax != "NA")
dat_FF = dat %>% dplyr::filter(pitch_type=="FF")

手法

“空振り率"で, 伸びのあるストレートの性能を評価したいと思います.

空振り率は, \[ \frac{\text{Swing}}{\text{FF-Pitch} -\text{Called Strike}} \] とします.

ここで,

swing :: 空振り

FF-pitch :: ストレートの投球数

Called Strike :: 見逃しストライク

です.

空振り率と, 垂直上方向の変化量との関係を確認します.

pitch f/x のデータにある pfx_z は, 質点を仮定した場合のボールと比べて, どの程度ホップアップしたか…ということを表すという数値です.

普通の質点と, バックスピンのかかったボール. 後者のほうが, 落ちにくくなります.つまりノビです. pfx_zという数値は, ボールのノビを表していると考えていいと思います.

早速, 集計していきます.

集計

dat_FF_swingrate = 
  dat_FF %>% 
  select(pitcher_name, start_speed, des, pfx_z) %>% 
  mutate(pfx_z = as.numeric(pfx_z)) %>%
  mutate(calledStrike = (des=="Called Strike")) %>% 
  mutate(swingingStrike = (des == "Swinging Strike")) %>% 
  group_by(pitcher_name) %>% 
  dplyr::summarise(nobi = mean(pfx_z)*2.5, 
                   speed = mean(as.numeric(start_speed) * 1.6),
                   calledStrike = sum(calledStrike), 
                   swingingStrike = sum(swingingStrike, na.rm=TRUE), 
                   pitches = n()) %>% 
  dplyr::filter(pitches > 200) %>% 
  mutate(swingRate = swingingStrike / (pitches - calledStrike))

空振り率ランキング.

dat_FF_swingrate %>%
  arrange(desc(swingRate)) %>% 
  select(pitcher_name, swingRate) %>%
  head(20) %>%
  xtable(digits = 4) %>% print("html") 
pitcher_name swingRate
1 Darren O'Day 0.2000
2 Caleb Thielbar 0.1940
3 Ernesto Frieri 0.1928
4 Aroldis Chapman 0.1892
5 Casey Fien 0.1818
6 Danny Salazar 0.1602
7 Tyler Clippard 0.1599
8 Jim Henderson 0.1587
9 Trevor Rosenthal 0.1572
10 Robert Coello 0.1561
11 Jared Burton 0.1488
12 Jason Grilli 0.1459
13 Koji Uehara 0.1441
14 Craig Kimbrel 0.1417
15 Sean Doolittle 0.1414
16 Michael Kohn 0.1413
17 Glen Perkins 0.1394
18 Carter Capps 0.1390
19 Kelvin Herrera 0.1374
20 Joshua Fields 0.1365

4位のチャップマン. 170kmのストレートを投げます.

上原が13位ですか.

ノビのあるストレートランキング

dat_FF_swingrate %>%
  arrange(desc(nobi)) %>% 
  select(pitcher_name, nobi) %>%
  head(20) %>%
  xtable(digits = 4) %>% print("html") 
pitcher_name nobi
1 Antonio Bastardo 30.1465
2 Josh Collmenter 29.7795
3 Andrew Bailey 29.1244
4 Matt Reynolds 28.9786
5 Evan Scribner 28.6614
6 Jake Odorizzi 28.5236
7 Chris Tillman 28.1677
8 Jesse Crain 27.9543
9 Matt Magill 27.6820
10 Tommy Hanson 27.6119
11 Koji Uehara 27.4776
12 Brian Matusz 27.4275
13 Clayton Kershaw 27.3777
14 Marco Estrada 27.0921
15 Kevin Slowey 27.0741
16 Tim Collins 26.9664
17 Greg Holland 26.9479
18 Tommy Milone 26.8249
19 Tony Sipp 26.6869
20 Wandy Rodriguez 26.6627

## 平均. 
dat_FF_swingrate %>% 
  dplyr::summarise(nobi = mean(nobi)) %>% 
  xtable(digit = 4) %>% print("html")
nobi
1 19.1602

上原が11位.

プロット

縦方向の変化と空振り率との関係を, プロットしてみます.

dat_FF_swingrate %>% 
  ggplot(aes(x = nobi, y = swingRate)) + 
  geom_point(size = 3) + stat_smooth(method="lm") + 
  ggtitle("Hop-Up vs Swing-Rate  (Four-seam Fast)") + 
  theme(plot.title = element_text(face="bold", size=24))

plot of chunk unnamed-chunk-5

やっぱりスピードのほうが大事なんですかね? 初速と空振り率の関係を, プロットしてみます.

dat_FF_swingrate %>% 
  ggplot(aes(x = speed, y = swingRate)) + 
  geom_point(size = 3) + stat_smooth(method="lm") + 
  ggtitle("Speed vs Swing-Rate  (Four-seam Fast)") + 
  theme(plot.title = element_text(face="bold", size=24))

plot of chunk unnamed-chunk-6

おまけ. ストレートとノビ.

dat_FF_swingrate %>% 
  ggplot(aes(x = speed, y = nobi)) + 
  geom_point(size = 3) + stat_smooth(method="lm") + 
  ggtitle("Speed vs Hop-Up  (Four-seam Fast)") + 
  theme(plot.title = element_text(face="bold", size=24))

plot of chunk unnamed-chunk-7

あまり関係なさそう.

考察

単なる1つのボールの物理的な性質だけから議論するのは難しそう.

変化球の組み合わせ? フォーム?