放棄 PK,擁抱合作——R和Python 能做出什麼新花樣?
本文為 AI 研習社編譯的技術博客,原標題 :
From 『R vs Python』 to 『R and Python』
作者 |Parul Pandey
翻譯 | 醬番梨、董星、CONFIDANT、穿著涼鞋走天下
校對 | 約翰遜?李加薪 審核 | Pita 整理 | 立魚王
https://towardsdatascience.com/from-r-vs-python-to-r-and-python-aa25db33ce17
我們更應該關注的是技能,而不是工具。
如果你想進入數據科學領域,你可能立即會想到R和Python。然而,我們並不是要以作為兩種選擇來考慮他們,相反地,我們更多的是去比較他們。R和Pyhton在他們各自的領域裡,都是非常完美的工具。儘管如此,他們往往成為各自敵人而爭吵。如果你在谷歌搜索欄里輸入「R vs Python」,你會看到非常多的關於他們霸權之爭。
產生這種觀點的原因之一是,人們根據所使用的編程語言的選擇將數據科學領域劃分為不同的陣營——R陣營和Python陣營,歷史證明了兩個陣營不能和諧相處。兩大陣營的成員都堅信他們對語言的選擇優於對方。所以,在某種程度上,分歧不在於工具,而在於使用這些工具的人。
為啥不能將兩者結合?
在數據科學領域中有一些人同時使用Python和R,但是他們的比例很小。另一方面,有很多人只致力於一種編程語言,但他們希望能夠使用對手的一些功能。例如,R用戶有時渴望Python固有的面向對象能力,同樣地,一些Python用戶渴望R中可用的統計分布的廣泛範圍。
上圖顯示的是Red Monk在2018年第三季度的調查結果。這些結果是基於Stack Overflow和Github上流行的語言得出的,並清楚地表明R和Python的評分都很高。因此,我們沒有內在的理由不能在同一個項目上與他們一起工作。我們的最終目標應該是做更好的分析,得出更好的見解,選擇一種編程語言不應該成為實現這一目標的障礙。
縱觀R和python
讓我們來看看這兩種語言的各個方面和他們有哪些優勢與弊端。
pyhton
自發佈於與1991年,pyhton變得十分流行並且它廣泛地用於數據處理。以下就是python為什麼這麼流行的原因:
面對對象
通用
有大量的擴展庫和無與倫比的社區支持
易於理解和學習
由於擁有大量用於科學計算和機器學習的包,例如pandas,numpy 和scikit-learn,這使得在機器學習領域中,python變成了一個完美的選擇.
不幸的是,pyhton並沒有專門用於統計計算的包。但是,R有.
R
R在1995年發布。從那時候開始,R在數據科學領域就變成了最有用的工具之一。它具有如下優勢
R幾乎擁有所能想到的用於統計計算的包。CRAN目前已經擁有超過10000個包了。
配備了完美的可視化庫,例如ggplot
能夠進行獨立分析
R雖然性能如此強大,但是它不是最快的語言並且在處理大數據集的時候可能會消耗大量的內存。
兩全其美
我們可以利用R的統計能力和Python的編程能力嗎?那麼,當我們可以很容易地在R或Python腳本中嵌入SQL代碼時,為什麼不將R和Python混合在一起呢?
基本上有兩種方法可以同時在一個項目中使用Python和R。
Python中的R
PypeR
PypeR提供了一種通過管道從Python訪問R的簡單方法。PypeR還包含在Python的包索引中,這為安裝提供了更方便的方法。當不需要在Python和R之間頻繁地交互數據傳輸時,PypeR特別有用。通過管道運行R, Python程序在子進程式控制制、內存控制和跨流行操作系統平台(包括Windows、GNU Linux和Mac OS)的可移植性方面獲得了靈活性。
pyRserve
pyRserve使用Rserve作為RPC連接網關。通過這樣的連接,可以在Python的R中設置變數,也可以遠程調用R函數。R對象作為python實現的類的實例公開,在許多情況下,R函數作為這些對象的綁定方法。
rpy2
rpy2在Python進程中運行嵌入式R。它創建了一個框架,可以將Python對象轉換為R對象,將它們傳遞給R函數,並將R輸出轉換回Python對象。rpy2使用得更多,因為它是一個正在積極開發的。
rpy2在Python進程中運行嵌入式R。它創建了一個框架,可以將Python對象轉換為R對象,將它們傳遞給R函數,並將R輸出轉換回Python對象。由於它是一個正在積極開發的項目,所以它被使用得更頻繁。
Basic Plot
https://rpy2.github.io/doc/latest/html/graphics.html#plot
Geometry
https://rpy2.github.io/doc/latest/html/graphics.html#geometry
資源
想要更深入地了解rpy2,請參閱以下資源:
rpy2』s Official Documentation
RPy2: Combining the Power of R Python for Data Science
Accessing R from Python using RPy2
R調用Python
我們可以選擇以下的一種方法在Python中運行R腳本:
rJython
這個工具包使用Jython實現到Python的介面。它的目的是使其他包能夠在R中嵌入Python代碼。
rPython
rPython也是一種工具包,使得R語言可以調用Python。使用rPython,通過R語言可以運行Python代碼,調用函數,分配和檢索變數等。
SnakeCharmR
SnakeCharmR是改良版的 rPython。它源於 rPython 的 "jsonlite" 分支,相比於 rPython 有諸多提升。
PythonInR
PythonInR提供了R與Python交互的函數,簡化了通過R訪問Python的過程。
reticulate
reticulate包為Python和R之間的協同操作提供了全套工具。 在以上提供的所有方法中,reticulate被最廣泛使用,更重要的是,它使用Rstudio開發的。Reticulate將Python會話嵌入到R會話中,支持無縫、高性能的交互性能。 該包使您能夠將Python代碼編織到R中,從而創建一種將兩種語言融合在一起的新項目。
reticulate 包提供下列工具:
支持從R中以多種方式調用Python,包括R標記、載入Python腳本、導入Python模塊,以及在R會話中互動式地使用Python。
實現R和Python對象之間的轉換 (例如:R和Pandas數據幀之間,或者R矩陣和NumPy數組之間的轉換)。
靈活地綁定到不同版本的Python,包括虛擬環境和Conda環境。
資源
使用網狀包的一些很好的資源是:
文檔非常健壯,有很多示例和用例可以幫助您入門(請點擊原文查看文檔)。
https://longhowlam.wordpress.com/2017/04/10/test-driving-python-integration-in-r-using-the-reticulate-package/
SNAKES IN A PACKAGE: COMBINING PYTHON AND R WITH RETICULATE
結論
R和Python都是非常健壯的語言,它們中的任何一種實際上都足以執行數據分析任務。然而,這兩者肯定都有一些高和低的點,如果我們能利用兩者的優勢,我們可以做得更好。無論哪種方式,掌握這兩方面的知識都將使我們更加靈活,從而增加我們能夠在多種環境中工作的機會。
引用:Interfacing R and Python?—?Andrewhttp://blog.yhat.com/tutorials/rpy2-combing-the-power-of-r-and-python.html
※特徵工程自動化如何為機器學習帶來重大變化
※Andrew Ng的《Machine Learning Yearning》中六個重要概念
TAG:AI研習社 |