數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

在數據分析的場景說一下notebook的好壞,並且和Matlab, Excel比較一下

1. 優點

(1) 基於過程

數據分析和傳統的MVC軟件開發的最大區別在於,數據分析存在一個data flow, 我們是在不斷的做計算,並且畫圖。這裡存在一個大致的“順序”,比如

  1. 先對數據進行處理,去掉有問題的數據 (Data Wrangling)
  2. 從各個角度看一個這個數據各個維度的分佈情況 (Data Exploration)
  3. 根據自己的想法、要求,做具體的分析,計算
  4. 對計算結果做進一部分的分析

非誠勿擾:正在學習python的小夥伴或者打算學習的,可以私信小編“01”領取資料!

這有點類似做應用題。而這是傳統的IDE (e.g. PyCharm) 沒有辦法做到的。假如全部都寫腳本+輸出,那麼你每張圖可能都要保存下來,然後再單獨點進去看

,很麻煩。而Notebook做這個要更方便,結果直接產生在Cell下面

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

反言之,如果你不需要這種頻繁的計算-畫圖的話,那麼notebook可能還真沒什麼大不了.

深一點而言,數據分析有不同的paradigm (大致可分為前處理-建模/計算-後處理)。因此,需要一個相應的工具。這一點,notebook並不是獨創,這種方式應該是來源於mathematica.

(2) Python

主要是兩點

語言優勢

比如,在matlab中,你怎麼給函數設定默認值?

function f(arg1,arg2,arg3)
if nargin < 3
arg3 = 'some default'
end
end

https://stackoverflow.com/questions/795823/how-do-i-set-default-values-for-functions-parameters-in-matlab

這實在是太.....了

Package

我做的時候,需要畫風玫瑰圖,類似下面這種

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

這個matlab並沒有. 我當然也可以自己去定義、去畫,但那樣效率太低

在Python裡,已經有人做好了這個包,我安裝,然後直接用就行了

再比如,我的研究涉及到一個很專業的函數擬合,這個東西,只有R有相關的包可以調用

而Python可以調用R來做計算,但Matlab卻做不到,這又省了很多事情

進一步而言,Python具有開源、分享自己工作的基本條件。我自己做的研究、做的模型,也可以做成包分享出去,給別人使用,而Matlab則要困難許多。

(3) Hackable

和第一點對應,Notebook的是計算+文檔的混合體,而本身又是web-based,因此非常好hack, 比如我的notebook因為非常長,所以就加了個側邊欄目錄

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

安裝見:https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/master/src/jupyter_contrib_nbextensions/nbextensions/toc2

再比如,在分析電影數據的時候,我覺得用card來展示更方便一點,所以可以這樣顯示數據

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

再比如,這麼長的文檔,有時候用來做演示,那麼可以再加個按鈕,把code cell全部隱藏掉就好了

2. 缺點

(1) 計算語法過於複雜

標準的語法總是要np.array, np.sum, 非常的囉嗦,這一點matlab要好很多

(2) 功能的欠缺

比如像上面朋友說的,沒有像matlab一樣的variable explorer, 能夠方便的查看數據

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

這一點極其不便。又比如基於一個dataframe (excel型的數據),為什麼不能直接點擊、排序篩選,非要寫查詢語句?

又比如,畫的圖不是可交互性的,

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?


比如這裡,我可能想知道上面某個點具體的值是多少,但是靜態圖做不到。

儘管目前有不少交互式的包,但是語法又極其複雜,並不像matplotlib那樣容易使用。

再比如目前的圖片,作為論文插圖也不夠好,matplotlib又不支持emf格式。因此圖片插入word也是個很大的問題。

(3) Notebook不是IDE

主要問題在於,我在notebook中寫的函數,沒有辦法快速跳轉到其定義。而一般的IDE, CTRL+點擊就行了。

3. 未來

(1) 大部分問題都是可以解決的

像上面說的很多欠缺的功能,都是可以解決、正在解決的,就好比我自己去策劃推動了側邊欄目錄一樣。像variable explorer,已經有了初步的版本,但目前還是很難用就是了。

絕大部分欠缺的功能,都可以做,而且開發難度不高。實際上近幾年大家有用notebook的話,就會感覺版本號跳得特別快(雖然始終不夠用....)

(2) 框架

有人說,自己寫notebook的話,很容易寫得很亂,左一個import, 又一個import. 所以要慎用,維護性很差。

但實際上,是缺乏一個框架,把大家的best practice總結起來。

就拿我的notebook 來說, notebook是這樣組織的。最上面的cell 雷打不動,一定是基本的設置


數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

然後所有的Import 放到文件裡面在import 進來

數據分析常用Jupyter而不是直接使用Python腳本或Excel原因在哪?

這樣notebook界面上的代碼就清爽很多,不會有各種import。當然,肯定也有比我的做法更好的方法,但問題就是,這些best practice需要分享出來。

又比如計算複用的函數,都可以抽象出去,只在Notebook裡面嘗試新的函數,和寫運行腳本,這樣維護性也更好一些

這些方面,都可以做得更簡潔,有更好的practice,這個是需要一個框架來做的。

4. 總結

所以,為什麼要用notebook呢?其實就是這幾點

  • 適合數據分析的 處理-計算-分析 的過程,不需要再專門寫報告
  • Python帶來的豐富的第三方包支持,不需要自己再重複造輪子
  • 正在逐步豐富的功能,比如多個cell的剪切/粘貼,PPT放映, cell tag ...

結尾

最後多說一句,小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,並在後臺私信小編:“01”即可領取。


分享到:


相關文章: