跳至主要内容

兼得 Python 与 R 的最佳实践

了解如何将 Python 与 R 结合使用,在单个数据科学项目中同时发挥二者的优势。
· 9分钟 阅读

使用 AI 探索

数据科学如今已成为各行各业不可或缺的一部分。从银行、保险到医疗保健,每一秒都在产生海量数据。因此,我们必须能够利用这些庞大的数据,生成可操作的洞见并付诸行动。如今市面上有许多以编程语言形式呈现的工具。在众多语言中,Python 和 R 走在前列。

Python 和 R 在数据科学领域都被广泛使用。两种语言都拥有丰富的工具库,提供了非常适合数据科学场景的大量函数。Python 是一种用于多种应用的通用语言,而 R 则是用于统计计算和图形的编程语言与环境。

Python 与 R 生态系统概览

让我们来看看这两种语言的方方面面,以及它们各自的优缺点。

Python 编程语言

python

Python 是一种解释型、高级、通用的编程语言。它由 Guido Van Rossum 创建并于 1991 年发布。自发布以来,Python 在包括数据科学在内的多个领域都极受欢迎。如今,Python 是全球增长最快的编程语言之一。

其备受欢迎的原因包括:

  • 面向对象语言
  • 通用用途
  • 拥有极强的社区支持
  • 简单易学,易于理解
  • 拥有高效的包,如 pandas、numpy 和 scikit-learn,使其成为机器学习的绝佳选择。

然而,在统计计算方面,Python 略显不足,缺少像 R 那样的专业化包。

R 编程语言

R

R 本质上是用于统计计算和图形的软件,由 R 基金会提供支持。它于 1993 年 8 月首次出现,并于 1995 年发布首个稳定版本,此后被统计学家和数据挖掘人员广泛用于统计计算。

使 R 脱颖而出的特性包括:

  • 几乎涵盖各种统计应用的包。CRAN 目前托管着超过 1 万个包。
  • 内置优秀的可视化库,如 ggplot2。
  • 依托内置包即可进行独立分析。

但也有不足之处。在性能方面,R 并非最快的语言,在处理大型数据集时有时还会占用大量内存。

将 Python 与 R 一起使用

R 和 Python 各自都是出色的工具,但它们常被视为竞争对手。与其如此,我们不如发挥两种语言的优点,从而兼得二者之长。

当今数据科学社区中,很多人通常只使用单一语言。当然,也有人同时使用 Python 和 R,但比例较小。另一方面,不少人忠于某一种语言,却希望能用上对方的一些能力。比如,R 用户有时会渴望 Python 天生具备的面向对象能力,而部分 Python 用户则希望能使用 R 提供的完整统计分布体系。

下图展示了 Red Monk 于 2018 年第三季度进行的调查结果。该结果基于语言在 Stack Overflow 和 Github 上的受欢迎程度,清楚表明 R 与 Python 在数据科学活动中都名列前茅。因此,并没有什么内在原因会阻止我们在同一项目中同时使用它们。我们的终极目标应是做出更好的分析并获得更深入的洞见,编程语言的选择不应成为阻碍。

programming language rankings

如何在单个项目中同时使用 Python 与 R?

在 R 或 Python 脚本中嵌入 SQL 时,我们从不犹豫。那么为何不以同样方式,把 R 的统计实力与 Python 的编程能力结合起来?答案是可以,而且已有库可以很好地处理这些衔接。

在一个项目中并行使用 Python 和 R,基本有两种途径。

在 Python 中调用 R

这意味着在 Python 脚本中调用 R 函数。为此目的创建的一些库包括:

1. PypeR

PypeR 通过管道提供从 Python 访问 R 的简单方式。PypeR 也包含在 Python 的软件包索引中,安装更为方便。当不需要在 Python 与 R 之间频繁进行交互式数据传输时,PypeR 尤其有用。通过管道运行 R,使得 Python 程序在子进程控制、内存控制以及跨主流操作系统平台(包括 Windows、GNU Linux 和 Mac OS)的可移植性方面更具灵活性。

pyper

Python 对象转换为 R 对象的约定

2. pyRserve

pyRserve 是为此目的创建的另一个库。它使用 Rserve 作为 RPC 连接网关。通过这样的连接,可以在 Python 中向 R 设置变量,也可以远程调用 R 函数。在许多情况下,R 对象以 Python 实现的类实例形式公开,R 函数作为这些对象的绑定方法。

3. rpy2

rpy2 库的使用频率高于前两者,原因在于 rpy2 正在积极快速地开发中。它在 Python 进程中嵌入 R,创建了一个框架,可将 Python 对象转换为 R 对象,将其传入 R 函数,并将 R 的输出转换回 Python 对象。

rpy2

在 Python 中使用 R 的一个优势,是可以在 Python 中轻松调用 R 的强大包,如 ggplot2、tidyr、dplyr 等。例如,让我们看看如何在 Python 中轻松使用 ggplot2 进行制图。

  • 基础绘图

basic plot

https://rpy2.github.io/doc/latest/html/graphics.html#plot

scatter plot

  • 几何

geometry

https://rpy2.github.io/doc/latest/html/graphics.html#geometry

rpy2 资源

若想深入了解 rpy2 的安装与使用,您可参考以下资源:

在 R 中调用 Python

也可以通过以下方案之一在 R 中运行 Python 脚本:

1. rJython

该包通过 Jython 实现与 Python 的接口,旨在让其他包能够在 R 中嵌入 Python 代码。

2. rPython

rPython 同样是一个允许 R 调用 Python 的包。它使您能够在 R 中运行 Python 代码、调用函数、赋值和获取变量等。

3. SnakeCharmR

SnakeCharmR 是 rPython 的现代化重构版本。它从 “rPython” 分支而来,使用 “jsonlite”,并在诸多方面改进了 rPython。

4. PythonInR

PythonInR 通过提供在 R 内与 Python 交互的函数,使在 R 中访问 Python 变得非常容易。

5. reticulate

reticulate 包为 Python 与 R 之间的互操作性提供了一整套工具。在上述方案中,此包使用最为广泛,尤其因为它由 Rstudio 积极维护开发。
Reticulate 将 Python 会话嵌入到 R 会话中,实现无缝、高性能的互操作性。该包使您能够将 Python 代码“交织”进 R,打造将两种语言编织在一起的新型项目。

R

reticulate 包提供以下功能:

  • 以多种方式在 R 中调用 Python,包括 R Markdown、引入 Python 脚本、导入 Python 模块,以及在 R 会话中交互式使用 Python。
  • 在 R 与 Python 对象之间进行转换(例如 R 与 Pandas 数据框,或 R 矩阵与 NumPy 数组之间)。
  • 灵活绑定不同版本的 Python,包括虚拟环境和 Conda 环境。

Reticulate 资源

关于使用 reticulate 包的一些优质资源:

结语

R 与 Python 都是出色的工具,几乎足以从零完成数据科学任务。您甚至可能无需在同一项目中同时使用二者。不过,同时掌握二者很有帮助,尤其能为我们提供在不同环境下工作的选择。常言道,应当专注于技能本身,而非工具。因此,只要能更轻松地解决手头问题,我们就应当乐于学习新的工具与语言。

如果您想从任一语言入门,可学习 DataCamp 的 Introduction to Python 或 Introduction to R 课程。另请查看我们的 Python 初学者教程。

参考资料:

主题