R包:reticulate R对python的接口包

介绍1

R和python是两种不同的编程语言,前者是统计学家发明并且服务数学统计计算,后者则是最万能的胶水语言。随着大数据时代的到来,两者在数据分析领域存在越来越多的共同点且可以相互使用,为了破解二者的编程壁垒,CRAN收录了具有R接口的python包,从而使得两类语言的数据能共同使用。

reticulate2 是用于Python和R之间协同操作的全套工具,在RRstudio中均可使用;要求Rstudio必须在1.2版本以上;

install.packages("reticulate")
library(reticulate)

特性

  • reticulate 在R中支持多种方式调用python;
  • 实现R和python对象之间的转换;
  • 随意切换不同版本的python;
  • R内使用$调用python对象;
  • python内使用.调用R对象;
  • 使用import函数导入python模块import("os");
  • source_python()获取任何Python脚本;
  • 使用repl_python()交互使用python;

范例

Rpython对同一数据进行可视化,可视化图形包括scatterplotboxplotbarplotheatmap

散点图

R代码

library(dplyr)
library(ggplot2)iris %>% mutate(Species=factor(Species, levels = c("setosa", "versicolor", "virginica"))) %>%ggplot(aes(x=Sepal.Width, y=Petal.Width, color=Species))+geom_point()+guides(color=guide_legend("", keywidth = .5, keyheight = .5))+labs(title = 'Scatter plot')+theme_bw()+scale_color_manual(values = c("red", "green", "blue"))+theme(plot.title = element_text(size = 10, color = "black", face = "bold", hjust = 0.5), axis.title = element_text(size = 10, color = "black", face = "bold"),axis.text = element_text(size = 9, color = "black"),text = element_text(size = 8, color = "black"),strip.text = element_text(size = 9, color = "black", face = "bold"),panel.grid = element_blank(),legend.position = c(1, 1),legend.justification = c(1, 1),legend.background = element_rect(fill="white", color = "black"))

Python代码

dat = r.iris  # Python调用R内嵌数据使用r.data
species_map = {'setosa':1, 'versicolor':2, 'virginica':3}
dat['Species'] = dat['Species'].map(species_map)import numpy as np
import matplotlib.pyplot as plt
# plt.scatter(dat['Sepal.Width'], dat['Petal.Width'], c=dat['Species'],
#      alpha=0.8, edgecolors='none', s=30, label=["1", "2", "3"])
# plt.title('Scatter plot in iris')
# plt.xlabel('Sepal.Width (cm)')
# plt.ylabel('Petal.Width (cm)')
# plt.legend(loc=1)
# plt.show()dat1 = (np.array(dat[dat.Species==1]['Sepal.Width']), np.array(dat[dat.Species==1]['Petal.Width']))
dat2 = (np.array(dat[dat.Species==2]['Sepal.Width']), np.array(dat[dat.Species==2]['Petal.Width']))
dat3 = (np.array(dat[dat.Species==3]['Sepal.Width']), np.array(dat[dat.Species==3]['Petal.Width']))mdat = (dat1, dat2, dat3)
colors = ("red", "green", "blue")
groups = ("setosa", "versicolor", "virginica")# step1 build figure background
fig = plt.figure()# step2 build axis
ax  = fig.add_subplot(1, 1, 1, facecolor='1.0')  # step3 build figure
for data, color, group in zip(mdat, colors, groups):x, y = dataax.scatter(x, y, alpha=0.8, c=color, edgecolors='none', s=30, label=group)      plt.title('Scatter plot')
plt.legend(loc=1)  # step4 show figure in the screen
plt.show() 

箱形图

R代码

