2017年2月19日日曜日

[R]ロト6の結果を抽出

rvestをインストールするときに少し苦労、というか追加でいろいろインストールする必要あり。
install.packages("rvest)
から出てくるエラーを追いかけて、ターミナルでインストールしました。自分の環境の問題な気もします。

--
ここからはスクレイピングの話です。
参考にしたのは本家の<a href="https://github.com/hadley/rvest">GitHub</a>です。

URLは、みずほ銀行サイトにあるロト6の過去の当選番号です。
> loto <- backnumber="" https:="" loto60001.html="" loto="" num_joy="" read_html="" table="" takarakuji="" typetk="" www.mizuhobank.co.jp="">%
+ html_nodes('table.typeTK tbody tr') %&gt;%
+ html_text()
出てきたものは\n 改行が入っています。
> num_joy
 [1] "第1回\n2000年10月5日\n02\n08\n10\n13\n27\n30\n39\n"
  [2] "第2回\n2000年10月12日\n01\n09\n16\n20\n21\n43\n05\n"
・・・
とりあえず\nをスペースに置換して見やすく。
&gt; gsub('[\n]', ' ', num_joy)
 [1] "第1回 2000年10月5日 02 08 10 13 27 30 39 "
  [2] "第2回 2000年10月12日 01 09 16 20 21 43 05 "
・・・
rvestが入っているとここまでは比較的簡単です。
library(rvest)
df <- data.frame() # initialize
# 開催回でループ
for (kai in seq(1,1040, by=20)){
  url_pre = "https://www.mizuhobank.co.jp/takarakuji/loto/backnumber/loto6"
  url_all = paste0(url1, sprintf("%04d",kai),".html")
  # htmlを読む
  loto <- read_html(url_all)

  # htmlのタグを読む
  num_joy <- loto %>%
    html_nodes('table.typeTK tbody tr') %>%
    html_text()

  # 20回ずつデータが取れるのでdfに追加していく
  for (i in 1:20){
    arg0 = c(strsplit(num_joy[i],'\n'))
    if (nrow(df) == 0){ # 初回データが書き込まれないので
      df <-data.frame(lapply(arg0, function(x) t(data.frame(x))))
    }else{
      df <- merge(df, data.frame(lapply(arg0, function(x) t(data.frame(x)))), all=T)
    }
  }
}
メモ:
# loto6XXXX.html の部分を変えていけば良い。20回分ごと
# toString: num to string
# paste0: str連結(間に何もいれない)
# seq(1,100, by=20):seq(a,b,by=c)からbまでcとびで。
# sprintf("%04d",x) フォーマッティング、必ず4桁になるようにゼロ挿入
# %>% のあとの改行は + はいらない(Consoleで表示されているだけ) 引き続きロト6です。2017/02/19現在で、20個ずつデータが取れる1040回分まで取得しました。1年以上たった回のものです。1年以内のものは、払い戻しが可能であるため別ページで払い戻し金も含めて書いてあります。1等で少なくとも8,000万円とか当たるらしいです。夢が広がりますね。

さておき続きです。

ヒストグラムを見たいのですが・・・

hist((df$X9))

と打つと、以下のエラーが出ています。numericじゃないからダメだと。

Error in hist.default((df$X9)) : 'x' must be numeric

c(df$X9)
でベクトルに置き換えたらできました。

0 件のコメント:

コメントを投稿