前言
如果你还在纠结:学数据科学到底用 python 还是 R 好?现在我的回答是:大可不必。现在两者的变量可以相互调用了。你可以用 R 做数据处理(tidyverse
),可视化(ggplot2
),用 python 做开发。具体可参考该文章:R Vs Python: What’s the Difference?[1]
这一切有它就行了——reticulate 包
reticulate 包涵盖了用于 Python 和 R 之间协同操作的全套工具,在 R 和 Rstudio 中均可使用,主要包括:
1)在 R 中支持多种方式调用 Python。包括 R Markdown、加载 Python 脚本、导入 Python 模块以及在 R 会话中交互式地使用 Python。
2)实现 R 和 Python 对象之间的转换(例如 R 和 Python 数据框、R 矩阵与 NumPy 数组之间)。
在 R 会话中嵌入了 Python 会话,从而实现了无缝的、高性能的互操作性。如果你是使用 Python 进行某些工作的 R 开发人员或使用两种语言的数据科学团队的成员,那么 reticulate 包可以极大地简化你的工作流程!官方资料可见:reticulate 网站[2]
本文框架
前期准备
安装 reticulate 包
可以直接安装,并进行加载,非常方便。
install.packages("reticulate") library("reticulate")
下载 python 库
假设我们想用 pandas 库,但是有没有安装,那么一种方法是可以在 R 引擎下运行以下代码。可以下载 python 第三方库,也可以查看是否安装成功等其他操作。
py_install("pandas") #下载scipy库 py_module_available("pandas") #查看是否安装成功 #repl_python()# 查看python路径 #use_python("D:/anaconda/python.exe") #更换python路径
导入 python 库
安装完第三方库,就可以将其进行导入了,这里也是在 R 引擎下进行。
pd <- import("pandas")
可以发现,这与 pthon 代码不同的是:
import("os)
代替了import os
$
代替了.
<-
代替了=
常用操作
reticulate 包含一个用于 R Markdown 的 Python 引擎,具有以下功能,具体可见reticulate: R interface to Python[3]:
1)可在 R 会话中嵌入的单个 Python 会话中,运行 Python 块。同时 Python 块之间的共享变量/状态。
2)可打印 Python 输出,包括 matplotlib 的图形输出。
3)可使用 py 对象访问 R 中 Python 块中创建的对象。
4)使用 r 对象从 Python 中访问在 R 块中创建的对象。
作图
可以直接用 python 引擎绘图。
import numpy as np import matplotlib.pyplot as plt # 计算正弦曲线上点的 x 和 y 坐标 x = np.arange(0, 3 * np.pi, 0.1) y = np.sin(x) plt.title("sine wave form") # 使用 matplotlib 来绘制点 plt.plot(x, y) plt.show()
读取文件
python 怎么读取,这里也可以怎么读取,基本和在 jupter notebook 中是一样的。下面读取下 csv 格式的数据表。
import pandas as pd df = pd.read_csv("test.csv", encoding="gbk") df.head()
返回的 df 是 Python 对象,我们可以看到表格不好看,这是 R 中的 Python 对象。
在 R 代码块中调用 Python 变量
刚刚讲的都是在 Rmakdown 中运行 Python 代码块,并不是在 R 代码块中运行 Python 代码或者调用 Python 变量,现在我们试试在 R 代码块中调用 Python 变量。
py$python 变量名
R 代码块中调用 Python 方法 py$python 变量名
- py 相当于 Python 中的对象
- $ 相当于 Python 中的点
- python_variable_name 是 Python 代码块中的变量名
比如在上文中 Python 的变量 df,在 R 中调用
```{r} py$df
现在调用 Python 对象 df 时,R 会默认将其转为 R 对象,所以内容一样,样式似乎变好看了。
source_python()
使用 reticulate 包中的 source_python('py 文件路径')可以导入 py 文件中的变量,这样就可以在 R 代码块中使用外部变量。例如我在 data.py 中准备 A 和 B 两个字符串
A = '我是庄闪闪,'B = '来自浙江温州'
在 R 代码块中运行 data.py
```{r}library(reticulate) source_python("data.py") paste0(A, B) #我是庄闪闪,来自浙江温州
py_run_file()
在 R 代码块中运行项目文件夹中的 test.py 文件,可使用以下代码
library(reticulate) py_run_file("test.py")
数据类型对比