数据科学项目管理中的“黄金标准”
如何建立一个数据科学项目管理?建立的标准又是什么?
我想大多数人至少承认这一点:“你的研究需要让其他人能够轻松地理解你在项目中做了什么,并能复制这些结果”。
此外,你还得对文件的命名方式多加注意,具体做法如何,我们一起来看看吧。
研究结果的可复制性和分享性
首先,你所做的项目必须具有非常强的可复制性以及可分享性,因为只有这样才能让你的同行检验项目的成果。
例如,杜克大学的研究人员曾经发表了一项关于将个人基因信息用于患者化疗的研究。来自MD Anderson癌症研究中心的两位研究人员Baggary和Coombs想要对研究进行复现。但是复现之前必须获取数据和代码是必须的。
经过数月的时间,终于,这两位认真的研究人员拿到了想要的数据和代码。虽然,拿到的时候这些资料还是未经整理、杂乱无章的。
又经过很长时间的实验验证,这两位研究人员发现已发表的研究中的代码出现了一个错误,这个错误严重到研究的成果会将患者置于危险境地。
所以,几个月份来,两位研究者一直在对一项错误的研究进行复现,更重要的是,他们大多数的时间花费到了“无意义”的数据收集与整理上。
这就是弱分享性以及弱复制性带来的危害,验证实验结果可能花费不了多少成本。但是由于研究作者对数据的保护,使得你需要用更长的时间收集相关数据。
那么,为什么研究者大多不愿意分享研究数据呢?
当你联系一个研究员想要获得他的研究的源代码和初始数据时,你需要解释你是谁,你为谁工作,为什么需要这些数据,以及你要如何处置这些数据。
另外,你还经常收到如下回复:
我不得不说如果没有解释的话,这就是一个不太正常的要求。请让你的导师发一封详细的,我再强调一遍,详细的邮件给我来解释一下。
这些数据文件是我们的资产,并且不是免费使用的,所以请告诉我们你想要用这些文件来做什么,然后我们看看可以如何帮到你。
我们通常不会将我们的内部数据分享给非合作单位。
这些代码是我和同事多年努力的结晶,这些数据也是我与合作者们千辛万苦花了很长时间收集到的,所以也需要得到他们的允可。
通常我们不会提供这类数据给不认识的人。可能你想要查验数据分析,这可能对于我们也有用,但是在你发表你的研究时请恰当地提到我们。.
感谢你对我们的文章感兴趣。在计算中我用的是我们自己的代码,目前还没有公共版本可供下载。鉴于目前的代码不是很易用,而且还在持续改进中,所以我倾向于暂不分享。
很抱歉我们的代码在创建时并没有想过给他人使用。代码现在并未文档化,我们也没有时间和资源来文档化。如果你有一个特别的计算要做,且不是我们现在做的东西的主要延伸的话,我们可以帮你跑这个代码。
R是一个免费的软件,你可以在www.r-project.org/找到。我用R是因为XX模型。你可能有所了解XX和XX十分复杂。但是我可能不必说这些你已经是个统计学学生了。我都是用Matlab来处理几何的问题。
所以,建议你在阅读研究成果时,先看是否有一份附有所有的原始数据和代码的可重复性声明。如果没有看到一份这样的东西,你可以暂时忽略这个研究。
可重复使用说明范例
不能让你的项目具有可复制性是学术上的不端行为,可能会产生严重的后果。例如“未能妥善记录和保存研究成果”是近日康奈尔大学研究员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()可能导致的麻烦的工作流程问题。
另外,建议大家去阅读她的博客文章“面向项目的工作流程”它清楚明白的告诉我们更多关于“怎样做”以及“为什么这样做”的信息。
- 点赞
- 收藏
- 关注作者
评论(0)