摘要: 如果你是數據分析領域的新兵,那麼你一定很難抉擇——在進行數據分析時,到底應該使用哪個語言,R還是Python?在網絡上,也經常出現諸如“我想學習機器語言,我應該用哪個編程語言”或者“我想快速解決問題,我應該...

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

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語言是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都得到大量的社區支持,包括郵件列表(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(數據探索、統計模型估計、統計檢驗和單元測試)。

[建議]給Python初學者推薦“8步從Python白丁到專家”(點擊查看)。若想了解更多Python包,請看“數據科學家之5個最佳Python庫,為初學者定制的教程” (點擊查看)。
 
關於技術支持,使用R進行數據分析有很多技術支持,包括Stackoverflow、Rdocumentation,(R文檔整合)和R-help 郵件列表。
 
Python的數據分析問題可以通過以下方式獲得支持:Stackoverflow和郵件列表。
 
郵件列表包括pydata(關於使用Python進行數據分析和Pandas包)、pystatsmodels (Statsmodels和pandas包的問題)、numpy-discussion (Numpy包的問題)和sci-py user(大部分是SciPy或者科學問題)< /div>

同樣,定性對比後再看看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數據科學工資調查顯示,R和Python平均年收入範圍都是11萬美元到12.5萬美元之間。 Indeed.com上R與Python的工作趨勢顯示,Python的工作需求量高於R。

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

[建議]選定語言只是萬里長征第一步。如果你想要成為數據科學家,推薦你看一篇受歡迎度很高的文章“天龍八步:8步讓你變成數據科學家”(點擊查看)。
 
#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.在你的領域最常用的工具是什麼?
在你的領域中還有什麼可用的工具,它們和那些常用工具有什麼關係?

參考資料

 

資料來源:煉數成金< /a>


留下你的回應

以訪客張貼回應

0

在此對話中的人們

熱門標籤雲

每月文章