library(dplyr)
library(ggplot2)iris %>% mutate(Species=factor(Species, levels = c("setosa", "versicolor", "virginica"))) %>%ggplot(aes(x=Species, y=Sepal.Width, fill=Species))+stat_boxplot(geom = "errorbar", width = .12)+geom_boxplot(width = .3, outlier.shape = 3, outlier.size = 1)+guides(fill=guide_legend(NULL, keywidth = .5, keyheight = .5))+xlab("")+theme_bw()+scale_fill_manual(values = c("red", "green", "blue"))+theme(plot.title = element_text(size = 10, color = "black", face = "bold", hjust = 0.5), axis.title = element_text(size = 10, color = "black", face = "bold"),axis.text = element_text(size = 9, color = "black"),text = element_text(size = 8, color = "black"),strip.text = element_text(size = 9, color = "black", face = "bold"),panel.grid = element_blank(),legend.position = c(1, 1),legend.justification = c(1, 1),legend.background = element_rect(fill="white", color = "black"))

Python代码

dat = r.iris  # Python调用R内嵌数据使用r.data
species_map = {'setosa':1, 'versicolor':2, 'virginica':3}
dat['Species'] = dat['Species'].map(species_map)import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatchesdat11 = (np.array(dat[dat.Species==1]['Sepal.Width']))
dat21 = (np.array(dat[dat.Species==2]['Sepal.Width']))
dat31 = (np.array(dat[dat.Species==3]['Sepal.Width']))mdat2 = (dat11, dat21, dat31)
colors = ("red", "green", "blue")
groups = ("setosa", "versicolor", "virginica")fig = plt.figure()
axes = fig.add_subplot(facecolor='1.0')
bplot = axes.boxplot(mdat2, patch_artist=True, notch=0, sym='+', vert=1, whis=1.5,whiskerprops = dict(linestyle='--',linewidth=1.2, color='black'))# color
for patch, color in zip(bplot['boxes'], colors):patch.set_facecolor(color)# axes labels
plt.setp(axes, xticks=[1,2,3],xticklabels=["setosa", "versicolor", "virginica"])red_patch = mpatches.Patch(color='red', label='setosa')
green_patch = mpatches.Patch(color='green', label='versicolor')
blue_patch = mpatches.Patch(color='blue', label='virginica')plt.legend(handles=[red_patch, green_patch, blue_patch], loc=1)plt.show()

条形图

R代码

library(dplyr)
library(ggplot2)iris %>% mutate(Species=factor(Species, levels = c("setosa", "versicolor", "virginica"))) %>%select(Species, Sepal.Width) %>% group_by(Species) %>%summarize(avg=mean(Sepal.Width), n=n(), sd=sd(Sepal.Width), se=sd/sqrt(n)) %>%ungroup() %>%ggplot(aes(x=Species, y=avg, fill=Species))+geom_bar(stat="identity", width=.4, color="black")+geom_errorbar(aes(ymin=avg-sd, ymax=avg+sd), width=.15,position=position_dodge(.9), size=1)+guides(fill=guide_legend(NULL, keywidth = .5, keyheight = .5))+xlab("")+ylab("Sepal.Width")+scale_y_continuous(breaks=seq(0, 3.5,0.5), limits=c(0, 4.4),expand = c(0,0))+theme_bw()+scale_fill_manual(values = c("red", "green", "blue"))+theme(axis.title = element_text(size = 10, color = "black", face = "bold"),axis.text = element_text(size = 9, color = "black"),text = element_text(size = 8, color = "black"),strip.text = element_text(size = 9, color = "black", face = "bold"),panel.grid = element_blank(),legend.position = c(1, 1),legend.justification = c(1, 1),legend.background = element_rect(fill="white", color = "black"))

Python代码

dat = r.iris  # Python调用R内嵌数据使用r.data
species_map = {'setosa':1, 'versicolor':2, 'virginica':3}
dat['Species'] = dat['Species'].map(species_map)import numpy as np
import pandas as pd
import matplotlib.pyplot as pltmean = list(dat['Sepal.Width'].groupby(dat['Species']).mean())
sd   = list(dat.groupby('Species').agg(np.std, ddof=0)['Sepal.Width'])df = pd.DataFrame({'mean':mean}, index=["setosa", "versicolor", "virginica"])
df.plot(kind='bar', alpha=0.75, rot=0, edgecolor='black', yerr=sd, align='center', ecolor='black', capsize=5,color=("red", "green", "blue"),ylim=(0.0, 4.4),yticks=list(np.arange(0, 4.0, 0.5)))# xlabel
plt.xlabel('')
plt.ylabel('Sepal.Width')# legend
red_patch = mpatches.Patch(color='red', label='setosa')
green_patch = mpatches.Patch(color='green', label='versicolor')
blue_patch = mpatches.Patch(color='blue', label='virginica')
plt.legend(handles=[red_patch, green_patch, blue_patch],   # color and grouploc=1,                # locationprop={'size': 8})     # size 
plt.show()

心得

初次使用reticulate的感觉还不错,可以比较完美串联R和Python,尤其是在Rmarkdown文件内使用R和Python代码,但缺点也很明显:

  • 运行Python cell没有详细报错信息;
  • 粗略的报错提示行信息不以Rmd文件整体行作为开始;
  • 无法兼容带有汉字的注释信息;
  • 无法像R一样查看python环境下变量;
  • 出错后有时无任何报错信息

根据visual studio code的最新python插件公布情况看,以后vsc可以完美兼容Jupyter notebook格式文件,因此如果想单独使用python但无较好交互编辑器,可以使用vsc的python插件读取ipynb文件3

参考


  1. https://zhuanlan.zhihu.com/p/35049732 ↩︎

  2. https://github.com/rstudio/reticulate ↩︎

  3. https://code.visualstudio.com/docs/python/jupyter-support ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考《信息系统运行管理员》-3.1信息系统设施运维的管理体系

3.1信息系统设施运维的管理体系 1 信息系统设施运维的对象 基础环境 主要包括信息系统运行环境(机房、设备间、配线室、基站、云计算中心 等)中的空调系统、供配电系统、通信应急设备系统、防护设备系统(如消防系统、安全系统) 等,能维持系统安全正常运转&#xf…

从零开始学习嵌入式----Linux系统命令集合与shell脚本

Shell是一门编程语言,作为学习shell的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? shell本身就是一门解释型、弱类型、动态语言,与python相对应,Python属于解…

aardio —— 今日减bug

打字就减bug 鼠标双击也减bug 看看有多少bug够你减的 使用方法: 1、将资源附件解压缩,里面的文件夹,放到aardio\plugin\plugins 目录 2、aardio 启动插件 → 插件设置 → 选中“今日减bug” → 保存。 3、重启 aardio,等aa…

旗晟智能巡检机器人:开启工业运维的智能化新篇章

在当今快速发展的工业领域,安全、效率和成本控制是企业运营的核心。旗晟科技以创新为驱动,推出了一站式的工业级智能巡检机器人数字化全景运维解决方案,为石油、天然气、化工、电力等高危行业提供了一个全新的运维模式。 一、面对挑战&#x…

提升机器视觉与机器学习软件安全性的实践策略

在近几年科技爆发中,机器学习(ML)和机器视觉(MV)的结合正在改变各行各业。机器学习通过数据驱动的算法让计算机能够自我学习,而机器视觉赋予计算机识别和理解图像的能力。这种结合使得计算机可以高效地执行…

浅谈化工厂环保管理的痛点、智慧环保的必要性及EHS系统的实现路径

在全球环保意识日益增强的背景下,化工厂作为工业领域的重要组成部分,其环保管理显得尤为重要。然而,化工厂在追求经济效益的同时,也面临着诸多环保管理的痛点。本文将围绕化工厂环保管理的痛点、化工厂为何需要智慧环保以及如何借…

设计分享—国外后台界面设计赏析

国外后台界面设计将用户体验放在首位,通过直观易懂的布局和高效的交互设计,提升用户操作效率和满意度。 设计不仅追求美观大方,还注重功能的实用性和数据的有效展示,通过图表和图形化手段使数据更加直观易懂。 采用响应式布局&a…

Global Mapper:地理信息的温柔探索

引言 在这纷繁复杂的世界里,地理信息系统(GIS)如同一把利器,帮助我们剖析、理解和改造这个世界。而在众多GIS软件中,Global Mapper无疑是其中的佼佼者。作为一款功能全面且易于使用的GIS应用程序,Global M…

数字安全护航技术能力全景图 | 亚信安全实力占据75领域

近日,2024全球数字经济大会——数字安全生态建设专题论坛在北京成功举办。会上,中国信息通信研究院(简称“中国信通院”)正式发布了《数字安全护航技术能力全景图》,亚信安全凭借全面的产品技术能力,成功入…

【网络安全】SSRF 之 Azure Digital Twins Explorer

未经许可,不得转载。 文章目录 正文 正文 Azure Digital Twins 是一个微软下的平台服务,允许开发者创建和运行数字孪生模型,这些模型能够反映物理世界中的实体及其关系,通过这些模型可以进行监控、分析和预测等操作。 1、进入主…

构建机部署之Azure DevOps添加代理机(Linux)

目录 一、权限检查二、添加代理机三、更换代理四、删除并重新配置代理 一、权限检查 确认用户具有权限 默认代理池的所有者有添加代理的权限 1)代理池所有者可以生成一个PAT,共享使用。代理不会在日常操作中使用此人凭据,但需要使用有权限的…

