Python資料分析(一): ipython 技巧!

solenovex發表於2017-10-03

不一定非得使用Jupyter Notebook,試試ipython命令列

安裝 ipython

我只試過Windows 10環境下的。

1.安裝python安裝包之後,應該就有ipython了。

2.安裝anaconda,這個做機器學習或資料分析要是需要的,這個裝完之後,也會有ipython。(建議使用anaconda,國內映象地址:https://mirrors.tuna.tsinghua.edu.cn/

啟動ipython

1.命令列輸入ipython即可啟動。

2.或者找一下快捷方式,也可以啟動。

幫助?

1.help,python內建了help方法,相信大家都會這個。例如:help(len),然後就會顯示len方法的幫助文件:

2.?,ipython獨有的提供了一個快捷字元?,它也可以訪問幫助文件,例如:

檢視原始碼??

使用?? 來檢視python的原始碼:

但是,如果原始碼不適用python寫的(有些內建的方法使用C等語言寫的),就會出現如下效果:

自動完成 Tab

Tab鍵在ipython中輸入時可提供自動完成或瀏覽功能。

有時候優點像python內建的dir()函式,但強大得多。

這是L.後邊點選Tab的效果。下面是再輸入一個字母c之後的智慧提示的效果:

提示私有屬性

使用Tab預設只顯示public和external屬性/方法,如果想顯示私有屬性,那麼按約定,你要先輸入一個下劃線_

import的時候也可以使用Tab

萬用字元*

有時候tab不夠用,那就使用萬用字元 * 。

例如:顯示以Error結尾的物件:

注意後邊還有個?。

*可以匹配任何字串包括空字串。

另一個例子,包含xxx字串:

快捷鍵

導航類:

Ctrl+a,移動游標到行首

Ctrl+e,移動游標到行尾

Ctrl+b(或←),向左移動一個字元

Ctrl+f(或→),向右移動一個字元

輸入類:

Backspace:刪除行中前一個字元

Ctrl+d,刪除行中下一個字元

Ctrl+k,從游標位置剪下到行尾。

Ctrl+u,從行首剪下到游標位置。

Ctrl+y,貼上之前剪下的文字。

Ctrl+t,調換前兩個字元的位置。

命令歷史類:

Ctrl+p,前一個命令,和↑好像一樣。

Ctrl+n,後一個命令,和↓好像一樣。

Ctrl+r,倒序搜尋。

其中Ctrl+r是挺有用的,例如:

按Ctrl+r後,輸入a,就會倒序搜尋之前的輸入。

如果有相同的歷史搜尋結果的話,你可以點選多次Ctrl+r繼續往前翻。

其它快捷鍵:

Ctrl+l,清屏

Ctrl+c,中斷當前python命令

Ctrl+d,退出ipython

 

魔法命令

複製多行程式碼 %paste,%cpaste

在ipython命令列中使用Ctrl+c複製多行程式碼經常會出現問題(縮排等問題),使用%paste命令,解決了這個問題。

輸入%paste,然後回車,就會把你剪下盤裡面的內容完美的複製進來並執行

%cpaste,和%paste類似,但是它會提供一個互動介面,以便輸入多個程式碼塊。

執行外部程式碼 %run

直接舉例:

為程式碼執行計時:%timeit,%%timeit

對單行程式碼的執行計時:%timeit:

對多行程式碼執行計時:%%timeit:

魔法命令的幫助文件:

使用%maigc,可以檢視所有魔法命令及其文件。

使用%lsmagic,可以列出所有的魔法命令。

輸入輸出歷史

使用ipython shell,您一定對左邊這些in,out特別熟悉。

但是,它們不是裝飾品,它們倆是變數

In和Out是兩個變數,並且隨著命令的輸入,實時更新。

其中:

In是一個list,而Out是一個Dictionary。

所以可以這樣檢視具體的In和Out:

其中需要注意的是,並不是所有的In都有輸出,例如[37]。

下劃線和前一個輸出

使用一個下劃線 _ 來獲取前一個輸出結果,它是個變數,實時更新的。

使用兩個下劃線 __ 可以獲取倒數第二個輸出,使用三個下劃線 ___ 獲取倒數第三個輸出。(沒有輸出的命令列不計入在內)

最多也只能使用三個下劃線,超過三的話可以使用Out[X]或者_X來獲取之前的輸出:其中X是命令列號,不是往前數的個數。

抑制輸出

有時候在輸入命令後,我們不想讓其輸出結果,那就這樣,在行的最後邊加一個 ; 分號。

這樣的話,第76行也就沒有輸出了,Out[76]就不存在了。

相關的魔法命令:%history

使用%history可以一起獲取前面多個命令:

注意其引數-n後邊跟的是 命令列號的區間。

Shell Commands和IPython互動

你可以在ipython中使用任何shell commands(暫時叫系統命令列的命令吧),只要在前邊加一個歎號 !

(其實,對於常見的shell命令,直接輸入就會好用。。因為automagic屬性預設是on的,詳見後邊)

從Shell向ipython傳值

直接寫個賦值表示式就可以,等號的右邊是Shell命令:

注意:傳進來的值的型別不是list,而是:IPython.utils.text.SList。

從ipython向Shell傳值:

使用{變數名}的形式賦值:

注意:不可以使用 !cd 這個檔案系統導航命令。

Shell相關的魔法命令

如果想要在ipython中進行系統導航,那麼應該使用%cd這個魔法命令。

 

automagic

如果把automagic屬性設定為on,那麼魔法命令前邊就不需要%這個符號了。

預設automagic是on的,你可以輸入automagic,那麼它就會在on/off之間切換。

因為魔法命令包含了很多常見的shell命令,例如%cd,%pwd,%ls等等等等。所以預設情況下直接輸入常見的shell命令就會好用。

Exception顯示的詳細程度

如果直譯器擊中異常的時候,可以在traceback中檢視異常資訊。

使用%xmode可以控制異常資訊的詳細程度:

%xmode 只有一個引數,後選項從簡到繁是 Plain,Context,Verbose。我的電腦預設是Verbose。

Debugging

%xdebug 魔法命令。

在發生異常後,輸入%xdebug,會進入debug模式ipdb。在這裡輸入變數可以檢視變數的值,也可以執行python命令!

如果你想在發生任何異常的時候就進入debug模式,那麼可以把pdb設定為on:

此外,如果你想在執行外部指令碼的時候直接進入debug模式,那麼就應該輸入這個命令:

%run -d

部分Debug命令(ipdb模式下):

l(ist),顯示在檔案中的當前位置。

h(elp),幫助

q(uit),退出Debugger和程式。

c(ontinue),退出Debugger,繼續執行程式。

n(ext),執行程式的下一步

<enter>,重複上一個命令

p(rint),列印變數

s(tep),進入子程式

r(eturn),從子程式跳出

分析(Profiling)和計時模式

%time,適用於對單個長時間執行的表示式的程式計時。

%timeit,適用於對迴圈類的單行程式計時,它更準確。

注意:%timeit的結果通常比%time更快。

%prun,使用分析器執行程式碼

此外,還可以安裝第三方分析工具,例如%lprun(逐行分析),%memit(單個表示式記憶體分析),%mprun(逐行記憶體分析)等等。

 

 

下一篇文章,寫一下Numpy的使用技巧

相關文章