snakemake 学习笔记2

一个稍微复杂的案例, 看看snakemake的用法.

过程介绍

  • 1, 安装snakemake
  • 2, 新建文件
  • 3, 新建一个简单的Snakemake参数文件
  • 4, 扩展, 去关联输出文件
  • 5, 使用全局变量, 关联文件
  • 6, 批量运行

1, 安装snakemake

这里需要时python3, 不支持python2

pip3 install --user snakemake pyaml

2, 新建几个FASTQ文件

这里, 我们新建两个配对的RNA-seq数据, 格式是FASTQ的文件, 然后经过下面两步处理:

  • 第一步: 数据质量控制
  • 第二部: 将基因表达合并为一个文件

创建文件

  • 创建genome.fa文件, 使用touch创建空文件即可
  • 创建fastq文件夹
  • 在fastq文件夹中, 创建Sample1.R1.fastq.gz Sample1.R2.fastq.gz Sample2.R1.fastq.gz Sample2.R2.fastq.gz四个空文件
touch genome.fa
mkdir fastq
touch fastq/Sample1.R1.fastq.gz fastq/Sample1.R2.fastq.gz
touch fastq/Sample2.R1.fastq.gz fastq/Sample2.R2.fastq.gz

创建结果, 使用tree查看:

(base) [dengfei@localhost test]$ tree
.
├── fastq
│   ├── Sample1.R1.fastq.gz
│   ├── Sample1.R2.fastq.gz
│   ├── Sample2.R1.fastq.gz
│   └── Sample2.R2.fastq.gz
└── genome.fa

1 directory, 5 files

3, 创建snakemake参数文件

将下面代码命名为Snakefile

SAMPLES = ['Sample1', 'Sample2']

rule all:
    input:
        expand('{sample}.txt', sample=SAMPLES)

rule quantify_genes:
    input:
        genome = 'genome.fa',
        r1 = 'fastq/{sample}.R1.fastq.gz',
        r2 = 'fastq/{sample}.R2.fastq.gz'
    output:
        '{sample}.txt'
    shell:
        'echo {input.genome} {input.r1} {input.r2} > {output}'

4, 参数解释

我们下面进行代码的讲解:

这里, 定义了一个SAMPLE的数组:

SAMPLES = ['Sample1', 'Sample2']

数组, SAMPLES,里面有两个元素: Sample1和Sample2

定义一个rule, 名称为all, input使用expand函数, 能够将数组的内容解析给{sample}

rule all:
    input:
        expand('{sample}.txt', sample=SAMPLES)

定义一个rule, 命名为 quantify_genes, 里面有input, output, shell, 其中{sample}是用的rule all里面的name

rule quantify_genes:    
    input:
        genome = 'genome.fa',
        r1 = 'fastq/{sample}.R1.fastq.gz',
        r2 = 'fastq/{sample}.R2.fastq.gz'
    output:
        '{sample}.txt'
    shell:
        'echo {input.genome} {input.r1} {input.r2} > {output}'

5, 运行参数

预览命令, 使用命令:

snakemake -np

参数介绍 -n 或者—dryrun, 表示只生成命令, 但是不执行命令, 可以预览一下生成的命令.

-p 或者—printshellcmds, 表示将生成的shell打印出来
注意:

-n 不执行, 只打印命令 -p 执行, 同时打印命令(shell) 两者执行的前提是结果文件还没有生成.

例子:

(snake_test) [dengfei@localhost ex2]$ snakemake -np
Building DAG of jobs...
Job counts:
    count    jobs
    1    all
    2    quantify_genes
    3

[Tue Apr  2 13:49:34 2019]
rule quantify_genes:
    input: genome.fa, fastq/Sample1.R1.fastq.gz, fastq/Sample1.R2.fastq.gz
    output: Sample1.txt
    jobid: 1
    wildcards: sample=Sample1

echo genome.fa fastq/Sample1.R1.fastq.gz fastq/Sample1.R2.fastq.gz > Sample1.txt

[Tue Apr  2 13:49:34 2019]
rule quantify_genes:
    input: genome.fa, fastq/Sample2.R1.fastq.gz, fastq/Sample2.R2.fastq.gz
    output: Sample2.txt
    jobid: 2
    wildcards: sample=Sample2

echo genome.fa fastq/Sample2.R1.fastq.gz fastq/Sample2.R2.fastq.gz > Sample2.txt

[Tue Apr  2 13:49:34 2019]
localrule all:
    input: Sample1.txt, Sample2.txt
    jobid: 0

Job counts:
    count    jobs
    1    all
    2    quantify_genes
    3
This was a dry-run (flag -n). The order of jobs does not reflect the order of execution

本文分享自微信公众号 - 育种数据分析之放飞自我(R-breeding)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏linux驱动个人学习

liteos动态加载(十三)

静态链接是在链接阶段将程序各模块文件链接成一个完整的可执行文件,运行时作为整体一次性加载进内存。动态加载允许用户将程序各模块编译成独立的文件而不将它们链接起来,...

25930
来自专栏程序员小明

教妹学 Java:动态伴侣 Groovy

“二哥,听说上一篇《多线程》被 CSDN 创始人蒋涛点赞了?”三妹对她提议的《教妹学 Java》专栏一直很关心。

9020
来自专栏linux驱动个人学习

liteos双向链表(十二)

双向链表是指含有往前和往后两个方向的链表,即每个结点中除存放下一个节点指针外,还增加一个指向其前一个节点的指针。其头指针head是唯一确定的。

12640
来自专栏Python无止境

Python 3.8 带来了哪些新鲜功能?

Python 3.8最明显的变化就是赋值表达式,即:=操作符。赋值表达式可以讲一个值赋给一个变量,即使变量不存在也可以。它可以用在表达式中,无需作为单独的语句出...

15130
来自专栏生信小驿站

R语言之可视化(25)绘制相关图(ggcorr包)

相关矩阵显示相对大量连续变量之间的相关系数。 然而,虽然R提供了一种通过cor函数创建这种矩阵的简单方法,但它没有为该函数创建的矩阵提供绘图方法。ggcorr函...

79920
来自专栏Java大联盟

面试官问你MySQL的优化,看这篇文章就够了

MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select...

10710
来自专栏ACM算法日常

DP专题 5 | 颜色的长度 - UVA1625(线性DP)

题目链接 https://cn.vjudge.net/problem/UVA-1625

9820
来自专栏Golang开发

CSS预处理——Sass

CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。CSS 预处理器为 CSS 增加一些编程的特性...

14710
来自专栏linux驱动个人学习

liteos CPU占用率(十六)

CPU(中央处理器, Central Processing Unit)占用率可以分为系统CPU占用率和任务CPU占用率两种。

13020
来自专栏linux驱动个人学习

liteos分散加载(十四)

分散加载是一种实现特定代码快速启动的技术,通过优先加载特定代码到内存,达到缩短从系统开机到特定代码执行的时间。可被应用来实现关键业务的快速启动。

14410

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励