python 调用 R,使用rpy2
python 与 R 是当今数据分析的两大主流语言。作为一个统计系的学生,我最早接触的是R,后来才接触的python。python是通用编程语言,科学计算、数据分析是其重要的组成部分,但并非全部;而R则更偏重于统计分析,毕竟R是统计学家发明的,本身就是为统计而生。python的优势在于其全能性,几乎所有的领域都有python的身影,而R则在统计及其相关领域非常专业。二者各有优势。那么这么好的两个东西,能不能结合到一起呢?答案是肯定的。要想实现这种功能,一般必须要提供相应的调用接口。rpy2这个第三方库就提供了python调用R的接口。本文主要介绍rpy2的简单使用。
其实,在前一段时间,我就曾经尝试过安装rpy2,但是只在linux环境下安装成功了,在windows下总是安装失败。直到最近,我发现了一个非官方的python第三方库下载网址:
http://www.lfd.uci.edu/~gohlke/pythonlibs。这个网址提供的第三方库还是比较全的,而且是都是编译好的.whl文件,各个版本的都有,比如Pymediea,rpy2等比较难找的库这里都有,所以特此在这里分享给大家。找到rpy2这个库,由于我的python版本是2.7 64位,所以选择http://www.lfd.uci.edu/~gohlke/pythonlibs/tuoh5y4k/rpy2-2.7.8-cp27-none-win_amd64.whl这个地址下载。下载完成之后,解压,将解压后的全部文件放入python的site-packages目录下。还要做的一件重要的事情是增加环境变量R_HOME,将其值设置为电脑中R的安装路径。设置好了之后,发现 import rpy2 就可以正常导入了。
常用的命令:
1. import rpy2.robjects as robjects 这个命令是导入 r对象
2. robjects.r("r_script") 可以执行r代码,比如 pi = robjects.r('pi') 就可以得到 R 中的PI(圆周率),返回的变量pi是一个向量,或者理解为python中的列表,通过
pi[0] 就可以取出圆周率的值。
3. robjects.r.source(“file.r”)可以执行r脚本文件。例子如下:
robjects.r.source('plot_demo.r')
plot_demo.r 内容如下:
# R 语言测试脚本
x <- c(1,2,3,4)
y <- x*x
jpeg(file="plot.jpg") # 保存图像
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({'a':[1,2],'b':[3,4]}))
得到结果如下:
[1] 1 2 3
[1] a a b c
Levels: a b c
[1] 1.2 2.3
<environment: namespace:base>
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中交互使用的实例可以参考:http://nbviewer.jupyter.org/gist/xccds/d692e468e21aeca6748a
python 调用 R,使用rpy2的更多相关文章
- Python调用R编程——rpy2
在Python调用R,最常见的方式是使用rpy2模块. 简介 模块 The package is made of several sub-packages or modules: rpy2.rinte ...
- Python调用R语言
网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...
- 用python调用R做数据分析-准备工作
0.R的介绍 R是自由软件,不带不论什么担保.在某些条件下你能够将其自由散布,用'license()'或'licence()'来看散布的具体条件. R是个合作计划.有很多人为之做出了贡献,用'cont ...
- python调用R语言,关联规则可视化
首先当然要配置r语言环境变量什么的 D:\R-3.5.1\bin\x64; D:\R-3.5.1\bin\x64\R.dll;D:\R-3.5.1;D:\ProgramData\Anaconda3\L ...
- 数据挖掘之Python调用R包、函数、脚本
Python中集成R :参考博客http://blog.csdn.net/weidelight/article/details/44946785
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ...
- python调用c\c++
前言 python 这门语言,凭借着其极高的易学易用易读性和丰富的扩展带来的学习友好性和项目友好性,近年来迅速成为了越来越多的人们的首选.然而一旦拿python与传统的编程语言(C/C++)如来比较的 ...
- python调用zabbix接口实现Action配置
要写这篇博客其实我的内心是纠结的,老实说,我对zabbix的了解实在不多.但新公司的需求不容置疑,当我顶着有两个头大的脑袋懵懵转入运维领域时,面前摆着两百多组.上千台机器等着写入zabbix监控的需求 ...
- python调用ggsci.exe程序
需求:通过python调用windows server 2008下的ogg同步程序,实现图形化控制. 简单GUI
随机推荐
- 合并 CentOS 6.8 的两个ISO镜像
合并 CentOS 6.8 的两个ISO镜像 1.创建相关目录: [root@local ~] mkdir -p /mnt/dvd1 /mnt/dvd2 /mnt/dvd3 /mnt/iso 说明: ...
- Asp.net Mvc 与 Web Api生命周期对比
完整的生命周期比较复杂,对细节感兴趣的同学可购买老A的图书学习:传送门 本文只简单讲述路由注册.controller创建.action选择的3个主逻辑线,其他的内容大家可自己阅读相应的代码 先上二者单 ...
- 52e174ef38c96afbbeabe55d2ec53622 我知道这是什么
52e174ef38c96afbbeabe55d2ec53622 我知道这是什么52e174ef38c96afbbeabe55d2ec53622 我知道这是什么52e174ef38c96afb ...
- 线性表的顺序存储结构的实现及其应用(C/C++实现)
存档--- #include <stdio.h> #include <stdlib.h> typedef int ElemType; #define MAXSIZE 10 #i ...
- HDU 2147 kiki's game(规律,博弈)
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/10000 K (Java/Others)Total ...
- CodeForces 543D:Road Improvement
题目:http://codeforces.com/problemset/problem/543/D 题意:给你一棵树,一开始边都是0,可以使任意的边变成1,对于每一个根节点求使得它到其他任一点的路径上 ...
- Max Sum(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others) ...
- sublime text 3如何安装插件
原博客地址:http://blog.csdn.net/weixin_40682842/article/details/78727266 我自己的部分操作如下: 学习Sublime Text扩展插件的安 ...
- 基于TypeScript装饰器定义Express RESTful 服务
前言 本文主要讲解如何使用TypeScript装饰器定义Express路由.文中出现的代码经过简化不能直接运行,完整代码的请戳:https://github.com/WinfredWang/expre ...
- Unity 小笔记
1,Time.deltatime放在Update和fixedupdate中得到的值是不一样的.还以为是通过两个值来获取. 2,VR中绘制射线可以使用LineRender. 3,Unity中判断一个东西 ...