DISTRICT 37

なにか

Jupyterの構築

いやぁ、捗りますね。今回はJupyterをインストールしてさらにRを使える様にする所までを。

Jupyterとは

前の名をipythonといい、pythonのコーティングをインタラクティブに行うものだった。それだけに飽きたらなかった凄腕のハッカー達がrubyもやらせろとかRもやらせろとかその他もろもろをできるようにしたのが始まり。notebookを使用するとインタラクティブな環境だけでなく、webサービスとして立ち上げて、ブラウザ上でコーディングを可能にするアプリケーションがこのJupyterだ。

Jupyterのインストール

インストールは簡単。pipで一撃

pip install jupyter

実行も簡単

jupyter notebook

このコマンドを打つとJupyterが起動し、自動的にブラウザも起動する。デフォルトではポート8888のローカルホストへと接続するとJupyterコマンドを実行したディレクトリが見えるようになる。基本的にはpython用なのだが、後述のKernelを言語ごとに入れるとそれぞれJupyter上で使える様になる。

JupyterでRを使えるようにする

JupyterでRを使えるようにするにはIRKernelを入れる必要がある。このサイトに手順が載っているのでその通りにやれば問題ない。

Installation · IRkernel

libzmq3-devパッケージをaptでインストール

sudo apt install libzmq3-dev

RのIRKernelパッケージをインストール

install.packages(c('rzmq','repr','IRkernel','IRdisplay'),
                 repos = c('http://irkernel.github.io/', getOption('repos')),
                 type = 'source')

インストールできたら、続けてIRkernelを有効に

IRkernel::installspec()

最後のコマンドの実行後はなんとも手ごたえがないのだが、これでjupyter notebookを起動するとRが使えるようになっている。Jupyterに適用できるカーネルはほかにもrubyとかperlとかscalaとか色々ある。下記リンクでたくさん紹介されているので使いたいものがあれば。

qiita.com

githubとgist

githubにファイルをアップするとjupyterの結果がそのまま表示される。まぁJupyterで作られるファイルはただのJSONだからね、できちゃうよね。ちなみにgistでも同じように表示される。gistに置いておけばこんな感じでブログに貼り付けることもできちゃう。Rのggplotにしろpythonのmatplotlibにしろ、ソースコードからプロットされた画像とかは勝手に描画してくれるのでアップロードも必要なくなるのがいい。

jupyterを普段動かすディレクトリをgithubでのリポジトリとして管理しておく使い方とかがいいかもしれない。

terminalも使える

なんとterminalも使える。画面端のnewを押すとterminalが出てくるので、それを押すとブラウザ内にterminalが現れる。これが便利すぎて濡れた。

f:id:dragstarclassic:20160518212806p:plain

magic command

jupyterは基本的にはその言語のソースを書いていくだけなのだが、ちょっと別の言語で書きたいとか、bashしたいとか色々できるコマンドがmagic commandだ。前項のterminalの存在に気付く前はmagic commandを使ってbashしていた。pythonやりながらRをやったりとかあれこれできる。magic commandはいろいろあるので下記リンクを参照。

マジックコマンドのリンク

Built-in magic commands — IPython 3.2.1 documentation

ゲストOSで起動させてホストOSで動かす

UbuntuVMで動かしてJupyterを起動してる方々向けに。VMといってもVirtualBox限定ですが、おそらくほかのVMソフトでも同じことができるかと。

ネットワークの設定 → NAT → ポートフォワーディング f:id:dragstarclassic:20160518213719p:plain

ポートフォワードの設定。特定のポートをゲストOSのポートにフォワードする f:id:dragstarclassic:20160518213809p:plain

んで、Jupyterの実行時にオプションを付ける。

jupyter notebook --ip=0.0.0.0

こんな感じで設定しておけばホストOS側のブラウザからJupyterを使える。もちろん演算はゲストOS側となりますが(VMなので結局はホスト側)ですが、描画とかはホスト側のマシンパワーを余すことなく使えるようにになる。

まとめ

いいですねjupyter notebook。pythonでデータの前処理を行ってRで分析、そしてmarkdownで結果のレポートをするとかバッチ処理的な事も行うハイブリッドな実行環境を作ることも可能になる気がする。しかもPDFとしてダウンロードする機能が標準であるので提出資料を作るのにもよさげです。