MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法

目次

はじめに

これまで、

技術的なメモはWordやPowerPointで書いていましたが、

数式の書きにくさと、Markdownが使えないことで、

下記のような特徴を持つ

技術メモツールを探していました。

  • Markdown記法が使える

  • 数式をTex形式で入力できる

  • 画像をドラッグ&ドロップできる

  • できれば、無料でオープンソース

 

そこで色々調べた所、

Jupyter (iPython) Notebookというツールを使うことで、

上記の目的を達成した、

快適な技術ノート環境を立ち上げることができたので紹介します。

 

Jupyter Notebook (iPython Notebook)とは?

Jupyter Notebookは元々、

Pythonのインタラクティブ実行環境(iPython)を

ブラウザ上で実行するためのツールでしたが、

進化が進み、Python以外の言語も利用可能になったので、

最近はJupyter Notebookという名前で開発が進められています。

 

このJyupyter Notebookは最近のデータ解析ブームにおいて、

簡単にデータ解析を実施し、

その結果を再利用しやすく、かつ、

配布しやすい形で残すことができるため、

利用が広まっています。

 

またすばらしい点として、

Jupyter notebookの.ipynbファイルを

GitHub上にアップロードすると、

自動的にグラフや式などがレンダリングされます。

アルゴリズムの確認&ドキュメンタリー作成などに便利ですね。

 

一方、Jypyterはプログラム実行環境だけでなく、

Markdown表示機能や、Tex記法による数式表示機能もあるので、

技術ノートツールとして使うことも可能です。

 

インストール

基本的には、

どのOSでもpipでインストールできます。

(Windows, Ubuntu, Macで確認済み)

$ pip install jupyter

 

ubuntuにインストールする場合は、

pipでインストールする前に、

下記のコマンドで依存ライブラリをインストールする必要があります。

$ sudo apt-get install build-essential python3-dev

 

Notebookデータのバックアップ&マルチアカウントアクセスする設定

JupyterのNotebookのデータは、

.ipynbという拡張子のファイルで保存されますが、

このファイルをDropboxで管理すると、

すべての端末で共有されますし、

バックアップやバージョン管理が自動で実施されるので、

非常に便利です。

db.tt

  

.ipynbファイルは、

普通に保存するとターミナルで

Jupyterを起動したディレクトリに保存されてしまうので、

.bashrcに下記のようなエイリアスを作って

Jupyterを起動すると、常にDropbox内でJupyterが起動し、

ipynbファイルがDropboxの中に保存されて便利です。

$ alias iPythonNotebook='cd ~/Dropbox/ipythondir;jupyter notebook'

 

Jupyter Notebookのショートカット

下記のショートカットを使いこなすと、

よりJupyterを使いやすくなります。

(ショートカットがVimっぽいのがいいですね)

コマンドモードのショートカット

hを押すと、

ショートカットカットの一覧が見れるので、

ショートカットを忘れたら、確認できます。

f:id:meison_amsl:20170514034112p:plain

  

内容 ショートカット
セルをマークダウンモードに m
セルの削除 dd
上のセルに移動 k
下のセルに移動 j
スクロールダウン Space
スクロールアップ Shift+Space

Editモードのショートカット

内容 ショートカット
セルを実行して、下にセルをInsertする Alt+Enter
関数のドキュメントを見る 関数が緑色になった時、Shift+Tab
objのDocstringを見る objの後ろに?をつけて実行
objのコードを見る objの後ろに??をつけて実行
objのコードを見る ?obj.*
_dh Notebookのカレントディレクトリ
_oh セル番号と実行結果の辞書
!cmd OSのcmdを実行
!!cmd OSのcmdの実行結果をリストに格納する
%%bash セルの中の内容をbashで実行する

 

セルを上から全部実行する

たまにセルを上から実行したい場合がありますが、

その時は、Cell-> Run Allを選びましょう。

(なぜかショートカットが無い。。。)

 

Markdownで文章を入力する

Jupyter NotebookはデフォルトでMarkdownを表示する機能があります。

各セルで、ツールバーのタブをMarkdownにして、

Markdown記法を入力し、Ctrl+Enterを押すと、

下記のようにMarkdown記法による文章が表示されます。

f:id:meison_amsl:20160220180811p:plain

 

見出しのナンバリングなども自動で実施されるので、

シンプルなレポートぐらいは作れそうですね。

   

数式を入力する

Jupyter notebookで数式を入力したい場合は、

Markdownモードで、2つの$$で前後を囲った間に、

Latex記法で数式を書くと、数式が表示されます。

$$ \sqrt{a+b} $$

f:id:meison_amsl:20160214222214p:plain

 

しかし、上記の方法で複数行の数式などを書いた時は、

なぜかGitHub上で数式が上手く表示されないので、

Github上でちゃんと表示させたい場合は

\begin{equation*}
# math
\end{equation*}

のようにちゃんとtexの記法で入力したほうがよさそうです。

   

数式の計算をする

以前紹介した、Pythonの数式演算ライブラリsympyを使用すれば、

Jupyter上で数式の計算も出来ます。

myenigma.hatenablog.com

 

下記のように数式をprintすると、

自動で数式表示されるので非常に便利です。

f:id:meison_amsl:20160220170751p:plain

 

 

画像をドロップアンドドラッグで挿入できるようにする

技術メモを作っている際に、

画像データをWordのように

文章にドラッグアンドドロップで追加したい場合が多いですが、

Markdownの場合、

いちいちリンクを貼り付けなければならないため面倒でした。

 

しかし、下記のJupyter Notebooksのextensionをインストールすることで、

様々な拡張機能が使えるようになり、

画像のドラッグアンドドロップもできるようになります。

 

インストールは、READMEにある通り、

下記のコマンドでOKです。

(下記のインストールをする場合は

Jupyter Notebookのプロセスはkillしておきましょう)

$ pip install https://github.com/ipython-contrib/IPython-notebook-extensions/archive/master.zip --user

 

続いて、Jupyter Notebookを起動し、

URLに/nbextensions/を追加して、移動すると

下記のような拡張機能の追加画面に移動します。

f:id:meison_amsl:20160214214741p:plain

 

あとは、Drag and DropのチェックボタンをONして下さい。

すると、Jupyter Notebookで画像をドラッグアンドドロップすると、

画像が挿入されるようになります。

f:id:meison_amsl:20160214215328p:plain

ちなみに画像ファイルはD&Dすると

.ipynbファイルと

同じ場所にコピーされます。

 

目次を見出し情報から自動生成する

f:id:meison_amsl:20160224210037p:plain

上記のIPython-notebook-extensionsの一機能を使うことで、

Markdownの見出し情報から、

上記のように自動で目次を生成することができます。

 

使い方としては、

先ほどの/nbextensions/の設定画面で、

Table Contents(2)にチェックをいれます。

加えて、同じ設定画面で、

"Add a Table of Contents at the top of the notebook"

にチェックをいれます。

 

最後に下記のように

目次ウインドウを表示させて、

tボタンを押すと、

自動的に目次情報が先頭のセルに追加されます。

f:id:meison_amsl:20160224210522p:plain

 

レポートタイトルを入力する方法

残念ながら、今のところ

レポートのタイトルのようなものを

入力するツールは見つかっていませんが、

JupyterのMarkdownのモードでは、

HTMLを入力するとマークアップされた文字を入力できます。

この機能を使うことで、レポートタイトルっぽい文字を表示できました。

 

例えば、下記のようなhtmlを

JupyterのMarkdownモードのセルに入力すると、

<br />

<div style="text-align: center;">
<font size="7">Jupyter Report</font>
</div>
<br />
<div style="text-align: right;">
<font size="4">Atsushi Sakai</font>
</div>

<br />

下記のように表示されます。

f:id:meison_amsl:20160224224406p:plain

 

PDFに出力する

上記の方法である程度のレポート形式の技術ノートを作ることは

できるはずなので、あとはPDFなどに変換すれば、

プログラマ以外の他の人と資料を共有することができます。

 

Macの場合

Jupyter NotebookのデータをPDFに変換する方法は色々ありますが、

Macで一番シンプルなのは、Jupyter Notebookをブラウザで開いた状態で、

Ctrl-Pで、Macの標準機能でPDFに変換するのが一番簡単だと思います。

 

下記のように詳細設定の部分で、ヘッダーとフッターに

時刻や、ファイル名、ページなどを入力する設定ができます。

f:id:meison_amsl:20160220182656p:plain 

 

あとは普通にPDFを出力すると、

下記のようにそれなりのレポートがPDFで作成できます。

f:id:meison_amsl:20160220182742p:plain

 

Jupyterでプレゼン資料を作る方法

下記を参照下さい。

myenigma.hatenablog.com

 

JupyterのサーバをHerokuの無料枠で構築する方法

下記を参照下さい。

myenigma.hatenablog.com

 

Jupyter Markdown数式の入力テンプレート

最近、数式の入力はすべてJupyterで実施していますが、

複雑でいつもググっている数式コマンドをメモとして残しておきます。

行列

\begin{equation*}
\begin{bmatrix}
1 & 0 & \cdots \\
0 & 1 & \cdots \\
\vdots & \vdots & \ddots \\
-1 & 0 & \cdots \\
0 & -1 & \cdots \\
\vdots & \vdots & \ddots \\
\end{bmatrix}
\end{equation*}

表示 f:id:meison_amsl:20170207070929p:plain

 

数式参考リンク

 

できれば改善してもらいたい部分

もう少しで完全にWordをおさらばできそうなので、

下記のような機能を実現してもらいたいですね。

  • 参考文献管理

  • 図のタイトル入力

  • 自動図番号割り当て

上記のような機能を実現できる拡張などを知っている方は

コメントなどで教えて頂けると幸いです。

(Python使えるから、自分で作ればいいのか。。。)

 

vimユーザのためのJupyterプラグイン

下記を参照下さい

lambdalisue.hatenablog.com

上記のプラグインを使うことで、

Jupyterのエディタの部分でvimのキーバインドが使えます。

 

Jupyter Notebook上でコードの処理時間や消費メモリを計測する

Jupyter notebookでは、

%timeit code

の後にコードを記述すると、そのコードの計算時間を計測してくれます。

f:id:meison_amsl:20170529042928p:plain

 

加えて、memotry profilerというパッケージをインストールして、

$ pip3 install memory_profiler

ipythonのセッションが始まったら、このパッケージをロードすると、

%load_ext memory_profiler

下記のコマンドでメモリの消費量も確認できます。

%memeit code

f:id:meison_amsl:20211231142516p:plain

 

コードやアルゴリズムのレポートに便利ですね。

moqada.hatenablog.com

towardsdatascience.com

stackoverflow.com

 

Jupyter上でモジュールや関数のdocstringを確認する

Jupyter notebookでは、

モジュールや関数の後ろに?(はてな)をつけると、

docstringを表示してくれるので、

マニュアル確認も簡単です。

f:id:meison_amsl:20170529045921p:plain

 

Jupyter notebookを使う時に気をつけるべきこと

下記の記事を参照ください。

myenigma.hatenablog.com

 

更にJupyterを学びたい人は

下記の資料がおすすめです。

 

また、どうしても解決できない問題などが

ある場合は下記のようなQ&Aサイトで質問してみると、

かなりの確率で回答がもらえると思います。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com