5月16日
6分钟

面向数据科学家的软件开发资源

一群人看着笔记本电脑的屏幕上覆盖着ggplot2盒图

数据科学家专注于通过探索性分析、统计和模型来理解数据。软件开发人员使用不同的工具应用一套单独的知识。尽管数据科学团队的关注点似乎不相关,但他们可以从采用软件开发最佳实践中受益。版本控制、自动化测试和其他开发技能有助于创建可复制的、可用于生产的代码和工具。

瑞切尔·邓普西最近推特社区问道,关于数据科学家可以用来提高其软件开发技能集的资源的建议。

我们收到了很多很棒的建议,我们想在这里总结和分享。这篇博文介绍了您的团队可能希望采用的软件开发最佳实践,以及在哪里可以找到更多的方法。

下面讨论的领域是:

结构化你的数据科学项目,让所有东西都“第一次运行”

如果我们可以打开一个R脚本,单击Run,我们就有了我们需要的输出,那就太好了。然而,代码并不总是“可以正常工作”。当我们的项目变得更大更复杂时,我们需要结构以便于管理和理解。

正如丹尼尔·陈在他的构建你的数据科学项目一个合适的项目结构可以让我们的代码运行在一个快乐的地方。现有的原则、模板和工具可以指导您:

  • 为你的工作做一个项目,这样文件目录就很容易处理
  • 将工作组织到子文件夹中,以便任何人都可以打开您的项目并了解正在进行的工作
  • 创建函数来组织代码所做的工作
  • 编写报告,向利益相关者展示他们关心的内容(并隐藏他们不关心的内容)
  • 使用工作流编排器查看哪些任务相互依赖,并重新构建分析(目标包是R用户的一个选项)

从targets包创建的示例工作流图

显示项目活动和依赖关系的工作流图
来源:R中可重复计算,威尔·兰道

有组织的项目允许数据科学家在项目增长时保持高效。

项目结构资源

测试函数,使它们执行您期望的操作

数据科学家可以通过输入一些值来测试函数,看看输出是否符合预期,如果有问题就修改代码,然后重新运行以再次检查值。然而,这个过程为错误留下了很大的空间。人们很容易忘记是什么改变了,从而导致其他东西被破坏。

自动化测试提供了更好的选择,例如使用pytest包testthat包.自动化测试关注于定义良好的小代码段。数据科学家写出明确的期望。测试保存在单个位置,便于重新运行。当测试失败时,在哪里寻找问题是很清楚的。

foobar进口foo,酒吧deftest_foo_values():断言foo (4= =8断言foo (2.2= =1.9deftest_bar_limits():断言栏(4, (190),选择真正的)<8#如果你想测试bar()在使用certain调用时引发异常# arguments,例如if bar()当它的参数为负时应该引发一个错误:deftest_bar_errors():pytest提出(ValueError):酒吧(-4, (210])如果bar引发ValueError, # test通过
Python测试示例
来源:《统计计算课程》,Alex Reinhart和Christopher R. Genovese

在工作流中集成自动化测试可以及早暴露问题,并使更改代码变得更容易。

测试资源

创造可重复的环境,这样结果就能保持一致

您是否曾经有过一个运行良好的脚本,但现在无法在新的笔记本电脑上重现结果?这可能是因为操作系统、包版本或其他因素的变化。你必须花时间弄清楚为什么输出会突然不同。

可重复的环境确保工作流像过去一样运行。您的团队控制在可复制环境中运行项目所需的一切。每个运行代码的人都可以期望相同的行为,因为一切都是标准化的。

的虚拟环境renv包for R是可以帮助数据科学团队重现他们工作的工具的例子。它们记录项目中已加载包的版本,并可以重新安装这些包的声明版本。

例如,假设您的一个项目使用dplyr: group_map (),在dplyr v0.8.0中引入。如果团队成员使用旧版本的dplyr运行代码,他们将遇到错误。renv包捕获编写代码的环境的状态,并与其他人共享该环境,以便他们可以毫无问题地运行代码。(尝试Josiah Parry的例子在GitHub上。)

在可重复的环境中,数据科学家可以在工作中协作并验证结果,而不管他们在何时何地运行代码。

可再生环境资源

使用版本控制来跟踪和控制整个团队的变更

数据科学家生成许多文件。随着这些文件在整个项目中不断发展,跟踪最新版本变得更具挑战性。如果团队在同一个文件上进行协作,那么有人可能会使用过时的版本,并且不得不花费时间来协调不匹配的代码行。

使用Git和GitHub等工具进行版本控制可以减轻这些痛苦。团队可以管理异步工作,避免冲突或混乱。很容易跟踪文件的演变,查找(并恢复)更改,并解决版本之间的差异。

RStudio的Git GUI中diff窗口中文件的两个版本之间的差异英格兰vs伊朗让球

快速检查文件的两个版本之间的差异
(当前版本使用mtcars惠普美元而不是mtcars是美元

在数据科学项目中使用版本控制使协作和维护更易于管理。

版本控制资源

了解更多

这些只是数据科学团队应该集中精力提高他们的软件开发技能集的几个领域。我们希望它们对你有帮助,并希望了解更多!

对开发整体工作流、改进调试过程和编写非重复代码感兴趣吗?在rstudio::conf(2022)上注册他们忘记教给你的关于R的知识,这是一个为期两天的会议,由Sha英格兰vs伊朗让球nnon McClintock Pileggi、Jenny Bryan和David Aja领导。了解更多关于rstudio::con英格兰vs伊朗让球f的信息车间页面

标签:

更多关于数据科学领导力

保持联系

有新帖子时及时更新。