IPython Notebook: 交互計算新時代

IPython Notebook: 交互計算新時代

在使用 Python/IPython, R, Matlab 等工具進行探索性數據分析時翠语,你是否經常會遇到以下情景:

在命令行中輸入了許多語句后暑劝,希望將其部分或全部保存至一個腳本文件中以便記錄計算過程汤徽。

腳本運行出錯煞聪,需要對腳本進行局部修改后繼續(xù)運行镰踏,但不想重新運行之前已執(zhí)行完的語句派草。

希望將詳細計算過程及結果與他人共享舱馅,以便與他人討論數據分析步驟或讓他人重復你的結果赘方。

希望在本地的臺式機或筆記本上對遠程服務器中的數據進行分析烧颖,卻不想將數據拷貝至本地。

傳統(tǒng)的交互計算平臺一般都以命令行的方式與數據分析者交互窄陡,即用戶每輸入一條語句炕淮,計算平臺返回相應的結果。 雖然它們在用戶體驗方面做了許多努力跳夭,諸如自動命令補全涂圆,彈出幫助文檔,命令歷史記錄等币叹,但在上文提到的這些情景下润歉,它們就顯得有些力不從心。IPython Notebook的出世颈抚,正彌補了傳統(tǒng)計算平臺的不足踩衩,為上述情景提供了快捷直觀的解決方案。

IPython Notebook 是一種新興的交互式數據分析與記錄工具贩汉,它定義了一種全新的計算文件格式驱富,其中包含了代碼,代碼說明以及每一步的計算輸出(數值或圖片等)雾鬼,也就是說這一個文件完整記錄了計算過程中的所有相關信息萌朱。此外,該文件還可以嵌入網絡視頻策菜,圖片,LaTeX公式等眾多副文本格式酒贬,實為交互計算又憨,記錄思維,傳播思想的好幫手锭吨。

簡介

安裝 Notebook

使用 Notebook

本地運行

遠程運行

共享與應用

用 IPython Notebook 寫博客

在教學科研中的應用

總結

相關鏈接

簡介

IPython Notebook 既是一個交互計算平臺蠢莺,又是一個記錄計算過程的「筆記本」。它由服務端和客戶端兩部分組成零如,其中服務端負責代碼的解釋與計算躏将,而客戶端負責與用戶進行交互。 服務端可以運行在本機也可以運行在遠程服務器考蕾,包含負責運算的 IPython kernel (與QT Console的 kernel 相同) 以及一個 HTTP/S 服務器 (Tornado)祸憋。 而客戶端則是一個指向服務端地址的瀏覽器頁面,負責接受用戶的輸入并負責渲染輸出肖卧。

千萬不要小看了這個頁面蚯窥,首先,它幾乎涵括了 QT Console 具有的全部交互式功能,如代碼高亮拦赠,自動補全巍沙,實時幫助,內嵌顯示繪圖結果等荷鼠;其次句携,計算過程及結果可以方便地保存為多種格式,如默認的 JSON 格式允乐,Python 腳本以及 PDF 等矮嫉;此外,借助MarkdownMathJax喳篇,用戶可以在計算過程中插入詳盡細致的描述敞临,甚至以描述為主,計算為輔麸澜,從而將它當作科技類文章寫作的工具挺尿。

正是由于 IPython Notebook 的靈活易用,方便傳播等特點炊邦,它現(xiàn)已被用于可重復數據分析编矾,課程教學,博客寫作等眾多領域馁害。 當然它還可以應用在更多更廣的現(xiàn)實場景中窄俏,那些就等著你來探索了。 下文就將介紹如何安裝及使用 IPyhton Notebook碘菜,并以實例來介紹它的強大特性凹蜈。

安裝 Notebook

可以采取以下三種安裝方案:

安裝某個 Python 發(fā)行套件。

采用系統(tǒng)的包管理程序安裝忍啸。

從源代碼編譯安裝仰坦。

推薦選用某個 Python 發(fā)行套件,比如Enthough Python Distribution (EPD)Python(x,y)计雌。 這些發(fā)行套件中都包含了常用的 Python 科學計算庫悄晃,如 Numpy,Scipy凿滤,IPython妈橄,Matplotlib,Pandas 等翁脆,而且都是一鍵安裝眷蚓,非常方便快捷,省去了從源碼安裝的眾多煩惱鹃祖。下面介紹在 Linux 下安裝 EPD溪椎。

從 EPD網站下載免費版或學術版1普舆,之后運行下載好的文件:

bash ped-7.3.2-rh5-x86_64.sh -p /path/to/your/install_dir

一路回車即可。

安裝完成后校读,須將 EPD 的 bin 目錄添加至環(huán)境變量 PATH 中:

PATH=/path/to/epd/bin:$PATH

export PATH

如果不想安裝套件沼侣,可以用系統(tǒng)自帶的管理程序單獨安裝 IPython,比如在 Arch 下:

pacman -S ipython

