読者です 読者をやめる 読者になる 読者になる

300億円欲しい

メジャーリーグのデータ解析します

メジャーリーグのデータ解析をしたい ( 被BABIPの集計 )

被BABIP

前回は打者目線で考えました.
メジャーリーグのデータ解析をしたい ( とりあえずBABIPの集計 ) - 300億円欲しい

今回は投手目線で考えます.

被打球方向に関して, ある程度は運要素がある気がしますね.
めちゃくちゃ打たれているのに, 飛んだところが良くてアウトになっていたりとか.

BABIPを投手目線で集計してみます. 被BABIPです.
打たれてインプレーになった打球の内, ヒットになったものの割合を計算します.

被BABIPの計算

前回の計算で, 打者を投手に変えるだけです.

有名な選手のBABIPを抜き出してみました.
ダルビッシュ, 岩隈, 黒田と,
フィリーズの大エース, クリフ・リー,
ストライクおじさんコローン,
ナックルおじさんR.A.ディッキー,
ドジャースのカーショウです.

BABIPの推移を見ます.
f:id:gg_hatano:20140209134355p:plain
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))