最近何かと目にするpython実行環境、jupyterを触ってみました。
私がいじり回すのは組み込み分野ですので概ねC/C++言語を使っているのですが、今後はUIを始め速度を要求しない処理はpythonにしようと考えています。pythonはきちんとしたメモリ管理機能やファイルシステムが必要ですが、すでにARM Linuxが組み込みに降りてきています。逆にARM Linuxのネットワークやファイルシステムと言った豊富なミドルウェアをC/C++で使いこなすのは少々骨が折れます。Pythonなら適任でしょう。
そういうわけで、最近はEclipse + Python3 + git でpythonを時々いじっています。さてそこに現れたjupyterは、何がおもしろいのでしょうか。
サーバ・クライアント型の実行環境
jupyterはサーバ・クライアント型の実行環境です。
ユーザーはクライアント画面を見ながらプログラムを編集し、実行するよう命令します。実行はサーバーで行われますので、ユーザーのコンピュータは軽い物でかまいません。しかし、クライアント・プログラムを走らせる必要があります。
じゃぁ、クライアント・プログラムはどのOSで走るのか、となるのですが、実はクライアント・プログラムはHTMLブラウザ上で走ります。ですので、jupyterのクライアントはOS非依存です。
jupyterの処理の基本単位はノートです。一つのノートはサーバ上では1つのファイルによって実現され、クライアント側ではブラウザ上の画面1枚によって表示されます。
セル
jupyterのノートはクライアント上ではセルという副単位に分割表示されます。
セルはノート上に上から下へと並びます。ユーザーはセルに一つの巨大なプログラムを入れても構いませんし、一つの巨大なプログラムを複数のセルに分割しても構いません。
実行はセル単位であり、「一つのセルだけ」「全部のセル」「選択中のセルから後ろ全部」といった指定が可能です。
セルの面白いところはその出力機能です。セルを実行した結果として画面出力が発生すると、それはセルの直後に行われます。この画面出力は、テキスト出力、成型済み数式出力、グラフ出力など多彩です。
また、セルにはpythonコードの外にマークダウン形式のテキストを書くことも可能です。これにより、技術解説を書き、プログラムを記述し、結果を埋め込むといった高度な文書を作成可能です
モジュール群
pythonを使う理由は、実際にはpython自身と言うよりも、それを取り巻く数え切れないほどのモジュール群にあります。
これらのモジュールは、数値演算、科学技術演算、科学技術用プロット機能、数式処理(!)、オーディオ信号処理、ネットワーク・アクセス、ニューラル・ネットと、多岐にわたります。実際、pythonはプログラマだけではなく、多くの研究者によってツールとして使われており、それがこの膨大なモジュール群となっています。
jupyterからはこれらのモジュールを利用できますが、たとえばプロット出力をそのままページ内に埋め込み表示するといったことが可能です。
インストール
jupyterは膨大なモジュールを使えるようにする環境であるため、利用するならそれらの環境を一挙にインストールする方が便利です。
一番簡単な方法はanacondaをインストールすることでしょう。anacondaはpythonやRによるデータ・サイエンス用のパッケージをまとめたプラットホームです。フリー版が存在し、しかもanacondaをインストールするだけでjutyperが使えるようになります。
私は例によってVM上のubuntuにインストールしました。インストール後、
$ jupyter notebook
と、コマンドラインからタイプすることでjupyterが起動します。jupyterはサーバーですので、表示されたURLを開くことで、jupyterのノートが開きます
まとめ
pythonは言語仕様に加えて膨大なモジュール群があるため、なかなか勉強がすすみません。こういうセットアップも使うのも手軽な処理系があれば、勉強がはかどるかもしれません。