Python在數據科學領域能否完全取代R?
轉一篇文章給樓主看下。
中文原文:長篇巨獻|數據科學界華山論劍:R與Python巔峰對決英文原文應該是這裡:Choosing R or Python for data analysis? An infographic如果你是數據分析領域的新兵,那麼你一定很難抉擇——在進行數據分析時,到底應該使用哪個語言,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通過幾行代碼就可以寫出統計模型,儘管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進行數據分析很容易上手,因為它具有龐大數量的包、方便使用的檢驗以及在使用公式方面的優勢。做基本數據分析時,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使用分析)。
#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.在你的領域最常用的工具是什麼?在你的領域中還有什麼可用的工具,它們和那些常用工具有什麼關係?參考資料勺子和筷子的關係
結論:實際操作中,Python 可以取代 R(至少不需要單獨打開 R)。
利益相關:Python 中毒用戶。
相比 R,目前 Python 不足:R 上面的統計輪子確實比 Python 的多且靠譜。
在 R 被真正(可能么?逃)取代之前,現階段最佳解決方案:在 Python 裡面調用 R。
Python + rpy2 應該可以基本解決 Python 上面統計包不夠用的問題。rpy2 用起來很方便,調用 R 的函數跟調用普通 Python 函數差不多。
另外,還可以用 rpy2 實現在 IPython kernel 的 Jupyter notebook 裡面寫 R 的功能。見這裡
程序員做數據分析一般傾向於Python,統計專業的傾向於R
統計模型確實是r的更好,但python社區的人也在開發更多的library。
以前我算邏輯回歸,線性回歸,給係數做test,看是不是顯著不等於零,都是用r。現在有時候會用statsmodels[1]。
舉個例子吧,在圖上根據拓撲結構做聚類(如圖1),英文叫community detection[2],演算法已經很多很成熟了,我都不用自己寫,python或者r上找個包用一下就好了。
但是如果我需要在二分圖上做聚類,那就不一定有現成的了。雖然我用python更舒服一些,但這時候如果有r社區那邊的大神已經把某個二分圖聚類的演算法寫的很好了,我肯定也要去用的。
所以作為用戶來說,最好兩個都會吧。
安利幾個statsmodel的例子[3]
[1]http://www.statsmodels.org/stable/index.html
[2]https://en.m.wikipedia.org/wiki/Community_structure
[3] https://www.datarobot.com/blog/multiple-regression-using-statsmodels/
http://blog.yhat.com/posts/logistic-regression-and-python.html目前來看,不存在替換。但是PYTHON確實會比R好用些。
不要試圖強制消滅物種多樣性,這樣是沒有前途的
Python+R才是王道
我曾經兩次試圖學R,但看到reshape矩陣都要導入一個包就感覺蛋疼無比,接下來又分不清向量、矩陣、列表、數據框、水平等各種非常類似又略有不同的數據類型,於是暈了,遂棄之。
沒聽說過膠片相機吧? 沒玩兒過單反吧?題主是從智能手機開始拍照片的吧?
不是說從市場層面上沒有取代都可能,而是每一次市場方向的選擇都會讓你噁心很多年,才會逐漸恢復到一個可以看的質量水平。 這個過程是相當噁心的。
同意金志鑫的觀點,不要小看物種多樣性恕我直言,這個問題不太好。
這不是能否的問題,是個人的問題。就我自身而言,Python清晰簡明的代碼,豐富多樣的庫,足以滿足我的日常需求,我沒動力去學R。或許在某些方面R比Python強,但仍然有大牛把這些功能移植到了python的庫裡面,麻煩是麻煩,慢是慢一點,但是我說不定一年才用個一兩次這個功能,幹嘛還要重新學一門語言。
說到底,這是惰性問題。
我們學院的教授,某些仍然在用SPSS跑數據。按理說SPSS這種早就該被淘汰的東西咋還有人用,為啥計量不教各方面都超越SPSS而且更實用的Stata/R?你去問他們他們有一百個理由告訴你為什麼,告訴你SPSS的優勢。但真實原因無非是自己習慣了SPSS,懶得去學Stata。
再換個例子,我之前用的是python2,後來換用python3都經歷了漫長的心理掙扎。這同一個軟體的新版本我都不想學,何況兩個不同的軟體呢。
數據科學,這範圍太廣了,編程能力加上統計學數學功底外加不同領域的能力,一般是一個team,各司其職,有做業務需求分析的,有做數據處理,有做機器學習建模的,有做可視化的,所以,這定義太廣泛了。僅憑R和python做不了。做數據分析的或者說統計學專業的人更偏重於R,做數據挖掘的工程師或者說計算機專業更喜歡用python,沒什麼哪個取代哪個,這好比問淘寶能否取代京東一般,一個平台大,一個物流給力,哪個的給顧客更佳的體驗就選哪。總的來說,Python更加老牌,R最近非常流行。能學就都學會,知乎上有很多這方面的回答。
還沒進入業界,沒法進行廣泛比較。個人使用感受,在數據挖掘和機器學習方面Python 優於R,不論是使用界面,資料文檔的完善程度,還是運算效率。最不喜歡R的地方就是每次都需要載入許多包,功能分散,幫助文檔又往往解釋不清楚,還不提供例子,只能邊做邊各種Google,很不成體系的感覺。如果單純做統計分析,比如假設檢驗,回歸,方差分析,因子分析之類的,R做的比Python強,但是相對而言我又偏好SAS,雖然敲的代碼多些,但通過指定一個proc裡面的各參數,可以很便捷地對模型和輸出進行調整。更不用說SAS的幫助文檔很完善,輸出的表格也很美觀,直接複製粘貼就可以放進報告或論文里了。當然R的數據可視化功能強大,這點和Python不相上下,SAS Base 又拼不過了。總的說來,我個人覺得R略雞肋,很多包都有R和Python兩個版本,比如igraph,wordcloud之類,功能相差不大,將來隨著使用深入,也許可以發掘出R的更多優點。兩個軟體都學一學還是有必要的,有比較之後才能挑自己看得順眼,用得順手的。
R用於後期數據展示是必不可少的,曾經試圖用python實現,但是失敗了。另外一個問題是流程式控制制的問題,R不能打包運行很是一個問題。不知道rpy可以打包么?
Julia語言表示不服
python和R又不是不相容的關係,沒有必要誰取代誰,覺得哪個方便、習慣就用哪個。如果覺得R的某些包比較靠譜那麼python里可以用rpy2直接調用R。以前numpy 和scipy還沒現在這麼普及的時候我還見過有人用shell調用Python生成R腳本再執行的,倒是能比較容易地解決依賴問題。
MATLAB怎麼辦
Python是處理矩陣運算不如R方便,可視化效果不佳,不過語法靈活,入門簡單,處理文本比R好一些,有望成為計算機行業工作者與統計研究人員溝通的一大橋樑。
為什麼感覺R好看一些,rstudio上顯示什麼都很方便,python上就老是一個黑框……數學專業出身,實在接受不了沒有界面的編程……分割分割分割~~~最近又用了一段時間,界面倒是找到了,但是好多函數沒找到……比如hist,princomp……
NIKE能否取代ADIDAS
推薦閱讀:
※2016 年,美國舊金山灣區就業形勢如何?
※CMU碩士還有半年畢業,找工作想專註找到真正熱愛的data scientist工作但又怕太冒險怎麼辦?
※ECE博士如何轉行做機器學習?
※大數據還能火多久?
※在做特徵工程時,什麼時候需要對連續型的特徵做取對數操作?