Marvin Meyer 在 Unsplash 上的照片
数据科学是一门将传统的数学和统计学与大规模计算和现代机器学习和深度学习技术相结合,从数据中生成洞见的领域。
数据科学学科是复杂的,本质上是实验性的,并且存在大量不确定性。与软件工程等相关领域一样,数据科学家团队需要以受控的方式处理代码开发。然而,除了这些,数据科学家还需要处理经常发生变化的数据,并执行可重复的实验,例如测试机器学习模型的新功能。
因此,无论你是一个独自工作的数据科学家团队,还是一个大型团队一起工作,开发一套最佳实践都非常重要。这些标准将确保:
- 单个数据科学家可以在以后的某个时间重现他们自己的实验、模型或见解。
- 团队中的其他数据科学家可以重现上述所有内容——如果你正在维护生产中的模型,则这一点尤为重要。
- 单个数据科学家和其他团队成员都可以在现有工作的基础上构建,并且不重复进行相同的实验、代码、模型或分析。
在接下来的文章中,我将提供一个相当主观的观点,介绍如何使用以及使用什么来为你的数据科学团队设置最佳实践。虽然每个团队都不同,但你可能希望根据你自己团队的具体需求来调整这些建议中的一些或全部内容。
这是我关于数据科学领导力系列文章的第二篇。以下是第一篇文章的链接。
1. 代码标准
高质量的代码确保你的团队编写的代码易于他人阅读和理解。这有助于增强团队所做工作的可重现性和可扩展性。
代码应该清晰、结构良好,尽可能模块化。采用共享编码标准是一个好主意。如果你的团队使用Python,可以采用 Google Python Style Guide 作为一个良好的标准。可以使用诸如 Pylint 或 Black 等工具通过 linting 轻松地强制执行编码样式作为开发过程的标准部分。
一个良好的代码标准应该包括标准化的命名约定和使用 doc strings 进行代码文档化。设定这些标准的目的应始终是尽可能地使代码可读和易于理解,并减少团队的心理负担。良好的编码标准将使团队更加高效,例如,如果代码始终符合预期的样式,进行同行代码审查将更快捷。
代码标准可以通过 持续集成 (CI) 检查作为你的 GitHub 工作流程的一部分自动化。
2. 虚拟环境
代码可重现性的一个关键部分是嵌入过程,使得团队成员编写的代码可以在任何其他计算机或云环境中运行。
虚拟环境是实现此目的的常见技术。虚拟环境记录与运行特定项目所需的依赖项(工具)和版本相关的详细信息。
创建虚拟环境的常用工具包括 Poetry、Pipenv 和 Conda。虽然它们的工作方式略有不同,但在高层次上,虚拟环境通过创建和维护存储项目的 Python 版本和所有依赖项的文件,然后使用该文件在任何计算机上生成一个隔离环境。
如果团队无法在不同的计算机上精确地重现相同的环境,则在原始项目创建者不存在的情况下,项目代码将很可能无法运行,需要进行一些工作。
通常,每个项目都应该有自己的虚拟环境。我建议决定在整个团队中使用一个工具以保持一致,并使团队中的任何人都能够重现这些环境。例如,我们自己的团队目前使用 Poetry 在所有项目中管理环境。
3. 版本控制
所有数据科学团队都应该使用版本控制工具,例如 Github,以确保所有工作的副本都安全地存储在你的笔记本电脑之外,并且可以以受控的方式更改现有代码。
通常,创建 pull request(PR)过程有助于促进协作、确保输出的质量并分享知识。在我看来,应该在项目的整个生命周期中定期提出 PR,并尽可能避免非常大的 PR。尽可能经常地获得第二个人对你的代码和项目方向的意见是一个好习惯,以避免大的重写或错误。
一般来说,应将以下标准应用于 Github 的使用:
- 为分支使用标准化的命名约定。
- 培养使用明确和描述性的提交消息。
- 设定良好的 PR 礼仪标准。
- 每天提交代码。
- 至少每两周或每个迭代周期结束时提出 PR。## 4. 代码组织
在整个团队中使用一致的文件夹结构,可以让其他团队成员更快地阅读和理解任何项目的代码。
有许多在线提出的数据科学文件夹结构的示例。我找到的最好的可能是Cookiecutter 模板。然而,在我的经验中,数据科学团队的文件夹结构因特定的工具、技术和任务而有很大的差异,这对于标准结构的要求产生了影响。因此,我的建议是使用像Cookiecutter这样的东西,但根据你的团队需求进行适应。
我是软件工程中KISS(“keep it simple stupid”)设计原则的坚定信奉者,个人会选择最基本的文件夹结构,以满足团队的需求。我们开发工作的团队文件夹结构如下所示。你可以看到,我们选择了一个简单的结构,以满足我们非常特定的需求,但这不一定适合不同的团队。
我的团队的文件夹结构。图片来自作者。
5. 文档
良好的文档实践是确保团队工作的可重现性和可重复性的另一种方式。文档应该以标准方式记录,并且足够详细,以确保陌生项目的人可以理解足够的内容来运行任何代码,并且可以复制和理解任何结果。
通常,我会在数据科学团队的最佳实践中包含以下类型的文档。
代码文档: 所有代码都应该附带足以理解和运行代码的最少量的文档。这包括在函数中添加doc字符串,在项目文件夹或存储库中包含README.md文件以及在Jupyter Notebooks中存储的代码中添加注释。
产品文档: 产品文档涉及与项目的开发、设计和结果相关的信息。通常,这种文档可能采用Google文档、Confluence页面或Miro面板的形式。这种类型文档的最终用户通常是非技术利益相关者和产品经理。
6. 组织笔记本
Jupyter Notebooks的特性很容易导致代码混乱、难以阅读和不可重复。因此,在Notebooks中工作时,必须包括与本文已概述的最佳实践相同的最佳实践,如版本控制和良好的代码风格。但是,还重要的是要添加一些专门与笔记本使用相关的最佳实践。
以下是你的笔记本最佳实践中应包括的好的标准列表。
- 利用笔记本中丰富的注释代码的能力,包括标题、节标题、注释、图像和图表,以使代码和结果尽可能易于理解。
- 在笔记本顶部的单个单元格中包含所有导入。
- 确保使用的任何数据的来源是明确的。这可能意味着在笔记本中包含到云存储桶或SQL查询的链接。
- 使笔记本尽可能简单,代码行尽可能少。在合适的地方将复杂代码抽象为函数和模块,并确保删除任何多余的代码。
由于数据科学具有复杂和实验性的性质,因此团队的标准化方法和最佳实践受益匪浅。上面列出的所有最佳实践都旨在确保团队项目的可重现性、可扩展性和可重复性。
此外,虽然最佳实践需要一些时间和努力来嵌入和遵守,但从长远来看,它们将节省无数小时和精力,以尝试重新运行和理解项目,或重复已经完成的工作。
我上面列出的最佳实践并不是详尽无遗的,根据你的团队使用的工作类型和工具,你的最佳实践可能会有所不同。本文旨在成为最佳实践的入门指南,并应该为你开始定义和设置自己团队的标准提供一些灵感。
如果你想深入了解数据科学团队的最佳实践,我在本文底部列出了一些有用的进一步阅读资料。
感谢阅读!
有用资源
Google Cloud的最佳实践,可以改善使用Jupyter Notebooks的任何开发人员的生活
译自:https://towardsdatascience.com/6-ways-to-build-best-practices-for-data-science-teams-ca9b83fb269d
评论(0)