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

时间: 2024-10-13 08:21:48

python 调用 R,使用rpy2的相关文章

用python调用R做数据分析-准备工作

0.R的介绍 R是自由软件,不带任何担保,在某些条件下你可以将其自由散布,用'license()'或'licence()'来看散布的详细条件. R是个合作计划,有许多人为之做出了贡献,用'contributors()'来看合作者的详细情况,用'citation()'会告诉你如何在出版物中正确地引用R或R程序包,用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或用'help.start()'通过HTML浏览器来看帮助文件. 用'q()'退出R. demo(graphics

利用Python调用HBASE

利用Python调用HBASE的 需要安装thrift hbase-thrift 启动hbase的thrift服务:bin/hbase-daemon.sh start thrift 默认端口是9090 mysql 到hbase的数据同步: 1.put 2.Importtsv 3.编写MapReduce Job导入 4.sqoop 简单code: #!/usr/bin/env python #coding=utf-8 import sys sys.path.append('/usr/lib/pyt

Python调用7zip命令实现解压

Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Python调用dos命令 ,紧跟着的x -r这些全是参考7zip使用书册,及抽取文件夹下所有的以mp4结尾的文件,把文件放入e盘,测试解压文件夹下的new文件夹 # 调用7z命令批量解压文件 import os folder_name = input("请输入文件夹:") os.chdir(f

Python调用微博API

上头叫通过微博ID获取用户发布过的历史微博内容,于是研究了下新浪微博提供的API 1 首先在微博开放中心下"创建应用"创建一个应用,应用信息那些随便填,填写完毕后,不需要提交审核,需要的只是那个app-key和app-secret 2 在"微博开放平台"的"管理中心"找到刚才创建的应用,点开这个应用,点开左边"应用信息"栏,会看见"App key"和"App Secret"的字样,这两个

简谈-如何使用Python和R组合完成任务

概述 和那些数据科学比赛不同,在真实的数据科学中,我们可能更多的时间不是在做算法的开发,而是对需求的定义和数据的治理.所以,如何更好的结合现实业务,让数据真正产生价值成了一个更有意义的话题. 数据科学项目的完整流程通常是这样的五步骤: 需求定义=>数据获取=>数据治理=>数据分析=>数据可视化 一.需求定义 需求定义是数据科学项目和数据科学比赛的最大不同之处,在真实情景下,我们往往对目标函数.自变量.约束条件都并不清晰.需要通过访谈.论文.文档等等形式对问题进行系统地分析,将实际问

测试:python调用cmd命令三种方法

目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中"exit 1"的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,则函数的返回值是0×100,换算为10进制得到256. 如果我们需要获得os.system的正确返回值,那使用位移运算可以还原返回值: >>>

Python与R的区别和联系

转载:http://bbs.pinggu.org/thread-3078817-1-1.html 有人说Python和R的区别是显而易见的,因为R是针对统计的,python是给程序员设计的,其实这话对Python多多少少有些不公平.2012年的时候我们说R是学术界的主流,但是现在Python正在慢慢取代R在学术界的地位.不知道是不是因为大数据时代的到来. Python与R相比速度要快.Python可以直接处理上G的数据:R不行,R分析数据时需要先通过数据库把大数据转化为小数据(通过groupby

python 调用cmd,不显示cmd黑框

python 调用系统命令的方式有很多 1.1   os.system(command) 在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态.这实际上是使用C标准库函数system()实现的.这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果. 1.2   os.popen(command,mode) 打开一个与command进程之间的管道.这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默

Perl 调用R分词进行文本数据分析

最近有一个文本分析的需求,因分析系统用的是Perl,而Perl下优秀的中文文本分析包又少,所以调用R处理文本数据. 为什么不用Python 尽管Python拥有完备的NLP开源包支持,但是理由也很简单——因为Python目前接触不多,不敢班门弄斧,Python以后再说.目前,也只是需要的是一个快速原型,如果生产数据剧增,后期还需用c++重构下核心算法(顺便提一下,HMM就不重写了,吃力不讨好). 如何开始 1.安装R程序,将R程序安装路径加入环境变量. 2.测试命令行批跑功能 cmd 输入 Rs