ラベル R の投稿を表示しています。 すべての投稿を表示
ラベル R の投稿を表示しています。 すべての投稿を表示

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)
でベクトルに置き換えたらできました。

linux に Rstudioを入れるときに失敗した話

結論:UbuntuLinuxが32bitだと思ったら64bitを入れていた。

Ubuntu 16.04LT

マシンは32bitなのですが、OS入れ直しも面倒なので、Rも64bit版を入れることに。
rstudio-1.0.136-amd64.debをダウンロード
ここ→https://www.rstudio.com/products/rstudio/download/

先にR本体を入れる。
$ sudo apt-get install r-base

続いてRstudioを入れるのですが・・・
$ sudo dpkg -i rstudio-1.0.136-amd64.deb

とやってみるとディペンデンシーの問題があるとのこと。
dpkg: error processing package rstudio (--install):
dependency problems - leaving unconfigured

こうやると関係のあるものを集めてくれる。
$ sudo apt-get -f install

もう必要ないパッケージは消してね、というメッセージ
The following packages were automatically installed and are no longer required:
  ・・・
Use 'sudo apt autoremove' to remove them.

消す
$ sudo apt autoremove

もう1回インストール。
$ sudo dpkg -i rstudio-1.0.136-amd64.deb

特に問題なく終了。

$ rstudio
で起動。成功。





経緯メモ:自分用
--
もうひとつ失敗。サーバ用のRを入れようとしていた。(stackoverflowを見ている間にごちゃごちゃになった)

export SUDO_FORCE_REMOVE=yes

You have asked that the sudo package be removed,
but no root password has been set.
Without sudo, you may not be able to gain administrative privileges.

ルートパスワードを設定しないといけない?

$ sudo gdebi rstudio-server-1.0.136-i386.deb


・・・とかやっていたが、サーバ用だったのが問題と判明、終了。見るところ間違えていた。

--

E: Unable to locate package <package>
というエラーが出たとき。それが自分のUbuntuにあるかどうかを調べる。

http://askubuntu.com/questions/378558/unable-to-locate-package-while-trying-to-install-packages-with-apt

パッケージを検索できる。
http://packages.ubuntu.com/

--

こんなのが出て
rstudio: error while loading shared libraries: libuuid.so.1: cannot open shared object file: No such file or directory

調べるとありますよ。
$ locate libuuid.so.1
/lib/x86_64-linux-gnu/libuuid.so.1
/lib/x86_64-linux-gnu/libuuid.so.1.3.0


どうやら32bitのマシンにLinux64bitが乗っていることでおかしなことになっているようだ。

http://askubuntu.com/questions/539842/app-cant-find-libs-even-though-they-exist