前言

如果你还在纠结:学数据科学到底用 python 还是 R 好? 现在我的回答是:大可不必。现在两者的变量可以相互调用了。你可以用 R 做数据处理(tidyverse),可视化(ggplot2),用 python 做开发。具体可参考该文章:R Vs Python: What’s the Difference?

这一切有它就行了——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 网站

本文框架

前期准备

安装 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
  • $代替了.
  • <- 代替了 =

3.常用操作

reticulate 包含一个用于 R Markdown 的 Python 引擎,具有以下功能,具体可见reticulate: R interface to Python

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 文件,可使用以下代码

 ```{r}
library(reticulate)
py_run_file("test.py")
 ```

数据类型对比

·