IPython Notebook 簡介

IPython Notebook 簡介

目錄[-]

基礎

Tab 鍵自動完成

內省

魔術命令

歷史輸入和輸出變量

Notebook

演示文檔

操作指南

在 IPython 的官網(ipython.org)上,介紹其的第一句話便是:IPython 是一個加強版的交互式 Shell。另外很多介紹 IPython 的文章也常以這句話開頭,但這句話實在是等于沒說。讓 IPython 在各種 shell(IDE) 中脫穎而出,成為科學計算標配的,并不是按 Tab 鍵代碼補完、以 % 開頭的魔術命令這些大家都有的東西,而是與 matplotlib 這個數據可視化(繪圖)包的深度集成以及奇妙的 Notebook。

IPython 較早的富 GUI 實現應該是 Qt Console。過去在標準 shell 里繪圖時,彈出的繪圖窗口會接管 shell 會話的控制權,你想繼續輸入命令就必須先把繪圖窗口關掉。這對于希望同時實現可視化和交互式過程的數據分析用戶來說顯然是難以忍受的,因此 Qt console 站出來解決了這個問題。在 Qt console 中通過 matplotlib 繪制的圖形會獨立嵌于控制臺中,并不影響你繼續輸入命令。

2011年,由 Brian Granger 領導的 IPython 團隊開始開發一種基于Web技術的交互式計算文檔格式,即 IPython Notebook。為什么說它是文檔格式,而非計算工具呢?實際上它兩者都是。Notebook 在交互上使用了 C/S 結構,它通過 Tornado 建立一個 shell 服務器,并使用瀏覽器作為客戶端。另外 notebook 頁面都被保存為.ipynb的類 JSON 文件格式。這種文件格式也是 Notebook 最吸引人的地方。

IPython Notebook 更詳細的介紹在下面第二節中給出,第一節講的是一些對 IPython 的各種實現通用的功能。

基礎

Tab 鍵自動完成

和其他 IDE 差不多,自己多試試就好了

內省

在變量名或命令的前面或后面加一個 “?” 并執行,可以用于顯示該對象的一些通用信息,如對象類型、文檔字符串等,這就叫做對象內省。這種操作查看到的信息,尤其是函數和類的信息,比通常直接引用變量名然后回車所看到的(__repr__)要好。“?” 的另一個用法是可以搜索 IPython 的命名空間,配合通配符使用效果如下:

In[1]:importnumpyasnpIn[2]:np.*load*?np.loadnp.loadsnp.loadtxtnp.pkgload

使用雙問號“??”還可以查看對象的源代碼(如果可見的話)。

魔術命令

在 IPython 的會話環境中,所有文件都可以通過%run命令來當做腳本執行,并且文件中的變量也會隨即導入當前命名空間。即,對于一個模塊文件,你對他使用%run命令的效果和from module import *相同,除非這個模塊文件定義了 main 函數(if __name__ == '__main__:'),這種情況下 main 函數還會被執行。

這種以 % 開頭的命令在 IPython 中被稱為魔術命令,用于加強 shell 的功能。常用的魔術命令有:

%quickref顯示 IPython 快速參考

%magic顯示所有魔術命令的詳細文檔

%debug從最新的異常跟蹤的底部進入交互式調試器

%pdb在異常發生后自動進入調試器

%reset刪除 interactive 命名空間中的全部變量

%runscript.py執行script.py

%prunstatement通過 cProfile 執行對statement的逐行性能分析

%timestatement測試statement的執行時間

%timeitstatement多次測試statement的執行時間并計算平均值

%who、%who_ls、%whos顯示 interactive 命名空間中定義的變量,信息級別/冗余度可變

%xdelvariable刪除variable,并嘗試清除其在 IPython 中的對象上的一切引用

!cmd在系統 shell 執行cmd

output=!cmd args執行cmd并賦值

%bookmark使用 IPython 的目錄書簽系統

%cddirecrory切換工作目錄

%pwd返回當前工作目錄(字符串形式)

%env返回當前系統變量(以字典形式)

