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') %>%
+ 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をスペースに置換して見やすく。> 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 件のコメント:
コメントを投稿