分析のためのデータ準備


この記事は[CloudAnalytics](http://qiita.com/advent-calendar/2016/analytics) advent calendarの3日目です。

##データ準備について
クラウド、オンプレミスに限らず、分析業務においてデータはすべての元になるため、如何にデータを収集するのか？データをどこに貯めるのか？
は非常に重要です。また、OpenDataの活用やTwitterやFacebookを筆頭に
ソーシャルデータと組み合わせた分析についても注目が集まっています。

ここではOSSのNode-REDを使い、Yahoo!のRSSからニュース記事のタイトルを
Cloudant(CouchDB)に格納するまでを扱います。

下記は最終的に出来上がるNode-REDの画面です。
![スクリーンショット 2016-12-07 15.31.59.png](https://qiita-image-store.s3.amazonaws.com/0/31585/234cb86a-2d73-3e44-92a8-5fa3ec1455a8.png "スクリーンショット 2016-12-07 15.31.59.png")


##BluemixでのNode-REDの払い出し
BluemixではNode-REDのボイラーテンプレートが用意されています。
Node-REDのボイラーテンプレートを利用すると、Node.jsのランタイムと
Node-REDの設定値格納用のCloudantが自動的に用意され、
すぐにNode-REDの機能を利用可能です。

下記はBluemix上のNode-REDのボイラーテンプレートです。
![スクリーンショット 2016-12-07 15.23.39.png](https://qiita-image-store.s3.amazonaws.com/0/31585/887448b9-b11d-9061-17e0-e896f04b8774.png "スクリーンショット 2016-12-07 15.23.39.png")

作成したNode-REDはCloudFoundaryアプリとして払い出されます。
下記の「経路」の項目からNode-REDの画面に遷移可能です。

![スクリーンショット 2016-12-07 15.31.11.png](https://qiita-image-store.s3.amazonaws.com/0/31585/4fa510a9-2d6b-d151-0a93-b0244e532d2f.png "スクリーンショット 2016-12-07 15.31.11.png")

##Cloudantの準備
CloudantもBluemix上で作成可能なNoSQL型のデータベースです。
CloudantのベースにはCouchDBが利用されており、ClouchDBのDR先として
Cloudantを利用する事も可能です。

下記のようにサービスの一覧からCloudantを作成する事も可能ですが、
今回Node-REDを作成した際に設定値保存用にCloudantが作成されてますので
そちらを利用します。

>個別でCloudantを作成する場合は下記のアイコンから作成可能
![スクリーンショット 2016-12-07 15.38.48.png](https://qiita-image-store.s3.amazonaws.com/0/31585/c4c6c474-e971-d185-ab4d-0f6bea5e8979.png "スクリーンショット 2016-12-07 15.38.48.png")


##Node-RED
Node-REDは様々な操作（DBや変換処理,HTTPRequest）などをNodeとして定義して、それらをGUIを使って線で繋いでアプリケーションを作成するためのWebインタフェースです。
プログラミングレスで、GUIを使って直感的に操作する事ができるため、IoTで人気が高いようですが、データサイエンスの分野でも
エンジニアリングがメイン業務ではないデータサイエンティストにはうってつけの
ツールとなっています。

下記はNode-REDの操作画面になります。
左側に利用可能なNodeのリストが表示されています。
ボイラーテンプレートを利用してNode-REDを作成したばあい、
ディフォルトでBluemix上の各DBへの接続やWatsonAPIのためのNodeが用意されます。
![スクリーンショット 2016-12-07 15.44.47.png](https://qiita-image-store.s3.amazonaws.com/0/31585/4ba795a2-19b4-410c-50b1-79d208fc2b0e.png "スクリーンショット 2016-12-07 15.44.47.png")

今日は下記のfeedparseとcloudantのNodeを利用します。
![スクリーンショット 2016-12-07 15.49.26.png](https://qiita-image-store.s3.amazonaws.com/0/31585/32b5a4aa-5306-081a-bd09-f8fc15a4576c.png "スクリーンショット 2016-12-07 15.49.26.png")

>feedparseはRSS/Atomを取得する事が可能なNode-REDのnodeです。

##RSSの取得
まずはRSSからニュースの概要を取得し、Cloudantに格納します。
Node-REDでRSSの取得を作りましょう。

以下の図はfeedparseを持ってきて、設定画面を開いてる状態です。
![スクリーンショット 2016-12-11 14.52.28.png](https://qiita-image-store.s3.amazonaws.com/0/31585/fecb1b61-197f-bc6c-2c1b-28acff51df22.png "スクリーンショット 2016-12-11 14.52.28.png")

こちらに必要な項目を入れていきましょう。
と言っても必須で必要な項目はURLだけなので簡単ですね。
Nameの項目は識別用の名前ですので後からみてわかるように任意の名前をつけておきましょう。
以下Yahoo!のRSSのURLです。

```Yahoo!ニュース・トピックス - 国内
http://news.yahoo.co.jp/pickup/domestic/rss.xml
```

これでRSSの準備ができました。
この辺りで一度デバッグしてみましょう。
左のnodeの一覧から"debug"を探してパネルにおき、先ほど作成した
feedparseとつなぎます。

配置したnodeを線で結びます。
![スクリーンショット 2016-12-11 14.58.24.png](https://qiita-image-store.s3.amazonaws.com/0/31585/b6ec76d3-3992-6ae9-ed25-a6357ac2e9f4.png "スクリーンショット 2016-12-11 14.58.24.png")

>Node-REDでは基本的にJSONの形式でデータをやり取りします。
>各nodeがどの情報を次のnodeに送るかはinformation欄（右側）に記載されています。
>一般的にmsg.payloadに情報が格納され、その他の情報（メタ）などはmsg.XXXXの形で格納されることが多いようです。

配置したdebugの設定を開き、コンソールに出力するJSONの項目を指定します。
今回は分かりやすく前のnodeから送られてきた全ての項目をconsoleに出力します。
![スクリーンショット 2016-12-11 15.02.31.png](https://qiita-image-store.s3.amazonaws.com/0/31585/8826a450-5078-7060-97d0-c1d51134ce39.png "スクリーンショット 2016-12-11 15.02.31.png")

outputは"complete msg object"を選択し、toに"debug tab"を選択しています。nameはfeedparseと同様にわかりやすい名前をつけましょう。
![スクリーンショット 2016-12-11 15.06.03.png](https://qiita-image-store.s3.amazonaws.com/0/31585/1a8b93e1-8433-102e-e7c7-760c94bad588.png "スクリーンショット 2016-12-11 15.06.03.png")

RSSの取得部分で実際に取得できているか確認します。
右上のDeployボタンを押してデプロイしましょう。
![スクリーンショット 2016-12-11 15.06.36.png](https://qiita-image-store.s3.amazonaws.com/0/31585/229ca4a5-2266-1c60-6a6a-535cd03046e7.png "スクリーンショット 2016-12-11 15.06.36.png")

右側のdebugパネルに情報が出力されます。
![スクリーンショット 2016-12-11 15.31.58.png](https://qiita-image-store.s3.amazonaws.com/0/31585/bb715614-07a9-cac7-05ce-c673b475e9be.png "スクリーンショット 2016-12-11 15.31.58.png")

これでJSONの中身がどんな形なのか確認できますね。

##Cloudantの準備
次にデータを格納するためのCloudantの準備を行います。
Bluemixの画面からNode-REDを作成した際に作られたCloudantの管理画面を開きます。LaunchボタンからCloudantの画面を開きましょう。
![スクリーンショット 2016-12-11 15.12.50.png](https://qiita-image-store.s3.amazonaws.com/0/31585/9ac31343-dd09-d804-7a3a-d7b2ad5dcb7e.png "スクリーンショット 2016-12-11 15.12.50.png")

Launchを押すと別のタブでCloudantの管理画面が起動します。
左のメニューからDatabaseを選びます。
![スクリーンショット 2016-12-11 15.15.48.png](https://qiita-image-store.s3.amazonaws.com/0/31585/a4c0d231-587b-20d7-aa15-1bd6e5b7ce29.png "スクリーンショット 2016-12-11 15.15.48.png")

すでにNode-RED用の"nodered"というDatabaseが作成されていますが、
それとは別にRSS格納用のrssというDatabaseを作成します。
右上の"Create Database"を押します。

![スクリーンショット 2016-12-11 15.17.37.png](https://qiita-image-store.s3.amazonaws.com/0/31585/eb668d58-5d33-ecc3-a98a-e0662e4a622d.png "スクリーンショット 2016-12-11 15.17.37.png")

新しいDatabase名を入力し、createすると作成したDatabaseの管理画面に遷移します。
![スクリーンショット 2016-12-11 15.19.37.png](https://qiita-image-store.s3.amazonaws.com/0/31585/27f3f9b5-4141-4067-0ebf-d33eda773db3.png "スクリーンショット 2016-12-11 15.19.37.png")

以上でCloudantの準備はおわりです。

##Cloudantのnodeの配置とJSONの格納
Node-REDの画面に戻り、先ほど作成したCloudantの情報をもとにnodeの作成を行います。
左のnodeの一覧からcloudantのnodeを配置します。
![スクリーンショット 2016-12-11 15.35.43.png](https://qiita-image-store.s3.amazonaws.com/0/31585/0fa6853b-1224-3c58-fa36-32a835f40976.png "スクリーンショット 2016-12-11 15.35.43.png")

>左のリストには2つのcloudantがありますが、今回はdataをcloudantに書き込んで終わりですので
Inputが1,outputが0のものを使います。

配置したcloudantのnodeの設定を行います。
Bluemix上からNode-REDを払い出した場合、serviceなど必要な項目は
自動で設定されていますので、Databaseの項目のみ、先ほど作成したrssを
指定します。
![スクリーンショット 2016-12-11 15.43.01.png](https://qiita-image-store.s3.amazonaws.com/0/31585/d1784a21-870b-0acd-ca33-2b81112ca64f.png "スクリーンショット 2016-12-11 15.43.01.png")

作成したCloudantのnodeとfeedparseを線で繋いで再度デプロイします。
![スクリーンショット 2016-12-11 15.45.00.png](https://qiita-image-store.s3.amazonaws.com/0/31585/8e85283b-ff2c-37e2-17ad-862b33b65790.png "スクリーンショット 2016-12-11 15.45.00.png")

デプロイ後、RSSの情報がCloudantに格納され始めます。
Cloudantの管理画面からAll Documentsを選択し、データの確認を行います。
![スクリーンショット 2016-12-11 15.46.28.png](https://qiita-image-store.s3.amazonaws.com/0/31585/0832c1bb-0b61-9959-a4a4-83065f6fdffc.png "スクリーンショット 2016-12-11 15.46.28.png")

いくつか格納されているデータのうち１件を覗いてみます。
![スクリーンショット 2016-12-11 15.47.45.png](https://qiita-image-store.s3.amazonaws.com/0/31585/6db55469-da85-e84e-2582-f88464e7667a.png "スクリーンショット 2016-12-11 15.47.45.png")

きちんとデータが格納されてますね。
feedparseをたくさん用意し、このCloudantのnodeに繋いでいけばたくさんのrss情報から分析の元となるデータの収集が可能になります。

以上で分析の元となるデータの収集は終わりです。