python 與 r 是當今資料分析的兩大主流語言。作為乙個統計系的學生,我最早接觸的是r,後來才接觸的python。python是通用程式語言,科學計算、資料分析是其重要的組成部分,但並非全部;而r則更偏重於統計分析,畢竟r是統計學家發明的,本身就是為統計而生。python的優勢在於其全能性,幾乎所有的領域都有python的身影,而r則在統計及其相關領域非常專業。二者各有優勢。那麼這麼好的兩個東西,能不能結合到一起呢?答案是肯定的。要想實現這種功能,一般必須要提供相應的呼叫介面。rpy2這個第三方庫就提供了python呼叫r的介面。本文主要介紹rpy2的簡單使用。
常用的命令:
1. import rpy2.robjects as robjects 這個命令是匯入 r物件
2. robjects.r("r_script") 可以執行r**,比如 pi = robjects.r('pi') 就可以得到 r 中的pi(圓周率),返回的變數pi是乙個向量,或者理解為python中的列表,通過
pi[0] 就可以取出圓周率的值。
robjects.r.source('plot_demo.r
')
plot_demo.r 內容如下:
#r 語言測試指令碼
儲存影象
plt <- plot(x,y) #
畫散點圖
dev.off() #
關閉裝置
執行上面的**後,就可以得到一幅名為 plot.jpg的散點圖了。
a = robjects.r('a<-c(1,2,3)')
print(a)
執行得到 [1] 1 2 3
x = robjects.r('x')y = robjects.r('y')
print(x)
print(y)
執行得到:
[1] 1 2 3 4
[1] 1 4 9 16
當然rpy2不僅可以將r的資料物件轉換為python的變數(或物件),還以將python的列表,字典等資料型別轉換為r的向量或資料框型別,對應的函式有 robjects.intvector(),
robjects.floatvector()等,看這些名字基本就知道幹嘛的了。舉例如下:
print(robjects.intvector([1,2,3]))print(robjects.factorvector(['
a','
a','
b','c'
]))print(robjects.floatvector([1.2,2.3]))
print(robjects.baseenv) #
基本環境空間
print(robjects.dataframe())
得到結果如下:
[1] 1 2 3
[1] a a b c
levels: a b c
[1] 1.2 2.3
a.1l a.2l b.3l b.4l
1 1 2 3 4
最後,再來看乙個複雜一點的r**在python中的執**況。
r_script = '''library(randomforest) # 匯入隨機森林包
## use data set iris
data = iris # 使用鳶尾花資料集
table(data$species)
## create a randomforest model to classfy the iris species
# 建立隨機森林模型給鳶尾花分類
iris.rf <- randomforest(species~., data = data, importance=t, proximity=t)
print('--------here is the random model-------')
print(iris.rf)
print('--------here is the names of model-----')
print(names(iris.rf))
confusion = iris.rf$confusion
print(confusion)
'''robjects.r(r_script)
得到結果如下:
randomforest 4.6-12
type rfnews() to see new features/changes/bug fixes.
[1] "--------here is the random model-------"
call:
randomforest(formula = species ~ ., data = data, importance = t, proximity = t)
type of random forest: classification
number of trees: 500
no. of variables tried at each split: 2
oob estimate of error rate: 4%
confusion matrix:
setosa versicolor virginica class.error
setosa 50 0 0 0.00
versicolor 0 47 3 0.06
virginica 0 3 47 0.06
[1] "--------here is the names of model-----"
[1] "call" "type" "predicted" "err.rate"
[5] "confusion" "votes" "oob.times" "classes"
[9] "importance" "importancesd" "localimportance" "proximity"
[13] "ntree" "mtry" "forest" "y"
[17] "test" "inbag" "terms"
setosa versicolor virginica class.error
setosa 50 0 0 0.00
versicolor 0 47 3 0.06
virginica 0 3 47 0.06
最後,關於python與r在jupyter notebook中互動使用的例項可以參考:
python 呼叫 R,使用rpy2
python 與 r 是當今資料分析的兩大主流語言。作為乙個統計系的學生,我最早接觸的是r,後來才接觸的python。python是通用程式語言,科學計算 資料分析是其重要的組成部分,但並非全部 而r則更偏重於統計分析,畢竟r是統計學家發明的,本身就是為統計而生。python的優勢在於其全能性,幾乎...
win下實現Python通過rpy2呼叫R
python呼叫r,解決方案是通過rpy2這個專門的模組來實現。嘗試很多方案後,下面的混搭方案成功。系統 win8 64bit python2.7.4 32bit r3.0.1 i386 w64 mingw32 i386 32bit rpy2 2.3.7 32bit pywin32 for py2....
安裝 rpy2 中的問題
參考 1 的redme.md python3中 jupyter notebook中rpy2的安裝 1 先安裝r和rstudio 2 安裝 rpy2 參考 2 通過pip install 安裝這個包,3 python 中通過 import rpy2和 import rpy2.robjects as r...