日本のプロ野球通算成績データをまとめた(選手IDもつけた)

はじめに

日本プロ野球でも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が2人いる?

広島と巨人に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のおかげで通算成績も出せます。

これで遊んでいきましょう。