300億円欲しい

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

メジャーリーグのデータ解析をしたい ( パワプロ打撃テスト式ランキング)

野球の話です.

パワプロ打撃テスト式ランキング

こんな記事がありました.

セパ、パワプロの打撃テスト式ランキグンwwwww : なんJをまとめた結果www(速報)

パワプロに打撃練習がありますね. こんな感じです.


パワプロ2013 男・村田修一で打撃練習してみた!ホームラン量産でスコアが凄 ...

ボール球見極めなら1点.
シングルヒットなら4点.
2塁打, 3塁打, 本塁打はそれぞれ5, 6, 7点です.

サクセスの最初に "そこのお前" から5点とればいい, みたいなテストです.

ストライク10球で, 何点取れるかが評価の対象になります.

楽しそうです.

実際の, 2013年メジャーリーグの打席結果データで集計してみましょう.

メジャーリーグデータでパワプロ打撃テスト式ランキング

計算方法は元記事と同様です.
総スコアを計算して, 10球で何点取れるかで順位付けをしてみました.

結果.

> head(arrange(dat_final, desc(p_10)), 20)
                 name     p_10 score
 1:       David Ortiz 15.96399  2128
 2:   Troy Tulowitzki 15.64530  1879
 3:        Joey Votto 15.56689  2595
 4:        Ryan Braun 15.07538   900
 5:    Miguel Cabrera 14.96542  2164
 6:      David Wright 14.86583  1662
 7:    Dioner Navarro 14.84034   883
 8:      Gaby Sanchez 14.51697  1112
 9:         John Jaso 14.51140   891
10:   Carlos Gonzalez 14.37977  1507
11: Willie Bloomquist 14.37318   493
12:    Aramis Ramirez 14.27491  1132
13:   George Kottaras 14.27215   451
14:    Shane Robinson 14.24324   527
15:    Chris Iannetta 14.22028  1304
16:  Andrew McCutchen 14.21702  2188
17:     Robinson Cano 14.20077  2221
18:     Lance Berkman 14.16296   956
19:       Ben Zobrist 14.09740  2171
20:      Nick Swisher 14.08638  2120

1位はレッドソックスのD. オルティズでした. ワールドシリーズ制覇に貢献した, 大打者です.
デビッド・オルティーズ - Wikipedia
2位以下は,
トロウィツキー, ボットー, ライアン・ブラウン, ミゲル・カブレラと,
なるほど, といった陣営です.

...

以上です.

次は, 投手編です.

ソースコード

データはretrosheetから引っ張ってきました.
Retrosheet

Rのdplyrとdata.tableで手早く集計できます. 助かります.

library(data.table)
library(dplyr)
library(stringr)

# read data 
dat = fread("all2013.csv")
fields = fread("fields.csv")
setnames(dat, fields$Header)

# processing datatable
dat$ball = with(dat, nchar(PITCH_SEQ_TX))
dat$BB = with(dat, nchar(gsub("[CSFX]","",PITCH_SEQ_TX)))
dat$hit_score = with(dat, ifelse(EVENT_CD >= 20 & EVENT_CD <= 23, EVENT_CD - 16, 0))
dat$score = with(dat, hit_score + BB)

# summarize
dat_pawapuro = dat %.% group_by(BAT_ID) %.% 
  dplyr::summarise(ball = sum(ball), BB = sum(BB), score = sum(score))

dat_pawapuro$p_10 = with(dat_pawapuro, score/ (ball - BB) * 10)

# over 500 balls
dat_pawapuro_over500ball = subset(dat_pawapuro, ball > 500)

# merge with name_id_data
master = fread("Master.csv")
master$fullname = with(master, paste(nameFirst, nameLast))
name_id_data = master[, c("retroID", "fullname"), with=F]
setnames(name_id_data, c("BAT_ID", "name"))
dat_fullname = merge(dat_pawapuro_over500ball, name_id_data, by="BAT_ID")
dat_final = dat_fullname[, c("name", "p_10", "score"), with=F]

# result
head(arrange(dat_final, desc(p_10)), 20)