プロ野球の打撃結果データで遊びます。今回は、打球方向を見てみます。
右方向と左方向で偏りがある打者、偏りが無い打者は誰でしょうか。
2015年の打席結果データを使って頑張ります。
インプレーになった回数が100回以上だった打者を対象とします。
ファースト、セカンド、ライトに捕球されたら右方向。
ピッチャー、センターに捕球されたら中央。
サード、ショート、レフトに捕球されたら左方向とします。
それぞれの方向への打球の比率を計算します。
library(readr)
library(dplyr)
library(xtable)
dat = read_csv("2015年打席結果.csv")
## 補球者のポジションで分けて集計
dat_direc = dat %>%
mutate(first = (regexpr("一", 結果)>0)) %>%
mutate(second = (regexpr("二", 結果)>0)) %>%
mutate(third = (regexpr("三", 結果)>0)) %>%
mutate(short = (regexpr("遊", 結果)>0)) %>%
mutate(right = (regexpr("右", 結果)>0)) %>%
mutate(center = (regexpr("中", 結果)>0)) %>%
mutate(left = (regexpr("左", 結果)>0)) %>%
mutate(pitcher = (regexpr("投", 結果)>0)) %>%
mutate(l = (third>0) + (short>0) + (left>0)) %>% ## 左
mutate(c = (center>0) + (pitcher>0)) %>% ## 中央
mutate(r = (first>0) + (second>0) + (right>0)) %>% ## 右
select(試合ID, チーム, 選手, l, c, r)
## 集計処理
dat_direc_lcr =
dat_direc %>%
group_by(チーム, 選手) %>%
summarise(l = sum(l), c = sum(c), r = sum(r)) %>%
group_by(add=FALSE) %>%
mutate(s = l + c + r) %>% ## 合計
filter(s >= 100) %>%
mutate(l_rate = l/s, c_rate = c/s, r_rate = r/s) %>%
mutate(dif = abs(l_rate - r_rate))
## 中身の確認
dat_direc_lcr %>% head %>% xtable(digit = 4) %>% print(type='html')
| チーム | 選手 | l | c | r | s | l_rate | c_rate | r_rate | dif | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | DeNA | バルディリス | 249 | 81 | 125 | 455 | 0.5473 | 0.1780 | 0.2747 | 0.2725 |
| 2 | DeNA | ロペス | 343 | 79 | 79 | 501 | 0.6846 | 0.1577 | 0.1577 | 0.5269 |
| 3 | DeNA | 乙坂 智 | 61 | 30 | 35 | 126 | 0.4841 | 0.2381 | 0.2778 | 0.2063 |
| 4 | DeNA | 梶谷 隆幸 | 257 | 87 | 163 | 507 | 0.5069 | 0.1716 | 0.3215 | 0.1854 |
| 5 | DeNA | 関根 大気 | 65 | 33 | 46 | 144 | 0.4514 | 0.2292 | 0.3194 | 0.1319 |
| 6 | DeNA | 宮﨑 敏郎 | 72 | 36 | 44 | 152 | 0.4737 | 0.2368 | 0.2895 | 0.1842 |
l, c, rそれぞれレフト、センター、ライトを表しています。
打球方向の左右の偏りが大きい打者のランキングです。
右方向の比率 - 左方向の比率
の絶対値が大きい順に表示します。
dat_direc_lcr %>%
select(チーム, 選手, l_rate:dif) %>%
arrange(desc(dif)) %>%
head(10) %>%
xtable(digit = 4) %>% print(type='html')
| チーム | 選手 | l_rate | c_rate | r_rate | dif | |
|---|---|---|---|---|---|---|
| 1 | 西武 | 中村 剛也 | 0.7162 | 0.1120 | 0.1718 | 0.5444 |
| 2 | ロッテ | 井口 資仁 | 0.7100 | 0.1212 | 0.1688 | 0.5411 |
| 3 | DeNA | ロペス | 0.6846 | 0.1577 | 0.1577 | 0.5269 |
| 4 | 西武 | メヒア | 0.6823 | 0.1471 | 0.1706 | 0.5117 |
| 5 | ロッテ | デスパイネ | 0.6730 | 0.1635 | 0.1635 | 0.5095 |
| 6 | ソフトバンク | 細川 亨 | 0.6571 | 0.1905 | 0.1524 | 0.5048 |
| 7 | 広島 | エルドレッド | 0.6642 | 0.1623 | 0.1736 | 0.4906 |
| 8 | 日本ハム | 中田 翔 | 0.6648 | 0.1585 | 0.1767 | 0.4882 |
| 9 | 日本ハム | レアード | 0.6653 | 0.1564 | 0.1782 | 0.4871 |
| 10 | 中日 | 福田 永将 | 0.6829 | 0.1159 | 0.2012 | 0.4817 |
右打者しかいません。引っ張り専門、ということでしょう。
これらの打者には、守備シフトを引けば対策できるかもしれません。
今度は、打球方向の左右の偏りが小さい打者のランキングです。
dat_direc_lcr %>%
select(チーム, 選手, l_rate:dif) %>%
arrange(dif) %>%
head(10) %>%
xtable(digit = 4) %>% print(type='html')
| チーム | 選手 | l_rate | c_rate | r_rate | dif | |
|---|---|---|---|---|---|---|
| 1 | オリックス | 平野 恵一 | 0.4144 | 0.1712 | 0.4144 | 0.0000 |
| 2 | 巨人 | 堂上 剛裕 | 0.4135 | 0.1731 | 0.4135 | 0.0000 |
| 3 | DeNA | 黒羽根 利規 | 0.4077 | 0.1692 | 0.4231 | 0.0154 |
| 4 | 広島 | 松山 竜平 | 0.4069 | 0.1667 | 0.4265 | 0.0196 |
| 5 | オリックス | 駿太 | 0.4194 | 0.1818 | 0.3988 | 0.0205 |
| 6 | 巨人 | 阿部 慎之助 | 0.4313 | 0.1617 | 0.4070 | 0.0243 |
| 7 | ロッテ | 岡田 幸文 | 0.4241 | 0.1832 | 0.3927 | 0.0314 |
| 8 | 楽天 | 嶋 基宏 | 0.4348 | 0.1623 | 0.4029 | 0.0319 |
| 9 | 巨人 | アンダーソン | 0.4417 | 0.1500 | 0.4083 | 0.0333 |
| 10 | 広島 | 田中 広輔 | 0.4182 | 0.2063 | 0.3755 | 0.0428 |
こちらは一転して、左打者が大半です。
...6位に阿部???????
既に守備シフトによって対策されている結果なのかもしれません。
今回は捕球者のポジションで打球方向で判断しています。
実際の打球方向ではないので、守備シフトをされると対応できません。
守備シフトの提案ができたらいいですね。
以上です。