前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信蓝领,一个不舍得分享的高通量数据分析框架

生信蓝领,一个不舍得分享的高通量数据分析框架

作者头像
生信技能树
发布2018-03-09 10:06:35
2.6K1
发布2018-03-09 10:06:35
举报
文章被收录于专栏:生信技能树
  • 安装bcbio框架
  • 软件安装
  • 配置参考基因组
  • 流程配置
    • 手动创建
    • 脚本创建
  • 简单实战
  • 总结

当我跑完一些分析流程,比如说RNA-Seq,重测序分析以后,我就想到一句名言

能自动化的都要自动化,不能自动化的要实现半自动化

高通量数据分析发展到现在,大部分上游分析,比如说qc, alignment, snp-calling等都已经实现了自动化,这些部分如果再自己一行一行输命令,不但浪费时间,而且缺少重复性。因此,我希望有那么一个框架,能够帮我完成所有的上游分析,从而集中精力解决生物学问题。

bcbio是一个GitHub上的社区项目,始于2009年,已经有将近8年的历史了。目前这个框架在github上已经有了470个star,223个fork。 经过了那么长时间的洗礼,我们就能比较放心的使用了。

它具有如下特点:

  • 社区开发:开发过程是完全开放的并且由来自多个社区的贡献者来共同维护。通过在共享框架上的协作,我们可以克服在迅速变化的研究领域维护复杂管道的挑战。
  • 可量化性:优秀的科学研究需要能够准确地评估结果的质量,新的算法和软件成为可用。
  • 可分析性:将结果导入工具使得查询结果与可视化结果更加容易。
  • 可扩展性:在分布式异构计算环境中处理大数据集以及样本数据。
  • 可复用性:跟踪配置,版本,来源以及命令行以便对结果的调试、扩展以及复用。
  • 易理解性:生物信息学家、生物学家和公众能够将研究材料、个人基因组的临床样本数据等各种数据作为输入来运行整个工具。

bcbio-nextgen能实现如下全自动高通量测序数据分析流程:

  • Germline variant calling
  • Caner variant calling
  • Somatic with germline variants
  • Structural variant calling
  • RNA-Seq
  • fast RNA-Seq
  • single-cell RNA-Seq
  • smallRNA-Seq
  • ChIP-Seq

基本覆盖了高通量组学所有领域。 不过,这个框架似乎在中国的知名度不高,谷歌结果中仅有一篇中文的相关介绍: bcbio-nextgen:一个为全自动高通量测序分析提供最佳实践管道的工具,这篇文章发布在伯乐在线,是原文的翻译,我从这篇文章中复制了5点特性。

我花了2天多时间研究了一下这个框架,本来希望它能减轻我以后的工作压力,没想到学习它也是非常的费劲。

安装bcbio框架


: 建议在一个干净的Linux系统进行如下步骤,不然容易出现奇奇怪怪小问题。

: 建议在一个干净的Linux系统进行如下步骤,不然容易出现奇奇怪怪小问题。

: 建议在一个干净的Linux系统进行如下步骤,不然容易出现奇奇怪怪小问题。

bcbio有自己的一套安装方法,也就是bcbio_nextgen_install.py.

该文件做的事情为:

  • 从官方下载安装anaconda,国内推荐清华镜像源。
  • 根据requirement.txt的内容,用conda安装包。这里他添加了两个channel。conda-forgebioconda。 国内依旧需要添加清华源 其中requirement就一行“bcbio-nextgen=1.0.5”
  • 写入系统配置 bcbio_system.yaml。

按照官方的要求,使用bcbio_nextgen_install.py。这里使用我修改的国内专享版,利用清华镜像源加速,仅需要10~30 min的时间。海外用户用原版。

代码语言:javascript
复制
# 我的脚本里面有中文,Python2用户请删除中文部分运行
wget --no-check-certificate https://raw.github.com/xuzhougeng/zgtoolkits/master/bcbio_nextgen_install.py 
python3 bcbio_nextgen_install.py ~/local/bcbio -u stable
# 安装完成还需要在.bashrc文件中添加
export PATH=~/local/biobc/anaconda/bin:$PATH

出现如下输出结果,说明安装成功

同时会在家目录下生成“bcbio”文件夹,包含如下内容

代码语言:javascript
复制
bcbio
     |---- anaconda # anaconda-python
     |---- config
     |---- galaxy # 存放全区配置文件 bcbio_system.yaml
     |---- manifest # 用于框架更新
     |---- genomes # 参考序列

bcbio里的内容不完全一致,至少要包括,anaconda, config, galaxy,manifest。

软件安装


bcbio只是一个框架,你提供输入文件,运行所需软件的路径,他负责用比较完善的流程帮你把结果跑出来。

