Jupyter Notebook

Jupyter Notebookは,PythonやR, Juliaなどのコードを書いたり実行したり,文章を書いたりするのに開発環境(Mathematicaのノートブックのようなもの)です。

anaconda/python をインストールしていれば,Jupyter Notebookももれなく使えます。

$ jupyter notebook

拡張機能のインストール

セルを畳んだりできるように拡張機能(Jupyter notebook extensions)のインストールをする。

$ conda install -c conda-forge jupyter_contrib_nbextensions
$ conda install -c conda-forge jupyter_nbextensions_configurator
$ jupyter nbextension enable codefolding/main
$ jupyter nbextensions_configurator enable

jupyter variants

  • jupyterlab
    • Project jupyter による jupyter notebookの後継版
    • 起動: $ jupyter lab
  • jupyter nteract
    • jupyter notebookの機能拡張版
    • インストール: $ conda install nteract_on_jupyter
    • 起動: $ jupyter nteract

Magic command

jupyter notebookのセルに%%%ではじまるコマンドを書くことで,いろいろな処理ができる。 (ただし,jupyterでRを使うときにはMagic commandは利用できない…みたい)

%run: 外部コマンドの実行

In [2]: % run somscript.py

%timeit: 実行時間を測る

In [3]: %timeit L=[n**3 for n in range(1000)]
In [4]: %%timeit
	L=[]
	for n in range(1000):
		L.append(n**3)

%paste, %cpaste: ペースト

Jupyter上へのペーストは%paste%cpasteを使う。

%%bash: shell scriptの実行

In [1]: %%bash
       echo $PATH

シェルコマンド

bashコマンドは!をコマンド名の頭につければjupyter notebook上で使える。変数への代入にも使える。 (ただし,こちらもjupyter labでは未対応…みたい)

%run: 外部コマンドの実行

In [2]: % run somscript.py

%timeit: 実行時間を測る

In [3]:
filelist=!ls
current=!pwd
!echo "hello"

以下でautomagicを有効にすれば,!は不要になる。

%automagic=True

各種設定

起動オプションはjupyter notebook ―helpで表示される。 オプションを指定するための設定ファイルを作りたいときは,まず以下のコマンドで設定ファイルを生成する。

$ jupyter notebook --generate-config

これで,~/.jupyter/jupyter_notebook_config.pyに設定ファイルができるので,必要に応じてこれをいじる。

tokenの指定

jupyter notebookに接続するときに入力を要求されるtokenを,事前に設定ファイルに登録したり,起動オプションで指定したりできる。

  • ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.token = 'xxxxx'
  • jupyter notebookの起動オプションでの指定
--NotebookApp.token='xxxxx'

キーバインディングを emacs styleにする

jupyter-emacskeysをインストール

$ pip install jupyter-emacskeys

Tips

Short Cut Key

コマンドモード(ESCを押す)で”h”を押すと一覧表示される

特定のセルを除いたシートを作る

  1. 除きたいセルにタグ(例えば,remove_cell)をつける。タグは,View/Cell Toolbar/Tagsで入力可能に。
  2. 以下でシートの変換
$ jupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags='{"remove_cell"}'

以下のように,入力や出力を消すための各種フィルタがある。

TagRemovePreprocessor.remove_input_tags
TagRemovePreprocessor.remove_single_output_tags
TagRemovePreprocessor.remove_all_outputs_tags

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

Rはhomebrew等で事前にインストールしておく。 Jupyter Notebook の起動前にRコンソールで以下を実行し,Jupyterに(R kernel)をインストールする。

$ r
> install.packages('devtools')
> devtools::install_github('IRkernel/IRkernel')
  # or devtools::install_local('IRkernel-master.tar.gz')
> IRkernel::installspec()  # to register the kernel in the current R installation

jupyter上でCodeの自動抽出

jupytext

  • jupyterでの保存時に,Code部分のみのファイルsomename.pyが生成される
  • Markdown部分の抽出も可能
  • 生成されたsomename.pyを修正すると,ipynbファイルの方にも反映される

