PythonR语言-python和r相遇
前言
??如果你是數(shù)據(jù)分析領(lǐng)域的新兵,那么你一定很難抉擇——在進(jìn)行數(shù)據(jù)分析時(shí),到底應(yīng)該使用哪個(gè)語(yǔ)言,R還是Python?在網(wǎng)絡(luò)上,也經(jīng)常出現(xiàn)諸如“我想學(xué)習(xí)機(jī)器語(yǔ)言,我應(yīng)該用哪個(gè)編程語(yǔ)言”或者“我想快速解決問題,我應(yīng)該用R還是Python”等這類問題。盡管兩個(gè)編程語(yǔ)言目前都是數(shù)據(jù)分析社區(qū)的佼佼者,但是它們?nèi)栽跒槌蔀閿?shù)據(jù)科學(xué)家的首選編程語(yǔ)言而戰(zhàn)斗。
??最近幾年,用R和Python的人越來越多,于是出現(xiàn)了眾多關(guān)于用哪個(gè)做數(shù)據(jù)分析最好的爭(zhēng)議。從整體來說,個(gè)人認(rèn)為數(shù)據(jù)分析需要的是在有限時(shí)間內(nèi),用最可行的方式拿到最有用的結(jié)果。因此,不應(yīng)該局限于任何單一的編程方法,而應(yīng)該是各取所長(zhǎng),根據(jù)個(gè)人特點(diǎn),問題的形式而靈活選取或者結(jié)合。
??Python和R是統(tǒng)計(jì)學(xué)中兩種最流行的的編程語(yǔ)言,關(guān)于R做數(shù)據(jù)分析的優(yōu)勢(shì)已經(jīng)不言而喻了,眾多和全面的統(tǒng)計(jì)方法使得從方法上來說,R的數(shù)據(jù)分析能力(模型方法眾多且可視化功能強(qiáng)大)是其它語(yǔ)言不能比擬的。其實(shí)爭(zhēng)議最多的也就是出現(xiàn)在其計(jì)算性能和全面性上。而Python因?yàn)榫幊天`活方便,語(yǔ)法易于理解而被大家所接受。如何將兩者結(jié)合起來,發(fā)揮更大的作用,值得探索。
目錄
1.R簡(jiǎn)介
2.Python簡(jiǎn)介
3.R&Python相遇
1. R簡(jiǎn)介
??R(又稱R語(yǔ)言)是一款開源的跨平臺(tái)的數(shù)值統(tǒng)計(jì)和數(shù)值圖形化展現(xiàn)工具。通俗點(diǎn)說,R是用來做統(tǒng)計(jì)和畫圖的。R擁有自己的腳本語(yǔ)言和大量的統(tǒng)計(jì)、圖形庫(kù)(得益于開源社區(qū)),這讓她看起來既美又實(shí)用。與其他同類軟件(如 SPSS)相比,R的特點(diǎn)是純命令行的,這倒也好,我們更應(yīng)該把注意力放在數(shù)據(jù)本身,而非統(tǒng)計(jì)工具的UI。
??Ross Ihaka和Robert Gentleman于1995年在S語(yǔ)言中創(chuàng)造了開源語(yǔ)言R,目的是專注于提供更好和更人性化的方式做數(shù)據(jù)分析、統(tǒng)計(jì)和圖形模型的語(yǔ)言。起初R主要是在學(xué)術(shù)和研究使用,但近來企業(yè)界發(fā)現(xiàn)R也很不錯(cuò)。這使得中的R成為企業(yè)中使用的全球發(fā)展最快的統(tǒng)計(jì)語(yǔ)言之一。
??R的主要優(yōu)勢(shì)是它有一個(gè)龐大的社區(qū),通過郵件列表,用戶貢獻(xiàn)的文檔和一個(gè)非常活躍的堆棧溢出組提供支持。還有CRAN鏡像,一個(gè)用戶可以很簡(jiǎn)單地創(chuàng)造的一個(gè)包含R包的知識(shí)庫(kù)。這些包有R里面的函數(shù)和數(shù)據(jù),各地的鏡像都是R網(wǎng)站的備份文件,完全一樣,用戶可以可以選擇離你最近的鏡像訪問最新的技術(shù)和功能,而無(wú)需從頭開發(fā)。
??R雖說有一套自己的語(yǔ)言,還挺完備,但她最專業(yè)的還是做統(tǒng)計(jì)和畫圖,而像連接數(shù)據(jù)庫(kù)、文本處理、文件操作等這些臟活可不能委屈R來干哪,這些得有其 他語(yǔ)言來負(fù)責(zé),我的選擇是咱最熟悉的、做這些臟活最棒的Python。
??如果你是一個(gè)有經(jīng)驗(yàn)的程序員,你可以不會(huì)覺得使用R可以提高效率,但是,你可能會(huì)發(fā)現(xiàn)學(xué)習(xí)R經(jīng)常會(huì)遇到瓶頸。幸運(yùn)的是現(xiàn)在的資源很多。
2. Python簡(jiǎn)介
??Python([KK] 英語(yǔ)發(fā)音: /'pa?θɑn/, [DJ] 英語(yǔ)發(fā)音: /?paiθ?n/),是一種面向?qū)ο蟆⒅弊g式的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,也是一種功能強(qiáng)大的通用型語(yǔ)言,已經(jīng)具有近二十年的發(fā)展歷史,成熟且穩(wěn)定。它包含了一組完善而且容易理解的標(biāo)準(zhǔn)庫(kù),能夠輕松完成很多常見的任務(wù)。Python的語(yǔ)法非常簡(jiǎn)捷和清晰,與其它計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言最大的不同在于,它采用縮進(jìn)來定義語(yǔ)句塊。
??Python的官方介紹是:Python是一種簡(jiǎn)單易學(xué),功能強(qiáng)大的編程語(yǔ)言,它有高效率的高層數(shù)據(jù)結(jié)構(gòu),能簡(jiǎn)單而有效地實(shí)現(xiàn)面向?qū)ο缶幊獭ython簡(jiǎn)潔的語(yǔ)法和對(duì)動(dòng)態(tài)輸入的支持,再加上解釋性語(yǔ)言的本質(zhì),使得它在大多數(shù)平臺(tái)上的很多領(lǐng)域都是一個(gè)理想的腳本語(yǔ)言,特別適用于快速的應(yīng)用程序開發(fā)。
??Python是由Guido van Rossem創(chuàng)建于1991年,并強(qiáng)調(diào)效率和代碼的可讀性。希望深入的數(shù)據(jù)分析或應(yīng)用統(tǒng)計(jì)技術(shù)的程序員是Python的主要用戶。
??當(dāng)你越需要在工程環(huán)境中工作,你會(huì)越喜歡Python。它是一種靈活的語(yǔ)言,在處理一些新東西上表現(xiàn)很好,并且注重可讀性和簡(jiǎn)單性,它的學(xué)習(xí)曲線是比較低的。
??和R類似,Python也有包,pypi是一個(gè)Python包的倉(cāng)庫(kù),里面有很多別人寫好的Python庫(kù)。
??Python也是一個(gè)大社區(qū),但它是一個(gè)有點(diǎn)比較分散,因?yàn)樗且粋€(gè)通用的語(yǔ)言。然而,Python自稱他們?cè)跀?shù)據(jù)科學(xué)中更占優(yōu)勢(shì)地位:預(yù)期的增長(zhǎng),更新穎的科學(xué)數(shù)據(jù)應(yīng)用的起源在這里。
3. R&Python相遇
- a).運(yùn)算速度:
??針對(duì)于程序速度的比較,有眾多的測(cè)試方法和不同的結(jié)果。比如,這個(gè)鏈接里的結(jié)果(http://attractivechaos.github.io/plb/)。
??綜合其他各個(gè)地方的測(cè)試結(jié)果,其實(shí)大體說來從基本運(yùn)算速度來說,Python > R. 但是要注意,這里所說的運(yùn)算速度是“基本計(jì)算”。也就是說不涉及引用特殊package,不用特殊數(shù)據(jù)結(jié)構(gòu)和運(yùn)算方式(比如R中的矢量化運(yùn)算)的運(yùn)算。而這樣的運(yùn)算比較很大程度上取決于基本程序邏輯的速度,比如for循環(huán)。R在這點(diǎn)的表現(xiàn)是很差的。基本上會(huì)比pyhon慢 3~10倍。
??但是,如果你愿意多花些心思更好的利用矢量化編程進(jìn)行計(jì)算,那么無(wú)論從程序的長(zhǎng)度來是速度上,都會(huì)使R的表現(xiàn)有顯著性提高。我之前的一個(gè)帖子做過這樣的比較 (http://bbs.pinggu.org/thread-1042435-1-1.html),具體的內(nèi)容就不重復(fù)了。總之,在這樣的使用方式下,對(duì)大部分運(yùn)算,R的速度是可以和python接近的,當(dāng)然,用戶也需要花更多地心思去優(yōu)化程序。
??除此之外,在實(shí)際使用的角度來說,數(shù)據(jù)分析在R中大部分時(shí)候使用已有的方法,因此可以使用眾多已經(jīng)成型的package。如果你使用的package質(zhì)量很好,通常在大計(jì)算量的程序中,作者實(shí)際使用的都是更低級(jí)更高效的語(yǔ)言(比如C, Fortran)。因此,這些大計(jì)算量的步驟實(shí)際上是以最高效的方式完成的。如果相應(yīng)的運(yùn)算在pyhon里面沒有調(diào)用其他低級(jí)語(yǔ)言的優(yōu)化,R就可以在這些方面勝過python。我這里說到的是不需要自己編寫的底層語(yǔ)言調(diào)用,在R和python中都可以實(shí)現(xiàn)調(diào)用別的語(yǔ)言,但是這需要用戶自己編程,從人工角度來講,專業(yè)性較高,不在討論范圍。
??整體來說,對(duì)于對(duì)R使用和編程有一定深入理解的人來說,我不認(rèn)為R做數(shù)據(jù)分析的速度會(huì)比python差。但是對(duì)于簡(jiǎn)單粗暴的編程方式,python的確更勝一籌。
- b).全面性:
??從這點(diǎn)來說,我認(rèn)為Python的確勝過R。無(wú)論是對(duì)其他語(yǔ)言的調(diào)用,和數(shù)據(jù)源的連接、讀取,對(duì)系統(tǒng)的操作,還是正則表達(dá)和文字處理,Python都有著明顯優(yōu)勢(shì)。畢竟,python本身是作為一門計(jì)算機(jī)編程語(yǔ)言出現(xiàn)的,而R本身只是源于統(tǒng)計(jì)計(jì)算。所以從語(yǔ)言的全面性來說,兩者差異顯著。
??綜上所述,本人認(rèn)為,對(duì)于本地文件直接的數(shù)據(jù)分析,大部分時(shí)候R是比較Python更好的 (速度相近,但分析更專業(yè))。如果涉及多方資源的協(xié)調(diào)(比如遠(yuǎn)程、數(shù)據(jù)庫(kù)、系統(tǒng)、網(wǎng)頁(yè)),那么最好的方式是將python和R相結(jié)合使用。
??當(dāng)然,每種語(yǔ)言有自己的學(xué)習(xí)曲線。因此學(xué)習(xí)本身也要多花時(shí)間,因此如何選取還要依賴于個(gè)人而論。
c).優(yōu)勢(shì)對(duì)比:
在以下領(lǐng)域中,Python 比R 更有優(yōu)勢(shì):
◆ 網(wǎng)絡(luò)爬蟲和數(shù)據(jù)抓取:雖然R中的rvest已經(jīng)簡(jiǎn)化了網(wǎng)頁(yè)抓取, Python的beautifulsoup和Scrapy更加成熟,并提供更多的功能。◆ 數(shù)據(jù)庫(kù)連接:雖然R有大量的用于連接到數(shù)據(jù)庫(kù)的選項(xiàng), Python的sqlachemy只用了一個(gè)程序包就提供了所有的數(shù)據(jù)庫(kù)連接功能,并可廣泛用于生產(chǎn)環(huán)境。而在以下領(lǐng)域中,R比Python更有優(yōu)勢(shì):
◆ 統(tǒng)計(jì)分析選項(xiàng):盡管Python的SciPy和 Pandas以及 statsmodels的組合提供了很大的一套統(tǒng)計(jì)分析工具,而R是專門圍繞著統(tǒng)計(jì)分析應(yīng)用等創(chuàng)建的,因此提供了更多的相關(guān)工具。◆ 交互式圖像或控制板:bokeh, plotly和intuitics最近都把Python的圖形使用擴(kuò)展到了Web瀏覽器,但是舉個(gè)使用shiny的例子,R中的shiny 控制面板運(yùn)行速度更快,而且往往需要更少的代碼。
此外,由于數(shù)據(jù)科學(xué)團(tuán)隊(duì)現(xiàn)在擁有一個(gè)比較廣泛的技能庫(kù),任何應(yīng)用程序所選擇的編程語(yǔ)言都可能用到以前的知識(shí)和經(jīng)驗(yàn)。對(duì)于一些應(yīng)用,特別是原型設(shè)計(jì)和開發(fā)應(yīng)用,人們使用他們已知的工具則速度會(huì)更快。
純文本 的“Air Gap(網(wǎng)閘)”策略
指在完全斷開網(wǎng)絡(luò)物理連接的基礎(chǔ)上,實(shí)現(xiàn)合法信息的共享。本文中指用純文本文件實(shí)現(xiàn)兩種語(yǔ)言間代碼的共享——譯者注。使用純文本作為兩種語(yǔ)言之間的物理隔離,你需要按如下步驟進(jìn)行。
1.從命令行中重構(gòu)你的R和Python腳本,并接受命令行參數(shù)。2.輸出共享數(shù)據(jù)到公共文件格式。3.在一種語(yǔ)言中執(zhí)行另一種語(yǔ)言,按要求傳遞參數(shù)。優(yōu)勢(shì):
★ 最簡(jiǎn)單的方法,通常最快★ 可以輕松查看中間輸出結(jié)果★ 已有常見文件格式,如: CSV , JSON , YAML的解析器劣勢(shì):
☆ 需要事先商定一個(gè)共同的模式或文件格式☆ 如果流程變長(zhǎng)的話,難以管理中間輸出結(jié)果和路徑☆ 如果數(shù)據(jù)量變大,本地磁盤讀寫將成為瓶頸
d).R和Python:數(shù)據(jù)科學(xué)行業(yè)的表現(xiàn):
★ 如果你看一下最近的民意調(diào)查,在數(shù)據(jù)分析的編程語(yǔ)言方面,R是明顯的贏家。★ 有越來越多的人從研發(fā)轉(zhuǎn)向Python。此外,有越來越多的公司使用這兩種語(yǔ)言來進(jìn)行組合。★ 如果你打算從事數(shù)據(jù)行業(yè),你用好學(xué)會(huì)這兩種語(yǔ)言。招聘趨勢(shì)顯示這兩個(gè)技能的需求日益增加,而工資遠(yuǎn)高于平均水平。
4. 總結(jié)
??這兩種語(yǔ)言從一開始都具有非常顯著的優(yōu)缺點(diǎn)。從歷史上看,盡管把兩者分割開來是因?yàn)榻逃尘?#xff1a;統(tǒng)計(jì)學(xué)家們傾向用R,而程序員則選擇了Python語(yǔ)言。然而,隨著數(shù)據(jù)科學(xué)家的增加,這種區(qū)別開始變得模糊起來。數(shù)據(jù)科學(xué)家就是這樣一種人:軟件工程師中最懂統(tǒng)計(jì)學(xué),統(tǒng)計(jì)學(xué)家中最會(huì)編程的人。由于這兩種語(yǔ)言各自提供大量獨(dú)特的庫(kù)資源,對(duì)能夠利用這兩種語(yǔ)言的相對(duì)優(yōu)勢(shì)的數(shù)據(jù)科學(xué)家的需求正在不斷增長(zhǎng)。
轉(zhuǎn)載于:https://www.cnblogs.com/cloudtj/articles/6362514.html
總結(jié)
以上是生活随笔為你收集整理的PythonR语言-python和r相遇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Alibaba代码检查工具插件
- 下一篇: 地外水平/斜面的太阳理论辐照度计算及其p