為什麼說 Python 是數據科學的發動機(一)發展歷程(附視頻中字)

毋庸置疑,Python是用於數據分析的最佳編程語言,因為它的庫在存儲、操作和獲取數據方面有出眾的能力。

在PyData Seattle 2017中,Jake Vanderplas介紹了Python的發展歷程以及最新動態。在這裡我們把內容分成上下兩篇,先給大家帶來上篇--Python的發展歷程

主講人:

Jake Vanderplas是華盛頓大學eScience研究所物理科學研究的負責人。該研究所負責跨學科項目,旨在支持科學領域在數據方面發現。Jake的研究領域包括天文學、天體物理學、機器學習以及可伸縮計算。此外,他是許多開源Python項目的維護者和頻繁貢獻者,包括scikit-learn、scipy、altair等。

CDA字幕組該講座視頻進行了漢化,附有中文字幕的視頻如下:

Python是如何成為了數據科學的發動機?_騰訊視頻

針對不方面開視頻的小夥伴,CDA字幕組也貼心的整理了文字版本,如下:

Python究竟是怎樣成為了數據科學的發動機?考慮到一開始它的初衷並非如此。

Python的發展歷程

我想回顧一下Python的初衷和早期發展情況。

1990s: 腳本時代

在上世紀90年代,我認為Python以及數據科學處於腳本時代。這時的座右銘為"Python是Bash的替代品」

沒有人願意用Bash編程,那麼讓我們換成用Python吧。這就是我們90年代的情況。

當時有個從事科學領域的人,名叫David Beasley。你可能通過《Python Cookbook》一書熟知他。在90年代他在一個研究實驗室工作,他寫了一篇關於使用Python進行科學計算的文章。在文中他說:

科學家正在使用各種不同的工具,他們傾向於使用自行開發的軟體,來實現自己的特定領域語言。或者用命令行界面將它們組合到一起。

在本文中他提出,為什麼我們不使用Python把這些都組合到一起呢?

他提出一個他已進行了4年的案例研究,當中他把Python作為膠水,把許多其他的工具都粘到了一起。他寫這個庫在當時影響力非常大,SWIG(simplified wrapper and interface generator)。這能夠解析整個Fortran或C代碼,為你生成一個Python介面。因此為了驅動代碼,你不必再去編寫Fortran和C語言。

許多早期的SciPy等工具都是建立在SWI上的,我對scikit-learn的第一個貢獻是用SWIG加上C++代碼。之後我們不再用SWIG而轉為Cython,但這是另一回事了。

2000s: SciPy時代

之後是2000年,我認為2000年代是SciPy時代。

這時的座右銘是,Python是MATLAB替代品

我看到觀眾中有些點頭贊同,當中有很多原因。如果看到2000年代早期有影響力並且發展SciPy堆棧的人群,可以在他們身上發現一些共同點。

例如John Hunter是Matplotlib的創始人,在2012年他去世前的幾周,他發表了很棒的SciPy演講。

當中他談到了Pre-Python,他有各種工作進程的大雜燴Perl腳本C++。他編寫了MATLAB之後他厭倦了MATLAB,開始把東西載入到GnuPlot上。這啟發他編寫了Matplotlib,這基本上是用Python編寫的MATLAB替代品。

同樣還有Travis Oliphant。他創建了continuum,在這之前他編寫了Numpy和SciPy項目。

他說「在Python之前,我用過Perl。然後是MATLAB、shell、scrip、Fortran以及C++庫等。當我發現Python時,我真的很喜歡這個語言。但這個語言是萌芽階段 缺少很多庫。 我認為我可以通過在Python中,連接低等級的庫和高等級的usage。從而在世界中獻出自己的一份力量。」這啟發了SciPy,SciPy取代了MATLAB、Fortran、shell、scrip。

同樣的如果你熟悉IPython項目、Jupyter項目,那你肯定知道Fernando Perez,他創建了IPython。他也有類似五花八門的工具,C、C++、Unix(awk/sed/sh)Perl、IDL、Mathematica。

想到Python出現之前的科學就很可怕。接著Fernando創建了IPython項目,他想在Python中做類似IDL或類似Mathematica,以便他能夠用一個簡單的工具代替這所有。

在21世紀初出現了各種工具,相同的目標是想取代MATLAB,取代所有組合的包。若看到早期的代碼,會發現它們都包括可視化、計算以及殼的內容。如果看一下Matplotlib,你仍然可以導入MATLAB的子模塊。類似計算周期等部分在MATLAB、Matplotlib中仍然有計算,儘管現在很多已經被移除。

如今我們熟知的庫如Matplotlib、SciPy、IPython,它們的目標很清晰。社區一直在演變。

