メジャーリーグのデータ解析をしたい ( 被BABIPの集計 )
被BABIP
前回は打者目線で考えました.
メジャーリーグのデータ解析をしたい ( とりあえずBABIPの集計 ) - 300億円欲しい
今回は投手目線で考えます.
被打球方向に関して, ある程度は運要素がある気がしますね.
めちゃくちゃ打たれているのに, 飛んだところが良くてアウトになっていたりとか.
BABIPを投手目線で集計してみます. 被BABIPです.
打たれてインプレーになった打球の内, ヒットになったものの割合を計算します.
被BABIPの計算
前回の計算で, 打者を投手に変えるだけです.
有名な選手のBABIPを抜き出してみました.
ダルビッシュ, 岩隈, 黒田と,
フィリーズの大エース, クリフ・リー,
ストライクおじさんコローン,
ナックルおじさんR.A.ディッキー,
ドジャースのカーショウです.
BABIPの推移を見ます.
BABIPが下がっている人が多いですね.
今年は運が良かっただけかもしれません.
ダルビッシュは岩隈は来年も同じ成績が残せますかね?
全体のBABIPの推移も見てみます.
> dat %.% group_by(year, add=F) %.% dplyr::summarise(babip=sum(inplay_hit)/sum(inplay)) Source: local data table [4 x 2] year babip 1 2010 0.3000830 2 2011 0.2974728 3 2012 0.2991470 4 2013 0.2999523
ここ4年は, 毎年 .300くらいですね.
大きな変動はありません.
日本プロ野球とBABIP
ところで,
日本プロ野球では, 2011年に統一球が導入されました.
その影響を検証した記事がありました.
検証・統一球〜打球への影響を探る〜|コラム|野球|スポーツナビ
BABIPに大きな影響が出ていません.
2分程度です. 2%です. 打球がヒットになった割合が, 2%減少しただけ.
ソースコード
library(data.table) library(plyr) library(dplyr) master = fread("Master.csv") master$fullname = with(master, paste(nameFirst, nameLast)) name_id_data = with(master, data.frame(name = fullname, PIT_ID = retroID)) season_babip <- function(year){ filename = paste("all", year, ".csv", sep="") dat <- fread(filename) fields <- fread("fields.csv") setnames(dat, fields$Header) inplay_hit = c(20,21,22) # 20, 21, 22 = single, double, triple not_inplay = c(3, 23) # 3, 23 = strike out, HR setkey(dat, AB_FL) dat_AB = dat[J("T")] dat_AB$inplay_hit = with(dat_AB, ifelse(EVENT_CD %in% inplay_hit, 1, 0)) dat_AB$inplay = with(dat_AB, ifelse(EVENT_CD %in% not_inplay, 0, 1)) # calculate BABIP and avg dat_babip = dat_AB %.% group_by(PIT_ID) %.% dplyr::summarise(babip =sum(inplay_hit)/ sum(inplay), inplay_hit = sum(inplay_hit), inplay = sum(inplay), avg = sum(H_FL!=0)/ length(H_FL), hit = sum(H_FL!=0), atbat = length(H_FL) ) # make name data babip_name_data = merge(dat_babip, name_id_data, by="PIT_ID") babip_name_data$year = year return(babip_name_data) } dat = data.table() for(N in 2010:2013){ dat <- rbind.data.frame(dat, season_babip(N)) } # plot player_names = c("Yu Darvish", "Hiroki Kuroda", "Hisashi Iwakuma") player_names = c(player_names, c("Clayton Kershaw", "Bartlo Colon", "R.A. Dickey", "Cliff Lee")) subset(name_id_data, name %in% player_names) dat_pitchers = subset(dat, name %in% player_names) library(ggplot2) ggplot(data = dat_pitchers, aes(x=year, y=babip, col=name)) + geom_point(size=4) + geom_line(size=1) + ggtitle("BABIP (pitcher)") + theme(plot.title=element_text(face="bold", size=20)) ggplot(data = dat_pitchers, aes(x=year, y=avg, col=name)) + geom_point(size=4) + geom_line(size=1) + ggtitle("AVG (pitcher)") + theme(plot.title=element_text(face="bold", size=20))