【多线程】线程同步--条件变量的原理及其使用

文章目录 前言线程同步的基本概念条件变量定义条件变量初始化条件变量销毁条件变量等待条件(重要)唤醒等待简单运用常见使用条件变量的格式 前言 线程同步意味着在多线程并发执行中,协调线程之间的执行顺序,以确保共享资源被正确…

hive架构详解:HQL案例解析(第15天)

系列文章目录 一、Hive基础架构(重点) 二、Hive数据库,表操作(重点) 三、Hadoop架构详解(hdfs)(补充) 四、Hive环境准备(操作)(补充) 文章目录 系列文章目录前言一、Hive基础架构1、…

4. 小迪安全v2023笔记 javaEE应用

4. 小迪安全v2023笔记 javaEE应用 ​ 大体上跟随小迪安全的课程,本意是记录自己的学习历程,不能说是完全原创吧,大家可以关注一下小迪安全。 若有冒犯,麻烦私信移除。 默认有java基础。 文章目录 4. 小迪安全v2023笔记 javaEE应…

linux下安装cutecom串口助手;centos安装cutecom串口助手;rpm安装包安装cutecom串口助手

在支持apt-get的系统下安装 在终端命令行中输入: sudo apt-get install cutecom 安装好后输入 sudo cutecom 就可以了 关于如何使用,可以看这个https://www.cnblogs.com/xingboy/p/14388610.html 如果你的电脑不支持apt-get。 那我们就通过安装包…

‘wget‘ 不是内部或外部命令,也不是可运行的程序

在Windows环境下创建了虚拟环境并安装了wget包,但在使用该命令的时候仍然报错,‘wget’ 不是内部或外部命令,也不是可运行的程序 解决方案: 去官网下载对应位数的.exe文件,将其放在C:\Windows\System32目录下即可, 别下错版本&a…

宝塔面板部署Flask项目教程(最新版)

本教程适用于最新版的宝塔!!! 本教程适用于最新版的宝塔!!! 本教程适用于最新版的宝塔!!! 1 准备 1.1 依赖文件 在你的项目根目录下生成一个依赖文件,执行…

美业收银系统怎么选?哪些功能实用?美业门店管理系统|拓客系统

选择美业会员系统时,你可以考虑以下几个方面的功能来确定哪些对你最实用: 1.会员管理: 系统应该能够轻松管理会员资料、积分、消费记录等信息,以便更好地了解客户需求并提供个性化服务。 2.促销与营销工具: 包括发…

3D云渲染工具对决:Maya与Blender的性能和功能深度比较

3D建模和动画制作已成为数字领域不可或缺的一环,无论是在影视特效的震撼场面,还是在游戏角色的生动表现,3D技术都扮演着至关重要的角色。而在这一领域,Maya和Blender这两款软件,以其强大的功能和广泛的应用&#xff0c…

【JavaEE】进程

目录 一.冯诺依曼体系结构 二.CPU的核心概念 核心数 频率(Clock Speed 或时钟频率) 如何选择合适的CPU 三.指令的执行 1.什么是指令 1.取指令 2.解析指令 3.执行指令 4.访问内存(Memory): 5.写回结果(Write…