[Cloud102]#1 Pythonを始めよう(第2部 Jupyter Notebook構築 AWS編)

#AGENDA
0.はじめに
1.インストール
2.SG追加と動作確認
3.使い方

#0.はじめに

(1)前置き
・本コンテンツは "[Cloud102]#1 Pythonを始めよう"の第2部 Jupyter Notebook構築AWS編です。
 第1部はこちら： http://qiita.com/nagahisa/items/f378ff23d93119cb3c60
・本当はJupyter Notebookはもっと後半で説明するつもりでしたが、GCP研修(CPB100)などで Jupyter Notebookを使うらしいので、思いっきり前倒して説明します。
・ただ、CPB100で扱うようなSparkやTensorFlowには一切触れず:laughing:、便利なPython勉強環境としてJupyter Notebookが扱えるようになる事を目指します。

(2)元情報
 QIITAにUbuntuにJupyter入れるコンテンツがあるので、これをAmazon Linux版に変更して利用します。
Jupyter事始め
http://qiita.com/taka4sato/items/2c3397ff34c440044978

(3)注意事項
- 今回使用するPythonはAmazon Linuxに "python"として導入されている ver.2.7系です。
- Pythonにはver.3系もあり、今後の主力はこちらになります。
- ver.3系では大きな仕様変更が幾つか入っており、ver.2系で開発したコードと互換性が一部ないところがあります。
- 自分のMac・Windowsに環境構築される場合は、Pythonの両方のバージョンを導入して必要に応じて切り替えることをお勧めします( pyenv, virtualenv )。

#1. インストール

##(1)Amazon Linuxインスタンス起動＆SSHログイン
・前回(＊)の環境準備で作成しておいたAmazon Linuxを起動します。
(＊)http://qiita.com/nagahisa/items/c6bd92992eef42dbe53a

・EC2ダッシュボード > インスタンスから、前回作成しておいたインスタンスを起動
![01.png](http://qiita-image-store.s3.amazonaws.com/0/79389/713ac665-a077-2699-7cdc-a830b8c1b54c.png)

・起動したら、前回手順でログイン

Macでのコマンド例：```
$ssh -i ~/.ssh/cloud102.pem ec2-user@52.198.159.203
```

##(2) Updateと必要なコンポーネントをインストール

Amazon Linux上で以下を実行：

```$ sudo yum update
$ sudo yum -y upgrade
$ sudo yum install -y python-pip libpq-dev python-dev
$ sudo pip install -U pip
$ sudo /usr/local/bin/pip install ipython[notebook]
$ sudo /usr/local/bin/pip install numpy pandas matplotlib seaborn scikit-learn
```

・まずはUpdate：

```$ sudo yum update
$ sudo yum -y upgrade
```

![002.png](http://qiita-image-store.s3.amazonaws.com/0/79389/55c7362b-7ef7-880d-43ea-4ec009815bb7.png)

![003.png](http://qiita-image-store.s3.amazonaws.com/0/79389/c3d947e2-f506-231d-f863-182f4e91b45a.png)

・pipコマンド導入(キャプチャは一部)：
```$ sudo yum install -y python-pip libpq-dev python-dev
$ sudo pip install -U pip
```
![004.png](http://qiita-image-store.s3.amazonaws.com/0/79389/e4ac9874-1565-a0a7-7dbf-f8f7ad55fbe6.png)


・pipコマンドで本体＋アルファをインストール(キャプチャは一部)：
```$ sudo /usr/local/bin/pip install ipython[notebook]
$ sudo /usr/local/bin/pip install numpy pandas matplotlib seaborn scikit-learn
```
![005.png](http://qiita-image-store.s3.amazonaws.com/0/79389/2676ee80-d279-e494-eff5-d7897cf9170c.png)

##(3) SG(Security Group)修正
・Jupyterサーバを起動するポート(今回は 8080/tcp)のアクセスを受け付けるようにSGを修正

・VPCダッシュボード > セキュリティグループから、前回作成したSGに 「8080/tcp許可」を追加

・以前作ったSG
![010.png](http://qiita-image-store.s3.amazonaws.com/0/79389/3764a1f0-acc0-bb5a-71f0-73301bf3f6df.png)

・追加(8000を使っても良いけど）
![012.png](http://qiita-image-store.s3.amazonaws.com/0/79389/83f50167-ec1f-38e8-23f1-87907399ecca.png)

・完了
![013.png](http://qiita-image-store.s3.amazonaws.com/0/79389/17d761e3-cb41-556f-a0f6-5ddaa058e1f2.png)

##(4) まずはJupyter Login Passwordなしで起動・アクセス確認

・configファイルテンプレート作成

Amazon Linuxで：```
$ jupyter notebook --generate-config
```
![020.png](http://qiita-image-store.s3.amazonaws.com/0/79389/bfacca0d-f9d2-c0a5-67fd-e9639a1c513d.png)


・configファイルの最後に以下を追加
```
c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8080
```

適当なエディタで：```
$ vi ~/.jupyter/jupyter_notebook_config.py
```
![021.png](http://qiita-image-store.s3.amazonaws.com/0/79389/aa817e9d-e393-c072-055c-c6df311fdc3d.png)

・起動
```
$ jupyter notebook
```
![022.png](http://qiita-image-store.s3.amazonaws.com/0/79389/9c7f9077-6075-8e56-4d45-2ae0b925b3f3.png)

・手元のブラウザでアクセスし動作確認（Login Passwordなし）
![023.png](http://qiita-image-store.s3.amazonaws.com/0/79389/a9f9c0aa-5719-443c-9842-52c3e20f6e11.png)

・動作確認できたらJupyterサーバを "Ctrl+C"で停止

##(5) Jupyter Login Password設定して起動・アクセス確認

・パスワード作成
```
$ python -c "import IPython;print(IPython.lib.passwd())"
```
![SS 2016-10-18 10.17.00.JPG](https://qiita-image-store.s3.amazonaws.com/0/79389/25c18bb0-0ba2-8ab0-1329-c424dd56c1f0.jpeg)

・~/.jupyter/jupyter_notebook_config.pyに表示されたFinger Printを以下のように追加
```
c.NotebookApp.password = u'表示されたsha1から始まる文字列’
```


・もう一度起動
```
$ jupyter notebook
```
![025.png](https://qiita-image-store.s3.amazonaws.com/0/79389/169d6ea3-8eb4-7f5b-f846-d4b4537cc026.png)

・手元のブラウザでアクセスし動作確認（Login Passwordあり）
![026.png](https://qiita-image-store.s3.amazonaws.com/0/79389/fd4a3581-d232-145c-0648-ad16d54d4d1d.png)


#3.使い方

(1)Notebook作成
・元情報(＊)の後半を参照して Notebook作成。

(＊)Jupyter事始め
http://qiita.com/taka4sato/items/2c3397ff34c440044978

(2)せっかくなのでちょっと統計処理に触れる
・以下をNotebookのセルにコピべして実行(Ctrl+Enter)

```
%mathplotlib inline

import numpy as np
import mathplotlib.pyplot as plt

x = np.random.randint(0,100,10000)
plt.hist(x.bins=20)
plt.plot()
```
![e49c7a95-cb7f-c120-8a75-57f81125eac8.png](http://qiita-image-store.s3.amazonaws.com/0/79389/9bf38bcf-e585-916d-2ec2-4b179a9df68a.png)


Enjoy! :tada: