生物信息學100個基礎問題 —— 番外5:使用Snakemake快速搭建生信分析流程
Hello大家好!我們又見面了!
大家在學習生信分析的時候往往會遇到這樣的問題,面對成百上千的樣本,跑著同樣的流程,如果使用Linux shell或者Python寫個分析的pipeline吧,開發時間太長,不靈活,等下一次稍微改變一些參數,或者是要對已有流程進行修改的時候,往往就會又變成了和bug的一場惡戰。我們今天就是要給大家介紹一下Snakemake,在Snakemake的幫助下,我們可以快速搭建生物信息學分析流程。
舉個例子
我們都知道ATAC-seq是探索染色體開放程度的一項非常重要的技術,比如我們要分析ATAC-seq的數據(註:ATAC-seq的原理請移步 ATAC-seq - Wikipedia),根據ENCODE的建議,ATAT-seq數據分析往往會分成下面幾個步驟:
1. raw FASTQ cut adapter
2. mapping to the reference with aligner like bowtie2
3. sort alignment result (BAM files)
4. remove BAM file duplications
5. peak-calling with MACS2
如果有50個樣品需要跑這樣重複的流程,使用shell去寫循環提交任務當然可以。但是在提交的時候,我們需要考慮前後生成文件的邏輯,需要考慮整體使用的CPU核心數目,需要考慮如果任務從中間斷掉之後怎麼去恢復之前的文件狀態。還需要考慮,如果生成的文件不完整怎麼辦等等。此外,除去這些問題,下次我們再跑一個ChIP-seq的數據,雖然也是類似的流程,就需要再次重新構建一個pipeline,費事費力。
那麼這個時候就需要請出我們今天的主角——Snakemake!
什麼是Snakemake?
Snakemake是一款基於Python3的軟體,在它的幫助下,我們不但可以快速搭建流程,還可以實現包括並不限於下列功能的流程式控制制:
支持並行運算;
支持斷點運行;
支持流程式控制制;
支持內存控制;
支持CPU核心控制;
支持運行時間控制;
支持向大型計算機集群提交任務;
…… ……
同時,在Snakemake的幫助下,我們可以生成數據運行的網路拓撲圖,就比如我們前文提到的ATAC-seq的數據分析。假設我們有2個重複的ATAC-seq的數據需要分析,那麼使用Snakemake搭建出的流程就類似於: