データサイエンティストに向けたコーディング環境Jupyter Notebookの勧め

More than 3 years have passed since last update.

データサイエンティスト記事第二弾ww


データサイエンティストのためのデータ解析環境

データサイエンティストとかいう人たちはプレゼンしたり、データを見ながらディスカッションしたりする機会が多いんだと思います。 <- 適当な憶測

そのため、vim/emacsや旧来のIDEとは異なるコーディング環境が必要な気がします。

要求仕様としては下記4点かなと思います。

要求仕様
vim/emacs
Rstudio/Spyder
Spotfire/Tableu
Jupyter Notebook

コーディングができる


×

インタラクティブにデータの可視化ができる
×


再現性の確保しやすさ


×

セクシー
一般人から見ると×


データサイエンスとかけ離れた恣意的な表ですが、Jupyter Notebookを使えて損はないのは本当です。

RStudio (pythonはSpyder)もよいですが、 セクシーさ 再現性確保の観点で見るとマークダウンでコメントが残せるJupyter Notebookの方が分があります。

データサイエンティストでなくてもコーディングの過程が保存できるのでおすすめです。


Jupyter Notebookとは?


  • Pythonには元からインタラクティブシェルがついていますが、それで物足りない人たちがIPython(Interactive Python)というインタラクティブシェルを作っていました。


  • IPythonの使い方より特徴を抜粋



  • セル指向のコーディング: セルという単位でまとめて実行できます

  • 予約語や変数、モジュール名などのタブ補完

  • オブジェクトの調査: オブジェクト名に?をつけると詳細情報が表示されます

  • 各種マジックコマンド: %%timeit での実行速度チェックなど

  • シェルコマンド: !lsなど!から始める行はシェルコマンドとして実行できます

  • 入力や出力の再利用: InとOutという変数内にセルの入出力が保存されます



  • IPythonプロジェクトの中で、IPythonをwebから入出力できる IPython Notebookというのが登場しました。


    • pandasのテーブル、matplotlibのグラフ、mathjaxの数式などがwebの機能を用いて表示できます

    • マークダウンでのコメントの表示: 記述力が一気に向上しました

    • .ipynb形式での解析過程の保存と共有が可能です


      • githubにあげると、nbviewerからipython notebookの形式で閲覧可能です





  • IPython Notebookを見ていた他言語ユーザが、他言語でも動くようにIPython Notebookをフックし始めました。


    • baseとしてはkernelと呼ばれるzeromqベースでの通信です

    • このkernelが各言語で作られ始めました


      • Julia, Ruby, Rなど



    • IPython Notebookって名前おかしくね?という状況に...



  • IPythonプロジェクトからスピンアウトして、Jupyterという独立プロジェクトになりました。


    • IPython Notebook 4.0 => Jupyter Notebook (JuPyteR: Julia + Python + R)

    • なので、Jupyter NotebookとIPython Notebookは同じものです

    • IPythonのなかで開発されていたqtconsoleというコンソール版もJupyterに移りました



結果的に、


  • 各種言語で、

  • コーディングがしやすく、

  • マークダウンによる強力なコメントの表現力と、

  • webによるインタラクティブなデータ可視化環境を有し、

  • コードが埋め込まれていることで追試が容易な、

解析過程の再現性と保存性と共有性を有するアプリケーションとなりました。

一種の電子実験ノートです。(ウィットネスとかはないですが)


環境構築

なんとanacondaを入れると全部入っています。

anacondaの環境構築はこちらにあります。

適当なフォルダで端末を立ち上げて下記のコマンドを叩いてください。

jupyter notebook

ブラウザが立ち上がってhttp://localhost:8888にJupyterのページが表示されればOKです。


Jupyterの初期設定

旧記事統合


設定しなくてもとりあえずは動きます。

気にしない方は読み飛ばしてください。



alias

jupyter notebookって結構長いので、noteとかalias作ってもいいです。


config周りについて

jupyter 4.0でconfig周りが結構変わったようなので前から使っている人は確認したほうがよいです。

https://jupyter.readthedocs.org/en/latest/migrating.html


configファイルの作成とパスワードの設定

参考URL

jupyter notebook --generate-config

#>>> Writing default config to: ~/.jupyter/jupyter_notebook_config.py
python -c "from notebook.auth import passwd;print(passwd())"
#>>> Enter password:
#>>> Verify password:
#>>> 'sha1:........'

sha1:...ではじまるハッシュパスワードをコピーしておいてください。

vi ~/.jupyter/jupyter_notebook_config.py


主に変更する箇所

下記パラメータを探して必要に応じてコメントを外して値を記載します。

パラメータ
初期値
コメント

c.NotebookApp.ip
'localhost'
他のクライアントマシンからもアクセスしたい場合は変更する。'*'でフルオープン。

c.NotebookApp.notebook_dir
null
Jupyterのカレントディレクトリを指定。どこかに指定して置くと良い。

c.NotebookApp.open_browser
True
立ち上げ時にbrowserを開くか。Xが入ってないサーバとかはFalseにしておく。

c.NotebookApp.port
8888
他で8888を使っている場合は別のポートを指定。

c.NotebookApp.password
null
先ほどコピーしたハッシュ文字列を入れるとパスワード認証がかけられる。

他にもsslの設定なんかもあるので、webに公開する必要があるときは、ドキュメントを確認してください。


IPython立ち上げ時に読み込むライブラリ

~/.ipython/profile_default/startupに最初に読み込むライブラリを記載しておくと、kernel起動時に一緒に読んでくれます。

セルマジックもipy形式なら記述可能なので、%matplotlin inlineも記載しておくとよいです。

seabornの好みの書き方とかあれば一緒に書いとくと、その後が楽です。

あまり書きすぎるとkernelの立ち上がりが遅くなるのでイライラします。(pandasとか割と重いです)

例:


00_init.ipy

%matplotlib inline

from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd


extension

Jupyter Notebooknにはextensionもあります。

下記の記事にまとまっているので割愛します。

extensionを追加してもっと快適なJupyter環境を構築する

jupyter notebook extensions python-markdown(markdown + jinja2)


RISE

Jupyter Notebookでプレゼンができるようになるクールな拡張機能があります。

git clone https://github.com/damianavila/RISE

cd RISE
python setup.py install

ノートページの右上にスライドショーボタンが追加されます

ノートページのCell ToolbarボタンでSlideshowを選択すると、どこまでを一枚のスライドにするかなどが指定できます。


Jupyter Content Management Extensions

(3/21追記)

IBMが超便利な拡張機能を作ってくれたのを忘れていました。

これを入れるとjupyterからnotebookファイル内の全文検索ができます。

IBMの紹介blog

pipで公開されているので簡単にインストールできます。

pip install jupyter_cms

jupyter cms install --user -s
jupyter cms activate
jupyter notebook

jupyter cms activateしてからnotebookを立ち上げると、treeの画面にsearchボタンが追加されます。

配下のcodeの検索やコメントの検索もできるので再利用性が高まります。

検索もかなり柔軟にできます。

(プレビューまであるともっと嬉しいですが...)

その他、jupyter notebookでダッシュボードを作れる拡張機能なども用意されています。

JupyterDay NYCのスライド

github

(3/21追記ここまで)


Jupyter Notebookの使い方

良記事があります。

Jupyter事始め

(2016・4・13追記)

環境の切り替えはjupyter_environment_kernelsというのを入れるとはかどります。

こちらの素晴らしい記事で知りました。