- 利用Python進行數據分析(原書第2版)
- (美)韋斯·麥金尼
- 1301字
- 2019-01-05 06:07:20
1.2 為何利用Python進行數據分析
對很多人來說,Python編程語言擁有強大的吸引力。從1991年面世以來,Python與Perl、Ruby等語言成為最流行的解釋型語言。Python和Ruby從2005年之后格外流行,可以基于眾多web框架,比如Rails(Ruby)和Django(Python)進行網站搭建。此類語言通常稱為腳本語言,因為它們可以用于快速編寫小型程序、腳本或對其他任務進行自動化。我并不喜歡“腳本語言”這個術語,因為它的言外之意似乎是“腳本語言”無法構建大型軟件。在解釋型語言中,由于歷史和文化上的原因,Python發展出了一個大型、活躍的科學計算及數據分析社區。在過去十年里,Python已經從一個最前沿或者說“后果自負”的科學計算語言,成為數據科學、機器學習和學術/工業界通用軟件開發等領域最為重要的語言之一。
在數據科學、交互式計算以及數據可視化等領域,Python經常被拿來和其他開源或商業編程語言、工具進行對比,比如R、MATLAB、SAS、Stata等。近些年,Python提高了對類庫的支持(比如pandas和scikit-learn),使得它成為數據分析任務的一個流行選擇。再綜合考慮Python在通用軟件工程上的總體實力,它便成為搭建數據應用的首選語言。
1.2.1 Python作為膠水
Python在科學計算方面的成功部分是因為它很容易整合C、C++和FORTRAN等語言的代碼。大部分現代計算環境都擁有相似的存量程序集,這些程序集使用FORTRAN和C的庫進行線性代數、調優、積分、快速傅里葉變換等算法運算。很多公司和國家實驗室都使用Python將過去數十年產生的存量軟件黏合在一起。
很多程序中包含了一小部分運行起來要花費大量時間的代碼,而大量“膠水代碼”卻很少運行。很多情況下,膠水代碼的執行時間可以忽略不計;精力應當更多地投入優化計算瓶頸的方面,有些時候需要將代碼遷移到底層語言,比如C。
1.2.2 解決“雙語言”難題
在許多組織中,通常會使用一種更特殊的計算語言,比如用SAS或R針對想法進行研究、原型實現和測試,之后再將這些想法遷移到用Java、C#或C++編寫的大型生產環境上。逐漸地,人們發現Python不但更適用于研究和原型實現,也適合搭建生產系統。當一種語言可以滿足需求時,為什么要維持兩個開發環境呢?當使用相同程序工具集來兼顧研究人員和軟件工程師的好處越發明顯時,我認為會有越來越多的公司選擇走使用一種語言的路線。
1.2.3 為何不使用Python
雖然Python可以為很多分析應用和通用系統提供一個優秀環境,但仍然有一些場景用Python并不合適。
由于Python是一個解釋型語言,大多數情況下Python代碼的運行效率會低于Java或C++等編譯型語言。因為開發者時間通常比CPU時間更有價值,很多人就愉快地選擇了使用Python。然而,當需要一款低延遲、高資源利用要求的應用時(例如高頻交易系統),為了盡可能獲得最高性能,在底層語言(也意味著更低的代碼生產力)比如C++上花費編程時間將會更加值得。
當搭建高并發、多線程應用,尤其是多CPU綁定線程時,使用Python則會成為一項挑戰。原因在于Python擁有全局解釋器鎖(GIL),這是一種防止解釋器同時執行多個Python指令的機制。GIL存在的技術原因超出了本書的討論范圍。然而在大數據處理應用中,計算機集群需要在合理時間內處理一個數據集,單進程多線程系統的場景仍然是有需求的。
這并不是說Python無法執行真正的多線程、并行代碼。Python的C語言拓展使用本地多線程(在C或C++中)以并行方式運行代碼,而不受GIL的影響,因為這些拓展通常無須與Python對象交互。