毋庸置疑,Python是用于數(shù)據(jù)分析的最佳編程語言,因為它的庫在存儲、操作和獲取數(shù)據(jù)方面有出眾的能力。
在PyData Seattle 2017中,Jake Vanderplas介紹了Python的發(fā)展歷程以及最新動態(tài)。在這里我們把內(nèi)容分成上下兩篇,先給大家?guī)砩掀?-Python的發(fā)展歷程。
主講人:
Jake Vanderplas是華盛頓大學eScience研究所物理科學研究的負責人。該研究所負責跨學科項目,旨在支持科學領域在數(shù)據(jù)方面發(fā)現(xiàn)。Jake的研究領域包括天文學、天體物理學、機器學習以及可伸縮計算。此外,他是許多開源Python項目的維護者和頻繁貢獻者,包括scikit-learn、scipy、altair等。
CDA字幕組該講座視頻進行了漢化,附有中文字幕的視頻如下:
https://v.qq.com/x/page/u0549he5n1o.html
針對不方面開視頻的小伙伴,CDA字幕組也貼心的整理了****文字版本****,如下:
Python究竟是怎樣成為了數(shù)據(jù)科學的發(fā)動機?考慮到一開始它的初衷并非如此。
Python的發(fā)展歷程
我想回顧一下Python的初衷和早期發(fā)展情況。
1990s: 腳本時代
在上世紀90年代,我認為Python以及數(shù)據(jù)科學處于腳本時代。這時的座右銘為"Python是Bash的替代品”。
沒有人愿意用Bash編程,那么讓我們換成用Python吧。這就是我們90年代的情況。
當時有個從事科學領域的人,名叫David Beasley。你可能通過《Python Cookbook》一書熟知他。在90年代他在一個研究實驗室工作,他寫了一篇關于使用Python進行科學計算的文章。在文中他說:
“科學家正在使用各種不同的工具,他們傾向于使用自行開發(fā)的軟件,來實現(xiàn)自己的特定領域語言。或者用命令行界面將它們組合到一起。”
在本文中他提出,為什么我們不使用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年代早期有影響力并且發(fā)展SciPy堆棧的人群,可以在他們身上發(fā)現(xiàn)一些共同點。
例如John Hunter是Matplotlib的創(chuàng)始人,在2012年他去世前的幾周,他發(fā)表了很棒的SciPy演講。
當中他談到了Pre-Python,他有各種工作進程的大雜燴Perl腳本C++。他編寫了MATLAB之后他厭倦了MATLAB,開始把東西加載到GnuPlot上。這啟發(fā)他編寫了Matplotlib,這基本上是用Python編寫的MATLAB替代品。
同樣還有Travis Oliphant。他創(chuàng)建了continuum,在這之前他編寫了Numpy和SciPy項目。
他說“在Python之前,我用過Perl。然后是MATLAB、shell、scrip、Fortran以及C++庫等。當我發(fā)現(xiàn)Python時,我真的很喜歡這個語言。但這個語言是萌芽階段 缺少很多庫。 我認為我可以通過在Python中,連接低等級的庫和高等級的usage。從而在世界中獻出自己的一份力量?!边@啟發(fā)了SciPy,SciPy取代了MATLAB、Fortran、shell、scrip。
同樣的如果你熟悉IPython項目、Jupyter項目,那你肯定知道Fernando Perez,他創(chuàng)建了IPython。他也有類似五花八門的工具,C、C++、Unix(awk/sed/sh)Perl、IDL、Mathematica。
想到Python出現(xiàn)之前的科學就很可怕。接著Fernando創(chuàng)建了IPython項目,他想在Python中做類似IDL或類似Mathematica,以便他能夠用一個簡單的工具代替這所有。
在21世紀初出現(xiàn)了各種工具,相同的目標是想取代MATLAB,取代所有組合的包。若看到早期的代碼,會發(fā)現(xiàn)它們都包括可視化、計算以及殼的內(nèi)容。如果看一下Matplotlib,你仍然可以導入MATLAB的子模塊。類似計算周期等部分在MATLAB、Matplotlib中仍然有計算,盡管現(xiàn)在很多已經(jīng)被移除。
如今我們熟知的庫如Matplotlib、SciPy、IPython,它們的目標很清晰。社區(qū)一直在演變。
我認為在SciPy時代的關鍵會議是SciPy大會。SciPy大會驅動了很多創(chuàng)新力,從2002年一直到如今。在場我認識的幾個人將出席下周的SciPy在奧斯汀的會議,這是非常有意思的會議,如果有機會的話我建議你們參加。
2010s: PyData時代
在20世紀90年代腳本時代和SciPy時代之后,我認為2010年代是PyData時代。這時的座右銘應為"Python是R語言的替代品”。
我認為PyData社區(qū)在這點上做的很好。R語言還是有些做的很好且無法超越的地方。我認為其中一個常規(guī)數(shù)據(jù)統(tǒng)計,還有一個是可視化。有些人在致力于解決這些問題。
我認為PyData時代的代表是Wes McKinney,以及他的pandas。還有他的書《利用Python進行數(shù)據(jù)分析》。
在書的序言中他這樣說道“還沒有任何一種工具能夠很好的處理我的一些需求。例如:具有標記軸的數(shù)據(jù)結構;綜合時間序列功能;算術運算和減少;缺少數(shù)據(jù)的靈活移交;合并和其他相關操作,我希望最好能夠在一種語言中完成這一切?!?/p>
且能夠符合軟件開發(fā)的一般用途,這啟發(fā)了pandas的誕生??梢哉f若沒有pandas庫,沒有Wes,今天我們不可能坐在這里。在2009?2011年的時候,他辭掉了本來的工作,吃了2年拉面,這樣他就可以天天編寫pandas。如果你有天碰到了Wes,請感謝他。因為他真的對我們的社區(qū)做出了重大貢獻。
還有許多重要的軟件這個時期問世。
pandas第一個重大的發(fā)布是在2011年左右。
scikit-learn在07年有發(fā)布一個早期的指南,但主要的scikit-learn發(fā)布于2009年或201年。
Conda的packaging發(fā)布于2012年,這真的改變了我使用Python的方式,改變了人們做事的方式。
以及2012年的IPython項目,后來更名為Jupyter。Jupyter項目真正推動了我們處理代碼的方式,特別是在這個社區(qū)中。
當然當中關鍵的會議是PyData。
2012年,為期一天的PyData研討會由谷歌舉辦,地點位于山景城。這是我影響深刻的一次會議。這次會議上我第一次公開發(fā)表了關于Python的演講,當中我對scikit-learn進行了1小時的講解。從那之后我就著迷了,想盡可能多的參加這個會議。
PyData遍布世界各地,這一系列會議促進了數(shù)據(jù)科學的發(fā)展。數(shù)據(jù)科學與數(shù)據(jù)計算是不同的,之前SciPy時代則是圍繞這點的。當然以上這些時代都是同時存在的。有人使用Python寫腳本,有人使用SciPy工具,有人使用PyData。
人們熱衷于使用Python。因為Python的直觀性、美感、哲學性以及可讀性。Python從其他語言中得到很多轉換,因為它編寫起來很有趣。因此人們做的就是結合其他工具,其他社區(qū)中習得的內(nèi)容、編寫相應的Python包。
Wes專門寫了pandas,因為他想做到R語言對數(shù)據(jù)框的操作。John Hunter專門寫了Matplotlib,因為他想用MATLAB的方式進行繪制,但不必使用MATLAB許可證。
Python真的很擅長從其他工具其他領域攝取知識,并把它們轉換到自己的空間內(nèi),然后進行運行。
我們還開發(fā)了很多自己的東西,例如scikit-learn。在任何語言中,這都是考慮機器學習的首要方式。至少是如何連接機器學習,如何進行機器學習API。我認為沒有其他語言比scikit-learn更簡潔,更深思熟慮的。
但我們必須認識到在整個過程中,Python并不是數(shù)據(jù)科學語言。
Python是通用語言,我認為Python的通用本質在于其優(yōu)勢。你可以把它Python想象成瑞士軍刀。
使用Python你可以做各種不同的事情。比如你可以做網(wǎng)頁編程,可以進行Django,可以做后端,也可以做前端。
但多年來越來越多的人都在用Python,這把瑞士軍刀變得復雜起來了。這么多的工具,我們需要選擇用哪個記住順序,從而你能找到你想要的。這里的優(yōu)勢在于Python存在巨大的能力空間,但缺點在于從哪兒下手。
我想強調(diào)的是對于剛接觸Python的人群,他們說"我想馬上開始學習Python”。但是他們會發(fā)現(xiàn),宇宙是如此巨大,有那么多的包,有許多需要學的東西。還有許多人們傳遞的未記錄下來的知識,很難進入其中。
我們已經(jīng)在本文中了解了Python的發(fā)展歷程,之后我們將帶來最新的發(fā)展動態(tài),以及介紹一些熱門的庫,敬請期待哦。
CDA字幕組 編譯整理
本文為 CDA 數(shù)據(jù)分析師原創(chuàng)作品,轉載需授權