anyenv, pyenv, anaconda, jupyter notebook でゼロから作るディープラーニング

# 目的

anyenv, pyenv, anacondaをインストールして、[ゼロから作るディープラーニング](https://www.amazon.co.jp/gp/product/4873117585/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=crosskei-22&creative=1211&linkCode=as2&creativeASIN=4873117585&linkId=5a0f3d76deafa88a7fb2e1aabd1dad40)の開発環境を構築する。

<a target="_blank"  href="https://www.amazon.co.jp/gp/product/4873117585/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4873117585&linkCode=as2&tag=crosskei-22&linkId=8cca5ad625b48e106451302b98099fb9"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&MarketPlace=JP&ASIN=4873117585&ServiceVersion=20070822&ID=AsinImage&WS=1&Format=_SL250_&tag=crosskei-22" ></a><img src="//ir-jp.amazon-adsystem.com/e/ir?t=crosskei-22&l=am2&o=9&a=4873117585" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


# 環境

MacBook Pro
macOS Sierra
ターミナル.app

# anyenvのインストール

複数言語を開発するならanyenvは必須です。
本書で開発を進めるだけなら確かに必要ないですが、
rubyとかjavaとかgoとかに唐突に触りたくなった時にこれ一本で簡単に導入設定できるのは超便利です。
「いや俺はPython一筋だぜ」という人もとりあえず入れてみるのをお勧めします。

[GitHub - riywo/anyenv: all in one for **env](https://github.com/riywo/anyenv)

```bash
git clone https://github.com/riywo/anyenv ~/.anyenv
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
exec $SHELL -l
```

こちらの手順も参考になります。

[anyenvで開発環境を整える - Qiita](https://qiita.com/luckypool/items/f1e756e9d3e9786ad9ea)

# pyenvのインストール

anyenv実行できる様になったらpyenv入れます。
anyenvでインストールすれば、パスや初期化の設定が不要になります。
pyenv-virtualenvは入れません。そもそもanacondaに普通に入っていますし、本書に沿って開発するだけであれば使う必要がありませんので。
開発するだけならanacondaを直接インストールしてもいいですが、後から普通のpythonに切り替えたくなった時に辛いのでpyenv経由で入れます。

[GitHub - pyenv/pyenv: Simple Python version management](https://github.com/pyenv/pyenv)

```bash
# git clone https://github.com/pyenv/pyenv.git ~/.anyenv/envs/pyenv
anyenv install pyenv
exec $SHELL -l
```

「anyenvなど邪道、俺はPythonしか愛せないんだ」という人は以下を参考に直接インストールしてください。

[pyenv と pyenv-virtualenv で環境構築 - Qiita](https://qiita.com/Kodaira_/items/feadfef9add468e3a85b)

```bash
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
exec $SHELL -l
```

# anacondaのインストール

pyenvでanacondaを入れます。

anacondaの利用は賛否両論あるようですが、開発に必要なパッケージを一括でインストールしてくれるのはPython初心者には大変ありがたいです。
慣れてきたらanacondaをやめてpyenvで普通のPythonに切り替えて独自に必要なパッケージを入れていくようにすると良いと思います。

ただ容量が大きいのでダウンロードとインストール完了に時間かかります。

[Anaconda](https://www.anaconda.com/)

```bash
pyenv install anaconda3-5.1.0
pyenv global anaconda3-5.1.0
```

こことかを参考にしました。

[pyenv環境でAnacondaを使う - Qiita](https://qiita.com/takehilo/items/1ffe5b266ed6a64690c8)

どうしてもpyenv経由せず直接入れるという場合は、以下の記事が参考になります。

[Anaconda で Python 環境をインストールする - Qiita](https://qiita.com/t2y/items/2a3eb58103e85d8064b6)

# サンプルをダウンロードする

折角サンプルがGitに転がっているのだから使わない手はありません。

[GitHub - oreilly-japan/deep-learning-from-scratch: 『ゼロから作る Deep Learning』のリポジトリ](https://github.com/oreilly-japan/deep-learning-from-scratch)

```bash
git clone git@github.com:oreilly-japan/deep-learning-from-scratch.git
cd deep-learning-from-scratch
```

これで環境構築は完了です。
あとは本書に書いてある通りにpythonで動かしたり、vimでpyファイルを作成してもいいですが、
jupyter notebookはUI上でそれらを全て実行でき、さらに結果も一緒に保存できるためおすすめです。

[Jupyter Notebook を使ってみよう – Python でデータサイエンス](https://pythondatascience.plavox.info/python%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83/jupyter-notebook%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86)

# Jupyterの機能拡張

anacondaの中にJupyterも一緒に入ってます。
そのまま使ってもいいですが、機能拡張すると開発が楽になります。
先人の知恵を参考に便利そうなツールを入れます。

## jupyterの見た目を変える

[GitHub - dunovank/jupyter-themes: Custom Jupyter Notebook Themes](https://github.com/dunovank/jupyter-themes)

```bash
pip install jupyterthemes
```

レイアウトの変更方法はこちらが参考になります。

[Jupyterのレイアウトを変える方法 - Qiita](https://qiita.com/yujikawa/items/41c898ccfaae3b49e0cf)

もしテーマ設定に失敗したらこれで初期化します。

```bash
jt -r
```

レイアウトをカスタマイズして黒く染めたのはいいですが、編集が真っ白になって文字も灰色で目が死にそうになった時、初期化わからなくて積みそうに…まあ、後から`jt--help`に普通に書いてたの気づきましたが。

## Jupyterの拡張機能を使える様にする

これ入れるとjupyter notebook上で拡張機能の設定が可能になります。

[GitHub - ipython-contrib/jupyter_contrib_nbextensions: A collection of various notebook extensions for Jupyter](https://github.com/ipython-contrib/jupyter_contrib_nbextensions)

```bash
conda install -c conda-forge jupyter_contrib_nbextensions
```

こちらを参考にしました。

[AnacondaのJupyter notebookでnbextensionsを使う - Qiita](https://qiita.com/SaitoTsutomu/items/1326e05eb992a8aa849d)

## Jupyterでvimを使える様にする

vim使えないと辛いので入れます。

[GitHub - lambdalisue/jupyter-vim-binding: Jupyter meets Vim. Vimmer will fall in love.](https://github.com/lambdalisue/jupyter-vim-binding)

```bash
git clone https://github.com/lambdalisue/jupyter-vim-binding ~/.anyenv/envs/pyenv/versions/anaconda3-5.1.0/share/jupyter/nbextensions/vim_binding
```

こちらを参考にしました。

[JupyterNotebookにVimの力を加えると、光と闇が両方そなわり最強に見える - Qiita](https://qiita.com/_snow_narcissus/items/80f81926707807ee9bf1)
[jupyter上でvimを使う - Qiita](https://qiita.com/woody-kawagoe/items/415c6f369ab2a6972ae6)

# jupyter notebookの起動

jupyter notebookで開発を行います。

[Project Jupyter | Home](http://jupyter.org/)

```bash
jupyter notebook
```

こんな画面が開いたら成功

<img width="1182" alt="スクリーンショット 2018-04-22 2.22.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/187135/cbd13cf0-261e-bd46-9bdb-2b1557677bae.png">

あとは、Nbextensionsでお好きなオプションを有効化しておく。
とりあえずは、「VIM binding」と「ExecuteTime」を有効にした。

<img width="1168" alt="スクリーンショット 2018-04-22 2.24.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/187135/41b85465-83ed-71fd-11de-de7333952266.png">

あとはFilesで右上の「New」→「Python3」を押すことで開発をスタートできる。
コードを記入して、「Shift＋Enter」で実行でき、コードと出力結果の両方を左上の保存ボタンから保存できます。

<img width="1166" alt="スクリーンショット 2018-04-22 2.29.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/187135/472e707c-169e-5c7f-868e-8b4658d9fe16.png">

終わるときはターミナル上で「Ctrl+C」です。