我認為在SciPy時代的關鍵會議是SciPy大會。SciPy大會驅動了很多創新力,從2002年一直到如今。在場我認識的幾個人將出席下周的SciPy在奧斯汀的會議,這是非常有意思的會議,如果有機會的話我建議你們參加。

2010s: PyData時代

在20世紀90年代腳本時代和SciPy時代之後,我認為2010年代是PyData時代。這時的座右銘應為"Python是R語言的替代品」。

我認為PyData社區在這點上做的很好。R語言還是有些做的很好且無法超越的地方。我認為其中一個常規數據統計,還有一個是可視化。有些人在致力於解決這些問題。

我認為PyData時代的代表是Wes McKinney,以及他的pandas。還有他的書《利用Python進行數據分析》。

在書的序言中他這樣說道「還沒有任何一種工具能夠很好的處理我的一些需求。例如:具有標記軸的數據結構;綜合時間序列功能;算術運算和減少;缺少數據的靈活移交;合併和其他相關操作,我希望最好能夠在一種語言中完成這一切。」

且能夠符合軟體開發的一般用途,這啟發了pandas的誕生。可以說若沒有pandas庫,沒有Wes,今天我們不可能坐在這裡。在2009?2011年的時候,他辭掉了本來的工作,吃了2年拉麵,這樣他就可以天天編寫pandas。如果你有天碰到了Wes,請感謝他。因為他真的對我們的社區做出了重大貢獻。

還有許多重要的軟體這個時期問世。

pandas第一個重大的發布是在2011年左右。

scikit-learn在07年有發布一個早期的指南,但主要的scikit-learn發佈於2009年或201年。

Conda的packaging發佈於2012年,這真的改變了我使用Python的方式,改變了人們做事的方式。

以及2012年的IPython項目,後來更名為Jupyter。Jupyter項目真正推動了我們處理代碼的方式,特別是在這個社區中。

當然當中關鍵的會議是PyData

2012年,為期一天的PyData研討會由谷歌舉辦,地點位於山景城。這是我影響深刻的一次會議。這次會議上我第一次公開發表了關於Python的演講,當中我對scikit-learn進行了1小時的講解。從那之後我就著迷了,想儘可能多的參加這個會議。

PyData遍布世界各地,這一系列會議促進了數據科學的發展。數據科學與數據計算是不同的,之前SciPy時代則是圍繞這點的。當然以上這些時代都是同時存在的。有人使用Python寫腳本,有人使用SciPy工具,有人使用PyData。

人們熱衷於使用Python。因為Python的直觀性、美感、哲學性以及可讀性。Python從其他語言中得到很多轉換,因為它編寫起來很有趣。因此人們做的就是結合其他工具,其他社區中習得的內容、編寫相應的Python包。

Wes專門寫了pandas,因為他想做到R語言對數據框的操作。John Hunter專門寫了Matplotlib,因為他想用MATLAB的方式進行繪製,但不必使用MATLAB許可證。

Python真的很擅長從其他工具其他領域攝取知識,並把它們轉換到自己的空間內,然後進行運行。

我們還開發了很多自己的東西,例如scikit-learn。在任何語言中,這都是考慮機器學習的首要方式。至少是如何連接機器學習,如何進行機器學習API。我認為沒有其他語言比scikit-learn更簡潔,更深思熟慮的。

但我們必須認識到在整個過程中,Python並不是數據科學語言

Python是通用語言,我認為Python的通用本質在於其優勢。你可以把它Python想像成瑞士軍刀

使用Python你可以做各種不同的事情。比如你可以做網頁編程,可以進行Django,可以做後端,也可以做前端。

但多年來越來越多的人都在用Python,這把瑞士軍刀變得複雜起來了。這麼多的工具,我們需要選擇用哪個記住順序,從而你能找到你想要的。這裡的優勢在於Python存在巨大的能力空間,但缺點在於從哪兒下手。

我想強調的是對於剛接觸Python的人群,他們說"我想馬上開始學習Python」。但是他們會發現,宇宙是如此巨大,有那麼多的包,有許多需要學的東西。還有許多人們傳遞的未記錄下來的知識,很難進入其中。

我們已經在本文中了解了Python的發展歷程,之後我們將帶來最新的發展動態,以及介紹一些熱門的庫,敬請期待哦。

推薦閱讀:

通俗 Python 設計模式——享元模式
為什麼Python類成員的調用和聲明必須有"this"?
python及numpy,pandas易混淆的點
python2.7的sort函數默認採用什麼排序演算法,適用於怎樣的數列的排序?

TAG:数据科学 | Python | 编程语言 |