日本プロ野球でもLahmanみたいデータが欲しいです。作りましょう。
日本プロ野球の通算成績をまとめます。
Baseball Referenceが扱いやすそうです。
感謝しながらクロールしましょう。
library(rvest)
library(dplyr)
library(readr)
## セリーグ
## allYearHtml = read_html('http://www.baseball-reference.com/register/league.cgi?code=JPCL&class=Fgn')
## パ・リーグ
allYearHtml = read_html('http://www.baseball-reference.com/register/league.cgi?code=JPPL&class=Fgn')
## 1950年から2015年まで頑張る
for (yearID in 1:66){
Year = (2015 - yearID + 1)
Year %>% print
## リンクとチーム
linkTeamList =
allYearHtml %>%
html_nodes(xpath=paste('//*[@id="lg_history"]/tbody/tr[', yearID, ']/td/a', sep=""))
## 年度、チーム別トップページヘのリンク
linkList = linkTeamList %>% html_attr("href") %>% .[-1]
## チーム名
teamList = linkTeamList %>% html_text() %>% .[-1]
teamList %>% print
## 成績ページヘのリンク
teamStatsURL = paste("http://www.baseball-reference.com", linkList, sep="")
for (i in 1:length(teamList)) {
teamList[i] %>% print
## 成績の表
html = read_html(teamStatsURL[i])
batting_stats =
html %>%
html_node(xpath = '//*[@id="team_batting"]') %>%
html_table
playerID =
html %>%
html_nodes(xpath = '//*[@id="team_batting"]/tbody/tr/td[2]') %>%
lapply(FUN = function(x){gsub("<b>", "", x)}) %>% unlist %>%
lapply(FUN = function(x){gsub("</b>", "", x)}) %>% unlist %>%
lapply(FUN = function(x){strsplit(x, split="\\?")[[1]][2]}) %>%
lapply(FUN = function(x){strsplit(x, split=">")[[1]][1]}) %>%
lapply(FUN = function(x){gsub("id=", "", x)}) %>%
lapply(FUN = function(x){gsub("\"", "", x)}) %>% unlist
batting_stats
playerID
## ファイル名を作成
teamName = teamList[i] %>% gsub(pattern = " ", replacement = "")
fileName = paste("brData/", Year, teamName, ".csv", sep="")
fileName %>% print
## ゴミ掃除してから保存
batting_stats[,-27] %>%
filter(Rk != "") %>%
mutate(Team = teamList[i]) %>%
mutate(Year = Year) %>%
mutate(PlayerID = playerID) %>%
write.csv(fileName, row.names=FALSE, quote=FALSE)
## 1秒まつ
}
}
出来たデータです。中身を見てみましょう。
通算安打ランキングを作ります。
npbBatting = read_csv("npbBattingData.csv")
## Warning: 50315 problems parsing 'npbBattingData.csv'. See problems(...) for
## more details.
## 通算本塁打ランキング
npbBatting %>%
group_by(Name, PlayerID) %>%
summarise(HR = sum(HR)) %>%
group_by(add=FALSE) %>%
arrange(desc(HR))
## Source: local data frame [4,922 x 3]
##
## Name PlayerID HR
## (chr) (chr) (int)
## 1 Sadaharu Oh* oh----000sad 868
## 2 Katsuya Nomura nomura002kat 657
## 3 Hiromitsu Kadota* kadota000hir 567
## 4 Koji Yamamoto yamamo002koj 536
## 5 Kazuhiro Kiyohara kiyoha001kaz 525
## 6 Hiromitsu Ochiai ochiai001hir 510
## 7 Isao Harimoto* harimo000isa 504
## 8 Sachio Kinugasa kinuga000sac 504
## 9 Katsuo Osugi osugi-000kat 486
## 10 Tomoaki Kanemoto* kanemo001tom 476
## .. ... ... ...
通算片岡式本塁打ランキングも。
npbBatting %>%
group_by(Year, Team, Name, PlayerID) %>%
summarise(HR = sum(HR), SB = sum(SB)) %>%
mutate(KataokaHR = HR + SB) %>%
group_by(add=FALSE) %>%
arrange(desc(KataokaHR)) %>%
head(10)
## Source: local data frame [10 x 7]
##
## Year Team Name PlayerID HR SB
## (int) (chr) (chr) (chr) (int) (int)
## 1 1972 Hankyu Braves Yutaka Fukumoto* fukumo000yut 14 106
## 2 1973 Hankyu Braves Yutaka Fukumoto* fukumo000yut 13 95
## 3 1974 Hankyu Braves Yutaka Fukumoto* fukumo000yut 8 94
## 4 1985 Hiroshima Toyo Carp Yoshihiko Takahashi# takaha003yos 24 73
## 5 1983 Hiroshima Toyo Carp Yoshihiko Takahashi# takaha003yos 24 70
## 6 1956 Hankyu Braves Akiteru Kono kono--001aki 5 85
## 7 1967 Yomiuri Giants Isao Shibata# shibat000isa 18 70
## 8 1950 Nankai Hawks Chusuke Kizuka kiduka000tad 8 78
## 9 1990 Seibu Lions Koji Akiyama akiyam001koj 35 51
## 10 1964 Nankai Hawks Yoshinori Hirose hirose000yos 12 72
## Variables not shown: KataokaHR (int)
福本豊すげえ
BaseballReferenceに従って、選手IDを降っています。
広島と巨人にKoji Yamamotoがいますが、どうなっているでしょうか。
npbBatting %>%
filter(Name == "Koji Yamamoto") %>%
select(Year, Team, Name, PlayerID) %>%
as.data.frame
## Year Team Name PlayerID
## 1 1964 Hankyu Braves Koji Yamamoto yamamo003koj
## 2 1965 Hankyu Braves Koji Yamamoto yamamo003koj
## 3 1966 Hankyu Braves Koji Yamamoto yamamo003koj
## 4 1967 Hankyu Braves Koji Yamamoto yamamo003koj
## 5 1968 Hankyu Braves Koji Yamamoto yamamo003koj
## 6 1969 Hankyu Braves Koji Yamamoto yamamo003koj
## 7 1969 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 8 1970 Hankyu Braves Koji Yamamoto yamamo003koj
## 9 1970 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 10 1971 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 11 1972 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 12 1973 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 13 1974 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 14 1975 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 15 1976 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 16 1977 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 17 1978 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 18 1979 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 19 1980 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 20 1981 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 21 1982 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 22 1983 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 23 1984 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 24 1984 Yomiuri Giants Koji Yamamoto yamamo001koj
## 25 1985 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
## 26 1985 Yomiuri Giants Koji Yamamoto yamamo001koj
## 27 1986 Hiroshima Toyo Carp Koji Yamamoto yamamo002koj
全員PlayerIDによって区別できています。
よく見ると、阪急ブレーブスにもKoji Yamamotoがいたのですね...。
選手IDのおかげで通算成績も出せます。
これで遊んでいきましょう。