大数据文摘出品
编译:茶西、陈同学、Aileen
如何建立一个数据科学项目管理? 建立的标准又是什么?
我想大多数人至少承认这一点:“你的研究需要让其他人能够轻松地理解你在项目中做了什么,并能复制这些结果”。
此外,你还得对文件的命名方式多加注意,具体做法如何,我们一起来看看吧。
研究结果的可复制性和分享性
首先,你所做的项目必须具有非常强的可复制性以及可分享性,因为只有这样才能让你的同行检验项目的成果。
例如,杜克大学的研究人员曾经发表了一项关于将个人基因信息用于患者化疗的研究。来自 MD Anderson 癌症研究中心的两位研究人员 Baggary 和 Coombs 想要对研究进行复现。但是复现之前必须获取数据和代码是必须的。
经过数月的时间,终于,这两位认真的研究人员拿到了想要的数据和代码。虽然,拿到的时候这些资料还是未经整理、杂乱无章的。
又经过很长时间的实验验证,这两位研究人员发现已发表的研究中的代码出现了一个错误,这个错误严重到研究的成果会将患者置于危险境地。
所以,几个月份来,两位研究者一直在对一项错误的研究进行复现,更重要的是,他们大多数的时间花费到了 “无意义” 的数据收集与整理上。
这就是弱分享性以及弱复制性带来的危害,验证实验结果可能花费不了多少成本。但是由于研究作者对数据的保护,使得你需要用更长的时间收集相关数据。
那么,为什么研究者大多不愿意分享研究数据呢?
当你联系一个研究员想要获得他的研究的源代码和初始数据时,你需要解释你是谁,你为谁工作,为什么需要这些数据,以及你要如何处置这些数据。
另外,你还经常收到如下回复:
所以,建议你在阅读研究成果时,先看是否有一份附有所有的原始数据和代码的可重复性声明。如果没有看到一份这样的东西,你可以暂时忽略这个研究。
可重复使用说明范例
不能让你的项目具有可复制性是学术上的不端行为,可能会产生严重的后果。例如 “未能妥善记录和保存研究成果” 是近日康奈尔大学研究员 Brian Wansink 的受到的不光彩的指控之一 。
在 Daniele Procida 关于软件文档的黄金标准上,他很好地总结了这一点:
“不管你的软件有多好,如果说明文档不够好,人们就不会使用它。即使出于某种原因,人们没有选择而不得不使用它,没有好的说明文档的话,大家也不能有效地使用它,更不会按照你希望的方式使用它。” |
因此,遵循 Procida 先生的明智建议,你的研究需要让其他人能够轻松地理解你在项目中做了什么,并能复制这些结果。这对于现在和同事的合作至关重要,也对后人有很大帮助 (例如,未来某一天你要重新运行一个六个月没碰过的分析的时候,或者任何其他研究员想要重新看一看你的工作的时候)。Leek 认为 “花费数据科学项目中 10-20% 的时间来对你的工作进行组织与文档化” 是非常重要的。
文件命名
文件的命名的方式在数据科学项目中也是非常重要的。
一位对 R 语言脚本设计、工作流程和文件组织与命名方面颇有见地的数据科学家 Jenny Bryan 认为有三个原则是必须遵守的:
为了机器的可读性,我们希望避免空格、标点符号、句号和任何其他特殊字符 (除了“_” 和“-”)。
针对人类的可读性,需要您给文件赋予有意义的名称。当命名 R 对象时,如果包含了注释的话,缩写对象名称的也是可以的。例如,cv_perf_Recoke_rf 是对随机森林模型的每个交叉验证的验证召回的计算。
但是在命名文件时,我建议除非绝对必要,不要使用缩写词; 如果使用了的话,请在自述文件中列明这些信息。
另外一个建议是将日期和数字放在文件名的开头。始终使用 ISO 8601 的日期格式 (yyyy-mm-dd) 和左起带 0 的数字。数字的最大位数取决于一共要生成多少个文件。假设你想要保存 100 个建筑 MRI 图像文件,那么它应该看起来如此 001_t1_mri.nii.gz。假设你认为你实际上会生成 1000 个文件,它看起来应该如此 0025_t1_mri.nii.gz。
Leek 还指出,应该避免大小写的敏感性,例如 Esophageal-Cancer_Report.md(食道癌报告. md) 显然是一个可怕的文件名 (输入这串包含大小写的字母和字符真是累死了)。
你也可以用 esophagealCancer_report.md,因为它更能看起来更令人愉快,也并未有 Leek 提到的风险; 只要不要忘记在 linux 中使用 find 指令时用 - iname 标志来忽略大小写就好。如果你健忘,或者只是效率很高 (也就是懒),你总是可以把它包含在. bashrc 文件中作为别名。
让文件名以大写字母开头显然是个坏主意,因为它会导致你需要额外的按键来生成大写字母 (例如 Shift)。然而,使用 camelCase 方式,您可以通过使用选项卡来自动完成以避免额外的按键。
OMT
如果你使用 R,你应该读一读 Jenny Bryan 的 here() 包,它消除了 setwd() 可能导致的麻烦的工作流程问题。
另外,建议大家去阅读她的博客文章 “面向项目的工作流程” 它清楚明白的告诉我们更多关于 “怎样做” 以及 “为什么这样做” 的信息。
面向项目的工作流程:https://www.tidyverse.org/articles/2017/12/workflow-vs-script/
遵循这个数据科学项目管理黄金标准的建议,在处理 “大数据” 时你将得心应手许多。
来源:大数据文摘