这篇关于R Views的文章是关于Python的!令人吃惊的是,我知道。Python有几个编写良好的用于统计和数据科学的包,但是R的中央存储库CRAN包含数千个实现复杂统计算法的包,这些算法经过多年的实地测试。多亏了rpy2包,Pythonistas可以利用R社区已经完成的伟大工作。rpy2提供了一个接口,允许您在Python进程中运行R。用户可以在两种语言之间切换,并使用这两种编程语言的最佳功能。
下面,我将向您介绍如何从Python调用三个强大的R包:stats、lme4和ggplot2。每个部分都包含详细的步骤,您可以在附录.
从rpy2开始
安装rpy2
首先,安装一些软件包。必须安装Python >=3.7和R >= 4.0才能使用rpy2 3.5.2。安装R之后,通过运行来安装rpy2包pip安装rpy2
.如果想查看rpy2在机器上的安装位置,可以运行rpy2python - m rpy2.situation
.
如果您使用的是Jupyter笔记本,您可能希望在笔记本中查看ggplot2图。运行conda安装r-ggplot2
在木星环境中,这样它们才会出现。
安装
PIP安装rpy2 conda安装r-ggplot2
导入rpy2包和子包
然后,您将导入包和子包。通过运行导入顶级rpy2包进口rpy2
.
导入顶层子包robjects
与进口rpy2。robjectsas robjects
.运行robjects
也会在当前Python进程中初始化R。
还有一些其他的步骤可以让在笔记本上工作更容易一些:
- rpy2定制R对象的显示,例如笔记本中的数据帧。运行
rpy2.ipython.html.init_printing ()
启用此自定义。 - 您可能希望在笔记本的输出单元格中看到ggplot2对象。使这
从rpy2.ipython。ggplot进口image_png
.
导入rpy2包和子包
Import rpy2 Import rpy2。robjects作为robjects## To aid in printing HTML in notebooks import rpy2.ipython.html rpy2.ipython.html.init_printing() ## To see plots in an output cell from rpy2.ipython.ggplot import image_png
使用rpy2安装和加载R包
安装和加载R包通常是R脚本的第一步。rpy2包提供了一个函数rpy2.robjects.packages.importr ()
模仿这些步骤。运行下面的代码,您还将导入该函数数据()
为以后。
从rpy2.robjects。Packages import importr, data
使用importr ()
来加载utils和基本包,它们通常预先安装在R中。
Utils = importr(' Utils ') base = importr('base')
您还可以使用rpy2从包存储库(如CRAN)下载和安装包。
首先,选择你想要的镜子utils.chooseCRANmirror ()
并安装您的软件包utils.install_packages ()
.下面,您将安装stats和lme4。
utils.install_packages utils.install_packages(“统计数据”)(“lme4”)
安装后,用importr ()
.
lme4 = importr(' Stats ')
使用rpy2安装和加载ggplot2
rpy2文档推荐了一种不同的安装ggplot2的方法:
进口rpy2.robjects.lib。ggplot2作为ggplot2
R包的安装
从rpy2.robjects。packages import importr, data utils = importr('utils') base = importr('base') utils. choosecranmirror (ind=1) utils.install_packages('lme4') utils.install_packages('stats') stats = importr('stats') lme4 = importr('lme4') import rpy2. objects.libggplot2作为ggplot2
使用Python接口R
设置好一切后,您就可以开始使用Python界面了!然而,这并不像在你的Jupyter笔记本上写R代码那么简单。你必须“翻译”R函数才能从Python调用它们。
下面,我将分析lme4的睡眠研究数据。这些数据代表了睡眠剥夺研究中受试者每天的平均反应时间(以毫秒为单位)。在第0-1天,受试者有正常的睡眠时间。第二天是基准,之后开始睡眠剥夺。
使用rpy2中的数据
你可以使用rpy2从R包中'获取'数据。下面的代码等价于lme4: sleepstudy
注意你用了数据()
功能导入前:
Sleepstudy = data(lme4).fetch(' Sleepstudy ')[' Sleepstudy ']睡眠研究
反应 | 天 | 主题 | ||
---|---|---|---|---|
0 | 1 | 249.56 | 0.0 | 308 |
1 | 2 | 258.7047 | 1.0 | 308 |
2 | 3. | 250.8006 | 2.0 | 308 |
3. | 4 | 321.4398 | 3.0 | 308 |
4 | 5 | 356.8519 | 4.0 | 308 |
5 | 6 | 414.6901 | 5.0 | 308 |
6 | 7 | 382.2038 | 6.0 | 308 |
7 | 8 | 290.1486 | 7.0 | 308 |
... | ... | ... | ... | ... |
178 | 179 | 369.1417 | 8.0 | 372 |
179 | 180 | 364.1236 | 9.0 | 372 |
使用Python中的ggplot2可视化数据
ggplot2包为创建图形提供了灵活而健壮的功能。我们可以在Python中绘制数据,并对常用的ggplot2语法进行一些调整。
从睡眠研究中可视化天数和反应时间之间的关系:
Gp = ggplot2.ggplot(sleepstudy) p1 = (Gp + ggplot2。aes_string(x = 'Days', y = 'Reaction') + ggplot2。geom_point(颜色= '#648FFF', alpha = 0.7) + ggplot2。Geom_smooth (method = 'lm', color = 'black') + ggplot2.theme_minimal())显示(image_png(p1))
R[写入控制台]:' geom_smooth() '使用公式'y ~ x'
使用rpy2运行模型并查看结果
您可以在Python中利用R的统计功能。调用lm ()
函数使用rpy2编写一个线性模型:
lm1 =统计数据。lm('反应~天数',数据=睡眠研究)#打印(base.summary(lm1))
打印匹配对象print (base.summary (lm1))
显示用于执行匹配的代码而且结果。为了简单起见,将输出限制为系数:
print (stats.coef (lm1))
(截距)天251.40510 10.46729
同时打印95%置信区间:
print (stats.confint (lm1))
2.5% 97.5%(截距)238.360753 264.44946天8.023855 12.91072
结果显示,睡眠不足天数越多,反应时间越慢。然而,你可能会意识到线性模型掩盖了整个研究对象的变化。为了说明这些差异,您可以使用ggplot2分别绘制每个受试者的反应vs.天数facet_wrap ()
:
p2 = (p1 + ggplot2.facet_wrap)~主题”),* *{“ncol”:6}))显示(image_png (p2))
R[写入控制台]:' geom_smooth() '使用公式'y ~ x'
图表显示,平均反应时间与睡眠不足天数呈近似线性增长。然而,斜率和截距因主题而异。
您可以使用lme4包创建一个模型,该模型计算睡眠不足天数对反应时间的固定影响,同时考虑每个人的开始反应时间和差异。
fm1 = lme4。lmer(“反应~天数+(天数|受试者)”,数据=睡眠研究)打印(base.summary(fm1))
以下是总结的输出,简写为结果:
收敛时REML准则:1743.6尺度残差:最小1Q中值3Q Max -3.9536 -0.4634 0.0231 0.4634 5.1793随机效应:组名称方差st . dev。相关对象(截距)612.10 24.741天35.07 5.922 0.07剩余654.94 25.592对象数量:180个,组:受试者,18个固定效果:估计标准差(截距)251.405 6.825 36.838天10.467 1.546 6.771固定效果相关性:(Intr)天-0.138
截距和斜率随机效应的标准差估计分别为24.74 ms和5.92 ms/day。固定效应系数分别为251.4 ms和10.47 ms/day。这些结果与R输出的结果相匹配。1
学习如何使用rpy2
使用rpy2进行了一些调查工作。有一些R函数,我认为转换成Python会很简单,但它们最终变得更复杂。
例如,我想确认每个被试都有不同的线性模型结果。的子集()
函数是底数R的一部分,所以我想我可以运行:
lm1 =统计数据。lm('反应~天',数据=基础。睡眠研究,受试者== 308)
不幸的是,这是不正确的。我读着书找到了答案提取项目部分的文档。在学习了rpy2如何使用R数据帧之后,我能够找到数据子集的实际方法:
lm308 =统计数据。lm(“反应~天数”,数据= sleepstudy.rx(sleepstudy.rx(“受试者”)。ro == 308, True)) print(stats.confint(lm308))
2.5% 97.5%(截距)179.433863 308.95148天9.634267 33.89514
您需要掌握一些Python知识,才能更灵活地使用rpy2接口。例如,定义列数的能力* *{“ncol”:6}
在facet_wrap ()
以上内容不在rpy2文档中。拆包值和关键字参数,用* * {}
,是一般Python语法的一部分。
了解更多
Python用户可以通过多种方式在脚本中利用R包和函数。rpy2对于那些想要使用R社区有影响力的工作的人来说是一个很有帮助的工具。正如rpy2文档“重用。把事情做好。不重装。”
- 读了官方文档.
- 文档中包含关于的帮助在笔记本中使用rpy2.
- 检查lme4装饰图案.
附录
#安装pip install rpy2 conda install r-ggplot2 #导入rpy2包和子包Import rpy2 Import rpy2robjects作为robjects## To aid in printing HTML in notebooks import rpy2.ipython.html rpy2.ipython.html.init_printing() ## To see plots in an output cell from rpy2.ipython.ggplot import image_png # Installation of R packages from rpy2.robjects.packages import importr, data utils = importr('utils') base = importr('base') utils.chooseCRANmirror(ind=1) utils.install_packages('lme4') utils.install_packages('stats') stats = importr('stats') lme4 = importr('lme4') import rpy2.robjects.lib.ggplot2 as ggplot2 # Working with data in rpy2 sleepstudy = data(lme4).fetch('sleepstudy')['sleepstudy'] sleepstudy # Visualizing with ggplot2 in Python gp = ggplot2.ggplot(sleepstudy) p1 = (gp + ggplot2.aes_string(x = 'Days', y = 'Reaction') + ggplot2.geom_point(color = '#648FFF', alpha = 0.7) + ggplot2.geom_smooth(method = 'lm', color = 'black') + ggplot2.theme_minimal()) display(image_png(p1)) p2 = (p1 + ggplot2.facet_wrap(robjects.Formula('. ~ Subject'), **{'ncol':6})) display(image_png(p2)) # Run models and view results lm1 = stats.lm('Reaction ~ Days', data = sleepstudy) print(stats.coef(lm1)) print(stats.confint(lm1)) fm1 = lme4.lmer('Reaction ~ Days + (Days | Subject)', data = sleepstudy) print(base.summary(fm1))
- 道格拉斯·贝茨,马丁·梅希勒,本·博克,史蒂夫·沃克(2015)。利用lme4拟合线性混合效应模型。统计软件学报,67(1),1-48。doi: 10.18637 / jss.v067.i01。↩
你可以在下面留言或者在论坛里讨论community.英格兰vs伊朗让球rstudio.com.