Jupyter + RISE による
ライブデモ&プレゼンテーション

2015/05/30 Python東海第27回勉強会
後藤 俊介 ( @antimon2 )

自己紹介

  • 名前:後藤 俊介
  • 所属:株式会社コスモルート クラウドR&Dグループ 数学班
  • 言語:Ruby, JavaScript, Python, Julia, Haxe, …
  • twitter: @antimon2
  • Facebook: antimon2
  • GitHub: antimon2

Jupyter とは?

  • IPython Notebook
  • Webブラウザ(やその他のプラットフォーム)上で動く REPL。
  • Python の他に、Julia, Ruby, Haskell, … 等、様々な「カーネル」を利用可能。
  • Markdown で文章(メモ)も記述可能。$\TeX$ 記法で数式も記述可能。
  • reveal.js を利用したスライドにも変換可能。

このスライドは、Jupyter + IJulia で作成しています。

RISE とは?

このスライドは、Jupyter + RISE でリアルタイム表示しています。

デモ

Julia のコード実行サンプル

In [1]:
println(join(map(ucfirst, ["hello", "world"]), ", "), '!')
Hello, World!
In [2]:
# solve x + y = 8, 2x + 4y = 26
A = [1 1; 2 4]
b = [8, 26]
A \ b
Out[2]:
2-element Array{Float64,1}:
 3.0
 5.0
In [3]:
# Pkg.add("Gadfly")
using Gadfly
# ↑ v0.4.0-dev だと ↓ に WARNING が出力されてしまう
In [4]:
set_default_plot_size(7inch, 7inch/golden);
plot(x=rand(10), y=rand(10))
Out[4]:
x -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 -1.00 -0.95 -0.90 -0.85 -0.80 -0.75 -0.70 -0.65 -0.60 -0.55 -0.50 -0.45 -0.40 -0.35 -0.30 -0.25 -0.20 -0.15 -0.10 -0.05 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 -1 0 1 2 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 -1.00 -0.95 -0.90 -0.85 -0.80 -0.75 -0.70 -0.65 -0.60 -0.55 -0.50 -0.45 -0.40 -0.35 -0.30 -0.25 -0.20 -0.15 -0.10 -0.05 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 -1 0 1 2 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 y

$\TeX$ 数式のサンプル

インライン: $\sum_{n=1}^{\infty} {1 \over n} = 2$, $P(x, \sigma, \mu) = \frac{1}{\sigma \sqrt{2 \pi}} e^{-(x-\mu)^2/2\sigma^2}$

ブロック: $$\sum\limits_{n=1}^{\infty} {1 \over n} = 2\\ P(x, \sigma, \mu) = \frac{1}{\sigma \sqrt{2 \pi}} e^{-(x-\mu)^2/2\sigma^2}$$

環境構築

環境

  • Mac OSX 10.8.5/10.9.5/10.10.x
  • Homebrew
  • Python 2.7.9 / 3.4.3
  • Julia 0.3.8 / 0.4.0-dev

ここに IPython・IJulia・RISE をインストール。

IPython のインストール

Jupyter(=IPython Notebook)を利用するために
依存関係含めてまとめてインストール ↓

$ pip install 'ipython[notebook]'

または(古いバージョンがインストール済の場合)

$ pip install --upgrade 'ipython[notebook]'

確認

$ ipython --version
3.1.0

Python カーネルの(追加)設定

デフォルトで使用する方(Jupyter の起動に使う方)じゃない方の Python のカーネル設定を追加。

例:デフォルトを Python2、Python3 のカーネルを追加する場合。

$ cd ~/.ipython/kernels/
$ mkdir -p python3 && cd python3
$ vi kernel.json

kernel.json(サンプル):

{
  "display_name": "IPython (Python 3)",
  "language": "python",
  "argv": [
    "/path/to/user_home/.pyenv/versions/3.4.3/bin/python",
    "-c", "from IPython.kernel.zmq.kernelapp import main; main()",
    "-f", "{connection_file}"
  ],
  "codemirror_mode": {
    "version": 2,
    "name": "ipython"
  }
}

IJulia のインストール・設定

各バージョンの Julia ごとに REPL で以下を実施:

Julia> Pkg.add("IJulia")

※古いバージョンがインストール済なら↓

Julia> Pkg.update()

※最新バージョンがインストール済で IPython を新しくした場合は↓

Julia> Pkg.build("IJulia")

確認(Julia の REPL から)。

Julia> Pkg.installed()["IJulia"]
v"0.2.5"

RISE のインストール

$ git clone https://github.com/damianavila/RISE.git
$ cd RISE
$ python setup.py install

CSSの調整

※お好みに応じて。

vi ~/.ipython/nbextensions/livereveal/main.css

/* …《中略、最後の方に以下を追記》 */
.reveal .slides div.text_cell {
  font-size: inherit;
}
.reveal .slides div.text_cell pre {
  line-height: 1.5em;
}

起動

$ ipython notebook

これだけ。

※ 実行した場所がワークディレクトリになるので注意。
 ワークディレクトリを指定する場合は↓

$ ipython notebook --notebook-dir /path/to/work_directory

スライド編集・表示

1. Cell toolbar の [Slideshow] を選択

In [8]:
# Pkg.add("Images")
using Images
imread("celltool_slideshow.png")
Out[8]:

2. 各セル右上の [Slide Type] を設定

In [6]:
imread("slidetypes.png")
Out[6]:

3. ツールバーの [Enter/Exit Live Reveal Slideshow] ボタンクリック

⇒RISE によるリアルタイムスライドビューに移行!

In [7]:
imread("enter_slideshow_btn.png")
Out[7]:

スライド公開

nbviewer を利用すると Jupyter で作成したスライドを簡単に公開可能。

1. .ipynb ファイルのアップロード

Jupyter で保存した .ipynb ファイルを GitHub/Gist/その他ネット上 に公開する。

《実演》 ⇒ https://gist.github.com/antimon2/2be8a00524deadb8e0a9

2. nbviewer に登録

GitHubのリポジトリ名/GistID/URL をテキストフィールドに入力して [GO!] ボタンクリック。

《実演》 ⇒ https://nbviewer.jupyter.org/gist/antimon2/2be8a00524deadb8e0a9

3. スライド変換結果を共有

表示されたページの [View as Slides] ボタンでスライド表示。
その時の URL(これがスライドの Permalink になる)を共有。

《実演》 ⇒ https://nbviewer.jupyter.org/format/slides/gist/antimon2/2be8a00524deadb8e0a9

参考:ファイルを更新した場合

一度変換したら10分くらいはキャッシュされて再変換されない。
URL の後ろに ?flush_cache=true をつけて再表示すれば再変換される。

ref: FAQ / I want to remove/update a notebook from Notebook Viewer.

参考資料

Julia 関連

おしまい

ご清聴ありがとうございました。