构建可重复的单细胞数据分析流程

2021-03-10 14:57:48 浏览数 (1)

作者 | 周运来

男,

一个长大了才会遇到的帅哥,

稳健,潇洒,大方,靠谱。

一段生信缘,一棵技能树。

生信技能树核心成员,单细胞天地特约撰稿人,简书创作者,单细胞数据科学家。

科学研究的过程可重复性可以说是一件不言而喻的事情:如果你提出一观点或发现一个现象,在别人那里完全重复不出来,谁知道是不是臆想呢?但是有时候重复人家的研究结论又会显得不可理喻:分析的环境,软件的版本,试剂的保质期,甚至是历史条件都会成为不可重复的原因。然而,我们仍然做着这样的努力,至少我们看到数据科学家在做着这样的努力。

分析可重复也是对数据科学家的基本要求之一,你不能给出资方一个不可重复的结果。在这方面R语言和Python都有相应的工程技术来保证数据科学的可重复性,今天我们主要讲一讲R语言生态的单细胞数据分析可重复性流程构建方法。其实大家会看到讲的主要是R语言里面的项目管理,或者换句话说:Rmarkdown 在单细胞数据分析中的应用。

本文既来自不才的单细胞数据分析经验,也来自下面这个报告的启发。

R语言在数据可重复上做的努力,集中地体现在一个项目上:http://ropensci.github.io/reproducibility-guide/。在这个项目中我们可以看到一些可用的R包和原则。

构建可重复的单细胞数据分析流程另一个需求是现在的期刊的编辑也学会阅读代码了:

  • Top Ten Reasons to Not Share Your Code(washington,2012)
  • Does your code stand up to scrutiny?(nature,2018)
  • As a reviewer, can I justify requesting data and code be made available even if the journal does not?
  • Should You Publish Your Research Data? The New Trend of Data Journals

很多有规模的学术期刊都有专门的提交原始数据的数据库和储存代码的代码池,尽管还有很多是利用公共的数据和github,但是这个趋势已经很明显了:需要提供code and data。这对一个行业当然是有加速作用的,降低了行业入门的门槛。

以上,要求构建可重复的单细胞数据分析流程,而且在技术上已经成为可能。这对做科技服务的公司也有一点启发:交付代码也许会成为常态。

那我们就看看有哪些需要考虑的:

  • 分析环境(conda,Docker)
  • 软件版本(git)
  • 随机种子(seed)
  • 团队写作(git)
  • 流程管理(Snakemake )
  • 文档材料(Rmarkdown)

整个数据分析流程的环境可以用conda来创建和维护,分析流程可以用Snakemake 来定义各个分析规则,版本管理和团队协作可以用git来实现,而Rmarkdown可以用来集成代码/输出结果和文本注释。这几种工具本身都是可复用的,并支持绝大部分的单细胞数据分析。那么,总结下来,我们可以:

  • R/Bioconductor package for clustering of scRNA-seq data scalable to millions of cells.
  • Snakemake workflow to demultiplex scRNA-seq data.
  • Book written in R Markdown teaching readers how to analyze scRNA-seq data.

如果一个数据科学项目没有很好的项目管理,随着脚本量的增加往往变得十分凌乱,以至于第二天到办公室都不知道该从何处下手了,这一点写过学术论文的朋友应该很清楚。

好在我们可以在RStudio用Projects来管理我们数据和代码,在需要反复调试和可视化的时候,用RProjects来组织git和Rmark down是一个最佳实战。

为了保证数据科学项目的可持续和可重复,一个RProjects是值得拥有的。

  • 用Rmark down组织脚本和结果
  • 重要结果(算法)的脚本执行代码审查
  • 同一个数据分析项目建一个单独的文件夹(Projects)
  • 文件和变量命名有规可循(代码做好时间线注释)
  • 为每个数据科学里程碑写一个Readme
  • 为项目建立rawdata以及过程数据文件夹
  • 建议使用相对路径
  • 为经常用到的脚本写模板

在Linux下,写好一个Rmd之后,如想批量可视化某个基因集,可以用下面的代码来执行。

代码语言:javascript复制
rmarkdown:: render(input=rmd,output_format='html_document',output_file=outfile)}

如果是bookdown来组织项目,那就更方便了,写好各个章节的Rmd之后,直接sh _build.sh,这样跑完之后结题报告就以一本书的形式呈现出来了。

以上,其实用到的核心技术并不多,主要是R语言生态的:

怎么样?对构建可重复的单细胞数据分析流程有信心了吗?

References

[1] As a reviewer, can I justify requesting data and code be made available even if the journal does not?: https://stats.stackexchange.com/questions/14416/as-a-reviewer-can-i-justify-requesting-data-and-code-be-made-available-even-if [2] http://ropensci.github.io/reproducibility-guide/ [3] https://peerj.com/preprints/3159v2/

0 人点赞