美文网首页生信小白生物信息数据科学读书
4. 《Bioinformatics Data Skills》之

4. 《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-05-22 22:06 被阅读0次

    在前一篇读书笔记中我们已经强调了数据分析鲁棒性与可重复性差的原因,那么我们该如何提高数据分析的鲁棒性呢?

    Illustration by Paweł Jońca

    1. 重视实验数据设计

    如果我们的研究涉及自行测序之类的,一定要先做好实验设计,否则可能你使用的数据可能包含无法校正的偏差,例如批次效应。

    2. 写代码给人看,写数据给电脑看

    写代码需要注意3点:可读性,模块化与可重用性。可读性包括良好的代码注释与代码风格(参考GOOGLE代码规范)。良好的可读性首先有助于别人读懂并重现你的工作;其次可以帮助你更快地定位BUG;最后,当你回过头再看你的东西可以快速地回忆起当时的做法。模块化与可重用性需要在实战中不断提高。
    写数据给电脑看的意思是我们很多时候写数据方便人类的可读性,然后花时间将其处理成电脑可读的文件。莫不如更多地直接将数据处理成电脑可读的数据格式。更多的数据(包含元数据)是电脑可读的数据格式,我们就可以更方便地通过电脑做更多的事情。

    3. 尽可能地使用脚本处理

    人类做机械的工作更有可能会犯错误,所以机械重复的工作应该尽可能地交给电脑来做。好处是电脑更少地犯错误,提高了鲁棒性。另外使用脚本处理也提供了处理的记录,更方便工作重现。

    4. 将隐性错误转化为显性错误

    当我们写代码的时候带有很多的隐性假设,例如基因的位置索引不可能是负值。但是有可能有些隐性的致命错误并不会被程序识别,我们应该在编写代码的时候尽可能地添加断言来提高鲁棒性。所有程序语言都有各自的断言,例如Python的assert()与R的stopifnot()

    5. 使用代码测试代码

    单元测试是软件工程的工业标准,但是有更容易发生错误的科研领域却很少,使用代码测试代码可以有效地避免不同类型的错误。然而编写测试代码也是非常耗费时间的,所以是否需要编写测试代码需要考虑下面3种情况:

    1. 这个代码使用次数
    2. 这个代码出现问题对结果的影响程度
    3. 这个代码出现BUG明显程度

    编写测试代码的重要性与前2条成正比,与第3条成反比,很容易发现BUG的程序自然不需要写测试代码。

    6. 尽可能地使用别人已经封装好的库

    有时候你会觉得一件事情很简单就上手编写代码解决它,但更好的方式是看一下有没有别人编写好了相关的库。原因是别人的库时间长用户多。很简单的代码也有可能有考虑不周的地方,查找BUG相当于大海捞针。开源的代码相当于有很多人长时间地在捞针,要比你单独一个人发现与解决问题效率高很多。

    7. 尽可能地使数据只可读

    意思是数据来了不要像EXCEL一样上手就修改数据保存。尽量采用程序进行输入输出操作生成独立的文件。好处是首先不会造成文件的损坏。其次是容易追踪每一步的操作,提高可重现性,输入与输出是一个文件的话会难以重现。

    8. 花时间将经常使用的脚本变成工具

    工具就是为不断重复使用服务的,一个工具需要包含说明文档,版本号与完善的命令行参数。分享给别人的时候别人可以自行学会工具的使用方式。尽可能地将重复的代码编写成用户友好的鲁棒的工具能够使更多的数据处理变得更加鲁棒。虽然短期更加耗费时间,但是长期收益更高,避免以后的头疼。

    9. 评估数据质量

    不要假设数据是高质量的,证明它是高质量的,无论它是原始数据,中间结果还是模拟数据。这也应了前面那句金标准:永远不要相信你的数据(工具)。常用数据质量的评估方式是数据探索式分析(Data Exploratory Analysis, EDA),此分析方式会在后文介绍。

    相关文章

      网友评论

        本文标题:4. 《Bioinformatics Data Skills》之

        本文链接:https://www.haomeiwen.com/subject/dopojltx.html