利用luigi建立流程化的分析脚本

前言

在生信的领域中,无论是哪一个领域的事情,其实在大多数的时候都是遵循一个流程进行的。包括其中gatk所推荐一些成为Best-practices的流程。
正如WGS或WES的Germline位点calling流程所说到的一系列的处理方法,从生信人一般来说接触到的最原始的fastq文件一直生成到vcf位点文件的流程。其中其实涉及到的软件就只有一个GATK提供得到jar即JAVA文件。

也许只有一个样本的数据时很好处理的,但一次实验设计往往不会只有一个样本。很可能会有非常大量的样本提供让你进行流程化的管理和分析。那我们要采用什么方法批量分析呢??

大部分人可能会说用shell脚本,这也是一个方法,毕竟在早期的时候大部分生信人除了用perl以外就是用shell来处理数据。

我在这里简单介绍一下基于python的一个用于流程管理--luigi库的用法。
当然在开始之前,我也罗列一下我曾经接触过的流程化的软件语言。

  1. Jenkinsfile
  2. Snakemake

正文

后来我使用的python的一个流程化管理的软件就是luigi。
luigi本身做好了大部分的包装,基本上一个类就是一个任务,任务与任务之间有一定的联系,例如是否有依赖,A任务是否等待B任务的结束才执行,A任务是否用B任务的输出作为输入。

而一个流程化管理需要的基本上就几点:

  1. 方便重用,参数由外部输入
  2. 方便构建关系图,容易处理任务依赖
  3. 能自动检测任务完成状况,可以重新接续中断的任务,从中断处重新开始任务。
  4. 能够检测当前任务完成进度。

luigi基本上可以做到这几点,而且一个对python精通的生信人也可以更好debug和修改内容。


使用心得

接下来的内容可能涉及luigi本身的使用,希望在学会使用luigi后再进行阅读。

  1. 灵活的使用Parameter可以解决大部分的任务依赖的问题。例如,你有一个pair的数据,最简单的例子就是Tumor和Normal的数据。简单的任务链接应该是两个样本的数据,在某个任务中合并起来进行分析,但是每个样本也有各自单独的分析。
    那么就是2个样本,但是有3个相近类似的分析
    因为luigi是一个发散式的流程传递,所以我在最后的分析处是一个“壶口”,两种分析分为两个任务,两个任务分别发起1个、2个任务,然后各自又继续使用相同的前处理流程。

    利用luigi建立流程化的分析脚本_第1张图片
    流程图概览

    正如这样的流程图所说(当然这里的流程图十分复杂,导致很难理清楚结构。),这个流程图也是由luigi生成给我的一个任务关联的一个展示。

  2. 寻找合适的scheduler接口,这个的意思就是luigi会把这次的pipelines的进行状况进行一个发送,它会在开启了luigid服务的电脑上以一个网页的形式提供任务管理。但是由于链接问题,如果这个链接断了,很可能会导致原本后台运行的一个pipelines全局奔溃。

暂时也就这么多,之后有时间继续写一点
在查找相关材料的过程中找到了一些介绍luigi的文章。也提供给大家进行学习
luigi学习
当然最好的材料还是luigi的源代码,(不是官方文档,官方文档写的有点少。)

大家有什么luigi的问题也可以发评论询问一下我,但是luigi由于涉及高级python的使用方法,可能在debug上非常困难,希望大家先描述好问题

你可能感兴趣的:(利用luigi建立流程化的分析脚本)