最近自分の中で熱いIPython Notebookについてその魅力をまとめてみます。
インストールや簡単な使い方については公式の記述にしたがっていけば大丈夫なはずなので、興味の湧いた方はそちらを参考にしてぜひインストールして使ってみてください。
このエントリーはIPython Notebookを使ったことのない方やちょっと使ったけど何したらいいかよくわからん、という方に向けて書いており、具体的な使い方は他の方の記事や公式のドキュメントを参考にしてみてください。
#IPython Notebookで何ができるの?
IPython Notebookはウェブベースのインタラクティブな計算環境です。Notebook上ではコードとその実行結果、マークダウン記法でhtmlレンダリングされLaTeX記法で数式を挿入できるテキストセル、それからプロットやその他画像や動画、外部サイトの埋め込みなどのリッチな機能も使うことができます。
完成したノートブックからは他の形式に変換して出力することができて、HTMLやPDF、rst形式やPythonの実行ファイル(.py)に変換することが可能です。rstに変換すればSphinx等でTeXに変換することができるので、IPython Notebookでまとめたものをそのまま論文にすることも可能でしょう。
また、Reveal.jsを用いたスライドショーの機能もあり、live_revealという拡張機能を用いれば、スライド上でコードをその場で実演してみせる、といった使い方ができます。これについては以前軽く触れたことがあったのでリンクしておきます(IPython 3.0.0-dev、IPython Notebookで"LIVE"なHTMLプレゼンテーション)。その中ではdev-3.0バージョンでないと使えないようなことが書いてありあますが、live_revealの作者さんの努力により、ver2.3(stable)でも使えるようになっています。
さらに、作成したNotebookはGitHubの公開リポジトリに入れておけば、nbviewerというサイトから、そのファイルをHTMLに変換したものを誰でも見ることができるようになります。他の人が書いたものでより勉強しやすくなり、知の共有という面でも素晴らしいツールです。
参考:
- Announcements — IPython:
- The IPython notebook — IPython 2.3.0 documentation:
- Videos and Screencasts — IPython:
- http://nbviewer.ipython.org/github/ipython/ipython/blob/2.3.x/examples/Notebook/Index.ipynb
#IPython Notebookのいいところ
上に挙げたサイトを読んで見れば分かることですが、いくつか自分が使っていて、テキストエディタや統合環境を使うよりもいいなぁと感じた点を書きます。
##試行錯誤の過程が残せる
インタラクティブシェルを使ったり細かいプロトタイプのファイルをたくさん作ったりするよりは、結果も同じ場所に表示できるわけなので、いろいろなやり方の比較がしやすいと思います。
##トライアル・アンド・エラーが楽ちん
セルという小さな単位でプログラムを実行することができるので、工夫すれば少ない労力でバグを減らすことができます。また、小さくて手軽とはいえ、改行やコメントを含めた100行くらいまでは1つのセルに見やすく表示することもでき、このセルという概念は絶妙な落としどころだと思います。
##Markdown+LaTeX=最高のドキュメント作成環境
単にmarkdownのテキストエディタとしても優秀だと思います(というか今ipynbで書いてます)。セルという細かい単位で区切られているので、それを自由に並び替えることができ、編集は楽です。自分個人では研究ノートとしてもバリバリ使ってます。また、さすがSciPyのプロジェクトから生まれただけあって、LaTeXの記法はネイティブでサポートされています。TeXほど堅苦しくなく、その場で綺麗な数式として見ることができるので、ミスに気づくのが早く、エラーメッセージの山に埋もれる必要もなくなります。LaTeXの下書きとしての使い道もあるんではないかと思います(卒論では活躍する予定)。
##ショートカットがVim的
キーボードショートカットがVim的で使いやすいです。セルの編集をするときはEnterで編集モードに入り、Escで抜けることができます。j、kでセル間を移動できたりして、あんまりマウスに触れる必要がないので、内容に集中できる環境だと思います。もちろんショートカットのキーバインディングは変更することもできます。
##結果の共有が楽でクール
コードのコメントだけでなく、アルゴリズムの説明などもmarkdown記法で綺麗に詳しく書くことができるので、人に見せながら説明するときに最高に便利です。結果だけ見せるものでなく、ちゃんとコードも見せることになるので、細かいノウハウも共有できることでしょう。また、スライドショーの機能もあるので、より多くの人の前でも説明できます。それから、最初にも述べたように、nbviewerでIPython Notebookの環境がない人とも共有できます。
##(実は)他の言語も使える
Pythonだけでなく、Bashや最近開発が進むいいとこ取り言語のJulia、関数型言語のHaskell、スクリプト言語のRuby、PerlやR、Cythonのコードも混ぜて使うことができます。並列処理の強みも活かすと、一つのプラットフォームとしての活用も考えられて、しかもそれがドキュメント付きで共有できるのです!
最近では上のような多言語のサポートから"Python"の名がついたままなのはどうか、ということもあって"Jupyter"という新しい名前での開発が盛んに行われているようです。
(dev-3.0ではブラウザ上ではIPython notebookではなくJupyterとして立ち上がりますし、先ほどのnbviewerもJupyterの共有環境と銘打っています)
#IPython Notebookのもうちょっとなところ
いろいろといいところを述べてきましたが、まだ使い勝手がよくない、使いこなすのには難しいと思う点があるので、少し述べていこうと思います。良い解決策があれば教えていただきたいと思います。
##メモリ喰い
Vimなどのテキストエディタだけで開発するよりは、サーバーを立ち上げて、ブラウザを立ち上げて運用しているわけなので、CPUの使用率やメモリーの使用率は高くなります。まぁ、こればっかりはしょうがないかもしれません。
##スライドショーの環境としてはいまいち
スライドショーとしても使うことができると書きましたが、PowerPointやKeyNoteほど直感的に作ることができないので、完璧なスライドは期待できないかもしれません。また、見た目の調整は限られた選択肢しかありません。reveal.jsのデフォルトのテーマを適用することもできますが、6種類くらいですし、遷移アニメーションも4つくらいです。JavaScriptで書かれているので、自分で書けるならそれでいいのかもしれませんが、自分にはできないのでなんとかなるともっといいのになぁという感じです。もっと浸透してくればテーマの管理や種類も洗練されて、より使いやすくなるかもしれません。
#まとめ
このエントリーではあまり実際の使い方などについては触れませんでしたが、これは使いながら慣れていくものですし、その都度調べながらするのが一番だと思います。いいところとしてあげたように、簡単に解析の細かい部分が共有できるというのは素晴らしいことだと思いますし、この流れが主流になれば、研究のスピードや効率はずいぶん早くなるんじゃないかと期待しています。