Markdown と jupyter notebook形式の変換

LaTeXコマンド

英文コンテンツを日本語翻訳する

jupyter notebookのコンテンツをmarkdownで作りたい

gitでjupyter notebookのシートを管理する時に,merge/diff をするためのツール

git commit前に,シート内にある出力は全部消しておくと,厄介なことにはなりにくい。

コードブロックのクリア

jupyter notebook形式でテキストを作ったとき,テキストセルで作った説明文(問題文)は残して, コードセルに入力した解答や出力を全部消したいことがあるので,以下のスクリプトを作った。 ついでに,highlighter extensionを使って挿入されたhighlight tagも消している。

コード実行にスライドバーを利用したい

スライド対応にする

方法1: メニュー「View/Cell Toolbar/Slideshow」を選択すると,各セルをスライドにするとかしないとか選択できる。

最後に以下でスライドモードで表示を行う。

$ jupyter nbconvert <file name>.ipynb --to slides --post serve

方法2: RISE

jupyter の拡張機能RISEを使うとお手軽にスライド化できる。

$ conda install -c damianavila82 rise

jupyter notebook のメニューにスライド表示のボタンが出て,それをクリックすれば直ちにプレゼンを出来る。 プレゼン上でプログラムの実行もできる。 どのセルをスライドにするかは,方法1と同様にして選択する。

例えば,コンテンツがページからはみ出るときには,scroll barをつけられる。以下はカスタマイズ例。“Edit→Edit Notebook Metadata"を選択して,以下を追加。

  "rise": {
    "enable_chalkboard": true,
    "height": 768,
    "scroll": true,
    "transition": "slide",
    "width": 1024
  },

方法4: nbpresent

nbpresentにはスライド作成のいろいろな機能がある。

conda install -c conda-forge nbpresent

方法5: GitHub上で

GitHubにJupyter notebookをおくと,Jupyter Notebook Viewerで表示できる。プレゼン形式にも出来る。

コンテンツをweb application化する

Voilaを使うと,ソースコードは隠して,markdown部分と出力のみ見せられる。 スライダーなどでinteractive widget化しておくと,スライダーを操作しながらデモをできる。

インストール

$ conda install -c conda-forge voila
$ pip install voila-gridstack  

使う

$ voila some.ipynb

pdfを出力できるようにする

XeLaTeXをインスールしておくこと。

方法1: texに変換してからpdfにする

jupyter nbconvert --to latex notebook_name.ipynb

方法2: jupyterのメニューからpdfを出力したいときは,/usr/local/anaconda3/lib/python3.6/site-packages/nbconvert/templates/latex/base.tplxを修正。

--- base.tplx.org   2019-12-20 11:30:09.881902845 +0900
+++ base.tplx   2019-12-20 11:32:55.112929136 +0900
@@ -21,6 +21,10 @@
     \else
        \usepackage{fontspec}
     \fi
+    \usepackage{xeCJK}
+    \setCJKmainfont[BoldFont=IPAexGothic]{IPAexMincho}
+    \setCJKsansfont{IPAexGothic}
+    \setCJKmonofont{IPAGothic}

     % Basic figure setup, for now with no caption control since it's done
     % automatically by Pandoc (which extracts ![](path) syntax from Markdown).

問題点

Markdownに!()[]を使って埋め込んだ画像は出力されるが,htmlタグ"<img src="images/imagefile.png">で埋め込んだ画像は消えてなくなる。画像サイズを変えるにはhtmlタグを使わないといけないので困る。

  • 解決法1: notebookをmarkdown形式にして,markdownのビューア等でpdfにする
  • 解決法2: htmlタグをlatexコマンドに変える前処理をしてから変換する。

トラブル

Q. セルの分割(Ctr-shift-“minus”)を実行できない

日本語キーボードの問題らしい。 以下のサイトに書いてあるようににショートカット設定をする。

Jupyter Notebook Ctrl+Shift+- (splitting cell) does not work

いろいろ

$ brew cask install jupyter-notebook-viewer