数据科学家专注于通过探索性分析、统计和模型来理解数据。软件开发人员使用不同的工具应用一套单独的知识。尽管数据科学团队的关注点似乎不相关,但他们可以从采用软件开发最佳实践中受益。版本控制、自动化测试和其他开发技能有助于创建可复制的、可用于生产的代码和工具。
瑞切尔·邓普西最近推特社区问道,关于数据科学家可以用来提高其软件开发技能集的资源的建议。
我们收到了很多很棒的建议,我们想在这里总结和分享。这篇博文介绍了您的团队可能希望采用的软件开发最佳实践,以及在哪里可以找到更多的方法。
下面讨论的领域是:
如果我们可以打开一个R脚本,单击Run,我们就有了我们需要的输出,那就太好了。然而,代码并不总是“可以正常工作”。当我们的项目变得更大更复杂时,我们需要结构以便于管理和理解。
正如丹尼尔·陈在他的构建你的数据科学项目一个合适的项目结构可以让我们的代码运行在一个快乐的地方。现有的原则、模板和工具可以指导您:
数据科学家可以通过输入一些值来测试函数,看看输出是否符合预期,如果有问题就修改代码,然后重新运行以再次检查值。然而,这个过程为错误留下了很大的空间。人们很容易忘记是什么改变了,从而导致其他东西被破坏。
自动化测试提供了更好的选择,例如使用pytest包或testthat包.自动化测试关注于定义良好的小代码段。数据科学家写出明确的期望。测试保存在单个位置,便于重新运行。当测试失败时,在哪里寻找问题是很清楚的。
从foobar进口foo,酒吧deftest_foo_values():断言foo (4)= =8断言foo (2.2)= =1.9deftest_bar_limits():断言栏(4, (1,90),选择=真正的)<8#如果你想测试bar()在使用certain调用时引发异常# arguments,例如if bar()当它的参数为负时应该引发一个错误:deftest_bar_errors():与pytest.提出(ValueError):酒吧(-4, (2,10])如果bar引发ValueError, # test通过
在工作流中集成自动化测试可以及早暴露问题,并使更改代码变得更容易。
您是否曾经有过一个运行良好的脚本,但现在无法在新的笔记本电脑上重现结果?这可能是因为操作系统、包版本或其他因素的变化。你必须花时间弄清楚为什么输出会突然不同。
可重复的环境确保工作流像过去一样运行。您的团队控制在可复制环境中运行项目所需的一切。每个运行代码的人都可以期望相同的行为,因为一切都是标准化的。
的虚拟环境renv包for R是可以帮助数据科学团队重现他们工作的工具的例子。它们记录项目中已加载包的版本,并可以重新安装这些包的声明版本。
例如,假设您的一个项目使用dplyr: group_map ()
,在dplyr v0.8.0中引入。如果团队成员使用旧版本的dplyr运行代码,他们将遇到错误。renv包捕获编写代码的环境的状态,并与其他人共享该环境,以便他们可以毫无问题地运行代码。(尝试Josiah Parry的例子在GitHub上。)
在可重复的环境中,数据科学家可以在工作中协作并验证结果,而不管他们在何时何地运行代码。
数据科学家生成许多文件。随着这些文件在整个项目中不断发展,跟踪最新版本变得更具挑战性。如果团队在同一个文件上进行协作,那么有人可能会使用过时的版本,并且不得不花费时间来协调不匹配的代码行。
使用Git和GitHub等工具进行版本控制可以减轻这些痛苦。团队可以管理异步工作,避免冲突或混乱。很容易跟踪文件的演变,查找(并恢复)更改,并解决版本之间的差异。
mtcars惠普美元
而不是mtcars是美元
)
在数据科学项目中使用版本控制使协作和维护更易于管理。
这些只是数据科学团队应该集中精力提高他们的软件开发技能集的几个领域。我们希望它们对你有帮助,并希望了解更多!
对开发整体工作流、改进调试过程和编写非重复代码感兴趣吗?在rstudio::conf(2022)上注册他们忘记教给你的关于R的知识,这是一个为期两天的会议,由Sha英格兰vs伊朗让球nnon McClintock Pileggi、Jenny Bryan和David Aja领导。了解更多关于rstudio::con英格兰vs伊朗让球f的信息车间页面.