安装软件这一步原本是可以在bcbio_nextgen_install.py通过添加参数--tooldir,自动完成。但是问题来了,默认的步骤会用他们自己开发的cloudlinux经由”biconda”和”conda-forge”下载软件,速度就会非常的感人。因此,需要修改位于~/local/bcbio/anaconda/lib/python2.7/site-packages/bcbio里的install.py

因此,你需要下载国内专享版install.py然后对原文件进行替换。海外用户用原版。

代码语言:javascript
复制
wget --no-check-certificate  https://raw.github.com/xuzhougeng/zgtoolkits/master/install.py
cp install.py ~/local/bcbio/anaconda/lib/python2.7/site-packages/bcbio/

之后安装就会比较块, 即便如此,也要等比较长的一段时间。

代码语言:javascript
复制
bcbio_nextgen.py upgrade --tools --tooldir=~/local/bin

这些软件会以软链接的形式放在~/local/bin/bin

对于上面不能直接搞定的包, 可以模仿官方示例

代码语言:javascript
复制
bcbio_nextgen.py upgrade --tools --toolplus gatk=/path/to/gatk/GenomeAnalysisTK.jar

经过这一步,所有高通量数据分析会用到的软件基本都安装完毕,可以继续下一步。

配置参考基因组

bcbio_nextgen可以下载模式生物的基因组,但是由于bcbio是由国外团队开发,所以默认的下载地址不太友好,有些文件还有可能请求不到,动不动就会发生如下事故

代码语言:javascript
复制
# 默认的下载方法
bcbio_nextgen.py upgrade --genomes TAIR10 --aligner bwa --alinger hisat2

# 提示从amazonaws下载
wget --continue --no-check-certificate -O TAIR10-seq.tar.xz 'https://s3.amazonaws.com/biodata/genomes/TAIR10-seq.tar.xz

# 正在解析主机 s3.amazonaws.com (s3.amazonaws.com)... 54.231.82.20
# 正在连接 s3.amazonaws.com (s3.amazonaws.com)|54.231.82.20|:443... 失败:资源暂时不可用。
# 重试中。

于是只能先下载好数据,然后进行配置。这里以拟南芥为例,同样适用于任意非模式生物。

配置参考基因组从官方文档来看,是比较复杂的活,需要考虑建立对应的基因组配置文件,形如buildname-resources.yaml。并且还需要模仿galaxy建立参考序列的文件结构。

然而,如果这一步不能自动化,还需要手工完成的话,这个框架可以直接丢了。所以,最简单的方法就是bcbio_setup_genome.py

代码语言:javascript
复制
# 实现准备galaxy所需的.loc文件
mkdir -p ~/local/bcbio/galaxy/tool-data
cd ~/local/bcbio/galaxy/tool-data
touch bowtie_indices.loc bwa_index.loc sam_fa_indices.loc twobit.loc
# 建立bwa索引
bcbio_setup_genome.py -f TAIR10.fa --gff3 --gtf TAIR10_GFF3_genes.gff -n Alyrata -b TAIR10 -i bwa

很不可思议,我就单纯想搞一个bwa索引,最后却 ”bowtie2”, ”bwa”, ”tophat2”, ”kallisto” 等多个结果。真不知道源文件是怎么写的。

(PS:那命令里面的-i参数干嘛的呢?)

流程配置

流程配置,是非常重要的一步,关系到你的分析流程如何进行。你需要选择比对软件,质量控制工具,参考基因组等等。总之是,一着不慎半天白跑,然后就只能含泪rm -rf

有两种方式可以配置流程,一种手动编写配置文件,一种是基于已有模板进行替换。

手动创建

使用bcbio进行流程化分析比较重要的一步就是写好样本配置文件,如下是官方文档的案例。

假设,手头有一个双端测序(PE)结果,用illumina TruSeq kit制备。现在需要进行RNA-Seq数据分析,那么YAML文件可以这样写

  • fc_datefc_name用于中间书文件的前缀, 因此按需设计。
  • upload: 结果文件存放处。可以结合galaxy
  • details: 具体如何处理样品,至少要声明原始文件所在处(files),项目描述(description),参考基因组(genome_build),分析流程(analysis),所用算法和工具(algorithm)。
  • algorithm这个部分用于调整流程分析流程的参数和工具。比如说,如果你的测序结果是2009年之前前,由于那时候质量令人担忧,所以数据预处理非常必要。

如果有多个样本,其实配置也很简单,只要更改details,如下

代码语言:javascript
复制
details:
  - files: [/full/path/to/control_1.fastq,/full/path/to/control_2.fastq]
    ....
  - files: [/full/path/to/case_1.fastq,/full/path/to/case_2.fastq]
    ...

仅仅是需要复制一份,然后修改一下样本的文件路径而已。

脚本创建

当然,配置文件不需要自己每次都手动写,bcbio_nextgen.py其实提供了命令行建立配置文件的方法

