勝敗表の作成

プロ野球ヌルデータ置き場 http://lcom.sakura.ne.jp/NulData/2007/Stats/Standing.htm をスクレイプして, 日本プロ野球の勝敗表を取得します.

データ読み込み

library(XML)
library(dplyr)
## 
## Attaching package: 'dplyr'
## 
##  以下のオブジェクトはマスクされています (from 'package:stats') : 
## 
##      filter, lag 
## 
##  以下のオブジェクトはマスクされています (from 'package:base') : 
## 
##      intersect, setdiff, setequal, union
library(data.table)
## 
## Attaching package: 'data.table'
## 
##  以下のオブジェクトはマスクされています (from 'package:dplyr') : 
## 
##      last
library(reshape2)

## 2007年のデータを取得する. 
year = 2007
dat = readHTMLTable('http://lcom.sakura.ne.jp/NulData/2007/Stats/Standing.htm')
## 9番目に, チーム別の勝敗クロス表をスクレイプした結果が入っている.
dat_cross = dat[9] %>% as.data.frame

勝敗表作成

勝敗数を整理したいです. クロス表でもいいのですが, Rなのでデータフレームで操作します.

## 列名を取得する
dat_colname = dat_cross[1,] %>% unlist %>% as.character
dat_colname = c("NA", dat_colname)

## 列名をセットして, 余計な行を消す
dat_cross %>% setnames(dat_colname[1:15])
dat_cross_data = dat_cross[2:7,]

## meltして扱いやすい形にする.
dat_cross_melt = 
  dat_cross_data %>% 
  melt(id.vars="NA") %>% 
  setnames(c("team", "opponent", "win_lose"))
## Warning: attributes are not identical across measure variables; they will
## be dropped
## データを整理, 勝敗数を取得する.
library(stringr)
dat_win_lose = 
  dat_cross_melt %>% 
  arrange(team) %>% 
  mutate(win_lose = gsub("\\(.\\)", "-", win_lose)) %>% 
  mutate(win = gsub("-.*", "", win_lose)) %>% 
  mutate(lose = gsub(".*-", "", win_lose)) %>% 
  mutate(win = as.numeric(win), lose = as.numeric(lose)) %>% 
  filter(opponent != "合計") %>% 
  filter(win != "NA") %>% 
  mutate(year = year)

## できた
dat_win_lose %>% select(-win_lose) 
##        team     opponent win lose year
## 1  ヤクルト         巨人  10   14 2007
## 2  ヤクルト         中日   7   17 2007
## 3  ヤクルト         阪神   8   16 2007
## 4  ヤクルト         横浜  13   11 2007
## 5  ヤクルト         広島  11   13 2007
## 6  ヤクルト     日本ハム   1    3 2007
## 7  ヤクルト       ロッテ   2    2 2007
## 8  ヤクルト ソフトバンク   1    3 2007
## 9  ヤクルト         楽天   2    2 2007
## 10 ヤクルト         西武   2    2 2007
## 11 ヤクルト   オリックス   3    1 2007
## 12     横浜         巨人   8   16 2007
## 13     横浜         中日  13   11 2007
## 14     横浜         阪神  10   14 2007
## 15     横浜         広島  15    9 2007
## 16     横浜     ヤクルト  11   13 2007
## 17     横浜     日本ハム   2    1 2007
## 18     横浜       ロッテ   2    2 2007
## 19     横浜 ソフトバンク   4    0 2007
## 20     横浜         楽天   1    3 2007
## 21     横浜         西武   3    1 2007
## 22     横浜   オリックス   2    2 2007
## 23     巨人         中日  12   12 2007
## 24     巨人         阪神   9   14 2007
## 25     巨人         横浜  16    8 2007
## 26     巨人         広島  14   10 2007
## 27     巨人     ヤクルト  14   10 2007
## 28     巨人     日本ハム   1    3 2007
## 29     巨人       ロッテ   2    2 2007
## 30     巨人 ソフトバンク   4    0 2007
## 31     巨人         楽天   3    1 2007
## 32     巨人         西武   3    1 2007
## 33     巨人   オリックス   2    2 2007
## 34     広島         巨人  10   14 2007
## 35     広島         中日   9   15 2007
## 36     広島         阪神  14    9 2007
## 37     広島         横浜   9   15 2007
## 38     広島     ヤクルト  13   11 2007
## 39     広島     日本ハム   0    4 2007
## 40     広島       ロッテ   0    4 2007
## 41     広島 ソフトバンク   1    3 2007
## 42     広島         楽天   2    2 2007
## 43     広島         西武   1    3 2007
## 44     広島   オリックス   1    2 2007
## 45     阪神         巨人  14    9 2007
## 46     阪神         中日  12   11 2007
## 47     阪神         横浜  14   10 2007
## 48     阪神         広島   9   14 2007
## 49     阪神     ヤクルト  16    8 2007
## 50     阪神     日本ハム   0    4 2007
## 51     阪神       ロッテ   1    2 2007
## 52     阪神 ソフトバンク   2    2 2007
## 53     阪神         楽天   3    1 2007
## 54     阪神         西武   2    2 2007
## 55     阪神   オリックス   1    3 2007
## 56     中日         巨人  12   12 2007
## 57     中日         阪神  11   12 2007
## 58     中日         横浜  11   13 2007
## 59     中日         広島  15    9 2007
## 60     中日     ヤクルト  17    7 2007
## 61     中日     日本ハム   1    3 2007
## 62     中日       ロッテ   3    1 2007
## 63     中日 ソフトバンク   1    3 2007
## 64     中日         楽天   1    2 2007
## 65     中日         西武   4    0 2007
## 66     中日   オリックス   2    2 2007

出来ましたね. 年度別に集計してまとめれば, 何か楽しいことができそうです.