在使用 Python/IPython, R, Matlab 等工具進行探索性數據分析時翠语,你是否經常會遇到以下情景:
在命令行中輸入了許多語句后暑劝,希望將其部分或全部保存至一個腳本文件中以便記錄計算過程汤徽。
腳本運行出錯煞聪,需要對腳本進行局部修改后繼續(xù)運行镰踏,但不想重新運行之前已執(zhí)行完的語句派草。
希望將詳細計算過程及結果與他人共享舱馅,以便與他人討論數據分析步驟或讓他人重復你的結果赘方。
希望在本地的臺式機或筆記本上對遠程服務器中的數據進行分析烧颖,卻不想將數據拷貝至本地。
傳統(tǒng)的交互計算平臺一般都以命令行的方式與數據分析者交互窄陡,即用戶每輸入一條語句炕淮,計算平臺返回相應的結果。 雖然它們在用戶體驗方面做了許多努力跳夭,諸如自動命令補全涂圆,彈出幫助文檔,命令歷史記錄等币叹,但在上文提到的這些情景下润歉,它們就顯得有些力不從心。IPython Notebook的出世颈抚,正彌補了傳統(tǒng)計算平臺的不足踩衩,為上述情景提供了快捷直觀的解決方案。
IPython Notebook 是一種新興的交互式數據分析與記錄工具贩汉,它定義了一種全新的計算文件格式驱富,其中包含了代碼,代碼說明以及每一步的計算輸出(數值或圖片等)雾鬼,也就是說這一個文件完整記錄了計算過程中的所有相關信息萌朱。此外,該文件還可以嵌入網絡視頻策菜,圖片,LaTeX公式等眾多副文本格式酒贬,實為交互計算又憨,記錄思維,傳播思想的好幫手锭吨。
IPython Notebook 既是一個交互計算平臺蠢莺,又是一個記錄計算過程的「筆記本」。它由服務端和客戶端兩部分組成零如,其中服務端負責代碼的解釋與計算躏将,而客戶端負責與用戶進行交互。 服務端可以運行在本機也可以運行在遠程服務器考蕾,包含負責運算的 IPython kernel (與QT Console的 kernel 相同) 以及一個 HTTP/S 服務器 (Tornado)祸憋。 而客戶端則是一個指向服務端地址的瀏覽器頁面,負責接受用戶的輸入并負責渲染輸出肖卧。
千萬不要小看了這個頁面蚯窥,首先,它幾乎涵括了 QT Console 具有的全部交互式功能,如代碼高亮拦赠,自動補全巍沙,實時幫助,內嵌顯示繪圖結果等荷鼠;其次句携,計算過程及結果可以方便地保存為多種格式,如默認的 JSON 格式允乐,Python 腳本以及 PDF 等矮嫉;此外,借助Markdown及MathJax喳篇,用戶可以在計算過程中插入詳盡細致的描述敞临,甚至以描述為主,計算為輔麸澜,從而將它當作科技類文章寫作的工具挺尿。
正是由于 IPython Notebook 的靈活易用,方便傳播等特點炊邦,它現(xiàn)已被用于可重復數據分析编矾,課程教學,博客寫作等眾多領域馁害。 當然它還可以應用在更多更廣的現(xiàn)實場景中窄俏,那些就等著你來探索了。 下文就將介紹如何安裝及使用 IPyhton 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洞焙。
根據 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 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ū)的支持,它必定會在新時代下的交互計算領域嶄露一片頭角觉吭。
[IPython-User] Help troubleshooting notebook as public server
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?