毋庸置疑监氢,Python是用于數(shù)據(jù)分析的最佳編程語言绎谦,因?yàn)樗膸煸诖鎯?chǔ)、操作和獲取數(shù)據(jù)方面有出眾的能力竭钝。
在PyData Seattle 2017中梨撞,Jake Vanderplas介紹了Python的發(fā)展歷程以及最新動(dòng)態(tài)。在這里我們把內(nèi)容分成上下兩篇香罐,先給大家?guī)砩掀?-Python的發(fā)展歷程卧波。
主講人:
Jake Vanderplas是華盛頓大學(xué)eScience研究所物理科學(xué)研究的負(fù)責(zé)人。該研究所負(fù)責(zé)跨學(xué)科項(xiàng)目庇茫,旨在支持科學(xué)領(lǐng)域在數(shù)據(jù)方面發(fā)現(xiàn)港粱。Jake的研究領(lǐng)域包括天文學(xué)、天體物理學(xué)旦签、機(jī)器學(xué)習(xí)以及可伸縮計(jì)算查坪。此外,他是許多開源Python項(xiàng)目的維護(hù)者和頻繁貢獻(xiàn)者宁炫,包括scikit-learn偿曙、scipy、altair等羔巢。
CDA字幕組該講座視頻進(jìn)行了漢化望忆,附有中文字幕的視頻如下:
https://v.qq.com/x/page/u0549he5n1o.html
針對(duì)不方面開視頻的小伙伴,CDA字幕組也貼心的整理了****文字版本****竿秆,如下:
Python究竟是怎樣成為了數(shù)據(jù)科學(xué)的發(fā)動(dòng)機(jī)?考慮到一開始它的初衷并非如此启摄。
Python的發(fā)展歷程
我想回顧一下Python的初衷和早期發(fā)展情況。
1990s: 腳本時(shí)代
在上世紀(jì)90年代幽钢,我認(rèn)為Python以及數(shù)據(jù)科學(xué)處于腳本時(shí)代歉备。這時(shí)的座右銘為"Python是Bash的替代品”。
沒有人愿意用Bash編程匪燕,那么讓我們換成用Python吧蕾羊。這就是我們90年代的情況喧笔。
當(dāng)時(shí)有個(gè)從事科學(xué)領(lǐng)域的人,名叫David Beasley龟再。你可能通過《Python Cookbook》一書熟知他溃斋。在90年代他在一個(gè)研究實(shí)驗(yàn)室工作,他寫了一篇關(guān)于使用Python進(jìn)行科學(xué)計(jì)算的文章吸申。在文中他說:
“科學(xué)家正在使用各種不同的工具,他們傾向于使用自行開發(fā)的軟件享甸,來實(shí)現(xiàn)自己的特定領(lǐng)域語言截碴。或者用命令行界面將它們組合到一起蛉威。”
在本文中他提出日丹,為什么我們不使用Python把這些都組合到一起呢?
他提出一個(gè)他已進(jìn)行了4年的案例研究,當(dāng)中他把Python作為膠水蚯嫌,把許多其他的工具都粘到了一起哲虾。他寫這個(gè)庫在當(dāng)時(shí)影響力非常大,SWIG(simplified wrapper and interface generator)择示。這能夠解析整個(gè)Fortran或C代碼束凑,為你生成一個(gè)Python接口。因此為了驅(qū)動(dòng)代碼栅盲,你不必再去編寫Fortran和C語言汪诉。
許多早期的SciPy等工具都是建立在SWI上的,我對(duì)scikit-learn的第一個(gè)貢獻(xiàn)是用SWIG加上C++代碼谈秫。之后我們不再用SWIG而轉(zhuǎn)為Cython扒寄,但這是另一回事了。
2000s: SciPy時(shí)代
之后是2000年拟烫,我認(rèn)為2000年代是SciPy時(shí)代该编。
這時(shí)的座右銘是,Python是MATLAB替代品硕淑。
我看到觀眾中有些點(diǎn)頭贊同课竣,當(dāng)中有很多原因。如果看到2000年代早期有影響力并且發(fā)展SciPy堆棧的人群喜颁,可以在他們身上發(fā)現(xiàn)一些共同點(diǎn)稠氮。
例如John Hunter是Matplotlib的創(chuàng)始人,在2012年他去世前的幾周半开,他發(fā)表了很棒的SciPy演講隔披。
當(dāng)中他談到了Pre-Python,他有各種工作進(jìn)程的大雜燴Perl腳本C++寂拆。他編寫了MATLAB之后他厭倦了MATLAB奢米,開始把東西加載到GnuPlot上抓韩。這啟發(fā)他編寫了Matplotlib,這基本上是用Python編寫的MATLAB替代品鬓长。
同樣還有Travis Oliphant谒拴。他創(chuàng)建了continuum,在這之前他編寫了Numpy和SciPy項(xiàng)目涉波。
他說“在Python之前英上,我用過Perl。然后是MATLAB啤覆、shell苍日、scrip、Fortran以及C++庫等窗声。當(dāng)我發(fā)現(xiàn)Python時(shí)相恃,我真的很喜歡這個(gè)語言。但這個(gè)語言是萌芽階段 缺少很多庫笨觅。 我認(rèn)為我可以通過在Python中拦耐,連接低等級(jí)的庫和高等級(jí)的usage。從而在世界中獻(xiàn)出自己的一份力量见剩∩迸矗”這啟發(fā)了SciPy,SciPy取代了MATLAB炮温、Fortran火脉、shell、scrip柒啤。
同樣的如果你熟悉IPython項(xiàng)目倦挂、Jupyter項(xiàng)目,那你肯定知道Fernando Perez担巩,他創(chuàng)建了IPython方援。他也有類似五花八門的工具,C涛癌、C++犯戏、Unix(awk/sed/sh)Perl、IDL拳话、Mathematica先匪。
想到Python出現(xiàn)之前的科學(xué)就很可怕。接著Fernando創(chuàng)建了IPython項(xiàng)目弃衍,他想在Python中做類似IDL或類似Mathematica呀非,以便他能夠用一個(gè)簡(jiǎn)單的工具代替這所有。
在21世紀(jì)初出現(xiàn)了各種工具,相同的目標(biāo)是想取代MATLAB岸裙,取代所有組合的包猖败。若看到早期的代碼,會(huì)發(fā)現(xiàn)它們都包括可視化降允、計(jì)算以及殼的內(nèi)容恩闻。如果看一下Matplotlib,你仍然可以導(dǎo)入MATLAB的子模塊剧董。類似計(jì)算周期等部分在MATLAB幢尚、Matplotlib中仍然有計(jì)算,盡管現(xiàn)在很多已經(jīng)被移除翅楼。
如今我們熟知的庫如Matplotlib侠草、SciPy、IPython犁嗅,它們的目標(biāo)很清晰。社區(qū)一直在演變晤碘。
我認(rèn)為在SciPy時(shí)代的關(guān)鍵會(huì)議是SciPy大會(huì)褂微。SciPy大會(huì)驅(qū)動(dòng)了很多創(chuàng)新力,從2002年一直到如今园爷。在場(chǎng)我認(rèn)識(shí)的幾個(gè)人將出席下周的SciPy在奧斯汀的會(huì)議宠蚂,這是非常有意思的會(huì)議,如果有機(jī)會(huì)的話我建議你們參加童社。
2010s: PyData時(shí)代
在20世紀(jì)90年代腳本時(shí)代和SciPy時(shí)代之后求厕,我認(rèn)為2010年代是PyData時(shí)代。這時(shí)的座右銘應(yīng)為"Python是R語言的替代品”扰楼。
我認(rèn)為PyData社區(qū)在這點(diǎn)上做的很好呀癣。R語言還是有些做的很好且無法超越的地方。我認(rèn)為其中一個(gè)常規(guī)數(shù)據(jù)統(tǒng)計(jì)弦赖,還有一個(gè)是可視化项栏。有些人在致力于解決這些問題。
我認(rèn)為PyData時(shí)代的代表是Wes McKinney蹬竖,以及他的pandas沼沈。還有他的書《利用Python進(jìn)行數(shù)據(jù)分析》。
在書的序言中他這樣說道“還沒有任何一種工具能夠很好的處理我的一些需求币厕。例如:具有標(biāo)記軸的數(shù)據(jù)結(jié)構(gòu)列另;綜合時(shí)間序列功能;算術(shù)運(yùn)算和減少旦装;缺少數(shù)據(jù)的靈活移交页衙;合并和其他相關(guān)操作,我希望最好能夠在一種語言中完成這一切同辣】阶耍”
且能夠符合軟件開發(fā)的一般用途惭载,這啟發(fā)了pandas的誕生∠斐玻可以說若沒有pandas庫描滔,沒有Wes,今天我們不可能坐在這里踪古。在2009?2011年的時(shí)候含长,他辭掉了本來的工作,吃了2年拉面伏穆,這樣他就可以天天編寫pandas拘泞。如果你有天碰到了Wes,請(qǐng)感謝他枕扫。因?yàn)樗娴膶?duì)我們的社區(qū)做出了重大貢獻(xiàn)陪腌。
還有許多重要的軟件這個(gè)時(shí)期問世。
pandas第一個(gè)重大的發(fā)布是在2011年左右烟瞧。
scikit-learn在07年有發(fā)布一個(gè)早期的指南诗鸭,但主要的scikit-learn發(fā)布于2009年或201年。
Conda的packaging發(fā)布于2012年参滴,這真的改變了我使用Python的方式强岸,改變了人們做事的方式。
以及2012年的IPython項(xiàng)目砾赔,后來更名為Jupyter蝌箍。Jupyter項(xiàng)目真正推動(dòng)了我們處理代碼的方式,特別是在這個(gè)社區(qū)中暴心。
當(dāng)然當(dāng)中關(guān)鍵的會(huì)議是PyData妓盲。
2012年,為期一天的PyData研討會(huì)由谷歌舉辦专普,地點(diǎn)位于山景城本橙。這是我影響深刻的一次會(huì)議。這次會(huì)議上我第一次公開發(fā)表了關(guān)于Python的演講脆诉,當(dāng)中我對(duì)scikit-learn進(jìn)行了1小時(shí)的講解甚亭。從那之后我就著迷了,想盡可能多的參加這個(gè)會(huì)議击胜。
PyData遍布世界各地亏狰,這一系列會(huì)議促進(jìn)了數(shù)據(jù)科學(xué)的發(fā)展。數(shù)據(jù)科學(xué)與數(shù)據(jù)計(jì)算是不同的偶摔,之前SciPy時(shí)代則是圍繞這點(diǎn)的暇唾。當(dāng)然以上這些時(shí)代都是同時(shí)存在的。有人使用Python寫腳本,有人使用SciPy工具策州,有人使用PyData瘸味。
人們熱衷于使用Python。因?yàn)镻ython的直觀性够挂、美感旁仿、哲學(xué)性以及可讀性。Python從其他語言中得到很多轉(zhuǎn)換孽糖,因?yàn)樗帉懫饋砗苡腥た莞浴R虼巳藗冏龅木褪墙Y(jié)合其他工具,其他社區(qū)中習(xí)得的內(nèi)容办悟、編寫相應(yīng)的Python包尘奏。
Wes專門寫了pandas,因?yàn)樗胱龅絉語言對(duì)數(shù)據(jù)框的操作病蛉。John Hunter專門寫了Matplotlib炫加,因?yàn)樗胗肕ATLAB的方式進(jìn)行繪制,但不必使用MATLAB許可證铺然。
Python真的很擅長從其他工具其他領(lǐng)域攝取知識(shí)琢感,并把它們轉(zhuǎn)換到自己的空間內(nèi),然后進(jìn)行運(yùn)行探熔。
我們還開發(fā)了很多自己的東西,例如scikit-learn烘挫。在任何語言中诀艰,這都是考慮機(jī)器學(xué)習(xí)的首要方式。至少是如何連接機(jī)器學(xué)習(xí)饮六,如何進(jìn)行機(jī)器學(xué)習(xí)API其垄。我認(rèn)為沒有其他語言比scikit-learn更簡(jiǎn)潔,更深思熟慮的卤橄。
但我們必須認(rèn)識(shí)到在整個(gè)過程中绿满,Python并不是數(shù)據(jù)科學(xué)語言。
Python是通用語言窟扑,我認(rèn)為Python的通用本質(zhì)在于其優(yōu)勢(shì)喇颁。你可以把它Python想象成瑞士軍刀。
使用Python你可以做各種不同的事情嚎货。比如你可以做網(wǎng)頁編程橘霎,可以進(jìn)行Django,可以做后端殖属,也可以做前端姐叁。
但多年來越來越多的人都在用Python,這把瑞士軍刀變得復(fù)雜起來了。這么多的工具外潜,我們需要選擇用哪個(gè)記住順序原环,從而你能找到你想要的。這里的優(yōu)勢(shì)在于Python存在巨大的能力空間处窥,但缺點(diǎn)在于從哪兒下手嘱吗。
我想強(qiáng)調(diào)的是對(duì)于剛接觸Python的人群,他們說"我想馬上開始學(xué)習(xí)Python”碧库。但是他們會(huì)發(fā)現(xiàn)柜与,宇宙是如此巨大,有那么多的包嵌灰,有許多需要學(xué)的東西弄匕。還有許多人們傳遞的未記錄下來的知識(shí),很難進(jìn)入其中沽瞭。
我們已經(jīng)在本文中了解了Python的發(fā)展歷程迁匠,之后我們將帶來最新的發(fā)展動(dòng)態(tài),以及介紹一些熱門的庫驹溃,敬請(qǐng)期待哦城丧。
CDA字幕組 編譯整理
本文為 CDA 數(shù)據(jù)分析師原創(chuàng)作品,轉(zhuǎn)載需授權(quán)