作者:JJ Allaire
翻譯:黃小偉,先后從事游戲、社交及金融數(shù)據(jù)研究及應(yīng)用相關(guān)工作,目前就職網(wǎng)易杭州
一. 基礎(chǔ)介紹
CRAN已于2018年3月21日收錄reticulat包(1.6版本),它包含了用于Python和R之間協(xié)同操作的全套工具,在R和Rstudio中均可使用。主要包括:
1)在R中支持多種方式調(diào)用Python。包括R Markdown、加載Python腳本、導(dǎo)入Python模塊以及在R會(huì)話中交互式地使用Python。
2)實(shí)現(xiàn)R和Python對(duì)象之間的轉(zhuǎn)換(例如R和Python數(shù)據(jù)框、R矩陣與NumPy數(shù)組之間)。
3)靈活綁定到不同版本的Python,包括虛擬環(huán)境和Conda環(huán)境。
在R會(huì)話中嵌入了Python會(huì)話,從而實(shí)現(xiàn)了無縫的、高性能的互操作性。如果你是使用Python進(jìn)行某些工作的R開發(fā)人員或使用兩種語言的數(shù)據(jù)科學(xué)團(tuán)隊(duì)的成員,那么reticulate包可以極大地簡化你的工作流程!
二. 操作說明
1. reticulate包安裝
install.packages('reticulate')
library('reticulate')
2. R Markdown中應(yīng)用Python
reticulate包含一個(gè)用于R Markdown的Python引擎,具有以下功能:
1)可在R會(huì)話中嵌入的單個(gè)Python會(huì)話中,運(yùn)行Python塊。同時(shí)Python塊之間的共享變量/狀態(tài)。
2)可打印Python輸出,包括matplotlib的圖形輸出。
3)可使用py對(duì)象訪問R中Python塊中創(chuàng)建的對(duì)象。
4)使用r對(duì)象從Python中訪問在R塊中創(chuàng)建的對(duì)象。
同時(shí),內(nèi)置了許多用于Python對(duì)象類型轉(zhuǎn)換的方法,包括NumPy數(shù)組和Pandas數(shù)據(jù)框。 例如,你可以使用Pandas讀取和操作數(shù)據(jù),然后使用ggplot2輕松繪制Pandas數(shù)據(jù)框:
注釋:加載安裝reticulate時(shí),默認(rèn)情況下都會(huì)在R Markdown中啟用Python引擎
3. 加載Python模塊
可以使用函數(shù):import() 導(dǎo)入任何Python模塊并從R中調(diào)用它。例如,此代碼導(dǎo)入Python os模塊并調(diào)用函數(shù):listdir()
library(reticulate)
os <- import('os')
os$listdir('.')
可以通過$運(yùn)算符訪問Python模塊和類中的函數(shù)和其他數(shù)據(jù)(類似于與R列表,環(huán)境或引用類進(jìn)行交互的方式)
4. 載入Python腳本
可以使用函數(shù):source_python()獲取任何Python腳本,就像使用R腳本一樣。如果你有以下Python腳本:flights.py
import pandas
def read_flights(file):
flights = pandas.read_csv('flights.csv')
flights = flights[flights['dest'] == 'ORD']
flights = flights[['carrier', 'dep_delay', 'arr_delay']]
flights = flights.dropna()
return flights
然后,你可以編寫腳本源代碼并按如下所示調(diào)用函數(shù):read_flights()
source_python('flights.py')
flights <- read_flights('flights.csv')
library(ggplot2)
ggplot(flights, aes(carrier, arr_delay)) geom_point() geom_jitter()
5. Python REPL
如果你想以交互方式使用Python,則可以調(diào)用函數(shù):repl_python(),該函數(shù)提供了嵌入在R會(huì)話中的Python REPL。 在Python REPL中創(chuàng)建的對(duì)象,可以通過reticulate導(dǎo)出py對(duì)象,并在R中進(jìn)行調(diào)用。 例如:
在Python REPL中輸入exit以返回到R提示符。同時(shí),Python代碼還可以使用r對(duì)象訪問R會(huì)話中的對(duì)象(例如r.flights)
6. 類型轉(zhuǎn)換
當(dāng)調(diào)用Python時(shí),R數(shù)據(jù)類型會(huì)自動(dòng)轉(zhuǎn)換為它們等效的Python類型。 當(dāng)值從Python返回到R時(shí),它們會(huì)被轉(zhuǎn)換回R類型。 類型轉(zhuǎn)換如下:
如果返回自定義類的Python對(duì)象,則返回該對(duì)象的R引用。
7. 更多學(xué)習(xí)
reticulate網(wǎng)站(https://rstudio.github.io/reticulate/) 包括了使用該軟件包的詳細(xì)文檔,主要包括:
1)Calling Python from R : 介紹從R訪問Python對(duì)象的各種方法以及可用于更高級(jí)的交互和轉(zhuǎn)換行為的函數(shù)。
2)R Markdown Python Engine : 提供有關(guān)在R Markdown文檔中使用Python塊的詳細(xì)信息,包括如何從R塊調(diào)用Python代碼,反之亦然。
3)Python Version Configuration Python版本配置 : 描述用于確定R會(huì)話中使用哪個(gè)版本的Python的工具。
4)Installing Python Packages : 有關(guān)從PyPI或Conda安裝Python軟件包的文檔,以及使用virtualenvs和Conda環(huán)境管理軟件包安裝的文檔。
5)Using reticulate in an R Package : 在R軟件包中使用reticulate的準(zhǔn)則和最佳實(shí)踐。
6)Arrays in R and Python : 深層次討論R和Python中數(shù)組之間的差異以及對(duì)轉(zhuǎn)換和互操作性的影響。
參考資料:
1.reticulate網(wǎng)站: https://rstudio.github.io/reticulate/
2.源碼學(xué)習(xí): https://github.com/rstudio/reticulate
3.問題反饋: https://github.com/rstudio/reticulate/issues
課程信息
聯(lián)系客服