電車の中で統計のお勉強がしたい

# 前振り
この記事は、pythonも統計も環境整備もド素人の人間が、以下の3点(+1)について書いたものです。

1. jupyter notebookというものがあるらしい
2. 環境構築メモ
3. 所感
4. 今回作ったnotebook(おまけ)

小さい子供がいるため家で毎日全力のPC作業をするというわけにもいかず、
かつ通勤時間が長く電車内がヒマ、この時間で何か勉強がしてみたい。統計とか機械学習とか。
でも何をどうすればいいのか全然わからない・・・
という人に、何かの参考になれば良いなと思います。

# jupyter notebookというものがあるらしい
お勉強自体は紙と鉛筆さえあればどこでも出来ますが、どうせなら文明の利器と先人の知恵を取り入れたい。
ということで、私がお勉強用の環境に求めた条件は以下の通りです。
特に重点を置いたのは、「ネットに繋がっていて、かつブラウザさえあれば作業出来る」という点でした。

- 統計学のお勉強がしたい。機械学習にも使えると尚良い。
  - 基本
- 実際に手を動かしたい
  - 手計算も悪くないけど、どうせならこの機会にpythonという奴を使ってみたい
- ネットに繋がっていて、かつブラウザさえあれば作業出来る
  - 本格的な作業はPCでやるとして、スマホやタブレットでも軽い作業はしたい
- 結果が図表で見れると理解が進みそう
  - 文字だけ羅列されても・・・イメージは大事。
  - 「見た目」という意味では、世の中にはMarkdown記法なるモノもあるらしい
- テストデータやコードがどこかにいっぱい転がってると嬉しい
  - githubとか
- 通勤時間を有意義に使いたい
  - 電車で片道1時間超

上記の条件を満たす環境を検討し、結果「VPSを使ってjupyter notebookを動かす」という結論に
辿り着いた次第です。

# 環境構築メモ
現代において、ド素人が遭遇する技術的課題というのは金とコピペで解決することが出来ます。
先人の知恵に感謝しつつ、以下に環境構築作業、及び参考にしたサイト・記事を羅列していきます。
ゴールは「jupyter notebookをスマホで使う」です。

## 0. 完全無料を目指す(が、断念)
本当は「cloud9」というサービスを使って、完全無料＆完全クラウドで閉じたかったのです。
ですが、無料枠ではやりたかったことに対して容量が厳しく断念しました。
また、cloud9の登録に今はクレジットカードの番号登録が必須というのもツライところです。
(そうなる前に登録だけはしていたので、私自身はセーフなのですが)

ただ、「jupyter notebookを立ち上げる」ということだけ考えれば特に問題無いので、情報は載せておきます。
cloud9自身もとても便利なので、いろいろお世話になっています。

