摘要: 如果你是數據分析領域的新兵,那麼你一定很難抉擇——在進行數據分析時,到底應該使用哪個語言,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

在此對話中的人們

  • The R Language is mainly used for academic and research areas, custom essay writing service is now rapidly expanding the use of its corporate market. Python users are those who want to delve into the data analysis or application of statistical technology programmers, as well as to the data science seek help developers. Summed up in one sentence: "the more close to the statistical study with the data analysis, the more inclined to R; closer to the project development environment, the more inclined to Python."