1. 程式人生 > >R與Python巔峰對決

R與Python巔峰對決

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

#1 對陣雙方介紹


Ladies and Gentlemen,讓我們隆重的介紹今天的對陣雙方:RPython

R語言當前版本是20156月更新的3.2.1版。Python 2當前版本是2015

5月更新的2.7.10版,Python 3當前的版本是20152月更新的3.4.3版。


R語言是Ross IhakaRobert Gentleman1995年開發的,作為貝爾實驗室S程式語言的一種實現,其開發環境主要由C語言,FortranR來完成。Python的釋出年份其實遠在R之前。Guido Van Rossum1991年開發完成了Python,並由Python軟體基金會(PSF)負責其發展。其開發靈感主要來自C語言和Modula-3,部分來自ABC語言。Python的名字取自喜劇蒙提·派森的飛行馬戲團(Monty Python's Flying Circus


定位角度看,R致力於提供更好的,對使用者友好的資料分析、統計分析和繪圖模型;而Python則強調生產效率和程式碼的可讀性。


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


R和Python都得到大量的社群支援,包括郵件列表(Mailing Lists)、使用者貢獻的文件、以及Stackoverflow網站。此外,R還可以從研究人員、資料科學家、統計學家和數量分析專家那裡得到更多的支援;而Python則從開發者和程式設計師那裡得到的支援。


實用性來講,R通過幾行程式碼就可以寫出統計模型,儘管R有樣式表,但並不是每個人都使用它們,可以用若干種方式寫出同樣的功能。在Python中寫程式碼和除錯程式碼則更容易一些,主要是因為它的“優美”語法。但是程式碼的縮排會影響它的意思。並且,在Python中,永遠只有一種方式來寫同樣的功能。


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


關於易學習性,開始學習R時有一個陡峭的學習曲線,一旦瞭解了最基本知識,就能很容易地學習更高階的知識。因此,對於有經驗的程式設計師,R並不難。建議R的學習者檢視DataCamp上的練習和教程。

由於Python看重可讀性和易用性,使得它的學習曲線相對比較低並且平緩。因此,對於初級程式設計師,Python 被認為是一個很好的程式語言。對於Python學習者的建議是,嘗試用《笨辦法學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中使用者可以通過rPython包執行Python程式碼,從Python傳遞或獲取資料,呼叫Python函式或者方法。而在Python中也可以使用RPy2包執行R程式碼,這提供了一個從Python到R的底層介面。


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


先看人氣排名,下圖左邊為2013-2015年2月R和Python人氣比較(Tiobe指標),右邊為Redmonk排名,它比較了GitHub和Stackoverflow上程式語言的相對效能。


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


#2 資料分析戰場


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


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

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


如何上手也是比拼的一個方面。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進行資料分析有很多技術支援,包括Stackoverflow、Rdocumentation,(R文件整合)和R-help 郵件列表。

Python的資料分析問題可以通過以下方式獲得支援:Stackoverflow和郵件列表。

郵件列表包括pydata(關於使用Python進行資料分析和Pandas包)、pystatsmodels (Statsmodels和pandas包的問題)、numpy-discussion (Numpy包的問題)和sci-py user(大部分是SciPy或者科學問題)


同樣,定性對比後再看看R和Python的量化戰爭!

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


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


工作和薪資方面,O’Reilly 2014資料科學工資調查顯示,RPython平均年收入範圍都是11萬美元到12.5萬美元之間。Indeed.comRPython的工作趨勢顯示,Python的工作需求量高於R


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


#3 總決選:優缺點


現在來比較一下兩者的優缺點。R最大的優點在於其作圖能力,俗話說,一圖抵千言,相比單看原始資料,視覺化後的資料能被更高效、更有效的理解。利用ggplot2 可以繪製優美的圖表,使用圖表演算法創造圖層、定製圖表;lattice易於展示多變數關係;rCharts從R中建立、定製和呈現互動式Java視覺化;googleVis利用Google表格工具在R中視覺化資料;用ggvis對一個網頁瀏覽器進行渲染時,可以實現影象的互動式語法,例如在R中視覺化Facebook好友。

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


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

與R相比,Python是一個多用途語言。作為一個被大多數程式設計師所熟知的普遍且易於理解的程式語言,Python也能把不同背景的人聚集到一起。例如,一些機構不想僱傭資料分析師或者僱傭新的資料分析師比較困難,就會培訓老員工使用Python。這意味著,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另一個缺點是它陡峭的學習曲線儘管任何人都可以使用GUI得到結果,但沒有人能夠完全避開寫程式,並且找程式包很花時間。你可以通過使用正確的工具解決這個問題,利用以下這些資料可以幫組你克服這個陡峭的學習曲線:包括DataCamp上的練習和教程和上Rdocumentation搜尋程式包。

Python另一個問題是它還不成熟,造成一種更受限制的方式去思考資料分析。截至目前,沒有模組能夠代替基本R程式包的100個。Python正在努力客服這一問題, 其中一些解決辦法包括:IPython中的R擴充套件允許在IPython Notebook中方便使用R;現有資源和約定格局充當了一個重要角色:Matlab通常用於釋出開放的研究程式碼,Python用於數學,R 用於統計。Mlabwrap 連線了Python和Matlab,但是有些缺點,因此你需要學會兩種程式語言,並且需要有一個Matlab許可證。


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

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

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

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


#4 那麼贏家是……

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

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

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

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

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


參考資料

文章轉載:http://sanliangzhi.com/hot/1173.html