Jupyterノートブック

はじめに

ノートブックは、対話型コンピューティングへのコンソールベースのアプローチを定性的に新しい方向に拡張し、計算プロセス全体をキャプチャするのに適したWebベースのアプリケーションを提供します:結果をコミュニケーションするように、コードの開発、文書化、実行が出来ます。Jupyter Notebookは2つのコンポーネントを組み合わせています:

Webアプリケーション: 説明文、数学、計算、リッチメディアの出力を組み合わせた対話的なオーサリング用のブラウザベースのツールです。

ノートブックドキュメント: 説明文、数学、画像およびリッチメディアのオブジェクト表現の入力と出力を含む、Webアプリケーションで表示可能なすべてのコンテンツ表現です。

参考

ノートブックとその依存関係のインストール方法については、 installation guide を参照して下さい。

Webアプリケーションの主な機能

  • 自動シンタックスハイライト、インデント、タブの保管とイントロスペクションによるコードのブラウザ内編集。
  • ブラウザからコードを実行し、生成したコードに計算結果を添付する機能。
  • HTML、LaTeX、PNG、SVGなどのリッチメディア表現を使用した計算結果の表示。例えば、matplotlib ライブラリによってレンダリングされたPublication-quality figureをインラインに含めることが出来ます。
  • コードの解説を提供できる Markdown マークアップ言語を使用したリッチテキストのブラウザ内編集は、プレーンテキストに限らずコードの解説を提供します。
  • LaTeXを使用してマークダウンセル内に簡単に数式表記を含めることができ、MathJax によってネイティブにレンダリングされます。

ノートブックドキュメント

ノートブックドキュメントには、インタラクティブ・セッションのインプットとアウトプットと、コードに付随する実行用ではない追加のテキストが含まれています。このようにして、Notebookファイルは、セッションの完全な計算記録として機能し、実行可能なコードを説明文、数学、および結果として生じるオブジェクトのリッチ表現とインタリーブすることができます。これらのドキュメントは内部的に JSON ファイルで、.ipynb 拡張子で保存されます。JSONはプレーンテキスト形式なので、バージョン管理や同僚との共有が可能です。

ノートブックは、nbconvert コマンドを使用して、HTML(ブログ投稿など)、reStructuredText、LaTeX、PDF、およびスライドショーなど、さまざまな静的フォーマットにエクスポートできます。

さらに、パブリックなURLから入手可能な .ipynb のノートブックドキュメントは、Jupyter Notebook Viewer (nbviewer)を介して共有することが出来ます。このサービスは、ノートブックドキュメントをURLからロードし、静的なWebページとしてレンダリングします。その結果は同僚や、Jupyterノートブック自体をインストールする必要なく他のユーザーにパブリックなブログ投稿として共有できます。つまり、nbviewer は単にWebサービスとしてに nbconvert するだけなので、nbviewerに依存することなく、nbconvertで独自の静的変換を行うことができます。

ノートブックサーバーの起動

次のコマンドを使ってコマンドラインからノートブックサーバーを起動することが出来ます:

jupyter notebook

