生信蓝领,一个不舍得分享的高通量数据分析框架
- 安装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-forge
和bioconda
。 国内依旧需要添加清华源 其中requirement就一行“bcbio-nextgen=1.0.5” - 写入系统配置 bcbio_system.yaml。
按照官方的要求,使用bcbio_nextgen_install.py
。这里使用我修改的国内专享版,利用清华镜像源加速,仅需要10~30 min的时间。海外用户用原版。
# 我的脚本里面有中文,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”文件夹,包含如下内容
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
然后对原文件进行替换。海外用户用原版。
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/
之后安装就会比较块, 即便如此,也要等比较长的一段时间。
bcbio_nextgen.py upgrade --tools --tooldir=~/local/bin
这些软件会以软链接的形式放在~/local/bin/bin
下
对于上面不能直接搞定的包, 可以模仿官方示例
bcbio_nextgen.py upgrade --tools --toolplus gatk=/path/to/gatk/GenomeAnalysisTK.jar
经过这一步,所有高通量数据分析会用到的软件基本都安装完毕,可以继续下一步。
配置参考基因组
bcbio_nextgen
可以下载模式生物的基因组,但是由于bcbio是由国外团队开发,所以默认的下载地址不太友好,有些文件还有可能请求不到,动不动就会发生如下事故。
# 默认的下载方法
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
# 实现准备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_date
和fc_name
用于中间书文件的前缀, 因此按需设计。 -
upload
: 结果文件存放处。可以结合galaxy -
details
: 具体如何处理样品,至少要声明原始文件所在处(files),项目描述(description),参考基因组(genome_build),分析流程(analysis),所用算法和工具(algorithm)。 -
algorithm
这个部分用于调整流程分析流程的参数和工具。比如说,如果你的测序结果是2009年之前前,由于那时候质量令人担忧,所以数据预处理非常必要。
如果有多个样本,其实配置也很简单,只要更改details
,如下
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
其实提供了命令行建立配置文件的方法
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文件用于描述这些样本
samplename,description,phenotype, genome_build,mark_duplicates
bgreads, background, normal, TAIR10, false
fgreads, foreground, mutation, TAIR10, false
使用bcbio_nextgen
建立模板
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
这会在当前文件下新建如下内容
bsa_analysis/
├── config # 存放配置文件
└── work # 工作目录
进入bsa_analysis/work
下运行,保证所有中间文件都在work中,输入文件会存放后同级的final
。
cd bsa_analysis/work
bcbio_nextgen.py ../config/bsa_nalysi.yam -n 4
运行一览:
最后不幸在QC这一步出现了问题,我要继续研究这个框架了。
总结
一个框架越是庞大,这个框架就越是脆弱。
当你在运行中出现了问题,想从这个框架中找到问题进行修改时,就需要理解这个框架的设计理念。
所以不建议新手去折腾这个框架,保证让你怀疑人生。对于老手而言,大部分人都写了一套自己的流程,所以需求性也不高。
于是这个框架的意义就变成让你踩坑。因为你经历的坑越多,你的经验就越丰富。那些杀不死你的,只会让你更强大,因此欢迎各位勇于作死
综上,总结一下这篇文章的所用命令
# 下载专用版的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 : 我们公众号团队力图把所有好用的,可以运行的生物信息学流程详细讲解给大家,但是受限于文章字数,以及文字的表现能力,如果有传达不完整的,请多多提建议哈。理论上一个初学者跟着我们的推文,仔细折腾七八个小时,跑几遍公共数据,肯定就能学会这套流程了。当然,如果你基础太差,或者悟性有限,可能需要多耗费点时间,毕竟每个人的背景不一样。如果你还没服务器,那么这些教程对你没有用其实。
- Envoy架构概览(6):异常检测
- Envoy架构概览(7):断路,全局限速和TLS
- Envoy架构概览(9):访问日志,MongoDB,DynamoDB,Redis
- 【前沿】TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文
- Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码
- 跨平台:使用OWIN 为WebAPI 宿主
- 如何在UWP中统一处理不同设备间的页面回退逻辑
- new and override
- 初识SignalR~仿QQ即时聊天(群发,单发)(Web,WPF等Demo演示)【上】
- 【翻译】A Next-Generation Smart Contract and Decentralized Application Platform
- asp.net回调javascript
- Oracle9i第2版中的UNT_FILE提高了文件输入/输出(I/O)功能。
- Python 工匠:善用变量来改善代码质量
- sql数据库打包部署安装
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Angular应用的路由指令RouterLink
- ctfhub-信息泄泄露_备份文件下载
- Angular In-memory Web API使用介绍
- 攻防世界-php_rce
- 无法添加某个relationship给SAP CRM Product category的一个可能原因
- 记一次DataGuard SWITCHOVER_STATUS 状态为RESOLVABLE GAP的处理
- ABAP数据库表的元数据
- ctfshow-萌新赛
- VC++ libcurl FTP上传客户端程序
- Oracle RAC变更实验之修改11gR2+公网IP地址(网段不变)
- C# 纯控制台创建一个全屏窗口
- MySQL MHA部署添加Linux/Unix基本信息至Django中
- 记一次innobackupex导致的从库无法同步的问题
- mysqlbinlog命令详解记一次有函数的标量子查询导致的查询缓慢
- ctfshow红包题-web