一、R與Python都有啥?
* **R**
相信各位有數(shù)理統(tǒng)計(jì)、金融計(jì)量、生物科學(xué)背景的同學(xué)對(duì)R語(yǔ)言都不陌生,而且他們的畢業(yè)論文和期刊論文的寫作很可能已經(jīng)用到了R。
R自帶常用的統(tǒng)計(jì)分析函數(shù)和十分豐富的功能包支持。例如,可以用R快速生成1000條符合正態(tài)分布或卡方分布的數(shù)據(jù),在分析相關(guān)的問(wèn)題時(shí),它可以幫你節(jié)省不少的時(shí)間;例如,你用Excel、PPT或者Tableau制作的圖表和報(bào)告,用R也能一樣的制作,而且可以程序化部署,定期自動(dòng)更新數(shù)據(jù)生成圖表和分析報(bào)告;再例如,對(duì)常用的數(shù)據(jù)分析方法和機(jī)器學(xué)習(xí)算法都可以通過(guò)加載相關(guān)的包,直接調(diào)用函數(shù)使用,即使非常復(fù)雜的算法,也可以只通過(guò)兩三行的代碼搞定。此外,R標(biāo)配的IDE-Rstudio,用戶有著很好的交互和使用體驗(yàn)。
* **Python**
“假如某一天,你在馬路邊隨機(jī)問(wèn)一個(gè)剛放學(xué)的小朋友,可能他不知道R,但他一定聽說(shuō)過(guò)Python”。可見,要說(shuō)近年來(lái)最風(fēng)靡、最流行的計(jì)算機(jī)語(yǔ)言,絕對(duì)非python莫屬了。
相對(duì)于C和JAVA語(yǔ)言,Python的學(xué)習(xí)門檻更低,無(wú)需繁雜的變量聲明等特點(diǎn),大幅減少程序員的操作負(fù)擔(dān),同時(shí)語(yǔ)法結(jié)構(gòu)接近英文表達(dá),易于讀寫,甚至被稱為最“優(yōu)雅”的編程語(yǔ)言。更重要的是,Python不僅運(yùn)用于后端計(jì)算服務(wù)和前端網(wǎng)頁(yè)開發(fā),也同樣能處理數(shù)據(jù)分析、機(jī)器學(xué)習(xí)的問(wèn)題,具有很強(qiáng)的擴(kuò)展性和兼容性,你能想到的它幾乎都能做到,十分神奇。
* **R vs Pyhon**
R和Python 都是高級(jí)分析工具,各自都有眾多的簇?fù)碚吆蛷?qiáng)大的社區(qū)支持,在網(wǎng)絡(luò)爬蟲、數(shù)據(jù)加工、數(shù)據(jù)可視化、統(tǒng)計(jì)分析、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等領(lǐng)域都有豐富第三方包提供調(diào)用。以下羅列R和python在各數(shù)據(jù)工作領(lǐng)域的資料信息,看看它們都有啥?
R與Python,有強(qiáng)大的社區(qū)資源,可供學(xué)習(xí)和經(jīng)驗(yàn)分享:
| R語(yǔ)言 | Python語(yǔ)言 |
| R journal
鏈接:[https://journal.r-project.org](https://link.zhihu.com/?target=https%3A//journal.r-project.org) Stack Overflow 鏈接:[https://stackoverflow.com/](https://link.zhihu.com/?target=https%3A//stackoverflow.com/) Rweekly 鏈接:[https://rweekly.org/](https://link.zhihu.com/?target=https%3A//rweekly.org/) | Python中文社區(qū)維基
鏈接:[https://python-chinese.github.io/](https://link.zhihu.com/?target=https%3A//python-chinese.github.io/) python中文學(xué)習(xí)大本營(yíng) 鏈接:[http://www.pythondoc.com/](https://link.zhihu.com/?target=http%3A//www.pythondoc.com/) PythonTab 鏈接:[https://www.pythontab.com/](https://link.zhihu.com/?target=https%3A//www.pythontab.com/) |
在不同數(shù)據(jù)場(chǎng)景下,R和Python有豐富的第三包可供加載和框架選擇,可以很好幫助分析師、研究員以及開發(fā)員提高工作效率:

| 功能名稱 | R語(yǔ)言 | Python語(yǔ)言 |
| 爬蟲 | Rvest、Rcurl、httr、XML、Rwebdriver | Urllib、requests、bs4、selenium、splash |
| 數(shù)據(jù)讀取 | Openxlsx、utils、readxl、xlsx、xlsx2、data.table | pandas |
| 數(shù)據(jù)加工(ETL) | Plyr、dplyr、reshape2、caret、tidyr、mice、stringr | numpy、pandas、sklearn、re |
| 數(shù)據(jù)可視化 | ggplot2、ggmap、lattice、gganimate、leaflet、REmap、plotly、rCharts、animation | Matplotlib、seaboen、bokeh、pyecharts、Pygal |
| 統(tǒng)計(jì)分析、回歸分析 | Stats、tseries、lmtest、nlme | statsmodels、scipy |
| 機(jī)器學(xué)習(xí) | Stats、glmnet | statsmodels、scipy |
| 深度學(xué)習(xí) | Keras、MXNetR、darch、deepnet、H2O、deepr | TensorFlow、Keras、Pytorch、Theano、MXNET |
通過(guò)加載不同的功能包,用戶可以在用少量的代碼下,快速實(shí)現(xiàn)算法邏輯:

| 算法名稱 | R語(yǔ)言 | Python語(yǔ)言 |
| 決策樹算法 | Repart、party、C50、RWeka | sklearn |
| 集成算法 | adabag、randomForest | sklearn、xgboost |
| 貝葉斯算法 | klaR | sklearn |
| K鄰近算法 | Stats、kknn | sklearn |
| 支持向量機(jī) | Kernlab、e1071 | sklearn |
| 神經(jīng)網(wǎng)絡(luò) | RSNNS、neuralnet、nnet | Neurolab、tensorflow |
| 聚類算法 | stats、Nbclust、fpc、mclust | sklearn |
| 關(guān)聯(lián)規(guī)則 | arules | mlxtend |
這么看,好像R和Python能做的事情都差不多,在主要的數(shù)據(jù)處理場(chǎng)景,雙方都可以通過(guò)加載包和調(diào)用函數(shù)來(lái)解決問(wèn)題。然而,二者雖然彼此功能覆蓋,但卻不能因此說(shuō)他們之間沒有區(qū)別,它們還是有各自獨(dú)特的地方:
* 在**深度學(xué)習(xí)**領(lǐng)域,例如自然語(yǔ)言處理、圖像識(shí)別等。相對(duì)于R,Python對(duì)GPU有更好的支持,雖然R也支持KERAS運(yùn)算,但是實(shí)現(xiàn)效率較低、成本較高,你可以想象這樣的一個(gè)場(chǎng)景,當(dāng)你使用R做深度學(xué)習(xí)時(shí),經(jīng)歷一番搜索和研究,剛把需要的環(huán)境搭建好,人家用Python的已經(jīng)可以提交項(xiàng)目結(jié)果了。因此,在深度學(xué)習(xí)領(lǐng)域,Python會(huì)有更好的表現(xiàn)。
* 在**機(jī)器學(xué)習(xí)**領(lǐng)域,Python與R算是難分仲伯,可能Python還是略好于R一些。最主要原因是每當(dāng)有新的套件或者算法時(shí),基本是用Python先開發(fā)出來(lái)。Python這樣的優(yōu)勢(shì)還體現(xiàn)在網(wǎng)絡(luò)爬蟲領(lǐng)域,尤其是研發(fā)人員在進(jìn)行一些比較復(fù)雜的爬蟲任務(wù)時(shí),Python會(huì)有更多的資源,包含方法和套件。除此之外,在計(jì)算效率、計(jì)算穩(wěn)定性等方面兩者并無(wú)顯著差異。
* 在**統(tǒng)計(jì)分析**領(lǐng)域,R的綜合表現(xiàn)更優(yōu)于Python。R最早是統(tǒng)計(jì)學(xué)家為統(tǒng)計(jì)工作所開發(fā)的工具,他們甚至通過(guò)R代碼和程序來(lái)交流分析思想,許多比較復(fù)雜的統(tǒng)計(jì)模型和統(tǒng)計(jì)檢驗(yàn)方法在R上都可以比較輕松的實(shí)現(xiàn)。本人也曾參與過(guò)一些項(xiàng)目的統(tǒng)計(jì)分析工作,并借機(jī)對(duì)比Python和R處理同樣任務(wù)的執(zhí)行情況,R確實(shí)會(huì)比Python方便不少。
* 在**數(shù)據(jù)可視化**領(lǐng)域,雖然Python有一些很好的可視化程序庫(kù),例如Seaborn、Bokeh和Pygal,但與R對(duì)比,在Python中進(jìn)行可視化有些復(fù)雜,可調(diào)節(jié)的參數(shù)較少,且圖表樣式的控制會(huì)更麻煩一些。對(duì)于一個(gè)分析師或一個(gè)研發(fā)人員,在歷經(jīng)“艱辛”得到分析結(jié)果后,卻需要花很多時(shí)間調(diào)整可視化展示結(jié)果,其實(shí)是會(huì)缺少耐心的,而R在這方面的會(huì)給出更好的體驗(yàn)。
對(duì)比Python,R還有一個(gè)不得不提的優(yōu)點(diǎn),就是基于web交互界面應(yīng)用框架Shiny,和Desktop版Rstudio,它們安裝簡(jiǎn)單,部署方便,在第三方資源包管理、腳本編輯、變量管理、數(shù)據(jù)預(yù)覽、結(jié)果呈現(xiàn)方面都為使用者提供了很大的便利。
另外,R與Python也并不是完全孤立的。在R中,用戶可以通過(guò)rPython包運(yùn)行Python代碼,調(diào)用Python的函數(shù)。而在Python中,也可以使用RPy2包運(yùn)行R代碼,同樣提供了一個(gè)從Python到R的輸送路徑,基本實(shí)現(xiàn)了用戶“取二者精華而用之“的美好愿景。
本次對(duì)R和Python的分析更多的體現(xiàn)在“定性”層面,關(guān)于“定量”層面的對(duì)比(計(jì)算性能方面的對(duì)比),如果有合適機(jī)會(huì),將會(huì)繼續(xù)分享。想了解“定量”層面對(duì)比的讀者,可以閱讀以下網(wǎng)絡(luò)上“前輩‘們的文章:
推薦文章1:如何將Python和R整合進(jìn)一個(gè)數(shù)據(jù)分析流程
推薦文章2:大數(shù)據(jù)分析Python和R的優(yōu)缺點(diǎn)
推薦文章3:Python與R的爭(zhēng)鋒:大數(shù)據(jù)初學(xué)者該怎樣選?
二、R與Python選哪個(gè)?
那么,說(shuō)了這么多,R與Python到底應(yīng)該學(xué)哪個(gè)?通過(guò)以下兩個(gè)問(wèn)題的回答,希望你的心中能有你想要的答案。
第一個(gè)問(wèn)題是:你的公司同事們現(xiàn)在使用哪種語(yǔ)言?
所有的工具的使用的最終目的,是為方便發(fā)現(xiàn)問(wèn)題和為問(wèn)題尋求最優(yōu)解決方案的,因此建議學(xué)習(xí)某種語(yǔ)言前,應(yīng)該以解決問(wèn)題為首要目標(biāo)。如果你發(fā)現(xiàn)你的公司或者你所在的部門已經(jīng)開始運(yùn)用某種語(yǔ)言作為分析工具(不局限于Python或者R),那么建議你優(yōu)先考慮該語(yǔ)言,因?yàn)槟愕摹八鶎W(xué)“可以立馬轉(zhuǎn)化為你的”所用“,進(jìn)而反過(guò)來(lái)繼續(xù)促使你”學(xué)“,周而復(fù)始,對(duì)知識(shí)頻繁的輸入和輸出,這是最有效的成長(zhǎng)和價(jià)值體現(xiàn)方式。不僅如此,這樣的方式也方便你與同事分享和維護(hù)代碼,提高溝通和協(xié)同工作的效率,更容易實(shí)現(xiàn)公司成果產(chǎn)出,這比單純討論哪種語(yǔ)言更”牛逼“更為重要。
第二個(gè)問(wèn)題是:你準(zhǔn)備花多少時(shí)間學(xué)習(xí)?需要解決什么樣的問(wèn)題?
面對(duì)問(wèn)題,當(dāng)你精力有限時(shí),你不得不面臨指標(biāo)是投入產(chǎn)出比,即,如何解決同樣的問(wèn)題花最少的時(shí)間,或者花同樣的時(shí)間解決更多的問(wèn)題。
在學(xué)習(xí)時(shí)間方面:剛開始學(xué)習(xí)R時(shí)有一個(gè)陡峭的學(xué)習(xí)曲線,到后面趨于平緩,因此R的入門門檻較高,但是一旦了解了最基本的知識(shí),就能比較容易的學(xué)習(xí)更高級(jí)的內(nèi)容。而與之對(duì)應(yīng)的是,Python語(yǔ)句易讀易懂,學(xué)習(xí)曲線起始階段相對(duì)較低且平緩,到后面會(huì)逐漸陡峭,也就是Python入門門檻低,但是到后續(xù)更深層的高級(jí)應(yīng)用時(shí),學(xué)習(xí)會(huì)比較困難。
在問(wèn)題類型方面:經(jīng)過(guò)上文闡述,在深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、網(wǎng)絡(luò)爬蟲和API構(gòu)建,Python的綜合實(shí)力要優(yōu)于R;而在數(shù)理統(tǒng)計(jì)分析、數(shù)據(jù)處理、數(shù)據(jù)可視化及IDE交互體驗(yàn),R的綜合表現(xiàn)要優(yōu)于Python。
因?yàn)槲恼轮赜懻摗皵?shù)據(jù)分析,R與Python怎么選?”,也考慮數(shù)據(jù)分析師的職業(yè)發(fā)展路徑,因此在統(tǒng)計(jì)分析、數(shù)據(jù)可視化、數(shù)據(jù)處理、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)這五個(gè)相關(guān)的領(lǐng)域,結(jié)合時(shí)間成本,給出建議如下:
寫在最后

文章的建議是在特定場(chǎng)景和有限資源的前提下,選擇R或者Python開始數(shù)據(jù)分析師“菜鳥時(shí)期”的工作。但是,R和Python在實(shí)際運(yùn)用中它們各有所長(zhǎng),各具價(jià)值,日后隨著解決的問(wèn)題越多,值得深挖的點(diǎn)也會(huì)越來(lái)越多,如果還是專注于”R還是Python?”的問(wèn)題,那么就會(huì)忽視這兩者給數(shù)據(jù)工作的帶來(lái)的最大價(jià)值。作者還是強(qiáng)調(diào),任何工具的學(xué)習(xí)和運(yùn)用,最終的目的都是幫助更好的發(fā)現(xiàn)問(wèn)題和解決問(wèn)題,至于R還是Python,當(dāng)你還在糾結(jié)這個(gè)選項(xiàng)的時(shí)候,許多團(tuán)隊(duì)已經(jīng)同時(shí)裝備著R和Python,解決了一個(gè)又一個(gè)問(wèn)題了!
感謝作者:
原創(chuàng)來(lái)自---->
https://www.zhihu.com/people/liberator77
解放者will
洞察百態(tài),不落世俗斷見;人生盡頭,希望小有成就。