reticulate包 | 在Rmarkdown中调用Python代码

  • A+
所属分类:安全开发

腾讯课堂 | Python网络爬虫与文本分析


reticulate包 | 在Rmarkdown中调用Python代码

Python和R是一对数据科学两大语言,在互联互通的路上,我感觉R更加的积极。还记得之前 Python中调用R的库-rpy2, 在Python使用R语言语法还是有些不自然。在R中调用Python体验十分棒,一起跟我看看吧。

reticulate包是可以让R语言非常流畅自然联通Python的关键。

Rmarkdown预备知识

Rmarkdown很像jupyter notbeook和markdown的结合。

  • 代码块
  • markdon文本

代码块

在Rmarkdown中的代码块的开始都是以三引号、{}和语言名为标志,以三引号结尾。

```{r}
library(ggplot2)
ggplot(mpg, aes(x=displ, y=cty))+
  geom_point()
```

reticulate包 | 在Rmarkdown中调用Python代码


后面设置好reticulate包后,就可以在Rmarkdown中使用python代码块,

```{python}
import pandas as pd
df = pd.read_csv('test.csv')
df.head()
```


markdown文本

文本部分全部支持markdown语法,这里不做赘述。


安装

```{r}
install.packages("reticulate")
```

环境设置

当我们在R代码块中设置好Python环境,就可以在Rmarkdown中跑Python代码。

查询Python

首先我们需要知道Python安装路径,可以在命令行中逐行执行下面代码

python3
import sys
sys.executable

我的mac电脑的Python安装路径为

/Library/Frameworks/Python.framework/Versions/3.7/bin/python3

指定Python

执行下方的代码(路径改为自己的Python安装路径)

```{r}
library(reticulate)

use_python('/Library/Frameworks/Python.framework/Versions/3.7/bin/python3')
```

执行代码后,我们就可以愉快的使用Python代码


运行Python代码

在Rmarkdown中写Python代码块

作图

```{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()
```

reticulate包 | 在Rmarkdown中调用Python代码


读取csv

```{python}
import pandas as pd

df = pd.read_csv("test.csv", encoding="gbk")
df.head()
```

reticulate包 | 在Rmarkdown中调用Python代码

返回的df是Python对象,我们可以看到表格不好看,这是R中的Python对象。


在R代码块中调用Python变量(对象)

刚刚讲的都是在Rmakdown中运行Python代码块,并不是在R代码块中运行Python代码或者调用Python变量。

py$python_variable_name

R代码块中调用Python方法

py$python_variable_name

  • py相当于Python中的对象
  • $ 相当于Python中的
  • python_variable_name 是Python代码块中的变量名

比如在上文中Python的变量df,在R中调用

```{r}
py$df
```

reticulate包 | 在Rmarkdown中调用Python代码

现在调用Python对象df时,R会默认将其转为R对象,所以内容一样,样式似乎变好看了。


R代码块中导入Python库

使用os库的listdir函数查询当前项目文件夹内的文件列表

```{python}
import os

os.listdir()
```
['reticulate学习.md''test.csv''test.py''reticulate学习.html''reticulate学习_files''reticulate.pdf''reticulate学习.Rmd''data.py']


在R代码块中实现上方的Python功能,如下,很简单

```{r}
library(reticulate)

#导入库
os <- import("os")

#os库的listdir函数
os$listdir()
```
## [1] "reticulate学习.md"    "test.csv"             "test.py"             
## [4] "reticulate学习.html"  "reticulate学习_files" "reticulate.pdf"      
## [7] "reticulate学习.Rmd"   "data.py"

可以发现

  • import("os)代替了import os
  • $代替了.
  • <- 代替了 =

再熟悉一下

```{r}
library(reticulate)
pd <- import("pandas")
df2 <- pd$read_csv("test.csv", encoding="gbk")
df2
```

reticulate包 | 在Rmarkdown中调用Python代码

需要注意的是,在R代码块中执行Python代码时,默认会将Python对象转为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")
print(A)
print(B)
paste0(A, B)
```
我是张三,
来自河北
我是张三,来自河北

py_run_file()

在R代码块中运行项目文件夹中的test.py文件,该文件内只有

print('这是来自test.py的问候!')'

这一行代码,在代码块中运行```{r}
library(reticulate)
py_run_file("test.py")
```
得到
这是来自test.py的问候!

数据类型对比

reticulate包 | 在Rmarkdown中调用Python代码


近期文章

[更新] Python网络爬虫与文本数据分析 
tidytext | 耳目一新的R-style文本分析库
rpy2库 | 在jupyter中调用R语言代码
plydata库 | 数据操作管道操作符>>
plotnine: Python版的ggplot2作图库
七夕礼物 | 全网最火的钉子绕线图制作教程
读完本文你就了解什么是文本分析
文本分析在经管领域中的应用概述  
综述:文本分析在市场营销研究中的应用
plotnine: Python版的ggplot2作图库
小案例: Pandas的apply方法  
stylecloud:简洁易用的词云库 
用Python绘制近20年地方财政收入变迁史视频  
Wow~70G上市公司定期报告数据集
漂亮~pandas可以无缝衔接Bokeh  
YelpDaset: 酒店管理类数据集10+G  
后台回复关键词【20200823】获取本文R代码
    分享”和“在看”是更好的支持!


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: