點(diǎn)擊上方“藍(lán)色字體”可快捷關(guān)注。 大數(shù)據(jù)文摘授權(quán)轉(zhuǎn)載 來源|DataCamp 編譯|于婷婷 魏子敏 康欣 編輯| Ivy 大數(shù)據(jù)文摘[微信ID: BigDataDigest] 如果你是數(shù)據(jù)分析領(lǐng)域的新兵,那么你一定很難抉擇——在進(jìn)行數(shù)據(jù)分析時(shí),到底應(yīng)該使用哪個(gè)語言,R還是Python?在網(wǎng)絡(luò)上,也經(jīng)常出現(xiàn)諸如“我想學(xué)習(xí)機(jī)器語言,我應(yīng)該用哪個(gè)編程語言”或者“我想快速解決問題,我應(yīng)該用R還是Python”等這類問題。盡管兩個(gè)編程語言目前都是數(shù)據(jù)分析社區(qū)的佼佼者,但是它們?nèi)栽跒槌蔀閿?shù)據(jù)科學(xué)家的首選編程語言而戰(zhàn)斗。今天,就讓我們從數(shù)據(jù)科學(xué)的角度,一步步比較這兩大編程語言。 #1 對陣雙方介紹 Ladies and Gentlemen,讓我們隆重的介紹今天的對陣雙方:R和Python!
R語言當(dāng)前版本是2015年6月更新的3.2.1版。Python 2當(dāng)前版本是2015年5月更新的2.7.10版,Python 3當(dāng)前的版本是2015年2月更新的3.4.3版。 R語言是Ross Ihaka和Robert Gentleman于1995年開發(fā)的,作為貝爾實(shí)驗(yàn)室S編程語言的一種實(shí)現(xiàn),其開發(fā)環(huán)境主要由C語言,Fortran和R來完成。Python的發(fā)布年份其實(shí)遠(yuǎn)在R之前。Guido Van Rossum于1991年開發(fā)完成了Python,并由Python軟件基金會(PSF)負(fù)責(zé)其發(fā)展。其開發(fā)靈感主要來自C語言和Modula-3,部分來自ABC語言。Python的名字取自喜劇蒙提·派森的飛行馬戲團(tuán)(Monty Python's Flying Circus)。 從定位角度看,R致力于提供更好的,對用戶友好的數(shù)據(jù)分析、統(tǒng)計(jì)分析和繪圖模型;而Python則強(qiáng)調(diào)生產(chǎn)效率和代碼的可讀性。 雙方的用戶群也有一定的差異。R主要用于學(xué)術(shù)和研究領(lǐng)域,如今正在快速拓展其企業(yè)市場的運(yùn)用。Python的使用者,是那些想深入鉆研數(shù)據(jù)分析或者應(yīng)用統(tǒng)計(jì)技術(shù)的程序員,以及向數(shù)據(jù)科學(xué)尋求幫護(hù)的開發(fā)者。用一句話總結(jié):“越接近統(tǒng)計(jì)研究跟數(shù)據(jù)分析人,越傾向R;越接近工程開發(fā)工程環(huán)境的人,越傾向Python”。 R和Python都得到大量的社區(qū)支持,包括郵件列表(Mailing Lists)、用戶貢獻(xiàn)的文檔、以及Stackoverflow網(wǎng)站。此外,R還可以從研究人員、數(shù)據(jù)科學(xué)家、統(tǒng)計(jì)學(xué)家和數(shù)量分析專家那里得到更多的支持;而Python則從開發(fā)者和程序員那里得到的支持。 從實(shí)用性來講,R通過幾行代碼就可以寫出統(tǒng)計(jì)模型,盡管R有樣式表,但并不是每個(gè)人都使用它們,可以用若干種方式寫出同樣的功能。在Python中寫代碼和調(diào)試代碼則更容易一些,主要是因?yàn)樗摹皟?yōu)美”語法。但是代碼的縮進(jìn)會影響它的意思。并且,在Python中,永遠(yuǎn)只有一種方式來寫同樣的功能。 在靈活性方面,在R中使用復(fù)雜的公式很容易。各種各樣的統(tǒng)計(jì)檢驗(yàn)和統(tǒng)計(jì)模型都是現(xiàn)成的并且容易使用;相比R,Python在完成以前沒有做過的新奇的事情上,很靈活,開發(fā)人員也會用它寫網(wǎng)站或其它應(yīng)用的腳本。 關(guān)于易學(xué)習(xí)性,開始學(xué)習(xí)R時(shí)有一個(gè)陡峭的學(xué)習(xí)曲線,一旦了解了最基本知識,就能很容易地學(xué)習(xí)更高級的知識。因此,對于有經(jīng)驗(yàn)的程序員,R并不難。建議R的學(xué)習(xí)者查看DataCamp上的練習(xí)和教程。 由于Python看重可讀性和易用性,使得它的學(xué)習(xí)曲線相對比較低并且平緩。因此,對于初級程序員,Python 被認(rèn)為是一個(gè)很好的編程語言。對于Python學(xué)習(xí)者的建議是,嘗試用《笨辦法學(xué)Python》學(xué)習(xí)的同時(shí)看視頻做練習(xí)。 兩者都有自己的代碼庫。CRAN(The Comprehensive R Archive Network)是一個(gè)很大的R包庫,用戶很容易為其貢獻(xiàn)代碼。R包是一個(gè)包含R函數(shù)、數(shù)據(jù)和編譯代碼的集合,R包在R中用一行代碼即可安裝。PyPi(Python Package Index)是Python軟件庫,用戶可以為PyPi貢獻(xiàn)代碼,但實(shí)踐起來有點(diǎn)困難。 計(jì)算機(jī)科學(xué)教授Norm Matloff 曾說過,“Python并未建立起一個(gè)能與CRAN媲美的巨大的代碼庫,R在這方面領(lǐng)先巨大。但是,統(tǒng)計(jì)學(xué)并不是Python的中心任務(wù)?!?/p> 其實(shí)R與Python并不是完全孤立的,在R中用戶可以通過rPython包運(yùn)行Python代碼,從Python傳遞或獲取數(shù)據(jù),調(diào)用Python函數(shù)或者方法。而在Python中也可以使用RPy2包運(yùn)行R代碼,這提供了一個(gè)從Python到R的底層接口。 以上,從定性的角度進(jìn)行了比較?,F(xiàn)在,看看雙方的定量數(shù)據(jù)。小二,上數(shù)據(jù)! 先看人氣排名,下圖左邊為2013-2015年2月R和Python人氣比較(Tiobe指標(biāo)),右邊為Redmonk排名,它比較了GitHub和Stackoverflow上編程語言的相對性能。 再看工作和薪資,2014 Dice Tech薪金調(diào)查顯示,具有高薪技能和豐富經(jīng)驗(yàn)的R使用者的平均工資為115,531美元,而Python則為94,139美元 #2 數(shù)據(jù)分析戰(zhàn)場 首先是用途。R的主要應(yīng)用場景是,當(dāng)數(shù)據(jù)分析任務(wù)需要獨(dú)立運(yùn)算,或者需要在單個(gè)服務(wù)器上分析;Python的一般應(yīng)用場景是,數(shù)據(jù)分析任務(wù)需要與網(wǎng)頁應(yīng)用整合,或者當(dāng)統(tǒng)計(jì)代碼需要并入成品數(shù)據(jù)庫。 按任務(wù)類型劃分,做探索性研究時(shí),R語言很適合初學(xué)者。幾行代碼便可寫出統(tǒng)計(jì)模型;而作為一個(gè)完整成熟的程序語言,Python是為產(chǎn)品使用進(jìn)行算法執(zhí)行的一個(gè)工具。 數(shù)據(jù)處理能力上,使用R進(jìn)行數(shù)據(jù)分析很容易上手,因?yàn)樗哂旋嫶髷?shù)量的包、方便使用的檢驗(yàn)以及在使用公式方面的優(yōu)勢。做基本數(shù)據(jù)分析時(shí),R語言更方便,不需要額外安裝包,大的數(shù)據(jù)庫需要使用類似data.table和dplyr包。過去,Python數(shù)據(jù)分析包的幼年期曾是個(gè)問題,但是現(xiàn)在已經(jīng)得到很大的改善,用Python進(jìn)行數(shù)據(jù)分析時(shí),你需要使用NumPy、Pandas和其它的程序包。 如何上手也是比拼的一個(gè)方面。R的集成開發(fā)環(huán)境(IDE)可以選擇RStudio。R最受歡迎的程序包有:dply、plyr和data.table(易于操作數(shù)據(jù)),stringr(易于操作字符串),zoo(處理規(guī)則和不規(guī)則時(shí)間序列),ggvis、lattice和ggplot2(數(shù)據(jù)可視化),caret(機(jī)器學(xué)習(xí)),建議初學(xué)者查看DataCamp上的課程和教程。 Python的集成開發(fā)環(huán)境(IDE)有很多,其中Spyder和Python Notebook最受歡迎。建議初學(xué)者查看Rodeo(被稱為“Python到數(shù)據(jù)科學(xué)IDE”)。Python最受歡迎的程序包有:pandas (易于操作數(shù)據(jù)),SciPy/NumPy(科學(xué)計(jì)算),sckikit-learn(機(jī)器學(xué)習(xí)),matplotlib(用于作圖),statsmodels(數(shù)據(jù)探索、統(tǒng)計(jì)模型估計(jì)、統(tǒng)計(jì)檢驗(yàn)和單元測試)。 [建議]給Python初學(xué)者推薦“8步從Python白丁到專家”(點(diǎn)擊查看)。若想了解更多Python包,請看“數(shù)據(jù)科學(xué)家之5個(gè)最佳Python庫,為初學(xué)者定制的教程” (點(diǎn)擊查看)。 關(guān)于技術(shù)支持,使用R進(jìn)行數(shù)據(jù)分析有很多技術(shù)支持,包括Stackoverflow、Rdocumentation,(R文檔整合)和R-help 郵件列表。 Python的數(shù)據(jù)分析問題可以通過以下方式獲得支持:Stackoverflow和郵件列表。 郵件列表包括pydata(關(guān)于使用Python進(jìn)行數(shù)據(jù)分析和Pandas包)、pystatsmodels (Statsmodels和pandas包的問題)、numpy-discussion (Numpy包的問題)和sci-py user(大部分是SciPy或者科學(xué)問題) 同樣,定性對比后再看看R和Python的量化戰(zhàn)爭! 從整體數(shù)據(jù)來看,在做數(shù)據(jù)分析時(shí)使用R的人數(shù)要多于使用Python(下圖左:2014用于數(shù)據(jù)分析的程序語言)。在2014年,有23.45%的人同時(shí)使用R與Python(下圖右:2014年R和Python使用分析)。 在2008-2014年5月之間,Stack Overflow上問題標(biāo)簽是”R” 和/或 “Python”、“Pandas”的數(shù)量,R明顯領(lǐng)先。在2015年3月12日到4月10日之間,在twitter上統(tǒng)計(jì)rstats, python numpy, python pandas和numpy這幾個(gè)關(guān)鍵詞,活躍度最大的是rstats。 工作和薪資方面,O’Reilly 2014數(shù)據(jù)科學(xué)工資調(diào)查顯示,R和Python平均年收入范圍都是11萬美元到12.5萬美元之間。Indeed.com上R與Python的工作趨勢顯示,Python的工作需求量高于R。 現(xiàn)在很多人都選擇同時(shí)使用R和Python。有的策略是利用兩種語言最好的部分——初始分析在R語言中進(jìn)行,在需要更嚴(yán)格的分析、團(tuán)隊(duì)工作或者發(fā)布代碼和數(shù)據(jù)產(chǎn)品時(shí)開始轉(zhuǎn)換到Python。有人是用R進(jìn)行統(tǒng)計(jì)檢驗(yàn)、畫圖和檢查大數(shù)據(jù),必須寫算法時(shí),則更傾向于用Python。也有人說,更傾向于在通用語言中做數(shù)學(xué)計(jì)算,而不是用數(shù)學(xué)語言進(jìn)行通用編程。 [建議]選定語言只是萬里長征第一步。如果你想要成為數(shù)據(jù)科學(xué)家,推薦你看一篇受歡迎度很高的文章“天龍八步:8步讓你變成數(shù)據(jù)科學(xué)家”(點(diǎn)擊查看)。 #3 總決選:優(yōu)缺點(diǎn) 現(xiàn)在來比較一下兩者的優(yōu)缺點(diǎn)。R最大的優(yōu)點(diǎn)在于其作圖能力,俗話說,一圖抵千言,相比單看原始數(shù)據(jù),可視化后的數(shù)據(jù)能被更高效、更有效的理解。利用ggplot2 可以繪制優(yōu)美的圖表,使用圖表算法創(chuàng)造圖層、定制圖表;lattice易于展示多變量關(guān)系;rCharts從R中建立、定制和呈現(xiàn)交互式Java可視化;googleVis利用Google表格工具在R中可視化數(shù)據(jù);用ggvis對一個(gè)網(wǎng)頁瀏覽器進(jìn)行渲染時(shí),可以實(shí)現(xiàn)圖像的交互式語法,例如在R中可視化Facebook好友。 IPython最大的優(yōu)點(diǎn)在于,IPython Notebook使得用Python分析數(shù)據(jù)變得容易,它可以將你的分析放在一個(gè)文件中。用Python處理數(shù)據(jù)可以簡化工作流程。它是一個(gè)組合,其中包括:交互式Python數(shù)據(jù)探索、在一個(gè)環(huán)境下為文檔提前寫好程序、文本和公式。你可以跟同事分享筆記本,并且不用他們安裝任何東西。IPython大大減少了管理代碼、輸出和筆記本文件的時(shí)間,這樣可以有更多的時(shí)間做實(shí)際工作。 R 的生態(tài)系統(tǒng)是它的另一項(xiàng)優(yōu)勢,先進(jìn)的界面程序包使其能與開源語言進(jìn)行交流,這讓你把工作流程連成一串,對數(shù)據(jù)分析尤其有用。程序包可以從:CRAN( “Task Views”列出了大量可用的R語言程序包)、Bioconductor (生物信息學(xué)的開源軟件)、GitHub (基于網(wǎng)絡(luò)的Git庫主機(jī)服務(wù))獲得,在Rdocumentation(首個(gè)R文檔聚合器)中很容易搜索到這些資源。R的用戶社區(qū)也做得非常優(yōu)秀,包括Meetup群組(其中一些由R用戶社區(qū)的公司資助)、博客和社交網(wǎng)絡(luò)。 Python是一種通用語言,其另一個(gè)優(yōu)點(diǎn)在于它的可讀性和學(xué)習(xí)曲線;同時(shí),Python簡單直觀,它對可讀性的重視更放大了這一特征。這就解釋了為什么Python的學(xué)習(xí)曲線相對平緩,因而很多程序員很熟悉它。并且,你寫一個(gè)程序的速度也得到正面影響:編程時(shí)間更少了,玩耍時(shí)間更多了。 Python的測試框架確保代碼的可重復(fù)性和可靠性,一個(gè)內(nèi)置低壁壘的測試框架能夠支持一個(gè)很好的測試覆蓋率。其測試工具分類包括:UnitTest Python(標(biāo)準(zhǔn)庫中首個(gè)測試框架)、Nose (UnitTest的擴(kuò)展,很多程序包使用它,如pandas)、DocTest (基于Python標(biāo)準(zhǔn)解釋器的輸出很容易生成測試),Pytest (當(dāng)進(jìn)行復(fù)雜的函數(shù)測試時(shí),可以進(jìn)行小測試)。 R有一個(gè)不可替代的優(yōu)勢:統(tǒng)計(jì)的通用語言。R是統(tǒng)計(jì)學(xué)家為統(tǒng)計(jì)學(xué)家開發(fā)的,他們通過R代碼和程序包交流統(tǒng)計(jì)分析思想和方法,即使是不會計(jì)算機(jī)編程語言的統(tǒng)計(jì)學(xué)家、工程師和科學(xué)家也會覺得R容易使用,因此提高了產(chǎn)業(yè)采用率。R也被用在金融、藥物、醫(yī)學(xué)和市場等領(lǐng)域,并且其作為商業(yè)分析工具的地位正在不斷增長,在商業(yè)領(lǐng)域的最重要價(jià)值正被一些有才能的人所了解使用,R在學(xué)術(shù)界已經(jīng)被廣泛使用。R的使用量正在快速增長,其在學(xué)術(shù)文章中處于常用軟件排名第三的位置(緊隨SAS和SAP),且這一位置正在被鞏固。 與R相比,Python是一個(gè)多用途語言。作為一個(gè)被大多數(shù)程序員所熟知的普遍且易于理解的編程語言,Python也能把不同背景的人聚集到一起。例如,一些機(jī)構(gòu)不想雇傭數(shù)據(jù)分析師或者雇傭新的數(shù)據(jù)分析師比較困難,就會培訓(xùn)老員工使用Python。這意味著,Python是一個(gè)現(xiàn)成的編程語言,它能夠作為一個(gè)單獨(dú)的工具與你工作流程中任意一部分結(jié)合。 兩者的缺點(diǎn)是什么呢?R運(yùn)行慢,而這一點(diǎn)是故意為之。R的設(shè)計(jì)目的是使數(shù)據(jù)分析和統(tǒng)計(jì)分析變得容易,而不是為了讓你的電腦“活得更輕松”。它有一個(gè)不完整的非正式定義,主要通過實(shí)現(xiàn)工作的方式來定義。除了設(shè)計(jì)和實(shí)現(xiàn),大量R代碼慢的原因很簡單——代碼寫的很差。為改善這一點(diǎn),可使用提高R性能的程序包:pqR(R翻譯器的一個(gè)新版本)、renjin、FastR(在Java中重新寫R)、Riposte(一個(gè)很快的解析器和JIT)、RevoScaleR(用來處理大數(shù)據(jù)的商業(yè)軟件)、Foreach(用來提高并行編程的商業(yè)工具)。 Python最大的問題在于其可視化,選擇數(shù)據(jù)分析軟件時(shí),可視化是一個(gè)重要原則。雖然Python有一些很好的可視化程序庫,包括:Seaborn(基于matplotlib的程序庫)、Bokeh(交互式可視化程序庫)和Pygal(建立動態(tài)可伸縮向量圖形(SVG))。但Python提供的可選擇程序庫過多,且與R對比,在Python中進(jìn)行可視化有些復(fù)雜,呈現(xiàn)的結(jié)果也并不是很令人滿意。 因?yàn)橛山y(tǒng)計(jì)學(xué)家開發(fā),R另一個(gè)缺點(diǎn)是它陡峭的學(xué)習(xí)曲線。盡管任何人都可以使用GUI得到結(jié)果,但沒有人能夠完全避開寫程序,并且找程序包很花時(shí)間。你可以通過使用正確的工具解決這個(gè)問題,利用以下這些資料可以幫組你克服這個(gè)陡峭的學(xué)習(xí)曲線:包括DataCamp上的練習(xí)和教程和上Rdocumentation搜索程序包。 Python另一個(gè)問題是它還不成熟,造成一種更受限制的方式去思考數(shù)據(jù)分析。截至目前,沒有模塊能夠代替基本R程序包的100個(gè)。Python正在努力客服這一問題, 其中一些解決辦法包括:IPython中的R擴(kuò)展允許在IPython Notebook中方便使用R;現(xiàn)有資源和約定格局充當(dāng)了一個(gè)重要角色:Matlab通常用于發(fā)布開放的研究代碼,Python用于數(shù)學(xué),R 用于統(tǒng)計(jì)。Mlabwrap 連接了Python和Matlab,但是有些缺點(diǎn),因此你需要學(xué)會兩種程序語言,并且需要有一個(gè)Matlab許可證。 兩種語言有很多共同優(yōu)點(diǎn)。其一是開源,R和Python都是對任何人免費(fèi),其它統(tǒng)計(jì)軟件(如SAS和SPSS)都是商業(yè)工具。 其二是他們都是高級工具,很多統(tǒng)計(jì)學(xué)的新進(jìn)展會先在R和小范圍的Python開源程序包中出現(xiàn),這比商業(yè)平臺要早。 第三是它們都提供在線社區(qū),相對商業(yè)軟件提供收費(fèi)的用戶支持,R和Python利用在線社區(qū)對它們相應(yīng)的用戶提供支持。 最后,二者使用者的薪水都比較高,根據(jù)O’Reilly 2013數(shù)據(jù)科學(xué)工資調(diào)查顯示,主要使用開源工具的數(shù)據(jù)科學(xué)家(130,000美元)比使用商業(yè)工具的數(shù)據(jù)科學(xué)家(90,000美元)的工資中值更高。 #4 那么贏家是…… 最后的結(jié)果是平局!哪個(gè)工具更適合,取決于你這個(gè)數(shù)據(jù)科學(xué)家如何去挑選一個(gè)最適合你需要的程序語言。下面的問題可以指導(dǎo)你做出決定。 1.你要解決什么樣的問題 2.你學(xué)習(xí)一門程序語言的成本?學(xué)習(xí)一個(gè)能更好地解決問題的新系統(tǒng)會花費(fèi)時(shí)間,但依舊使用你熟悉的系統(tǒng)并不能解決你要解決的問題。 3.在你的領(lǐng)域最常用的工具是什么? 在你的領(lǐng)域中還有什么可用的工具,它們和那些常用工具有什么關(guān)系? 掃描下方“二維碼”歡迎關(guān)注。 |
|