気象情報をデータベースに格納する

##気象情報をデータベースに格納する
気象情報を用いて、「商品の売上予測」や「来客予測」を行っているのですが、分析を進めていくに従い、「気象情報をどこかに保管しておきたい」と思うようになりました。気象情報は新鮮な情報がどんどん入手できますが、一方ですぐにデータが更新されてしまうので、分析する時点でのスナップショットをデータベースに格納／蓄積したいと思ったのです。「手元にあるデータベースやデータウェアハウスに入れるほどでもない」かと思い、クラウドのサービスの利用を検討しました。

##IBM CloudantとIBM dashDBを利用する
今回、IBM CloudantとIBM dashDBを使い気象情報の格納を検証しました。
>[IBM Cloudant](https://www.ibm.com/analytics/jp/ja/technology/cloud-data-services/cloudant/)
>[IBM dashDB](https://www.ibm.com/analytics/jp/ja/technology/cloud-data-services/dashdb/)

今回この2製品を選んだ理由は以下の通りです。
・SaaSのほうが手軽に利用できる点
・NoSQL DBを使えば、数が多い気象情報のカラムを全部事前定義しなくて良い点
・使うか分からない情報を高額なRDBに入れておくのがもったいないと考えた点
・NoSQLに入れておくのはいいが、利用するときにはRDBを利用したい
・気象情報をJSON形式でダウンロードし、それをそのままアップロードしたい
・気象情報としてIBM提供のデータを使うので、DaaSもIBMにしました

以下の情報を参考にしました。
>[Put the Weather in your Databases](http://www.db2dean.com/Previous/WeatherinDB.html)

##手順
①bluemixで、cloudantのサービスを開始する
https://console.ng.bluemix.net/
で、カタログの「データ＆分析」からCloudant NoSQL DBを選択

![a1.png](https://qiita-image-store.s3.amazonaws.com/0/130520/defc51d1-07fd-6cb4-88d8-50250736b450.png)

デフォルトのままで、「作成」を押します。

![a2.png](https://qiita-image-store.s3.amazonaws.com/0/130520/03abc8ab-609c-d667-d1a4-99dc77ad8cfb.png)

なお、今回は以下の無料プランを利用して検証をしています。

![a3.png](https://qiita-image-store.s3.amazonaws.com/0/130520/223ab634-7c5c-72b5-da6b-ab268fefc230.png)

②bluemixで、Weather Company Dataのサービスを開始する
で、カタログの「データ＆分析」からWeather Company Dataを選択

![a4.png](https://qiita-image-store.s3.amazonaws.com/0/130520/15411e26-e221-d802-bf1d-fbdfcfda8cb8.png)

デフォルトのままで、「作成」を押します。

![a6.png](https://qiita-image-store.s3.amazonaws.com/0/130520/de1a4233-4dc3-cfbe-64f6-2d8488da407d.png)

なお、今回は以下の無料プランを利用して検証をしています。

![a7.png](https://qiita-image-store.s3.amazonaws.com/0/130520/3d7c0bb5-788a-9345-3454-ed9d2c3acf7d.png)

③PCへのcURLのセットアップ
今回、Weather Company DataのサービスでJSON形式の気象情報をPCにダウンロードし、それをCloudantへアップロードします。そこで、REST APIをコマンドでコールできるcURLというツールを使いました。以下のサイトから、画面を下のほうにスクロールさせて、PCのOSにあった圧縮ファイルをダウンロードします。このツール、インストールは不要で、ファイルを解凍し、任意のフォルダに置きます。

>[cURL](https://curl.haxx.se/download.html)

私の場合には、cの直下に置きました。（C:\curl-7.53.1-win64-mingwというフォルダ）

④Weather Company Dataのサービス資格情報の確認
先ほど開始したWeather Company Dataのサービス資格情報をbluemixのコンソールで確認します。

![a9.png](https://qiita-image-store.s3.amazonaws.com/0/130520/a870de1a-2a16-da1d-d284-0293373d348d.png)

⑤ファイル出力コマンドの実行
Windowsのコマンドプロンプトを起動し、cURLを置いたフォルダの直下のbinフォルダにて以下のコマンドを実行します。
curl -X GET -u <上記の資格情報のusername>:<上記の資格情報のpassword>　https://twcservice.mybluemix.net:443/api/weather/v1/geocode/35.681298/139.766247/forecast/daily/7day.json?units=m > obs.json

URL:portは資格情報と違っていれば変えてください。ここでは、東京駅の緯度経度をWebで調べて、「35.681298/139.766247」と書いています。「units=m」をつけているのは、華氏ではなく摂氏、フィートではなくキロメートルの表示のためです。「7day.json」は7日間の日別の予報を出すものです。以下のサイトは、パラメータURLを作れるので便利です。

>[Weather Company Data For IBM Bluemix APIs](https://twcservice.au-syd.mybluemix.net/rest-api/#/Daily_Forecast)

binフォルダにobs.jsonが作成されました。

なお、何回も連続でテスト実行したので、Weather Company Dataの無料枠を超えてしまい、エラーが出てしまいました。（1分間に10API実行まで）しばし、待ってから再度試しました。

![a10.png](https://qiita-image-store.s3.amazonaws.com/0/130520/bc5fa744-0c00-4f8f-bc23-9f722defd32b.png)

⑥Cloudantのサービス資格情報の確認
先ほど開始したCloudantのサービス資格情報をbluemixのコンソールで確認します。

![a11.png](https://qiita-image-store.s3.amazonaws.com/0/130520/6ed55eae-ae02-08d4-c875-a06c4250d810.png)

⑦Cloudantでデータベースを作成する
Cloudantの管理コンソールで、「Create Database」をし、「twc」という名前のデータベースを作成します。

![a13.png](https://qiita-image-store.s3.amazonaws.com/0/130520/e5b6cc37-4e19-1b7a-870e-d076c47bb894.png)

⑧obs.jsonをCloudantへインポート
Windowsのコマンドプロンプトを起動し、cURLを置いたフォルダの直下のbinフォルダにて以下のコマンドを実行します。
curl -X POST -u <上記の資格情報のusername>:<上記の資格情報のpassword> https://xxxxxxxxxxxx/twc -H Content-Type:application/json -d @obs.json

今度は、Cloudant側の資格情報です。「https://xxxxxxxxxxxx/」
は資格情報のhostを記載してください。

⑨Cloudantの管理コンソールでデータがインポートされたことを確認

![a14.png](https://qiita-image-store.s3.amazonaws.com/0/130520/3b647dfc-1b61-0d82-0051-dca0653de72d.png)

無事に、データがCloudantにインポートされました。しかし、この形では使いにくいので、RDBであるdashDBにこのデータをレプリケーションしましょう。

⑩CloudantとdashDBの連携
Cloudantの管理コンソールで「Analytics」のメニューから「Create Warehouse」を押します。

![a16.png](https://qiita-image-store.s3.amazonaws.com/0/130520/96d2534d-a3cc-48fd-8c66-641ea211f946.png)

「dashDB」を選択して、「IBMID/Password」を入力、認証をします。

![a17.png](https://qiita-image-store.s3.amazonaws.com/0/130520/c350039b-911a-f4d2-7c59-ab737d9c9ee9.png)

dashDB側のデータベース名（今回、新しく作ります：任意）とCloudant側のデータベース名（今回は先ほどつけた「twc」）を指定、今回は、dashDBも新しいインスタンスを作成します。

![a19png.png](https://qiita-image-store.s3.amazonaws.com/0/130520/2b459152-934c-ca49-55e0-e43bdb96dbcb.png)

Cloudantの管理コンソールのdashDBへのリンクからdashDBを立ち上げてみると

![a20.png](https://qiita-image-store.s3.amazonaws.com/0/130520/2e01d495-ffdf-89f0-e901-3642e67641e5.png)

無事にデータが格納されていました。この形でデータが見れると安心します。

![a21.png](https://qiita-image-store.s3.amazonaws.com/0/130520/84098e2a-6e25-fc08-222f-057d2f138ea4.png)

##おわりに
難しいのは、（JSON用）URLを構築する所ぐらいで、あとはデフォルトでほぼすすめます。いくつかの種類の天気情報がありますので、それぞれ試してみたいと思います。「NoSQL DBを使えば、数が多い気象情報のカラムを全部事前定義しなくて良い」点が本当に便利でした。