分析環境について考える（その３：pyenv＋Anaconda[Python、R]＋jupyter＋Rstudioのインストール）

# 前置き
- [ 分析環境について考える（その２：VirtualBox＋vagrantで仮想環境を構築）](http://qiita.com/9en/items/82e52ca87a0eaa2aa270) の続き
- VirtualBox環境でvagrantを利用してインストールを前提に記載

# 分析環境構築の流れ
- 以下流れで仮想環境を構築していく

| No. | 内容 |
|:---------:|:---------|
| 1 | [全体像](http://qiita.com/9en/items/28e178c919bf38fcbc4f) |
| 2 | [VirtualBox＋vagrantで仮想環境を構築](http://qiita.com/9en/items/82e52ca87a0eaa2aa270) |
| 3 | [pyenv＋Anaconda[Python、R]＋jupyter＋Rstudioのインストール](http://qiita.com/9en/items/981a4bed401065c63168) |
| 4 | [postgreSQL+Pgadmin4のインストール](http://qiita.com/9en/items/43d2306f7e7e968b72c4) |

# 環境
- ホストOS：Windows7(64bit)
- ゲストOS：Ubuntu14.04(64bit)

# ソフトウェアをインストールする
## 対象ソフトウェア
- pyenv1.0.6
- Anaconda4.2.0
    - Python2.7.12
    - Python3.5.2
    - R3.3.2
- Rstudio Server1.0.136(64bit)

## インストール方法
- Vagrantでプロビジョニングする

## VagrantでプロビジョニングようのSHELLを書く際の注意点 ※めちゃくちゃはまりました
### Vagrantでプロビジョニングするとデフォルトでroot実行されている
- 「privileged: false」でオフにできる
- 当たり前だがroot実行をオンの場合ホームディレクトリが「/root」となる

### Ubuntuの「#!/bin/sh」では「source」コマンドが実行できない
- Ubuntuのシェルの実態はDashというシェル動いており、Dashには「source」コマンドがない
- 「source」の変わりに「.」を使う ※参考：[Ubuntu wiki](https://wiki.ubuntu.com/DashAsBinSh#source)
- インタプリンタの指定を「#!/bin/bash」とすれば「source」コマンドが使える

### 「source ~/.bashrc」はできない
- Vagrantで実行されるvagrant-shellはnon-interactiveとなっており、シェル実行中にbashrcの読み直しができない
※ネットにはできるようにする方法がいくつか記載されていましたが私にはできませんでした
- 「.profile」は読み直しできるためこちらを利用

## プロビジョニングスクリプト
### OSインストール時の初期設定コマンド
- ネットで調べて必要そうなものをインストール

```bash:provision_libs.sh
#!/bin/bash

# パッケージリストの更新
apt-get update

# インストールされているパッケージの更新
apt-get upgrade

# vimをインストール
apt-get install -y vim

# gitをインストール
apt-get install -y git

# gccなどの開発ツールをインストール
apt-get install -y build-essential

# opensslインストール
apt-get install libcurl4-openssl-dev

# jupyter自動起動設定(Upstart利用)
echo -e '
start on runlevel [2345]
stop on runlevel [!2345]
expect fork
respawn
# run the server
exec `su vagrant -c "/home/vagrant/.pyenv/versions/anaconda3-4.2.0/bin/jupyter-notebook"`
' > /etc/init/jupyter-notebook.conf

# pgadmin4自動起動設定
sed -i -e '13s/^/\nsu - vagrant -c \"python \/home\/vagrant\/.pyenv\/versions\/anaconda3-4.2.0\/lib\/python3.5\/site-packages\/pgadmin4\/pgAdmin4.py\"\n/g' /etc/rc.local

```

### Anacondaのインストール
- Anacondaを用いてPythonとRをインストールする
- Anacondaをインストールのにpyenvを用いる
- パッケージ管理、仮想環境管理は、condaを利用する
- jupyter-notebookはUpstart利用してゲストOS起動時に自動起動するよう設定
※コードはprovision_libs.shに記載
- 仮想環境がjupyterで反映されるように設定
- Rのインストールをconda以外でも検討したが、jupyterとの連携でつまづいたためcondaでインストールする(ネットではパッケージのインストールで苦戦するとあるが、以下表にまとめたコマンドで問題なくインストールできた)
- Rのインストールで「r-essentials」というパッケージを指定しており、これはデータサイエンスによく利用されるパッケージが80以上含まれている（ここのインストールで時間がかかる）

#### condaコマンドメモ
| 説明 | コマンド |
|:---------|:---------|
| バージョンの確認 | conda --version |
| アップデート | conda update conda |
| 仮想環境一覧 | conda info -e |
| 仮想環境に入る| source activate [env name] |
| 仮想環境を出る| source deactivate [env name] |
| 仮想環境を削除 | conda remove [env name] |
| 仮想環境を作る | conda create -n [env name] [program name] |
| 仮想環境を作る(バージョン指定) | conda create -n [env name] python=x.x [program name] |
| パッケージをインストール | conda install -n [env name] [pkg name1] [pkg name2] |
| クローンを作る | conda create -n [env newname] --clone [env name] |
| Rの環境を作る(グローバル) | conda install -c r [program name] |
| Rの環境を作る(仮想) | conda install -n [env name] -c r [program name] |
| Rのパッケージをインストール(通常のRのパッケージ名の接頭語に「r-」) | conda create -c r [pkg name] |
| パッケージを探す | conda search [pkg name] |

```bash:provision_anaconda.sh
#!/bin/bash

# =====================
# pyenvインストール
# =====================
git clone https://github.com/yyuu/pyenv.git /home/vagrant/.pyenv
echo 'export PYENV_ROOT="/home/vagrant/.pyenv"' >> /home/vagrant/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> /home/vagrant/.profile
echo 'eval "$(pyenv init -)"' >> /home/vagrant/.profile
source /home/vagrant/.profile

# Anacondaのバージョンを確認する
# pyenv install -l | grep anaconda2
# pyenv install -l | grep anaconda3

# =====================
# Anacondaをインストール
# =====================
# インストール
pyenv install anaconda3-4.2.0
pyenv rehash
pyenv global anaconda3-4.2.0

# Anacondaパスの設定
echo 'export PATH="$PYENV_ROOT/versions/anaconda3-4.2.0/bin/:$PATH"' >> /home/vagrant/.profile
source /home/vagrant/.profile

# =====================
# condaでpythonの仮想環境を作る
# =====================
conda create -n py27 python=2.7 anaconda

# 仮想環境用のpythonのパスの設定
# python2用
echo 'alias py2="source $PYENV_ROOT/versions/anaconda3-4.2.0/bin/activate py27"' >> /home/vagrant/.profile
# python3に戻る用
echo 'alias py3="source $PYENV_ROOT/versions/anaconda3-4.2.0/bin/deactivate"' >> /home/vagrant/.profile
source /home/vagrant/.profile

# =====================
# jupyterの設定
# =====================
# jupyterの設定ファイルを作成
jupyter notebook --generate-config

# 作業ディレクトリ作成
mkdir /home/vagrant/jupyter

# 仮想環境をjupyterに反映させるパッケージ
pip install environment_kernels

# 設定ファイルを変更
echo "c = get_config()" >> /home/vagrant/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.ip = '*'" >> /home/vagrant/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.open_browser = False" >> /home/vagrant/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.notebook_dir = '/home/vagrant/jupyter'" >> /home/vagrant/.jupyter/jupyter_notebook_config.py
echo "c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'" >> /home/vagrant/.jupyter/jupyter_notebook_config.py
echo "c.EnvironmentKernelSpecManager.env_dirs=['/home/vagrant/.pyenv/versions/anaconda3-4.2.0/envs/']" >> /home/vagrant/.jupyter/jupyter_notebook_config.py

# =====================
# condaでR環境を作る
# =====================
# Rをインストール（最低限のライブラリ）
#conda install -c r r
# Rをインストール（データサイエンスに必要なライブラリ）
conda install -c r r-essentials

# 作業フォルダの作成
mkdir /home/vagrant/R

# 作業ディレクトリの初期設定を変える（「.Rprofile」はR起動時に読み込まれるファイル）
echo "setwd('/home/vagrant/R')" >> /home/vagrant/.Rprofile

# download.file.methodをwgetに変更する　※これをやらないとRstudio上でインターネットへアクセスできない(install.packagesなど)
echo "options('download.file.method'='wget')" >> /home/vagrant/.Rprofile

# jupyterでRを使ってplotlyを表示するために必要
conda install -y nbconvert
sudo apt-get install -y pandoc

# R path設定
sudo ln -s $(which R) /usr/bin/R

```

### Rstudio Serverのインストール
- [Rstudioの公式](https://www.rstudio.com/products/rstudio/download-server/)の場合「gdebi」を用いているが、Vagrant-shellではうまく実行できなかったため「dpkg」を使う
- Rstudio Serverは初期設定のままでゲストOS起動時に自動起動される

```bash:provision_rstudioserver.sh
#!/bin/bash

# rstudio-serverインストール
wget https://download2.rstudio.org/rstudio-server-1.0.136-amd64.deb
sudo dpkg -i rstudio-server-1.0.136-amd64.deb
rm rstudio-server-1.0.136-amd64.deb

```

# 接続の確認
**※接続をするには、ゲストOSを再起動指せる必要がある**

## juypter
- 以下アドレスを入力し画面を表示
URL：http://192.168.33.10:8888/

![jupyter.png](https://qiita-image-store.s3.amazonaws.com/0/122979/4cc43dbe-db55-feff-b6af-e2c25cae8384.png)

## Rstudio server
- 以下アドレスを入力し画面を表示
URL：http://192.168.33.10:8787/

![rstudio.png](https://qiita-image-store.s3.amazonaws.com/0/122979/54c7365f-868c-efa7-dfa1-3dffa4582261.png)

- 以下アカウントを入力しログイン

| Username | Password |
|:-------|:-------|
| vagrant | vagrant |


# 参考
- https://www.continuum.io/blog/developer/jupyter-and-conda-r
- http://qiita.com/ozawan/items/160728f7c6b10c73b97e
- http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c
- http://qiita.com/masato/items/dce7bac5b0c51489c93b
- https://www.rstudio.com/products/rstudio/download-server/
- https://support.rstudio.com/hc/en-us/articles/200486138-Using-Different-Versions-of-R