Watson Studio上でJupyter Notebookを使う

# はじめに
別記事[Watson Studioセットアップガイド(ライトアカウント可)](https://qiita.com/makaishi2/items/b666f847a98c2e42dfbb)の内容を整理して、Jupyter Notebook部分のみ、別記事にしました。

(2018-09-19 ローカルファイルのアップロード・ダウンロード手順の追記)
(2020-01-07 Pythonのバージョン修正)

![スクリーンショット 2018-04-27 18.25.33.png](https://qiita-image-store.s3.amazonaws.com/0/206130/15637c4c-ade7-002f-5f60-0b242611aa41.png)
Watson Studio上のJupyter NotebookはPythonのAIプログラムでよく出てくる、Tensorflow, Keras, NumPy, Pandas, matplotlibなどは事前導入済み、そうでないライブラリもpipコマンドで導入できるものなら簡単に追加導入できます。 

# 前提
上記リンク先の記事でプロジェクトの作成まで済んでいることが前提です。

# Jupyter Notebookの作成
プロジェクトの管理画面から「Add to Project」->「Notebook」を選択します。

![スクリーンショット 2018-04-27 15.02.44.png](https://qiita-image-store.s3.amazonaws.com/0/206130/26130be3-ca0b-f108-57d8-d9be43abe852.png)

Notebook作成の画面が出たら、まず名前を入力します。
なんでもいいのですが、ここでは「My First Notebook」としています。
あとはデフォルト値で、画面左下の「Ctreate Notebook」を押します。

![スクリーンショット 2018-04-27 15.07.18.png](https://qiita-image-store.s3.amazonaws.com/0/206130/ba974b06-8283-7f53-1097-1356fff0ae2a.png)

下のような画面がでてくれば、Python v3.6の動くNotebook環境の完成です。
![スクリーンショット 2018-04-27 15.08.32.png](https://qiita-image-store.s3.amazonaws.com/0/206130/8c3479ec-d9a4-1f61-67fa-55a1843f418e.png)

# 動作テスト

動作の確認をするため

①入力欄に``1+1``を入力
②実行アイコンをクリック

としてみて下さい。
計算結果で`2`が出力されていればPythonが正常に稼働しています。

上の例ではあまりに簡単すぎるので、最後にちょっとハデめのテストをしてみます。
下にあるコードをまるごとコピーして空白のセルに張り付けて下さい。
この状態で先ほどと同じように実行のアイコンをクリックします。

```py
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D 
from matplotlib import cm
%matplotlib inline
def func(x,y):
    return x**2 + y**2
x = np.arange(-5,5,0.05)
y = np.arange(-5,5,0.05)
X, Y = np.meshgrid(x,y)
Z = func(X,Y)
fig = plt.figure()
ax = Axes3D(fig) 
ax.plot_surface(X,Y,Z,cmap=cm.coolwarm) 
plt.show()
```

下のような三次元グラフが表示されれば成功です。

![スクリーンショット 2018-04-27 18.25.33.png](https://qiita-image-store.s3.amazonaws.com/0/206130/88dbb9d6-9ca6-eee1-f928-a2224fd41bdf.png)

# Tips ローカルファイルの扱い
このJupyter Notebookは、実体がcloud上のdockerであるため、Pythonからみたローカルファイルの扱いが若干面倒です。ローカルファイルのやりとりは、Cloud Object Storage経由で行う形になります。その具体的な手順は以下の通りです。

## ローカルファイルの読み込みを行う場合

### クラウドオブジェクトストレージにファイルをアップロード
下記の画面から Drag and Dropでファイルをアップロードします。

![スクリーンショット 2018-09-19 19.43.25.png](https://qiita-image-store.s3.amazonaws.com/0/206130/45da6242-0fd3-8a34-a205-e398bb60b868.png)

### credential情報の取得

Jupyter Notebook上で空のセルが選択されている状態で、下記のメニューから「Insert Credentials」を選択すると、セルにコードがコピーされます。

![スクリーンショット 2018-09-19 19.45.45.png](https://qiita-image-store.s3.amazonaws.com/0/206130/9d3063bb-8980-48c2-bd8b-2f53af5a6906.png)

### コード修正 & 実行

``credentials_1 = {``

の行の「_1」を削除した状態で、実行します。更に次のセルをコピペして実行して下さい。

```py3
from ibm_botocore.client import Config
import ibm_boto3

cos = ibm_boto3.client(service_name='s3',
    ibm_api_key_id=credentials['IBM_API_KEY_ID'],
    ibm_service_instance_id=credentials['IAM_SERVICE_ID'],
    ibm_auth_endpoint=credentials['IBM_AUTH_ENDPOINT'],
    config=Config(signature_version='oauth'),
    endpoint_url=credentials['ENDPOINT'])
```

### ファイルのCOSからのダウンロード
filenameの行をダウンロードしたいファイル名に置き換えて、次の行を実行します。

```py3
filename = 'boston_2.csv'
cos.download_file(Bucket=credentials['BUCKET'],Key=filename,Filename=filename)
```

### ファイルのCOSへのアップロード
ローカルで作ったファイルをCOSにアップロードする場合も手順はほとんど同じです。COS上に最低一つファイルがないと、credntail情報の生成ができないので、ない場合はダミーデータをいったんアップロードして下さい。最後のアップロードのコマンドは以下のなります。

```py3
filename = 'boston_2.csv'
cos.upload_file(Filename=filename,Bucket=credentials['BUCKET'],Key=filename)
```


# 推奨する追加セットアップ
実は、導入直後の状態ではmatpoltlibを使ったグラフ表示の際、キャプションに漢字を使えないという問題があり、俗に「豆腐問題」と呼ばれているようです。
この問題の解決策について、別記事に記載しましたので、こちらの設定もあわせて行って下さい。

[Watson Studio　Jupyter Notebook上のmatplotlibで日本語ラベルを表示させる]
(https://qiita.com/makaishi2/items/2c406d920b01b0c73eb7)

↓↓↓↓↓↓↓ あなたの記事の内容
# このあとどうする？
この環境があれば、ネットに出ているPythonを使ったAIサンプルコード(特にJupyter Notebook用に書かれたもの)をいくらでも試すことができます。
───────
#このあとどうする？
この環境があれば、ネットに出ているPythonを使ったAIサンプルコード(特にJupyter Notebook用に書かれたもの)をいくらでも試すことができます。
↑↑↑↑↑↑↑ 編集リクエストの内容
以下に私が書いた記事を紹介します。

[15分でできる日本語Word2Vec](https://qiita.com/makaishi2/items/63b7986f6da93dc55edd)

[Watson Machine Learning - Watson Studio Jupyter Notebook上のscikit-learn 機械学習モデルをデプロイする -](https://qiita.com/makaishi2/items/38371d272d752b6e7647#_reference-3a7d125be82475e3f1ce)

[【メモ】Watson Studioで強化学習サンプルを動かすNotebook](https://qiita.com/makaishi2/items/883f1563f8dfa299a7a0)