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)
ノーラン・ライアンが凄いですね. さすがです.
“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)
またすごい人がいますね. ジェイミー・モイヤー.
45歳で迎えた2008年は、16勝7敗、防御率3.71という堂々たる成績を残した。特に勝ち星、勝率はチームトップであり、フィリーズの地区優勝に大きく貢献した。
すげえ.
以上です.