除以上兩種方法歉秫,還可以選擇從源代碼安裝蛾洛,但此方案比較復雜,需要考慮 IPython 的復雜依賴關系雁芙,如 Numpy轧膘,Scipy,Qt 等兔甘。 這條方案需慎重選擇谎碍,因為光是 Numpy,Scipy 的安裝就會讓人焦頭爛額2洞焙。

使用 Notebook

根據 IPython Notebook 服務端所在位置蟆淀,可分為本地運行和遠程運行兩種情景。

本地運行

此種情形下澡匪,數據和計算資源均在本地機器上熔任,需要首先在本地安裝好 IPython,之后運行服務端:

ipython notebook

或直接進入 pylab 模式:

ipython notebook --pylab

如果想將 Matplotlib 生成的圖片潛入網頁內顯示唁情,則使用:

ipython notebook --pylab inline

上面的命令會在本機開啟 IPython Notebook 服務端疑苔,并在系統(tǒng)默認瀏覽器內打開一個指向服務端的頁面,該頁面顯示了所有保存的 Notebook甸鸟。 如需新建 Notebook惦费,可以點擊New Notebook按鈕,或著將本地的文件直接拖入空白處抢韭,其中該文件即可以是編寫好的 Python 程序文件 (.py)趁餐,也可以是之前運行過的 Notebook 文件 (.ipynb)。

在新打開的 Notebook 頁面中篮绰,就可以進行各項交互式計算任務。Notebook 由一個個的執(zhí)行單元組成季惯,每個單元可以是一段 Python 代碼吠各,也可以是一段描述性文本,這些文本可以使用 Markdown 語法勉抓,也可以插入LaTeX表達式贾漏,或者直接使用 HTML。 在單元上可以方便地進行刪除藕筋,復制纵散,粘貼,剪切,插入伍掀,分割掰茶,合并等操作。

單元需要被運行才能產生實際的運算蜜笤,其中代碼單元內的語句被輸入服務端內的 kernerl 進行運算濒蒋,并從 kernel 內獲得輸出結果顯示在單元內,文本單元則通過 Markdown 渲染器渲染成相應的網頁格式展現(xiàn) (如圖1)把兔。

圖1: 一段 Notebook 的運行結果

在進行了一系列計算操作之后沪伙,會希望將當前的工作保存,這時可以選擇Save或者Download县好,它們都可以按 .ipynb 或 .py 格式保存 Notebook围橡。 其中Save默認為 .ipynb 格式,如果希望將其改為 Python 可執(zhí)行的 .py 格式, 可以在啟動時加入--script后綴:

ipython notebook --script

Save和Download的不同在于Save將文件存儲在服務端所在的存儲位置缕贡,而Download則是存儲在瀏覽器所在的存儲位置翁授。因此,當服務端運行在遠程服務器上時善绎,如果希望將 Notebook 存至本地黔漂,應使用Download。

此外禀酱,還可以按網頁或者 PDF 格式將當前的計算過程保存炬守,缺陷是按這種方式進行保存下來的 Notebook 無法重新被載入運行。保存方法為點擊Print View剂跟,這里會打開一個當前 Notebook 的純網頁版本减途,這時可以將其又鍵另存為網頁保存,或者打印成 PDF 文件曹洽。

遠程運行

上文已提到多次可以將服務端放置遠程服務器運行鳍置,這樣有多個好處:一是可以不受物理空間的限制,在任何可以連接到服務器的場所辦公送淆,二是在客戶端無需安裝任何計算相關的軟件税产,只需一個瀏覽器即可,三是可以利用服務器高效龐大的計算資源偷崩,實現(xiàn)高性能計算辟拷。

IPython Notebook 可以方便地部署在似有服務器或流行的云計算平臺 (如Amazon EC2,Windowns Azure) 上,下面以私有服務器為例阐斜,介紹如何與遠程服務器實現(xiàn)交互計算衫冻。

首先創(chuàng)建一個名為nbserver的配置文件3

ipython profile create nbserver

設置登陸密碼:

IN [1]:fromIPython.libimportpasswdIN [2]: passwd()Enter password:Verify password:Out[2]:'sha1:xxxxxxxxxxxxxxxxxxxxxxxxx'

創(chuàng)建私人證書:

openssl req -x509 -nodes -days 10000 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

進入nbserver配置文件所在目錄4并打開ipython_notebook_config.py,設置以下屬性:

c = get_config()c.IPKernerlApp.pylab ='inline'c.NotebookApp.ip ='*'c.NotebookApp.open_browser =Falsec.NotebookApp.password =u'sha1:xxxx your hashed password'c.Notebook.App.port =9999#可設為其他端口

為使 Notebook 正常工作谒出,需在防火墻中打開上面設置的端口隅俘×诘欤可以編輯/etc/sysconfig/iptables,在最后一條REJECT語句前加入:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9999 -j ACCEPT

-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 9999 -j ACCEPT

用下面這條命令運行服務端:

ipython notebook --profile=nbserver --certfile=/path/to/your/mycert.pem

