本文转载、翻译自 Emily Riederer 发表于 2025.1.26 的博客文章 Python Rgonomics - 2025Rgonomics 是作者自造词,结合了 R 语言和 Ergonomics 人体工学,意指借鉴 R 语言的便利设计,让 Python 对 R 用户来说更好用,也就是最佳的编程实践

Python 的 R 式人体工学 - 2025

切换编程语言,关键在于思维模式的转变,而不仅仅是语法的改变。Python 数据科学工具的最新进展(如 Polars 和 seaborn 的面向对象接口),既能捕捉到 R/Tidyverse 爱好者所钟爱的那种“感觉”,又为通往真正具有 Python 风格(“Pythonic”)的工作流敞开了大门。

大约一年前,我写了 Python Rgonomics 的初版11 Rgonomics,我将其译为了“R 式人体工学”,也就是为 R 用户准备的 Python 最佳编程实践。,旨在帮助刚开始进入 Python 世界的 R 语言用户。那篇文章的核心观点是,新的 Python 工具(例如 Polars 相对于 Pandas)已经发展到了一个新阶段:既能保持出色的性能和 Pythonic 风格,又能为 R 语言用户提供更相似的使用体验。我还在 posit::conf(2025) 大会上探讨过这个话题。

颇具讽刺意味的是,这个论点本身是如此正确,以至于它实际上否定了让我 2024 年发表的第一篇关于此主题的文章。2024 年见证了一些颠覆性工具的发布,它们进一步精简了 Python 的工作流程。这篇文章提供了一系列更新的建议。具体来说,它强调了:

拥有一套稳定的技术栈而不是总去追逐下一个光鲜亮丽的新事物,这一点非常重要。然而,在看到这些项目在 2024 年中的不断发展后,我有信心说,它们绝非昙花一现。

uv 由 Charlie Marsh 创立的 Astral 公司支持,这家公司之前开发了 ruff,用以整合大量的代码质量工具。Astral 对开源的承诺、精心的设计以及 uv 令人难以置信的性能表现,都足以说明一切。22 我认为在 2025 年任何 Python 用户都应该使用 uvruff,如果你看到某个 Python 文章/教程还在推荐同类的其他工具,那就应该毫不犹豫地关闭。同样地,Positron 则由可靠的 Posit PBC(前身为 RStudio)公司支持,作为 Code OSS 的一个开源扩展(Code OSS 也是微软 VS Code 的开源框架)。

本文的其余部分是在初版基础上全文转载并进行了相关更新,以便读者可以从头到尾阅读,无需参考新旧版本之间的更改。

让我们开始吧!

在 R 和 Python 等语言之间切换时,“专家-新手”的双重身份是件令人不舒服的事。学习一门新语言本身很容易,像真值表和控制流这样的编程入门概念可以无缝转换,但一门语言的人体工学33 即最佳实践。却并非如此。我们为了在主语言中实现超高效率而学习的技巧和窍门,既舒适、熟悉、优雅又高效,它们就是让人“感觉良好”。而在使用一门新语言时,开发者常常面临一个选择:是把他们偏爱的工作流强行用在一个可能并不“适配”的新工具上;还是编写技术上正确但冗长乏味的代码来完成任务;亦或是作为真正的初学者,从头开始学习一门新语言的“感觉”。

幸运的是,一些更高层次的编程范式已经开始跨越语言界限,丰富了那些以往相互隔离的开发者部落,并使开发者能够将他们的高级技能运用到不同的语言中。对于任何希望在 2024 年提升 Python 技能的 R 用户来说,一些新工具和旧版热门工具的新版本,已经在融合 R 和 Python 的数据科学生态栈方面取得了长足进步。在本文中,我将概述一些推荐的工具,它们既符合真正的 Pythonic 风格,同时又抓住了 Tidyverse 系列中那些备受喜爱的 R 包所带来的舒适感和熟悉感。

(当然,不同语言也有各自的亚文化,如R 语言中的 Tidyverse 和 data.table 就倾向于不同的语义和人体工学。这篇文章更侧重于前者。)

这篇文章不是 …

首先需要明确的是:44 开始叠甲!

如果你告诉我你喜欢纽约大都会艺术博物馆,我可能会说那你也许会喜欢芝加哥艺术学院。但这并不意味着你应该只去芝加哥的博物馆,或者你永远不该去巴黎卢浮宫。无论是人类还是推荐系统,推荐都并非如此运作。本文是一篇“主观”的文章,其“主观”体现在“我喜欢这个”,而非“你必须这么做”。

关于工具选择 …

我下面重点介绍的工具往往具有两个相互权衡的特点:

前者之所以重要,是因为如果缺失这一点,这些推荐就失去了针对性;后者之所以重要,是为了让用户能真正融入 Python 语言和社区,而不是仅仅在其外围浅尝辄止。简而言之,这两条原则排除了那些仅仅是语言之间的直接移植品、并将此作为其唯一或主要优点的工具。

语言移植无疑有其一席之地,尤其是在项目的早期阶段,此时还没有特定于该语言的原生标准。例如,我喜欢 Karandeep Singh 实验室在 Julia 版 Tidyverse 方面的工作,我自己也维护着一个名为 dbtplyr 的包,用以将 dplyr 的 select 辅助函数移植到 dbt 中。

例如,siubaplotnine 的编写初衷就是直接模仿 R 的语法。它们取得了一定的成功和应用,但这类小众工具也伴随着一些弊端。由于用户基数较小,它们往往在开发速度、社区支持、现有技术、Stack Overflow 上的问题、博客文章、会议演讲、相关讨论、合作者、以及在个人作品集中的分量等方面有所欠缺。语言移植有时会迫使开发者投入精力去学习一种“神秘的第三件事”,这不仅将他们与两个社区隔离开来,还让他们不得不独自面对不可避免的障碍,而不是享受旧语言的人体工学体验之便或迎接学习新语言的挑战。

入乡随俗——但如果你来自美国,这并不意味着你不能带一个万能转换插头,帮助你的设备在欧洲插座上充电。

技术栈

言归正传,下面我将推荐一些最具人体工学的工具,用于环境搭建、核心数据分析和结果沟通。推荐概览:

用于配置 …(For setting up)

最初的障碍往往是如何开始——这既包括安装所需的工具,也包括进入一个舒适的集成开发环境 (IDE) 来运行它们。

用于数据分析 …(For data analysis)

数据从业者都知道,我们大部分时间都花在数据清洗和整理上。因此,R 用户可能特别难以放弃他们最喜欢的探索性数据分析工具,如 dplyr 和 ggplot2。这些包的爱好者通常很欣赏其函数式编程范式如何帮助他们达到一种“心流状态”。尽管精确的语法可能有所不同,但 Python 数据整理领域的新发展,为这些备受喜爱的 R 语言人体工学特性提供了一些日益接近的对应工具。

用于沟通 …(For communication)

历史上,R 和 Python 之间的一条分界线可以被概括为 “Python 擅长与计算机打交道,R 擅长与人打交道”。虽然这种说法部分源于 “R 不是生产级别应用”这类过于简化的看法,但 R 的学术渊源确实促使其在丰富的沟通技术栈上投入巨大,并将分析输出转化为人类可读、可发布的成果。不过如今,这种差距也已开始缩小。

其他工具 …(Miscellaneous)

对于那些更偏向“开发者”而非“分析师”的 R 用户来说,还有一些可能有用且熟悉的工具。在我看来,这些工具的优缺点更加多样,但我还是将它们列出以供参考: