【IBM Watson】気象観測データをPandasでCSV読み込みする

#環境
Watson Studio
Python3.5

#Pandasとは
- Numpyと同様に行列を加工しやすくするライブラリです。
- 数表や時系列データを操作しやすくする為の機能が提供されています。
- BSDライセンス

#気象観測データ
- 気象庁で公開されている[気象観測データファイル](https://www.data.jma.go.jp/developer/index.html)をDLします。
- 今回は、[1時間の降水量データ](https://www.data.jma.go.jp/obd/stats/data/mdrr/pre_rct/alltable/pre1h00_rct.csv)をDLします。

#IBM WatsonのNotebook 側の処理

- 今回は、IBM Watson のWatson Studioを使用して、気象観測データを読み込んでみたいと思います。
- アカウントをお持ちでない方は、[こちら](https://www.ibm.com/jp-ja/cloud/lite-account)にてアカウントを作成してください。ライトアカウントが用意されています。ライトアカウントですと、クレジットカード不要で無期限・無料で利用できます。（2019年3月27日時点）
- 有料アカウントと比較すると、利用できるサービスが限定されていますが、AIの取っ掛かりとしては十分すぎるほど利用できます。利用できるサービスを以下にリストアップしました。
	- Watson Knowledge Studio
	- IBM API Connect™
	- Cloud Foundryのアプリ
	- IoTプラットフォーム
	- Watson Discovery
	- Cloudant®
	- Watson Personality Insights
	- プッシュ通知
	- 音声からテキストへの変換

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/f13df975-40ca-f92c-563c-1aa13bf34b1f.png)


- 上記で、アカウントが用意できたら、処理を進めていきましょう。

- ログイン後、メニューの「カタログ」リンクをクリックしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/539caeec-a085-1c09-087f-16f032f9f2c2.png)

- カタログ画面が表示されたら、サイドメニューから「AI」リンクをクリック。詳細画面から「Watson Studio」をクリックし、Watson Studio を起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/4200e5e0-1646-3ebf-836d-7a96550086ce.png)


- New Project ボタンを押下

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/8234a8c2-8d16-53f4-1f7a-efc4c7dd14fc.png)

- Standard を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/f58a531e-b6cc-338d-6087-e8724e7865d0.png)

- 任意のプロジェクト名などを入力、ストレージを選択。ここでは、ストレージの箇所はマスクをかけていますが、任意のストレージを作成して選択してください。その後、create ボタンを押下してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/2076f763-3f01-6a7e-dd63-e1124419024e.png)

- Add project ボタンを押下、展開されたメニューから Notebookを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/55ee90f2-628d-4655-e9bd-831f08ba70a6.png)


- 任意のNotebook の名前を入力し、Create Notebook ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/34a19e44-9543-16b4-d491-50565b3e6e11.png)

- Notebook が作成されたら、メニュー上部の「データ」アイコンをクリックし、先ほど気象庁のサイトからダウンロードしたCSVファイルをアップロードします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/84b46c59-9dad-2ab0-09ff-107a39eab0e8.png)

- CSVファイルのアップロードが終わると、CSVファイル名の下に、[Insert to code]リンクが現れるので、クリック。展開されたメニューから[Insert pandas DataFrame]リンクが現れるのでクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/85cd900a-be7d-205a-8915-805c2dfcf69a.png)

- PandasCSVファイルを読み込みするコードが自動生成されます。便利ですね。
- 簡単に中身を見てみます。import pandas as pd でPandasライブラリをインポートしています。その後、pd.read_csv(body)でCSVファイルを読み込み、df_data_1変数に格納し、df_data_1.head()で規定のヘッダ行を出力しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/d17aa7f7-29d2-f1e8-aabe-7a0be3143287.png)



```py
import types
import pandas as pd
from botocore.client import Config
import ibm_boto3

def __iter__(self): return 0

# @hidden_cell
# The following code accesses a file in your IBM Cloud Object Storage. It includes your credentials.
# You might want to remove those credentials before you share your notebook.
client_xxxxxxxxxxxxxxxxxxxxxxxxxxx = ibm_boto3.client(service_name='s3',
    ibm_api_key_id='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    ibm_auth_endpoint="https://iam.bluemix.net/oidc/token",
    config=Config(signature_version='oauth'),
    endpoint_url='https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.com')

body = client_xxxxxxxxxxxxxxxxxxxxxxxxxxxx.get_object(Bucket='xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx-pr-xxxxxxxxxxxxxxxxxxxxxxx',Key='pre1h00_rct.csv')['Body']
# add missing __iter__ method, so pandas accepts body as file-like object
if not hasattr(body, "__iter__"): body.__iter__ = types.MethodType( __iter__, body )

df_data_1 = pd.read_csv(body)
df_data_1.head()
```

- Run ボタンをクリックして、実行してみます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/88a677b3-795d-f5d5-55ad-b77053fe3476.png)

- 成功と思いきや、エラーです。

```
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-1-72cf346b6559> in <module>()
     20 if not hasattr(body, "__iter__"): body.__iter__ = types.MethodType( __iter__, body )
     21 
---> 22 df_data_1 = pd.read_csv(body)
     23 df_data_1.head()
     24 

(中略)

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._get_header()

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8a in position 0: invalid start byte
```

- どうも、気象庁からダウンロードしたファイルはSJISですが、Unicodeで読み込みをしようとして、UnicodeDecodeErrorが発生しているようです。
- では、自動生成されたコードを以下のように修正して、SJISで読み込むように直しましょう。

```py
#df_data_1 = pd.read_csv(body)
df_data_1 = pd.read_csv(body,encoding="SHIFT-JIS")
```

- 成功しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/235774/f11e9d06-0c70-bf25-5d35-f1f5bc5e0050.png)


- ちなみに、df_data_1.head()は先頭5行のみ読み込みます。df_data_1.tail()で末尾5行の読み込みを行います。
- Pandasの詳しい使用方法は[10 Minutes to pandas](http://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html)を参照してください。