在本地計算機中打開瀏覽器为居,輸入

https://ip/of/your/server:9999

即可打開客戶端碌宴。

關于如何在 Amazon EC2 上搭建 IPython Notebook,可利用StarCluster提供的插件颜骤,或者NotebookCloud唧喉,詳情請分別參考相關鏈接3和4。此外忍抽,Windows Azure 官方也提供了一個在 Azure 上搭建 Notebook 的教程八孝,見相關鏈接5

共享與應用

使用 IPython Notebook 自定義的 .ipynb 文件可以方便地將自己的計算過程與他人共享鸠项,但是必須要求對方也裝有 IPython Notebook 才能查看干跛。為了突破這一限制,IPython 官方建立了IPython Notebook Viewer網站祟绊,幫助在線渲染 .ipynb 文件楼入。

用 IPython Notebook 寫博客

借助于 Ipython Notebook Viewer 提供的服務,只需下面一行代碼牧抽,即可在博客中嵌入顯示 Notebook:不足之處是需要手工設置寬度與高度以符合頁面大小嘉熊。下面是我編寫的有關 Numpy 數組維度操作的一個 Notebook5

如果對嵌入式的顯示方法不滿,可以利用nbconvert工具將 .ipynb 文件轉換成 html 或 Markdown 格式扬舒,再放入網頁中阐肤,詳細過程請參考相關鏈接6

在教學科研中的應用

由于 IPython Notebook 的友好易用讲坎,已有公司將其作為教授 Python 編程的新平臺孕惜,更有教授將其作為數據分析課程的課程平臺,用它分發(fā)晨炕,收取作業(yè)衫画,取得了不錯的效果 (見相關鏈接7)。

此外瓮栗,IPython Notebook 對長久以來困擾科研界的計算結果可重復問題也有所幫助削罩,試想如果研究者被要求將其完整的計算過程以 Notebook 的方式公開出來,結果造假或操控數據的可能性必將大大減小费奸。

總結

IPython Notebook 的出現(xiàn)鲸郊,彌補了傳統(tǒng)命令行式計算平臺的諸多不足,增強了交互式數據分析的用戶體驗货邓,為交互計算提供了一全新的實踐模式。此外四濒,它所定義的一套計算記錄格式大大方便了計算過程的傳播與共享换况,借助于新興的網頁技術更是可以展示多樣化的副文本內容职辨,成為連接數據分析與先進網頁技術的重要橋梁。由于以上諸多優(yōu)點戈二,它已被應用與科研與教學等眾多現(xiàn)實場景中舒裤,再加上背后活躍開發(fā)社區(qū)的支持,它必定會在新時代下的交互計算領域嶄露一片頭角觉吭。

相關鏈接

An HTML Notebook IPython

[IPython-User] Help troubleshooting notebook as public server

IPython Cluster Plugin

NotebookCloud Documentation

IPython Notebook on Windows Azure

Blogging with the IPython notebook

Teaching with ipython notebooks – a progress report

學術版可通過以 .edu 為后綴的郵箱地址申請腾供。?

可參考我一年前寫的文章:在 fedora 15 下從源代碼安裝 numpy 與 scipy?

除特殊說明鲜滩,以下操作均在服務器端進行?

~/.config/ipython/profile_nbserver 或 ~/.ipython/profile_nbserver?

更多有關 Numpy 的技巧可參見我的技術筆記?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末伴鳖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子徙硅,更是在濱河造成了極大的恐慌榜聂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗓蘑,死亡現(xiàn)場離奇詭異须肆,居然都是意外死亡,警方通過查閱死者的電腦和手機桩皿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門豌汇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泄隔,你說我怎么就攤上這事拒贱。” “怎么了梅尤?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵柜思,是天一觀的道長。 經常有香客問我巷燥,道長赡盘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任缰揪,我火速辦了婚禮陨享,結果婚禮上,老公的妹妹穿的比我還像新娘钝腺。我一直安慰自己抛姑,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布艳狐。 她就那樣靜靜地躺著定硝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毫目。 梳的紋絲不亂的頭發(fā)上蔬啡,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天诲侮,我揣著相機與錄音,去河邊找鬼箱蟆。 笑死沟绪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的空猜。 我是一名探鬼主播绽慈,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辈毯!你這毒婦竟也來了坝疼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤漓摩,失蹤者是張志新(化名)和其女友劉穎裙士,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體管毙,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡腿椎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夭咬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啃炸。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卓舵,靈堂內的尸體忽然破棺而出南用,到底是詐尸還是另有隱情,我是刑警寧澤掏湾,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布裹虫,位于F島的核電站,受9級特大地震影響融击,放射性物質發(fā)生泄漏筑公。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一尊浪、第九天 我趴在偏房一處隱蔽的房頂上張望匣屡。 院中可真熱鬧,春花似錦拇涤、人聲如沸捣作。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽券躁。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘱朽,已是汗流浹背旭贬。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搪泳,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓扼脐,卻偏偏與公主長得像岸军,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓦侮,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容