[cloud9本家](https://c9.io/)
[Cloud9で簡単Jupyter環境構築](http://qiita.com/y__sama/items/58419e85f39265fe6df8)

## 1. VPSの契約**(有料)**
完全無料は断念しましたが、思えばjupyterだけを試したいというわけでも無かったため、思い切って
「さくらのVPS」を契約しました。**(有料)**
[さくらのVPS](http://vps.sakura.ad.jp/)

契約はweb上で必要事項を記入してお金を支払うだけです。
初期設定方法はqiitaにも記事がありますが、以下の情報でとりあえず十分かなと思います。
[【さくらのVPS】サーバの初期設定ガイド](https://help.sakura.ad.jp/hc/ja/articles/206208181--%E3%81%95%E3%81%8F%E3%82%89%E3%81%AEVPS-%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E3%82%AC%E3%82%A4%E3%83%89)

また、後述するcloud9やjupyter notebookをサブドメインで立ち上げたい場合、ドメインが必要になります。
こちらの入手は「さくらのドメイン」を使いました。**(有料)**
参考にしたのは以下の情報。
[ドメインを利用 (さくらで取得・管理のドメイン）](https://help.sakura.ad.jp/hc/ja/articles/206053802)
[ネームサーバ利用申請方法](https://help.sakura.ad.jp/hc/ja/articles/206207381-%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%B5%E3%83%BC%E3%83%90%E5%88%A9%E7%94%A8%E7%94%B3%E8%AB%8B%E6%96%B9%E6%B3%95)
  
## 2. cloud9をインストール
本家cloud9を使うことは断念しましたが、IDEとしての機能やブラウザで作業可能という点を考えて
cloud9 SDKをインストールしてみました。
[Cloud9を自サーバにインストールしてどこでもコーディング](https://kijtra.com/article/cloud9-install/)

基本的には上記の記事をそのままコピペしていけば良いのですが、環境がVPSを契約したての真っ新な場合は
「tmux」もインストールする必要があります。(入れないと、起動画面から切り替わりません)

<pre>
yum -y install tmux
</pre>

サブドメインでアクセスするために必要な「Nginx」のインストールは以下を参考にしました。
尚、インストールしたのはstableです。(特に理由は無し)
[CentOS6 に nginx を yum からインストール](http://qiita.com/ymaru/items/4a56f1619c960981180f)

最後に注意事項として、「1. VPSを使う」にユーザーを追加する方法が記載されていますが、
cloud9を使うユーザーにはsudo権限は与えていません。(なんとなく恐いので)

この時点で、スマホのブラウザからでも環境を弄ることができるようになります。

## 3. python環境をインストール
以下の記事を参考にさせて頂きました。
[データサイエンティストを目指す人のpython環境構築 2016](http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c)

condaのコマンド等は以下の記事が参考になりました。
[Anaconda で Python 環境をインストールする](http://qiita.com/t2y/items/2a3eb58103e85d8064b6)

ここで一応、動作確認も兼ねてjupyter用の仮想環境を作ってみます。
<pre>
conda create -n jupyter python=3.5 anaconda
</pre>


## 4. jupyter notebookを使う
以下の記事を見ながら進めました。
特にパスワードやjupyter_notebook_config.pyの設定について参考になります。
jupyter notebook自体の使い方にも詳しいので、とてもお世話になりました。
[Jupyter事始め](http://qiita.com/taka4sato/items/2c3397ff34c440044978)

- 蛇足ですが、上記の記事には非常に重要な情報があります。  
  それは「Chartを作成してみる」に記載されている「%matplotlib inline」です。  
  最初これを入れておらず、何度やってもグラフが表示されずハマったためメモしておきます。

jupyter notebookをサブドメインでアクセスする場合、「/etc/nginx/conf.d/***.conf」に以下の様な
記述を追加します。
("ju.example.jp"とポート設定"9999"は設定した通りに読み替えて下さい)
<pre>
server {
    listen       80;
    server_name  ju.example.jp;
    location / {
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Origin "";
        proxy_pass   http://127.0.0.1:9999;
    }
}
</pre>

ここまで来れば、スマホからでもjupyter notebookを弄ることが出来ます。
勿論、どのPCからでもブラウザさえあれば同じ環境にアクセス可能です。

## 5. その他(メモ)
私は試していませんが、dockerをインストールして環境構築した方が、簡単で今風かと思います。
その場合、「2. cloud9を入れる」まで行い、その後以下の記事を参考にすれば良いハズです。
また、jupyter notebookの後継でjupyter labというのがあるそうで、そちらの起動はdockerを使いたく、
未来のメモとして残しておきます。

[Dockerを導入する（CentOS版）](http://qiita.com/zwirky/items/991f61a231f4e198a320)
[DockerでJupyter Notebook環境をお手軽に準備する(TensorflowやGraphvizもあるよ）](http://qiita.com/mokemokechicken/items/18a760f4d7fe8a26351c)

尚、最新のdockerはCentOS6を正式サポートしていないようなので、dockerを使う環境にする場合は
VPSのOSはCentOS7系、もしくは正式サポートされているモノにするのが良いかもしれません。

# 所感
## 環境構築について
仕事の関係でunixのコマンド操作が多少わかる程度で、サーバーの知識は0。プログラミング・・・？
このレベルの人間がこの環境を作るのに、1日1～2H作業(休日は0H)で大体一か月掛かりました。
ハマりポイントや関係無いことをしていた時期もあったので、それを差し引くと2週間弱。
維持にかかるリアルマネーは年間15000円程度。
得られるものは自分次第ですが、個人的にはいろいろやっていくベースは整ったかなと思います。

## jupyter notebookをスマホで使ってみる
### コード実行について
私はiphone6 plusを使っています。
なので多少画面は大き目かもしれませんが、それでもこの画面で本格作業は厳しいです。
コーディングが不可能とは言いませんが、実用的にはせめてタブレットが必須かなと思います。

ただ動くのは間違いないので、一部の数字を変えて動作を試してみる程度であれば出来なくはありません。
例えば「ITエンジニアのための機械学習理論入門」はgithubにjupyter notebookが上がっているので
電車の中で気になったところをちょこっと変えて試行する程度ならイケそうだなと感じました。

[ITエンジニアのための機械学習理論入門 Kindle版](https://www.amazon.co.jp/dp/B016Q22IX2/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

### 読み物として
コードの実行はもちろん大事なのですが、Mackdownで書かれたコメントも見栄えが良いです。
そして、書かれたモノは読むだけでも勉強になります。
(むしろ、電車の中では「読み物」としての役割の方が大きい)

コメントを見栄えよく残せるというのもjupyter notebookの素晴らしいところだと思うので、
このツールを使う人は是非そこら辺も考慮して作業して頂ければと。

# 今回作ったnotebook(おまけ)
環境だけ作って満足するのもアレなので、試しにnotebookを作ってみました。
お題は、かの有名は「ハンバーガー統計学」です。
[ハンバーガー統計学にようこそ！](http://kogolab.chillout.jp/elearn/hamburger/)

作成したモノは以下にあります。
これは流石にPCで作りましたが、今後はタブレットを使ってやっていけないか試す予定です。
https://github.com/harataira0301/hamburger_statistics_jupyter