IPython Notebook の 紹 介 と cerlでの 利 用 計 画 2015/09/15 T. Obina KEKB 制 御 打 ち 合 わせ
導 入 を 検 討 した 動 機 :High Level Application リアルタイム 表 示 や 基 本 的 な 操 作 パネルは CSS でOK 高 レベルアプリケーションをどうするか??? 現 在 のcERL/PF/PF-ARでは SAD, root, Matlab などが 使 用 可 能 お 好 きなモノを お 好 きなように 使 って 頂 く 方 針 CSS からの Launcher もあります(GUI が 必 要 なときは X 端 末 エミュ レータが 必 要 ) ちょっと 使 いにくい 例 : QE( 量 子 効 率 ) 測 定 は python script + gnuplot でやっていた 入 射 部 のマッチングは 宮 島 さん 作 成 の Matlab LCS 実 験 では 本 田 さん 赤 木 さん 小 菅 さん 作 成 のroot LCSバンプ 制 御 は 原 田 さん 作 成 の SAD Script これらの 既 存 ソフトウェアを CSS に 移 行 する 必 要 性 は 高 くない Launcher と 操 作 マニュアルは 必 要 実 際 に 移 植 するのはかなり 大 変 現 実 的 にはSADだが 軌 道 計 算 が 不 要 な 場 合 にはちょっと
QE 測 定 オプティクスマッチング 例 QE( 量 子 効 率 ) 測 定 例 : 他 のスクリプトで 測 定 を 実 施 して データをファイ ルに 保 存 gnuplot( X 端 末 使 用 ) 5/28 6/25 マッチング 例 :Matlab script やはりX 端 末 測 定 スクリプトと 表 示 は 一 体 caput/get 必 須 SVDや nonlinear fit など
LCS 実 験 測 定 例 本 田 さん 赤 木 さん 小 菅 さん 作 成 の root ファイル 保 存 は 別 スクリプトで rootで 解 析 表 示 表 示 は X 端 末 使 用
ツール 選 択 の 指 針 : 上 から 順 に 検 討 するべき 本 来 なら 開 発 前 に 関 係 者 全 員 に 周 知 すべき 図 のはずだが 単 機 能 高 速 リアルタイム EPICS IOC Database で 構 成 (DB LINKベース) EPICS IOC Sequencer (CA LINKベース) CSS で 表 示 EPICS Application on IOC or Linux Server Sequence or EPICS Client Application in C/C++/Scripts 多 機 能 低 速 非 リアルタイム EPICS Application on Client (Linux or Windows) Scripts (SAD, ROOT, Python, Matlab, etc) CSS Scripts (Java,Python) CSS or Application で 表 示
やりたいことは 何 か Matlabのように 対 話 的 な 解 析 がしたい オフラインのデータ 解 析 あるいはスクリプト 内 から caget/put してデー タを 取 得 しながら 表 示 したい ( 可 能 であれば)DBと 接 続 したい データを 確 認 しながら 不 要 データを 除 外 したりフィット 区 間 を 決 めた りしたい その 他 SVDなど 各 種 計 算 ルーチンのデバッグ 作 業 は 最 小 限 にしたい ネット 上 に 情 報 が 多 くあると 嬉 しい できれば x 端 末 は 避 けたい これらの 要 望 をSADで 実 現 するのは 難 しい(Expertなら 不 可 能 ではない?) しかし Matlab は 有 償!!しかも 高 価 Academic discount 適 用 ならば 安 価 なのに これらの 要 望 解 決 手 段 として IPython Notebook を 評 価 してみた IPython Notebook の 環 境 をcERLおよびPFに 整 備 した 高 速 応 答 やリアルタイム 性 (1~5 秒 程 度 )が 必 要 なモノはCSSに 任 せ る 方 針
もちろん Python です IPython Notebook とは IPython : Interactive Python の 略 で 通 常 はコマンドラインで 使 う 対 話 的 シェル 環 境 のこと タブ 補 完 便 利 なコマンド 類 (magic command) %who, %whos, %who_ls %reset %magic 容 易 なヘルプ 表 示?command or command? でのヘルプ 表 示 lsとかcd 等 も 使 える: 標 準 pythonでは 無 理
who, whos: 変 数 の 表 示 IPython : magic command 例 whoで 変 数 の 一 覧 表 示 whosでタイプまで 含 めて 表 示 タブ 補 完 ヘルプ 表 示 ここで tab 入 力 すると 補 完 候 補 が 出 る command? でヘルプ(docstring) 表 示
reset その 他 reset : ユーザが 定 義 した namespace をクリア その 他 にも 色 々 便 利 な 機 能 はありますが ここで 紹 介 していると 時 間 が 足 りなくなるのでここまで Google 先 生 に 聞 いて 下 さい 山 のように 出 てきます
余 談 :デフォルトでの 行 間 デフォルトでは 下 のように 出 力 が1 行 おきになります ずいぶん 前 に 使 ったとき 個 人 的 には 便 利 ではあるが ヒストリ 番 号 も 要 ら ないし デフォルトでは 行 間 が 空 くのも 気 に 食 わない と 思 っていました プロットは matplotlib を 使 っていましたが X 端 末 が 必 須 だし 遅 いし 表 示 は あまり 美 しくないしーーーーーー 後 述 のNotebookで 考 えが 変 わります 行 間 については ipython --nosep で 起 動 すれば 解 決 です
IPython Notebook
IPython Notebookの 機 能 Webブラウザ 上 での 対 話 的 実 行 環 境 コメント 記 述 可 能 Texフォーマットでの 数 式 入 力 可 html, restructuredtext, Markdown 記 法 なども 使 用 可 能 日 本 語 もOK デフォルトでの 保 存 は.ipynb フォーマット(XML) PDF, html, python script など 各 種 フォーマットに 変 換 可 能 公 開 共 有 が 容 易 cerlでの 例 は 後 ほど プロットした 画 像 は 別 ウィンドウで 表 示 することも 可 能 だが イン ラインでの 表 示 することもできる:こちらがお 勧 め nbviewer 公 開 共 有 サイト http://nbviewer.ipython.org/ Github/Gist に 上 げたipynbファイルを 共 有 するサイト
仕 組 み IPython : Decoupled two-process model で 構 築 されている 通 常 の( 古 典 的 な) REPL(Read-Evaluate-Print Loop) の 仕 組 みを 拡 張 し Evaluation を 独 立 したプロセス(kernel)として 実 装 kernel は client からの 要 求 を 処 理 し 結 果 を 返 す これによりIPython はTerminal,Qt console, Notebookなど 様 々なクライ アント 環 境 で 実 行 可 能 IPython Notebook の 場 合 IPython エンジン(kernel) + JSON によるデータ 通 信 (Web Browser) ベースとなるソフトウェア IPython zero-mq Tornado (web server) jquery Bootstrap (front-end framework) MathJax ( 数 式 表 示 ) Jinja2 (template engine) 並 列 化 も 可 能 だが 今 回 はパス
起 動 と 終 了 コマンドラインから ipython notebook 実 行 カーネルを 起 動 し デフォルトで localhost:8888 で listen する 自 動 的 にブラウザを 起 動 --no-browser オプションをつけるとカーネルの 起 動 のみ ポート 指 定 オプションあり ブラウザを 終 了 しても カーネルを 実 行 し 続 けることが 可 能 終 了 は Ctrl+C 2 回
まずは 簡 単 な 例 を 紹 介 cerl wiki に 記 載 (KEK 内 部 のみアクセス 可 能 ) http://pfconrg07.kek.jp:8082/trac/cerl/wiki/control/soft/ipython 最 初 に Web Browser 起 動 したときの 画 面 起 動 したディレクトリに 日 本 語 ファイルがあるとエラー 出 るので 注 意
新 しい Notebook の 作 成 :python2
新 notebook 入 力 画 面 デフォルトは Code Cell (Cell Cell Type から 変 更 可 能 ) Code :コード 入 力 Enterで 改 行 Shift+Enterで 実 行 Markdown :コメントなど LaTex, html 使 用 可 能 :Level1 ~ 6 まで Markdown や rest で 記 述 可 能 切 り 貼 りや 移 動 ( 順 序 変 更 ) 可 能
コード 入 力 最 初 の magic command はプロットした 図 を inline 表 示 するため 入 力 した 後 Shift+Enter で 実 行 される 実 行 中 は 左 のコマンド 番 号 が [*] になる 長 時 間 になって 途 中 で 止 めたいときは kernel メニューから 停 止 可 能 %matplotlib inline import numpy as np import matplotlib.pyplot as plt x = np.linspace(-1.2, 1.2) y = x**2 図 をインライン 表 示 定 番 のモジュールimport linspace は linear spacing で 配 列 を 生 成 (デフォルトで50 点 ) plt.plot(x,y,'bo-') pyplot.plt ではMatlab like なプロット 指 定 が 可 能 この 例 では 青 色 で シンボルは データ 間 は 線 で 繋 ぐ の 意
出 力 ブラウザ 内 に 結 果 が inline 表 示 される 次 のセルで 変 数 プロットや 前 の セルに 戻 って 実 行 も 可 能
他 のサンプルに 行 く 前 に NumPy について 説 明 NumPy : Numerical Python 特 徴 http://www.numpy.org/ ndarray (n-dimentional array) を 基 本 とした 多 次 元 配 列 高 速 演 算 (ベクトル スカラー) Broadcast 機 能 (サイズの 異 なる 配 列 同 士 の 演 算 ) ループを 記 載 しない 配 列 計 算 行 列 演 算 乱 数 フーリエ 変 換 など 基 礎 的 な 数 学 演 算 C/C++, Fortran へのインターフェース IPython Notebook や scipy, pylab, pandas など 各 種 データ 解 析 を する 際 にはこのnumpyが 基 本 となっている 典 型 的 には import numpy as np としてから 使 用 する Matlab/Octave ユーザであれば どうしても Matlab like に 使 いたいなら from pylab import * Numpy for matlab users というページもあるので 関 数 を 対 応 させながら 見 ると 楽
ndarray In [1]: import numpy as np In [2]: arr = np.array([[1,2,3],[4,5,6]]) In [3]: arr Out[3]: array([[1, 2, 3], [4, 5, 6]]) In [4]: whos 型 推 定 Variable Type Data/Info ------------------------------- arr ndarray 2x3: 6 elems, type `int64`, 48 bytes np module <module 'numpy' from '/ce<...>ages/numpy/ init.pyc'> In [5]: arr*3 各 要 素 の 定 数 倍 Out[5]: array([[ 3, 6, 9], [12, 15, 18]]) In [6]: arr[0] 配 列 要 素 へのアクセス Out[6]: array([1, 2, 3]) In [7]: arr[0][1:] 配 列 要 素 へのアクセス スライス 表 記 Out[7]: array([2, 3]) In [10]: arr2 = np.arange(12) arangeで 連 続 する 数 値 配 列 を 生 成 In [11]: arr2 Out[11]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) In [12]: arr2.reshape(3,4) 配 列 形 状 の 変 換 Out[12]: array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
その 他 のサンプル(KEK 内 のみ) http://pfconrg07.kek.jp:8082/trac/cerl/wiki/control/soft/ipython_example
Notebook 環 境 Jupyter は 多 言 語 対 応 http://jupyter.org/ 試 してみるなら: try.jupyter.org
膨 大 なサンプル
cerlでのセットアップ 記 録 http://pfconrg07.kek.jp:8082/trac/cerl/wiki/control/soft/ipython_setup KEK 内 からのみアクセス 可 Python 自 体 のコンパイルも 含 めて 実 施 した Tcl/Tk Python pip ATLAS/LAPACK Numpy Scilab, matplotlib Pandas, Pillow(PIL 後 継 ), Sympy EPICS PyVISA
cerl 環 境 での 使 用 計 画 まだ 試 験 段 階 みなさんへの 広 報 をし 始 めたところ ipywidgetsは(いまのところ)そんなに 魅 力 は 感 じていない GUIが 使 いたいなら CSS 使 っとけ (いずれ 手 のひらを 返 すかもしれませんが ) 使 用 形 態 :セキュリティ 問 題 もあり 悩 ましいところ サーバー 計 算 機 へログイン + X 端 末 Client 上 のwebブラウザ + SSH 転 送 Client 上 のwebブラウザ + パスワード 認 証 常 時 エンジンを 起 動 しておくべきか リモートマシンにログインしている 状 態 と 同 じなので 何 でもできる 利 点 でもありセキュリティ 上 は 欠 点 でもあり
おまけ
Python Data Analysis Library http://pandas.pydata.org/ Pandas Data Frame という 考 え 方 をメインにしている どちらかというと 統 計 処 理 向 け(Rの 代 替 で 使 っている 人 多 数 ) Time Series データは 扱 いやすい resample も 出 来 る stdev, mean, sum などの 統 計 処 理 はもちろん 可 能 データが 無 い 列 の 処 理 NaN 処 理 が 楽 データを drop / fill 可 能
Pandas DataFrame
IDE spyder 他 の 環 境 各 種 モジュールがパッケージされたもの Anaconda Enthought Canopy pythonxy EPICS CA が 無 しで 良 いならば お 手 軽 ( 追 加 インストールは 不 可 能 ではないが )
notebook converter コマンド ipython nbconvert --to でhtml, PDF, python script などに 変 換 可 能 これを 使 ってhtmlに 変 換 し そのまま web に 乗 せています