對魔術命令不熟悉的話可以通過%magic查看詳細文檔;對某一個命令不熟悉的話,可以通過%cmd?內省機制查看特定文檔。值得一提的是,IPython 中使用del命令無法刪除所有的變量引用,因此垃圾回收機制也無法啟用,所以有些時候你會需要使用%xdel或者%reset。

歷史輸入和輸出變量

與標準 Shell 類似,IPython 中也可以通過_和__訪問上一次和上上一次的輸出。同時你肯定注意到了,IPython 中每一次的輸入輸出都有序號。訪問歷史 X 行輸出的方法為:_X;訪問歷史 X 行輸入的方法為:_iX。因為訪問歷史輸出的使用概率較歷史輸入大很多,所以訪問歷史輸出僅使用下劃線加行號即可,同時為了區分,訪問歷史輸入時需添加小寫字母 “i”,代表 “in”。

In[24]:1+1Out[24]:2In[25]:_i24Out[25]:'1+1'In[26]:_24Out[26]:2

Notebook

Notebook 的官方信息可以從 ipython.org/notebook 獲得,不過好像被墻了。上不去的話也可以訪問它的 github 頁面,ipython/examples/Notebook 目錄下有很多可供參考的內容。前面說過 Notebook 有一種 .ipynb 的文件格式,當你打開這個例程目錄下的某個文件后,就能體會到 Notebook 的奇妙之處了。

演示文檔

目前在各種 Python 研討會上,一種流行的演示手段就是使用 IPython Notebook,然后再將 .ipynb 文件發布到網上以供所有人查閱。除了前面說過的可以內嵌 matplotlib 繪圖外,Notebook 還同時提供了對 LaTex 和 MarkDown 的支持!

如上圖便展示了一個 .ipynb 文件的示例頁面。其中一對In Out會話被視作一個單元,稱為cell。第一個 cell 里我寫入的內容其實是:

##LaTex 演示

---$Z=\frac{X-\bar{X}}{S}$

分別使用了 MarkDown 和 LaTex 的語法。按下Shift + Enter后這段內容就被渲染成了圖片中的樣子。

cell 特別親切的地方在于:它可以作為一個類似“段落”的概念來進行編輯,不管是執行前還是執行后,而且既可以針對內容進行編輯,也可以對 cell 整體應用 copy、paste、cut 等操作,甚至還可以前后移動 cell 的位置。這帶來的好處是,在大量試驗性的交互操作過后,他不會像普通 shell 那樣留下無數沒用的 IO 內容。如果某條命令的輸出不理想或者報了錯,你就可以回頭編輯后重新運行,或把它移位或干脆刪掉。這樣在很久的一段交互過程后,Notebook 留下的反而是一份干凈整潔的文檔。

.ipynb 文件使用的是一種類 JSON 的文本格式,就像這樣:

"worksheets": [? ? {"cells": [? ? ? ? ? ? {"cell_type":"markdown","metadata": {},"source": ["##LaTex \u6f14\u793a\n","---\n","$Z=\\frac{X-\\bar{X}}{S}$"]? ? ? ? ? ? },

這種交互式計算環境,對繪圖、數學公式、簡易排版語法的支持,還有一種方便的文檔格式,共同幫助 Notebook 成為了 Python 科學計算的理想工具。另外這種使用瀏覽器和服務進程的 C/S 結構還暗含了一種遠程連接可能,拋開安全性不談的話,其在教學方面也有很高的潛力。

操作指南

當通過 IPython Notebook.exe 進入應用時,首先打開的是 Home 頁面,地址一般為:http://127.0.0.1:8888/tree。Home 目錄下會列出所有的歷史文件記錄,右上角則有一個 “New Notebook” 按鈕可以新建一個會話。

在 .ipynb 文件的交互頁面,需要注意的除了標準的 IPython 語法外,就是頁面抬頭處的菜單欄和工具欄了。Notebook 很貼心地提供了非常友好的幫助頁面,因此本文不再贅述。基本看完這兩個頁面(內容很少)后就能對 Notebook 的操作方式了解的差不多。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容