rChartsを使ってレジェンドプレーヤーの成績を可視化したい

Lahmanのデータベースを使って, 歴代の投手成績推移をrChartsで可視化します.

データは http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip でダウンロードできます.

解凍したら, Pitching.csvとMaster.csvを使います.

今回は, 250勝以上した投手の成績の伸び具合を見てみます.

library(RPostgreSQL)
library(dplyr)
library(magrittr)
library(xtable)
# 投手成績が入ったデータ: Pitching.csv
pitch_data = fread("Pitching.csv")
# できたデータ
pitch_data %>% head %>% xtable() %>% print(type="html")
playerID yearID stint teamID lgID W L G GS CG SHO SV IPouts H ER HR BB SO BAOpp ERA IBB WP HBP BK BFP GF R SH SF GIDP
1 bechtge01 1871 1 PH1 1 2 3 3 2 0 0 78 43 23 0 11 1 7.96 0 42
2 brainas01 1871 1 WS3 12 15 30 30 30 0 0 792 361 132 4 37 13 4.50 0 292
3 fergubo01 1871 1 NY2 0 0 1 0 0 0 0 3 8 3 0 0 0 27.00 0 9
4 fishech01 1871 1 RC1 4 16 24 24 22 1 0 639 295 103 3 31 15 4.35 0 257
5 fleetfr01 1871 1 NY2 0 1 1 1 1 0 0 27 20 10 0 3 0 10.00 0 21
6 flowedi01 1871 1 TRO 0 0 1 0 0 0 0 3 1 0 0 0 0 0.00 0 0

# 各種選手情報が入ったデータ: Master.csv
master = fread("Master.csv")

# 250勝以上した投手を調べる
over250wins = pitch_data %>% 
  dplyr::select(playerID, W) %>% 
  group_by(playerID) %>% 
  dplyr::summarise(win = sum(W)) %>% 
  filter(win >= 250) %>% 
  dplyr::arrange(desc(win)) 

# 250勝以上した投手のデータを調べる
data_over250wins = inner_join(pitch_data, over250wins, by = "playerID") %>% as.data.table()

# シーズン途中で移籍した場合を考えて, 同じ年のデータはマージ
data_over250wins = 
  data_over250wins %>% 
  group_by(playerID, yearID) %>% 
  dplyr::summarise(win = sum(W), 
                   lose = sum(L), 
                   hit = sum(H), 
                   so = sum(SO),
                   hr = sum(HR), 
                   bb = sum(BB))

# フルネームを調べてマージ
fullname_id = 
  master %>% mutate(fullname = paste(nameFirst, nameLast, sep=" ")) %>% 
  select(lahman40ID, fullname) %>% 
  setnames(c("playerID", "fullname"))

data_over250wins_fullname = 
  data_over250wins %>% inner_join(fullname_id, by = "playerID")

# 通算成績を調べるためにcumsumする
career_data = 
  data_over250wins_fullname %>% 
  group_by(fullname) %>% 
  dplyr::summarise(year = yearID, 
                   careerWIN = cumsum(win), 
                   careerHR = cumsum(hr), 
                   careerSO = cumsum(so), 
                   careerBB = cumsum(bb))
# できたデータ
career_data %>% head %>% xtable %>% print(type="html")
playerID fullname year careerWIN careerHR careerSO careerBB
1 alexape01 Pete Alexander 1911 28 5 227 129
2 alexape01 Pete Alexander 1912 47 16 422 234
3 alexape01 Pete Alexander 1913 69 25 581 309
4 alexape01 Pete Alexander 1914 96 33 795 385
5 alexape01 Pete Alexander 1915 127 36 1036 449
6 alexape01 Pete Alexander 1916 160 42 1203 499

通算勝利数の推移を可視化してみます. nPlotが不安定なので, hPlotします.


library(rCharts)
hp = hPlot(data = career_data, x = "year", y = "careerWIN", group="fullname", type= "line")
hp$show("iframesrc", cdn = TRUE)

1960年代に何かありましたねこれは.

通算被本塁打数の推移も可視化します.


library(rCharts)
hp = hPlot(data = career_data, x = "year", y = "careerHR", group="fullname", type= "line")
hp$show("iframesrc", cdn = TRUE)

1945年前後にホームランが急増している感じですね.

何かしらのレギュレーション変更があったと考えられますね.

奪三振数も見たいです.


library(rCharts)
hp = hPlot(data = career_data, x = "year", y = "careerSO", group="fullname", type= "line")
hp$show("iframesrc", cdn = TRUE)

ノーラン・ライアンが凄いですね. さすがです.

http://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%BB%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3

“46歳にして速球は94mph(約151.2km/h)を記録した”

すげえです.

次に, 1980年代以降の選手だけ見てみます. 知っている選手が多いので.

career_data_after1980 = 
  career_data %>% group_by(fullname) %>% 
  dplyr::summarise(start = min(year), year = year, careerWIN = careerWIN, careerHR = careerHR) %>% 
  filter(start >= 1980)

hp = hPlot(data = career_data_after1980, x = "year", y = "careerHR", group="fullname", type= "line")
hp$show("iframesrc", cdn = TRUE)

またすごい人がいますね. ジェイミー・モイヤー.

http://ja.wikipedia.org/wiki/%E3%82%B8%E3%82%A7%E3%82%A4%E3%83%9F%E3%83%BC%E3%83%BB%E3%83%A2%E3%82%A4%E3%83%A4%E3%83%BC

45歳で迎えた2008年は、16勝7敗、防御率3.71という堂々たる成績を残した。特に勝ち星、勝率はチームトップであり、フィリーズの地区優勝に大きく貢献した。

すげえ.

以上です.