Data Science ExperienceからWatson API Natural Language Understandingを実行する

##概要
　IBMのDeveloperツールのひとつであるData Science Experience（https://datascience.ibm.com/) には、Jupyter NotebookやR StudioなどオープンソースベースのIDEがビルトインされている。
このJupyterはデータ加工やデータ分析に非常に有用な多くの機能を持っており、WatsonなどAIの各種APIやエンジンに投げ入れる学習データやテストデータを作成するのに活躍する場面が増えてきた。
更に、Jupyterで直接Watson APIをCALLすることができれば、学習データの加工と作成→AIエンジンの学習→AIエンジンの実行の一連の流れが自動化出来て、AI活用システム開発における利便性や運用性が高まることになる。
この投稿では、Data Science Exprience上のJupyterでPythonを使って、直接Watson API（このケースではNatural Language Understanding (https://www.ibm.com/watson/services/natural-language-understanding/) )をCALLする方法について紹介する。

#前提となる環境

- Data Science Experience（以下DSX）のサービス・インスタンスを作成([Bluemix](https://www.ibm.com/cloud-computing/jp/ja/bluemix/) もしくは[DSXのWebサイト](https://datascience.ibm.com/) からSign upし作成、ライトプラン（無料）で可）
- IBM Watson Natural Language Understandingのサービス・インスタンスを作成（Bluemix上で作成、ライトプラン（無料）で可）

#処理の流れ

1.  DSX上でPythonのWatson Developer Cloudのライブラリーをインストールする
2.  Jupyter notebookのPythonコードを書く
3. 当該PythonコードでAPIを実行しResult（JSON）を得る

#手順の詳細
###１．DSX上でPythonのWatson Developer Cloudのライブラリーをインストールする

Watson APIをPython環境から実行するには、Watson Developer CloudのPythonのライブラリーが必要である。ちなみにこのWatson　Developer CloudのPythonライブラリーを導入しないまま、Pythoのプログラムを実行すると、以下のエラーに遭遇することになる。

```ModuleNotFoundError: No module named 'watson_developer_cloud.natural_language_understanding'```

Data Science Experience(以下DSX)ではないJupyterの環境（Local PC上にAnacondaなどにより構築された環境）では、Phtonのライブラリーをpipコマンドなどでコマンドプロンプトから導入することが可能だが（例えば、pip install ライブラリー名）、DSXはクラウド上のサービスになるので、ローカルのpipコマンドからライブラリーを導入することが出来ない。
そこで、DSX上の環境にpipコマンドでライブラリーを導入するには、DSXのJupyter　notebookのセルで以下のコマンドを入力する。

```!pip install watson_developer_cloud```

Jupyter上のセルの記述と実行結果は以下のような感じになる。
<img width="709" alt="スクリーンショット 2017-10-03 10.20.12のコピー.png" src="https://qiita-image-store.s3.amazonaws.com/0/99293/330e9420-6047-8504-0ebe-7d680ffbd7d0.png">


###２．Jupyter notebookのPythonコードを書く

　JupyterのProject上で、add notebookをクリックし、新しいnotebookを作成し、以下のコードを記述する。
Natural Language Understandingのusername（以下NLU）とpasswordは、Bluemix上の当該サービス・インスタンスのサービス資格情報から取得したものをコピーして記述する。

```Python:nluExec.py
import json
from watson_developer_cloud import NaturalLanguageUnderstandingV1
import watson_developer_cloud.natural_language_understanding.features.v1 as \
    Features


natural_language_understanding = NaturalLanguageUnderstandingV1(
    version='2017-02-27',
    username="Your username",
    password="Your password")

response = natural_language_understanding.analyze(
    text='Bruce Banner is the Hulk and Bruce Wayne is BATMAN! '
         'Superman fears not Banner, but Wayne.',
    features=[Features.Entities(), Features.Keywords()])

print(json.dumps(response, indent=2))
```

https://github.com/watson-developer-cloud/python-sdk/issues/163
###３．当該PythonコードでAPIを実行しResult（JSON）を得る
このコードが記述されたセルを実行すると、リクエストで指定したTextがNLUのAPIで解析され、APIコールで指定されたFeature（この例ではEntitiesとKeywordsが指定されている）を抽出しJSON形式でリターンされる。

<img width="666" alt="スクリーンショット 2017-10-03 10.39.22のコピー.png" src="https://qiita-image-store.s3.amazonaws.com/0/99293/0b921b33-c747-b714-2d4e-1975fd1f50a9.png">


###【補足】参考文献

[Error Importing Library](https://github.com/watson-developer-cloud/python-sdk/issues/163)
　元々はローカルのJupyter環境でWatson APIをCallした際に、「ModuleNotFoundError: No module named 'watson_developer_cloud.natural_language_understanding」のエラーに遭遇し、この記事から調べ始めたもの。この記事の終盤に、PythonからWatson APIをコールするサンプルが載っているがうまく動かない。
[watson-developer-cloud/python-sdk](https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/natural_language_understanding_v1.py)
　こちらのPythonコードでは、Watson Developer CloudのライブラリーをインストールすればWatson APIのコールが出来る。
[Install custom or third-party libraries and packages](https://datascience.ibm.com/docs/content/analyze-data/importing-libraries.html)
　DSX環境にサードパーティーのライブラリーやパッケージを導入するためのガイド。Pythonのライブラリー以外にのJARファイルやRパッケージの導入方法等も書かれている。