学生にRを使ったWebスクレイピングを教えたった話


どうもえいやです。
昨日、うちに住んでいる学生さんがWebスクレイピングをしようとしていたので、それならRを使うのがよろしかろうということでRの導入を教えたった話です。

今回の説明もOSはMac OS Xです。

## Rとは

[ここ](http://ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E)読んでください。
要するに統計・解析のための言語です。

## Rの導入

インストールはBrewを使って簡単にできます。
gfortranが要る場合がありますので、次のようにします。

```
%> brew install gfortran
    :
 インストールログ
    :

%> brew install R
```

以上でRの導入が完了するはずです。

以下のコマンドで確認しましょう。

```
%> R
R version 2.15.2 (2012-10-26) -- "Trick or Treat"
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-apple-darwin11.4.2 (64-bit)

Rは、自由なソフトウェアであり、「完全に無保証」です。 
一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()'あるいは'licence()'と入力してください。 

Rは多くの貢献者による共同プロジェクトです。 
詳しくは'contributors()'と入力してください。 
また、RやRのパッケージを出版物で引用する際の形式については 
'citation()'と入力してください。 

'demo()'と入力すればデモをみることができます。 
'help()'とすればオンラインヘルプが出ます。 
'help.start()'でHTMLブラウザによるヘルプがみられます。 
'q()'と入力すればRを終了します。 

> |
```

上記のようにRが起動すればOKです。

## デモを見る

デモを見てみましょう。
Rを起動した状態で、demo(graphics)と入力します。

```
> demo(graphics)


	demo(graphics)
	---- ~~~~~~~~

Type  <Return>	 to start : 
```

エンターキーを押すと、GUIウィンドウが立ち上がります。

![image1](https://www.dropbox.com/s/aex3evbmtoayyy6/Screen%20Shot%202013-02-13%20at%2016.30.21.png?dl=1)

以降、エンターキーを押すごとにグラフが描画されるはずです。
![image2](https://www.dropbox.com/s/mrhld43q81srbcx/Screen%20Shot%202013-02-13%20at%2016.30.42.png?dl=1)

## Webスクレイピングに必須のパッケージを導入する

### X11の導入

Unix互換のGUI環境であるX11が必要な場合があるので、予めインストールしておきましょう。Mac OS X用のX11は[ここ](http://xquartz.macosforge.org/landing/)からダウンロード出来ます。

### CRANについて

Rには、CRANというパッケージ管理機構があります。
CRANで管理されているパッケージは、install.packages()を使って簡単に導入することができます。

どのようなパッケージがあるかなどは、[こちらのサイト](http://www.inside-r.org/)で検索、参照ができます。

### XMLパッケージの導入

XMLは、Webサイトのテーブルを解析してくれる関数など、Webスクレイピングに便利な機能を提供してくれるパッケージです。

以下のコマンドを使って導入してみましょう。

```
> install.packages("XML")
```

以下の様に、CRANのミラーサイト一覧のウィンドウが立ち上がるはずです。（CUIでリストが表示され、番号で指定するケースもあるようです）適当なCRANのミラーサイトを選んで、OKボタンを押してください。

![image3](https://www.dropbox.com/s/vt5xiuntwa1r1pl/Screen%20Shot%202013-02-13%20at%2016.51.15.png?dl=1)

### XMLパッケージを使ってみる

インストールしたXMLパッケージを読み込むには、library()を使います。

```
library('XML')
```

XMLパッケージに含まれている関数の、readHTMLTable()を使ってみます。この関数は、指定したHTMLドキュメントのテーブルタグを解析してデータとして取得するものです。
HTMLドキュメントの指定にはURIを使うことができます。

試しに気象庁のWebサイトで公開しているHTMLのテーブルからデータを取り出してみましょう。

```
> readHTMLTable('http://www.data.jma.go.jp/obd/stats/data/mdrr/rank_daily/data01.html')
$日最高気温の高い方から
   順位 都道府県   観測所 観測値 昨日までの観測史上1位の値
1    ℃     時分       ℃ 年月日                        ℃
2     1   沖縄県   波照間   26.6                     12:29
3     2   沖縄県     仲筋   26.3                     13:06
4     3   沖縄県  石垣島*   26.1                     14:28
5    〃   沖縄県  西表島*   26.1                     11:54
6     5   沖縄県 志多阿原   25.9                     12:52
7    〃   沖縄県   伊原間   25.9                     13:14
8     7   沖縄県   真栄里   25.8                     12:13
9     8   沖縄県     大原   25.7                     13:29
10    9   沖縄県     下地   25.6                     14:13
11   10   沖縄県     鏡原   25.5                     13:56
   昨日までの2月の1位の値 統計開始年 備考         NA     NA   NA
1                  年月日       <NA> <NA>       <NA>   <NA> <NA>
2                    35.7 2009/08/05 27.7 2010/02/27 1979年     
3                    35.4 2009/08/02 27.8 2010/02/27 2003年     
4                    35.4 1899/09/15 29.1 1898/02/16 1896年     
5                    35.2 2010/07/14 27.8 2009/02/26 1954年     
6                    35.0 2006/07/07 28.1 2010/02/11 2003年     
7                    36.1 2012/07/08 28.2 2012/02/15 1977年     
8                    35.0 2009/08/05 28.1 2010/02/11 2003年     
9                    35.7 2003/07/24 28.5 2010/02/27 1978年     
10                   34.8 2009/08/03 27.3 2010/02/27 2003年     
11                   35.2 2003/07/22 28.4 2010/02/27 2003年  
    :
    :
  以下略
```

と、こうなります。

さらに引数を追加すれば特定の情報をのみを絞り込んで取得したりといったことが簡単に行なえます。

## パッケージの選択について

CRANにはものすごくたくさんのパッケージがあるので、どれを導入するべきなのか迷うところです。

そんな時に役に立つのが、[ここ](http://cran.r-project.org/web/views/)です。このサイトでは、いろんな分野ごとによく使うパッケージをまとめて紹介してくれています。

まとめてパッケージをインストールする方法も紹介されていますので、利用してみると幸せになれるかもしれません。

## Let's 統計

プログラマーならある程度は統計の力が必要です。
正確な見積は正確なデータにもとづき、経験と勘で補正するものです。

この際にRを覚えて、自分のライフログから効率的な働き方や、自身の本当の生産性など統計データとして解明してみるのも面白いかもしれませんよ。

ボクはやってませんけどね。(ﾉ´∀｀*)