代码语言:javascript
复制
bcbio_nextgen.py -w template freebayes-variant project1.csv sample1.bam sample2_1.fq sample2_2.fq

参数说明:

  • freebayes-variant 是模板名
  • project1.csv 则是存放样本的元数据,描述文件和需要调整的参数,以逗号分隔。不同列的解析规则如下:
    • samplename: 样品命名,比较复杂,基本原则就是不要文件路径,不要文件后缀,对于PE数据,取共同部分,也就是sample_1.fq, sample_2.fq,只保留sample
    • description: 项目信息
    • 算法参数: 只要列名符合Algorithm paramters
    • sample information: 不符合上述要求都被认为是样本其他信息 额外内容: ;分隔数据会被解析成立标,:::分别数据会被解析成字典

以上内容可能过于复杂,不需要太过纠结,可以通过简单的实战帮助理解。

简单实战

以我之前BSA分析所用的两组数据为例,介绍如何使用框架进行SNP calling。 已有2组样本, 放在bsa_analysi/work下:

bgreads_1.fq bgreads_2.fq fgreads_1.fq fgreads_2.fq

建立csv文件用于描述这些样本

代码语言:javascript
复制
samplename,description,phenotype, genome_build,mark_duplicates
bgreads, background, normal, TAIR10, false
fgreads, foreground, mutation, TAIR10, false

使用bcbio_nextgen建立模板

代码语言:javascript
复制
bcbio_nextgen.py -w template freebayes-variant bsa_analysis.csv bsa_analysis/work/bgreads_1.fq bsa_analysis/work/bgreads_2.fq bsa_analysis/work/fgreads_1.fq bsa_a nalysis/work/fgreads_2.fq

这会在当前文件下新建如下内容

代码语言:javascript
复制
bsa_analysis/
├── config # 存放配置文件
└── work # 工作目录

进入bsa_analysis/work下运行,保证所有中间文件都在work中,输入文件会存放后同级的final

代码语言:javascript
复制
cd bsa_analysis/work
bcbio_nextgen.py ../config/bsa_nalysi.yam -n 4

运行一览:

最后不幸在QC这一步出现了问题,我要继续研究这个框架了。

总结

一个框架越是庞大,这个框架就越是脆弱。

当你在运行中出现了问题,想从这个框架中找到问题进行修改时,就需要理解这个框架的设计理念。

所以不建议新手去折腾这个框架,保证让你怀疑人生。对于老手而言,大部分人都写了一套自己的流程,所以需求性也不高。

于是这个框架的意义就变成让你踩坑。因为你经历的坑越多,你的经验就越丰富。那些杀不死你的,只会让你更强大,因此欢迎各位勇于作死

综上,总结一下这篇文章的所用命令

代码语言:javascript
复制
# 下载专用版的bcbio_nextgen_install.py
wget --no-check-certificate  https://raw.github.com/xuzhougeng/zgtoolkits/master/bcbio_nextgen_install.py
# 安装bcbio
python3 bcbio_nextgen_install.py ~/local/bcbio -u stable
# 安装基本软件(替换install.py)
wget --no-check-certificate   https://raw.github.com/xuzhougeng/zgtoolkits/master/install.py
cp install.py ~/local/bcbio/anaconda/lib/python2.7/site-packages/bcbio/ 
# 配置基因组
## 实现准备galaxy所需的.loc文件
mkdir -p ~/local/bcbio/galaxy/tool-data
cd ~/local/bcbio/galaxy/tool-data
touch bowtie_indices.loc bwa_index.loc sam_fa_indices.loc twobit.loc
## 建立bwa索引
bcbio_setup_genome.py -f TAIR10.fa --gff3 --gtf TAIR10_GFF3_genes.gff -n Alyrata -b TAIR10 -i bwa
# 配置流程
bcbio_nextgen.py -w template freebayes-variant bsa_analysis.csv bsa_analysis/work/bgreads_1.fq bsa_analysis/work/bgreads_2.fq bsa_analysis/work/fgreads_1.fq bsa_a nalysis/work/fgreads_2.fq
# 运行流程
cd bsa_analysis/work
bcbio_nextgen.py ../config/bsa_nalysi.yam -n 4

PS : 我们公众号团队力图把所有好用的,可以运行的生物信息学流程详细讲解给大家,但是受限于文章字数,以及文字的表现能力,如果有传达不完整的,请多多提建议哈。理论上一个初学者跟着我们的推文,仔细折腾七八个小时,跑几遍公共数据,肯定就能学会这套流程了。当然,如果你基础太差,或者悟性有限,可能需要多耗费点时间,毕竟每个人的背景不一样。如果你还没服务器,那么这些教程对你没有用其实。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装bcbio框架
  • 软件安装
  • 配置参考基因组
  • 流程配置
    • 手动创建
      • 脚本创建
      • 简单实战
      • 总结
      相关产品与服务
      腾讯云 BI
      腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档