これにより、ノートブックサーバに関する情報がコンソールに表示され、WEBブラウザが開き、WEBアプリケーションのURLが開きます(デフォルトは http://127.0.0.1:8888)。

Jupyterノートブック Webアプリケーションのランディングページである dashboard には、ノートブックディレクトリで現在利用可能なノートブックが表示されます(デフォルトでは、ノートブックサーバーが起動されたディレクトリ)。

New Notebook ボタンでダッシュボードから新しいノートブックを作成したり、既存のノートブックを開くことが出来ます。ノートブックリストのエリアに .ipyng のノートブックや標準の .py のPythonソースコードをドラッグアンドドロップすることも出来ます。

コマンドラインからノートブックサーバーを起動する時、jupyter notebook my_notebook.ipynb でダッシュボードをバイパスして、特定のノートブックを直接開くことが出来ます。拡張子がない場合、 .ipynb 拡張子が仮定されます。

開いてるノートブックの中にいるとき、File | Open… メニューオプションは新しいブラウザータブにダッシュボードを開き、ノートブックディレクトリから別のノートブックを開くか、新しいノートブックを作成します。

注釈

異なるディレクトリのノートブックで作業したい場合、同時にノートブックサーバーを起動することが出来ます。デフォルトでは、最初のノートブックサーバーは8888ポートで起動し、後のノートブックサーバーはそれに近いポートを検索します。—port オプションを使用してポートを手動で指定することも出来ます。

新しいノートブックドキュメントの作成

新しいノートブックはダッシュボードから、またはアクティブなノートブック内のFile‣Newメニューオプションを使っていつでも作成できます。新しいノートブックは同じディレクトリ内に作成され、新しいブラウザタブで開きます。また、ダッシュボードのノートブックリストに新しいエントリとして反映されます。

_images/new-notebook.gif

ノートブックを開く

開いているノートブックにはカーネルに接続された 正確なひとつ のインタラクティブなセッションがあり、ユーザーが送信したコードを実行して結果を返信します。このカーネルはWebブラウザウィンドウが閉じている場合はアクティブなままで、ダッシュボードから同じダッシュボードを開くとWebアプリケーションは同じカーネルに接続されます。ダッシュボードでは、アクティブなカーネルのノートブックには Shutdown ボタンがありますが、非アクティブなカーネルのノートブックの場合は Delete ボタンがあります。

他のクライアントが同じカーネルに接続する可能性があります。各カーネルが起動すると、ノートブックサーバーは次のようなメッセージをターミナルに出力します:

[NotebookApp] Kernel started: 87f7d2c0-13e3-43df-8bb8-1bd37aaf3373

この長い文字列はカーネルに接続するのに必要な情報を得るために十分なカーネルのIDです。ノートブックがIPythonカーネルを使用している場合、 %connect_info magic を実行することでこの接続データをみることも出来ます。同じID情報と他の詳細を表示します。

例えば、コマンドラインから 同じ カーネルに接続されたQt consoleを手動で起動したり、IDの一部を渡したりすることが出来ます:

$ jupyter qtconsole --existing 87f7d2c0

IDなしの場合、 —existing は直前に起動したカーネルに接続します。

IPythonカーネルでは、ノートブックの %qtconsole magic を実行して、同じカーネルに接続されたQtコンソールを開くことも出来ます。

ノートブックのユーザーインターフェース

新しいノートブック文章を作成する時、 ノートブック名 、メニューバーツールバー 、空の コードセル が表示されます。

ノートブック名: ノートブック文書の名前は、ページ上部、IP[y]: Notebook 横に表示されます。この名前は .ipynb ノートブック文書ファイルの名前に反映されます。ノートブック名をクリックすると名前を変更できるダイアログが表示されます。このようにブラウザで ”Untitled0” から “My first notebook” に変更すると、Untitled0.ipynb ファイルは My first notebook.ipynb に変更されます。

メニューバー: メニューバーには、ノートブックの機能を操作することが出来る様々なオプションが表示されます。

ツールバー: ツールバーはアイコンをクリックすることで、ノートブック内で頻繁に使用される操作を簡単に実行できます。

code cell: the default type of cell, read on for an explanation of cells

注釈

ノートブクバージョン4.1ではユーザーインターフェースにより複数のセルを選択することができます。メニューバーにある、 quick celltype selector は、選択範囲内のセルのタイプが一位ではないことを示すために複数のセルが選択されている場合にダッシュ - を表示します。クイックセレクタを使用して選択のタイプを変更し、現在選択されている全てのセルのタイプを変更することも出来ます。

ノートブック文書の構造

ノートブックは一連のセルで構成されています。セルは複数行のテキスト入力フィールドで、その内容は Shift-Enter で実行するか、ツールバーの’’Play’’ ボタン、またはメニューバーの Cell | Run をクリックして実行します。セルの実行動作はセルのタイプによって決まります。セルには、 code cellsmarkdown cellsraw cells の3種類があります。すべてのセルは code cells から始まりますが、そのタイプはツールバーのドロップダウン(最初は ‘’Code’’)、または keyboard shortcuts を使用して変更できます。

ノートブックで出来ることのさまざまな情報については、collection of examples を参照して下さい。

コードセル

コードセル を使用すると、完全な構文ハイライト表示とタブ補完で新しいコードを編集と書き込みができます。デフォルトでは、コードセルに関連付けれた言語はPythonですが、 JuliaR のような他の言語は cell magic commands を使って処理できます。

コードセルが実行されると、それに含まれるコードがノートブックに関連付けられたカーネルに送られます。この計算から返された結果は、セルの 出力 としてノートブックに表示されます。出力はテキストに限定されず、 matplitlib の図やHTMLテーブル(例えば、 pandas データ解析パッケージで使われるもの)を含む他の多くの出力形式も可能です。これはIPythonの リッチ表示 の機能として知られています。

参考

リッチ出力 のサンプルノートブック

マークダウンセル

リッチテキスト を使用して、説明的なテキストとコードを交互に使用して、文法的に計算プロセスを文書化することが出来ます。IPythonでは、これはマークダウン言語でテキストをマークアップすることで実現されます。対応するセルは マークダウンセル と呼ばれます。マークダウン言語はこのテキストマークアップを実行するシンプルな方法を提供します。つまり、強調するテキストの部分(イタリック体)、太字、フォームリストなどを指定することが出来ます。

ドキュメントの構造を提供する場合は、マークダウンの見出しを使用できます。マークダウンの見出しは、1〜6個のハッシュ # 記号 # と、スペースとセクションのタイトルで構成されます。マークダウンの見出しは、ノートブックのセクションのクリック可能なリンクに変換されます。また、PDFなどの他のドキュメント形式にエクスポートする際のヒントとしても使用されます。

マークダウンセルが実行されると、マークダウンコードは対応するフォーマットされたリッチテキストに変換されます。マークダウンは書式設定に任意のHTMLコードを使用できます。

マークダウンセル内では、標準のLaTex表記を使って、簡単な方法で 数学 を含めることも出来ます: インライン数学では $…$、表示された数学では $$…$$ です。マークダウンセグが実行されると、LaTeXの部分は高品質のタイポグラフィの式としてHTM出力に自動的にレンダリングされます。これはLaTeX機能の large subset をサポートする MathJax によって可能になりました。

\begin{equation}…\end{equation}\begin{align}…\end{align} のようなLaTeXtoAMS-LaTeX(amsmathパッケージ)で定義されている標準の数学環境も動作します。新しいLaTeXマクロは、\newcommand のような標準的な方法を使って、マークダウンセルの math delimitersの間に のどこにでも置くことによってで意義することが出来ます。これらの定義は残りのIPythonセッションで利用できます。

参考

Working with Markdown Cells のサンプルノートブック

生のセル

生の セルは 出力 を直接書き込むことができる場所を提供します。生のセルはノートブックで評価されません。 nbconvert を通過すると、生のセルは未変更の先のフォーマットに到着します。例えば、完全なLaTeXを生のセルに入力することが出来ます。生のセルは、nbconvertに変換後LaTeXによってのみレンダリングされます。

基本的なワークフロー

ノートブックでの通常のワークフローは、標準的なIPythonセッションと非常に似ていますが、%run マジックコマンドでスクリプトを再実行するのではなく、目的の結果が得られるまでまで複数の場所でセルを編集得できるという違いがあります。

通常は、計算上の問題を断片的に処理し、関連するアイデアをセルに整理し、前の部分が正しく動作するようにします。これまで必要だったように、特にそれらの一部が実行に時間がかかる場合は、計算をまとめて実行する必要があるスクリプトに分割するよりも、インタラクティブな検索のほうがはるかに便利です。

特定の瞬間に、完了に時間がかかりすぎる計算を中断する必要があるかもしれません。これは Kernel | Interrupt メニューオプション、または Ctrl-m i キーボードショートカットを使用します。同様に、Kernel | Restart メニューオプション、または Ctrl-m . ショートカットを使って、計算プロセス全体を再起動することが必要または望ましい場合があります。

ノートブックはメニューオプショの`File | Download as` から .ipynb または .py ファイルのいずれかでダウンロードできます。 .py オプションを選択するとすべてのリッチ出力が削除され、マークダウンセルの内容がコメントとして挿入されたPython .py スクリプトがダウンロードされます。

参考

Running Code in the Jupyter Notebook のサンプルノートブック

Notebook Basics のサンプルノートブック

キーボードショートカット

ノートブック内のすべてのアクションはマウスで実行できますが、もっとも一般的なものにはキーボードショートカットもあります。覚えておくべき基本的なショートカットは次のとおりです:

  • Shift-Enter: セルを実行
    現在のセルを実行し、出力がある場合はそれを表示し、下の次のセルにジャンプします。Shift-Enter が最後のセルで呼び出されると、新しいコードセルが作成されます。ノートブックでは、 Enter を押すだけで実行が矯正されるのではなく、現在のセルに新しい行が挿入されることに注意して下さい。Shift-EnterCell | Run メニュー項目をクリックすることに相当します。
  • Ctrl-Enter: 所定の位置で実行
    現在のセルを”ターミナルモード”のように実行します。出力は表示されますが、カーソルは現在のセルに 残ります 。実行後にセルの内容全体が選択されるので、入力を開始するだけで新しい入力だけがセルに表示されます。ノートブックに保存したくない追加のセルを作成する必要がなく、迅速な実験を実行したり、ファイルシステムの内容などを検索したりするのに便利です。
  • Alt-Enter: セルを実行して下に挿入
    現在のセルを実行し、出力を表示し、現在のセルと下のセル(存在する場合)の間に 新しい セルを挿入します。これはシーケンス Shift-EnterCtrl-m a のショートカットです。(Ctrl-m a は現在のセルの上に新しいセルを追加します)
  • EscEnter: コマンドモードと編集モード
    コマンドモードでは、キーボードショートカットを使用してノートブックの周りを簡単に移動できます。編集モードで、セル内のテキストを編集できます。

利用可能なショートカットの完全なりすとについては、ノートブックメニューの HelpKeyboard Shortcuts をクリックして下さい。

プロット

Jupyterノートブックの主な機能の一つは、実行中のコードセルの出力であるプロットを表示する機能です。IPythonカーネルは matplotlib のプロットライブラリとシームレスに連携してこの機能を提供するよう設計されています。具体的なプロットライブラの統合はカーネルの特徴です。

カーネルのインストール

Pythonカーネルををインストールする方法については IPython install page 参照して下さい。

のかの弦のカーネルは、IPython wiki にあります。これらは通常、ノートブックでカーネルを利用できるようにするために何を実行するのかを指示します。

ノートブックに署名する

ノートブックを開くときに信頼できないコードがユーザーの代わりに実行されるのを防ぐため、ノートブックにメタデータに保存された署名を追加します。ノートブックサーバーはノートブックが光られたときにこの署名を検証します。ノートブックのメタデータに格納されている署名が一致しない場合、javascriptおよびHTMLの出力はロード時に表示されず、セルを再実行して再生成する必要があります。

自分で実行したノートブックは すべて 信頼できるとみなされ、そのHTMLとjavascriptの出力はロード時に表示されます。

あなあは再実行することなく、HTMLやJavascriptの出力を確認する必要がある場合、あなたと共有しているノートブックや、IPython2.0より前に自分で書いたノートブックを、コマンドラインで明示的に信頼することが出来ます:

$ jupyter trust mynotebook.ipynb [other notebooks.ipynb]

これは各ノートブックに格納される新しい署名を生成するだけです。

あなたは新しいノートブック署名キーを制聖羽することが出来ます:

$ jupyter trust --reset

ブラウザの互換性

Jupyterノートブックは、次のブラウザの最新安定版によって正式にサポートされています:

  • Chrome
  • Safari
  • Firefox

これはおもにノートブックのWebSocketsと柔軟なボックスモデルの使用によるものです。

次のブラウザはサポートされていません:

  • Safari < 5
  • Firefox < 6
  • Chrome < 13
  • Opera (any): CSS issues, but execution might work
  • Internet Explorer < 10
  • Internet Explorer ≥ 10 (same as Opera)

SafariをHTTPSで使うと信頼できない証明書が動作しないことがわかります(WebSocketは失敗します)。