Python在數據科學領域能否完全取代R?
轉一篇文章給樓主看下。
中文原文:長篇巨獻|數據科學界華山論劍:R與Python巔峰對決英文原文應該是這裡:Choosing R or Python for data analysis? An infographic如果你是數據分析領域的新兵,那麼你一定很難抉擇——在進行數據分析時,到底應該使用哪個語言,R還是Python?在網路上,也經常出現諸如「我想學習機器語言,我應該用哪個編程語言」或者「我想快速解決問題,我應該用R還是Python」等這類問題。儘管兩個編程語言目前都是數據分析社區的佼佼者,但是它們仍在為成為數據科學家的首選編程語言而戰鬥。今天,就讓我們從數據科學的角度,一步步比較這兩大編程語言。#1 對陣雙方介紹






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


由於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的中心任務。」



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




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

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(下圖左:2014用於數據分析的程序語言)。在2014年,有23.45%的人同時使用R與Python(下圖右:2014年R和Python使用分析)。




#3 總決選:優缺點

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

Python是一種通用語言,其另一個優點在於它的可讀性和學習曲線;同時,Python簡單直觀,它對可讀性的重視更放大了這一特徵。這就解釋了為什麼Python的學習曲線相對平緩,因而很多程序員很熟悉它。並且,你寫一個程序的速度也得到正面影響:編程時間更少了,玩耍時間更多了。
Python的測試框架確保代碼的可重複性和可靠性,一個內置低壁壘的測試框架能夠支持一個很好的測試覆蓋率。其測試工具分類包括:UnitTest Python(標準庫中首個測試框架)、Nose (UnitTest的擴展,很多程序包使用它,如pandas)、DocTest (基於Python標準解釋器的輸出很容易生成測試),Pytest (當進行複雜的函數測試時,可以進行小測試)。

與R相比,Python是一個多用途語言。作為一個被大多數程序員所熟知的普遍且易於理解的編程語言,Python也能把不同背景的人聚集到一起。例如,一些機構不想僱傭數據分析師或者僱傭新的數據分析師比較困難,就會培訓老員工使用Python。這意味著,Python是一個現成的編程語言,它能夠作為一個單獨的工具與你工作流程中任意一部分結合。

Python最大的問題在於其可視化,選擇數據分析軟體時,可視化是一個重要原則。雖然Python有一些很好的可視化程序庫,包括:Seaborn(基於matplotlib的程序庫)、Bokeh(互動式可視化程序庫)和Pygal(建立動態可伸縮向量圖形(SVG))。但Python提供的可選擇程序庫過多,且與R對比,在Python中進行可視化有些複雜,呈現的結果也並不是很令人滿意。

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

其二是他們都是高級工具,很多統計學的新進展會先在R和小範圍的Python開源程序包中出現,這比商業平台要早。
第三是它們都提供在線社區,相對商業軟體提供收費的用戶支持,R和Python利用在線社區對它們相應的用戶提供支持。
最後,二者使用者的薪水都比較高,根據O』Reilly 2013數據科學工資調查顯示,主要使用開源工具的數據科學家(130,000美元)比使用商業工具的數據科學家(90,000美元)的工資中值更高。


勺子和筷子的關係
結論:實際操作中,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博士如何轉行做機器學習?
※大數據還能火多久?
※在做特徵工程時,什麼時候需要對連續型的特徵做取對數操作?
