#環境
Watson Studio
Python3.5
#Pandasとは
- Numpyと同様に行列を加工しやすくするライブラリです。
- 数表や時系列データを操作しやすくする為の機能が提供されています。
- BSDライセンス
#気象観測データ
- 気象庁で公開されている気象観測データファイルをDLします。
- 今回は、1時間の降水量データをDLします。
#IBM WatsonのNotebook 側の処理
- 今回は、IBM Watson のWatson Studioを使用して、気象観測データを読み込んでみたいと思います。
- アカウントをお持ちでない方は、こちらにてアカウントを作成してください。ライトアカウントが用意されています。ライトアカウントですと、クレジットカード不要で無期限・無料で利用できます。(2019年3月27日時点)
- 有料アカウントと比較すると、利用できるサービスが限定されていますが、AIの取っ掛かりとしては十分すぎるほど利用できます。利用できるサービスを以下にリストアップしました。
- Watson Knowledge Studio
- IBM API Connect™
- Cloud Foundryのアプリ
- IoTプラットフォーム
- Watson Discovery
- Cloudant®
- Watson Personality Insights
- プッシュ通知
- 音声からテキストへの変換
-
上記で、アカウントが用意できたら、処理を進めていきましょう。
-
カタログ画面が表示されたら、サイドメニューから「AI」リンクをクリック。詳細画面から「Watson Studio」をクリックし、Watson Studio を起動します。
- New Project ボタンを押下
- Standard を選択
- 任意のプロジェクト名などを入力、ストレージを選択。ここでは、ストレージの箇所はマスクをかけていますが、任意のストレージを作成して選択してください。その後、create ボタンを押下してください。
- Add project ボタンを押下、展開されたメニューから Notebookを選択します。
- 任意のNotebook の名前を入力し、Create Notebook ボタンをクリックします。
- Notebook が作成されたら、メニュー上部の「データ」アイコンをクリックし、先ほど気象庁のサイトからダウンロードしたCSVファイルをアップロードします。
- CSVファイルのアップロードが終わると、CSVファイル名の下に、[Insert to code]リンクが現れるので、クリック。展開されたメニューから[Insert pandas DataFrame]リンクが現れるのでクリックします。
- PandasCSVファイルを読み込みするコードが自動生成されます。便利ですね。
- 簡単に中身を見てみます。import pandas as pd でPandasライブラリをインポートしています。その後、pd.read_csv(body)でCSVファイルを読み込み、df_data_1変数に格納し、df_data_1.head()で規定のヘッダ行を出力しています。
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 ボタンをクリックして、実行してみます。
- 成功と思いきや、エラーです。
---------------------------------------------------------------------------
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で読み込むように直しましょう。
#df_data_1 = pd.read_csv(body)
df_data_1 = pd.read_csv(body,encoding="SHIFT-JIS")
- 成功しました。
- ちなみに、df_data_1.head()は先頭5行のみ読み込みます。df_data_1.tail()で末尾5行の読み込みを行います。
- Pandasの詳しい使用方法は10 Minutes to pandasを参照してください。