天天看點

資料科學界華山論劍:R與Python巅峰對決

如果你是資料分析領域的新兵,那麼你一定很難抉擇——在進行資料分析時,到底應該使用哪個語言,r還是python?在網絡上,也經常出現諸如“我想學習機器語言,我應該用哪個程式設計語言”或者“我想快速解決問題,我應該用r還是python”等這類問題。盡管兩個程式設計語言目前都是資料分析社群的佼佼者,但是它們仍在為成為資料科學家的首選程式設計語言而戰鬥。今天,就讓我們從資料科學的角度,一步步比較這兩大程式設計語言。

#1 對陣雙方介紹

資料科學界華山論劍:R與Python巅峰對決

ladies and gentlemen,讓我們隆重的介紹今天的對陣雙方:r和python!

r語言目前版本是2015年6月更新的3.2.1版。python 2目前版本是2015年5月更新的2.7.10版,python 3目前的版本是2015年2月更新的3.4.3版。

資料科學界華山論劍:R與Python巅峰對決

r語言是ross ihaka和robert gentleman于1995年開發的,作為貝爾實驗室s程式設計語言的一種實作,其開發環境主要由c語言,fortran和r來完成。python的釋出年份其實遠在r之前。guido van rossum于1991年開發完成了python,并由python軟體基金會(psf)負責其發展。其開發靈感主要來自c語言和modula-3,部分來自abc語言。python的名字取自喜劇蒙提·派森的飛行馬戲團(monty python's flying circus)。

資料科學界華山論劍:R與Python巅峰對決

從定位角度看,r緻力于提供更好的,對使用者友好的資料分析、統計分析和繪圖模型;而python則強調生産效率和代碼的可讀性。

資料科學界華山論劍:R與Python巅峰對決

雙方的使用者群也有一定的差異。r主要用于學術和研究領域,如今正在快速拓展其企業市場的運用。python的使用者,是那些想深入鑽研資料分析或者應用統計技術的程式員,以及向資料科學尋求幫護的開發者。用一句話總結:“越接近統計研究跟資料分析人,越傾向r;越接近工程開發工程環境的人,越傾向python”。

資料科學界華山論劍:R與Python巅峰對決

r和python都得到大量的社群支援,包括郵件清單(mailing lists)、使用者貢獻的文檔、以及stackoverflow網站。此外,r還可以從研究人員、資料科學家、統計學家和數量分析專家那裡得到更多的支援;而python則從開發者和程式員那裡得到的支援。

資料科學界華山論劍:R與Python巅峰對決

從實用性來講,r通過幾行代碼就可以寫出統計模型,盡管r有樣式表,但并不是每個人都使用它們,可以用若幹種方式寫出同樣的功能。在python中寫代碼和調試代碼則更容易一些,主要是因為它的“優美”文法。但是代碼的縮進會影響它的意思。并且,在python中,永遠隻有一種方式來寫同樣的功能。

資料科學界華山論劍:R與Python巅峰對決

在靈活性方面,在r中使用複雜的公式很容易。各種各樣的統計檢驗和統計模型都是現成的并且容易使用;相比r,python在完成以前沒有做過的新奇的事情上,很靈活,開發人員也會用它寫網站或其它應用的腳本。

資料科學界華山論劍:R與Python巅峰對決

關于易學習性,開始學習r時有一個陡峭的學習曲線,一旦了解了最基本知識,就能很容易地學習更進階的知識。是以,對于有經驗的程式員,r并不難。建議r的學習者檢視datacamp上的練習和教程。

由于python看重可讀性和易用性,使得它的學習曲線相對比較低并且平緩。是以,對于初級程式員,python 被認為是一個很好的程式設計語言。對于python學習者的建議是,嘗試用《笨辦法學python》學習的同時看視訊做練習。

資料科學界華山論劍:R與Python巅峰對決

兩者都有自己的代碼庫。cran(the comprehensive r archive network)是一個很大的r包庫,使用者很容易為其貢獻代碼。r包是一個包含r函數、資料和編譯代碼的集合,r包在r中用一行代碼即可安裝。pypi(python package index)是python軟體庫,使用者可以為pypi貢獻代碼,但實踐起來有點困難。

計算機科學教授norm matloff 曾說過,“python并未建立起一個能與cran媲美的巨大的代碼庫,r在這方面領先巨大。但是,統計學并不是python的中心任務。”

資料科學界華山論劍:R與Python巅峰對決

其實r與python并不是完全孤立的,在r中使用者可以通過rpython包運作python代碼,從python傳遞或擷取資料,調用python函數或者方法。而在python中也可以使用rpy2包運作r代碼,這提供了一個從python到r的底層接口。

資料科學界華山論劍:R與Python巅峰對決

以上,從定性的角度進行了比較。現在,看看雙方的定量資料。小二,上資料!

資料科學界華山論劍:R與Python巅峰對決

先看人氣排名,下圖左邊為2013-2015年2月r和python人氣比較(tiobe名額),右邊為redmonk排名,它比較了github和stackoverflow上程式設計語言的相對性能。

資料科學界華山論劍:R與Python巅峰對決

再看工作和薪資,2014 dice tech薪金調查顯示,具有高薪技能和豐富經驗的r使用者的平均工資為115,531美元,而python則為94,139美元

資料科學界華山論劍:R與Python巅峰對決

#2 資料分析戰場

資料科學界華山論劍:R與Python巅峰對決

首先是用途。r的主要應用場景是,當資料分析任務需要獨立運算,或者需要在單個伺服器上分析;python的一般應用場景是,資料分析任務需要與網頁應用整合,或者當統計代碼需要并入成品資料庫。

資料科學界華山論劍:R與Python巅峰對決

按任務類型劃分,做探索性研究時,r語言很适合初學者。幾行代碼便可寫出統計模型;而作為一個完整成熟的程式語言,python是為産品使用進行算法執行的一個工具。

資料處理能力上,使用r進行資料分析很容易上手,因為它具有龐大數量的包、友善使用的檢驗以及在使用公式方面的優勢。做基本資料分析時,r語言更友善,不需要額外安裝包,大的資料庫需要使用類似data.table和dplyr包。過去,python資料分析包的幼年期曾是個問題,但是現在已經得到很大的改善,用python進行資料分析時,你需要使用numpy、pandas和其它的程式包。

資料科學界華山論劍:R與Python巅峰對決

如何上手也是比拼的一個方面。r的內建開發環境(ide)可以選擇rstudio。r最受歡迎的程式包有:dply、plyr和data.table(易于操作資料),stringr(易于操作字元串),zoo(處理規則和不規則時間序列),ggvis、lattice和ggplot2(資料可視化),caret(機器學習),建議初學者檢視datacamp上的課程和教程。

python的內建開發環境(ide)有很多,其中spyder和python notebook最受歡迎。建議初學者檢視rodeo(被稱為“python到資料科學ide”)。python最受歡迎的程式包有:pandas (易于操作資料),scipy/numpy(科學計算),sckikit-learn(機器學習),matplotlib(用于作圖),statsmodels(資料探索、統計模型估計、統計檢驗和單元測試)。

資料科學界華山論劍:R與Python巅峰對決

關于技術支援,使用r進行資料分析有很多技術支援,包括stackoverflow、rdocumentation,(r文檔整合)和r-help 郵件清單。

python的資料分析問題可以通過以下方式獲得支援:stackoverflow和郵件清單。

郵件清單包括pydata(關于使用python進行資料分析和pandas包)、pystatsmodels (statsmodels和pandas包的問題)、numpy-discussion (numpy包的問題)和sci-py user(大部分是scipy或者科學問題)

資料科學界華山論劍:R與Python巅峰對決

同樣,定性對比後再看看r和python的量化戰争!

從整體資料來看,在做資料分析時使用r的人數要多于使用python(下圖左:2014用于資料分析的程式語言)。在2014年,有23.45%的人同時使用r與python(下圖右:2014年r和python使用分析)。

資料科學界華山論劍:R與Python巅峰對決

在2008-2014年5月之間,stack overflow上問題标簽是”r” 和/或 “python”、“pandas”的數量,r明顯領先。在2015年3月12日到4月10日之間,在twitter上統計rstats, python numpy, python pandas和numpy這幾個關鍵詞,活躍度最大的是rstats。

資料科學界華山論劍:R與Python巅峰對決

工作和薪資方面,o’reilly 2014資料科學工資調查顯示,r和python平均年收入範圍都是11萬美元到12.5萬美元之間。indeed.com上r與python的工作趨勢顯示,python的工作需求量高于r。

資料科學界華山論劍:R與Python巅峰對決

現在很多人都選擇同時使用r和python。有的政策是利用兩種語言最好的部分——初始分析在r語言中進行,在需要更嚴格的分析、團隊工作或者釋出代碼和資料産品時開始轉換到python。有人是用r進行統計檢驗、畫圖和檢查大資料,必須寫算法時,則更傾向于用python。也有人說,更傾向于在通用語言中做數學計算,而不是用數學語言進行通用程式設計。

資料科學界華山論劍:R與Python巅峰對決

#3 總決選:優缺點

資料科學界華山論劍:R與Python巅峰對決

現在來比較一下兩者的優缺點。r最大的優點在于其作圖能力,俗話說,一圖抵千言,相比單看原始資料,可視化後的資料能被更高效、更有效的了解。利用ggplot2 可以繪制優美的圖表,使用圖表算法創造圖層、定制圖表;lattice易于展示多變量關系;rcharts從r中建立、定制和呈現互動式java可視化;googlevis利用google表格工具在r中可視化資料;用ggvis對一個網頁浏覽器進行渲染時,可以實作圖像的互動式文法,例如在r中可視化facebook好友。

ipython最大的優點在于,ipython notebook使得用python分析資料變得容易,它可以将你的分析放在一個檔案中。用python處理資料可以簡化工作流程。它是一個組合,其中包括:互動式python資料探索、在一個環境下為文檔提前寫好程式、文本和公式。你可以跟同僚分享筆記本,并且不用他們安裝任何東西。ipython大大減少了管理代碼、輸出和筆記本檔案的時間,這樣可以有更多的時間做實際工作。

資料科學界華山論劍:R與Python巅峰對決

r 的生态系統是它的另一項優勢,先進的界面程式包使其能與開源語言進行交流,這讓你把工作流程連成一串,對資料分析尤其有用。程式包可以從:cran( “task views”列出了大量可用的r語言程式包)、bioconductor (生物資訊學的開源軟體)、github (基于網絡的git庫主機服務)獲得,在rdocumentation(首個r文檔聚合器)中很容易搜尋到這些資源。r的使用者社群也做得非常優秀,包括meetup群組(其中一些由r使用者社群的公司資助)、部落格和社交網絡。

python是一種通用語言,其另一個優點在于它的可讀性和學習曲線;同時,python簡單直覺,它對可讀性的重視更放大了這一特征。這就解釋了為什麼python的學習曲線相對平緩,因而很多程式員很熟悉它。并且,你寫一個程式的速度也得到正面影響:程式設計時間更少了,玩耍時間更多了。

python的測試架構確定代碼的可重複性和可靠性,一個内置低壁壘的測試架構能夠支援一個很好的測試覆寫率。其測試工具分類包括:unittest python(标準庫中首個測試架構)、nose (unittest的擴充,很多程式包使用它,如pandas)、doctest (基于python标準解釋器的輸出很容易生成測試),pytest (當進行複雜的函數測試時,可以進行小測試)。

資料科學界華山論劍:R與Python巅峰對決

r有一個不可替代的優勢:統計的通用語言。r是統計學家為統計學家開發的,他們通過r代碼和程式包交流統計分析思想和方法,即使是不會計算機程式設計語言的統計學家、工程師和科學家也會覺得r容易使用,是以提高了産業采用率。r也被用在金融、藥物、醫學和市場等領域,并且其作為商業分析工具的地位正在不斷增長,在商業領域的最重要價值正被一些有才能的人所了解使用,r在學術界已經被廣泛使用。r的使用量正在快速增長,其在學術文章中處于常用軟體排名第三的位置(緊随sas和sap),且這一位置正在被鞏固。

與r相比,python是一個多用途語言。作為一個被大多數程式員所熟知的普遍且易于了解的程式設計語言,python也能把不同背景的人聚集到一起。例如,一些機構不想雇傭資料分析師或者雇傭新的資料分析師比較困難,就會教育訓練老員工使用python。這意味着,python是一個現成的程式設計語言,它能夠作為一個單獨的工具與你工作流程中任意一部分結合。

資料科學界華山論劍:R與Python巅峰對決

兩者的缺點是什麼呢?r運作慢,而這一點是故意為之。r的設計目的是使資料分析和統計分析變得容易,而不是為了讓你的電腦“活得更輕松”。它有一個不完整的非正式定義,主要通過實作工作的方式來定義。除了設計和實作,大量r代碼慢的原因很簡單——代碼寫的很差。為改善這一點,可使用提高r性能的程式包:pqr(r翻譯器的一個新版本)、renjin、fastr(在java中重新寫r)、riposte(一個很快的解析器和jit)、revoscaler(用來處理大資料的商業軟體)、foreach(用來提高并行程式設計的商業工具)。

python最大的問題在于其可視化,選擇資料分析軟體時,可視化是一個重要原則。雖然python有一些很好的可視化程式庫,包括:seaborn(基于matplotlib的程式庫)、bokeh(互動式可視化程式庫)和pygal(建立動态可伸縮向量圖形(svg))。但python提供的可選擇程式庫過多,且與r對比,在python中進行可視化有些複雜,呈現的結果也并不是很令人滿意。

資料科學界華山論劍:R與Python巅峰對決

因為由統計學家開發,r另一個缺點是它陡峭的學習曲線。盡管任何人都可以使用gui得到結果,但沒有人能夠完全避開寫程式,并且找程式包很花時間。你可以通過使用正确的工具解決這個問題,利用以下這些資料可以幫組你克服這個陡峭的學習曲線:包括datacamp上的練習和教程和上rdocumentation搜尋程式包。

python另一個問題是它還不成熟,造成一種更受限制的方式去思考資料分析。截至目前,沒有子產品能夠代替基本r程式包的100個。python正在努力客服這一問題, 其中一些解決辦法包括:ipython中的r擴充允許在ipython notebook中友善使用r;現有資源和約定格局充當了一個重要角色:matlab通常用于釋出開放的研究代碼,python用于數學,r 用于統計。mlabwrap 連接配接了python和matlab,但是有些缺點,是以你需要學會兩種程式語言,并且需要有一個matlab許可證。

資料科學界華山論劍:R與Python巅峰對決

兩種語言有很多共同優點。其一是開源,r和python都是對任何人免費,其它統計軟體(如sas和spss)都是商業工具。

其二是他們都是進階工具,很多統計學的新進展會先在r和小範圍的python開源程式包中出現,這比商業平台要早。

第三是它們都提供線上社群,相對商業軟體提供收費的使用者支援,r和python利用線上社群對它們相應的使用者提供支援。

最後,二者使用者的薪水都比較高,根據o’reilly 2013資料科學工資調查顯示,主要使用開源工具的資料科學家(130,000美元)比使用商業工具的資料科學家(90,000美元)的工資中值更高。

資料科學界華山論劍:R與Python巅峰對決

#4 那麼赢家是……

最後的結果是平局!哪個工具更适合,取決于你這個資料科學家如何去挑選一個最适合你需要的程式語言。下面的問題可以指導你做出決定。

1.你要解決什麼樣的問題

2.你學習一門程式語言的成本?學習一個能更好地解決問題的新系統會花費時間,但依舊使用你熟悉的系統并不能解決你要解決的問題。

3.在你的領域最常用的工具是什麼?

在你的領域中還有什麼可用的工具,它們和那些常用工具有什麼關系?

資料科學界華山論劍:R與Python巅峰對決

參考資料

資料科學界華山論劍:R與Python巅峰對決

文中涉及的相關文章及連結如下:

原文釋出時間為:2015-06-15

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号