1. 程式人生 > 其它 >生信藍領,一個不捨得分享的高通量資料分析框架

生信藍領,一個不捨得分享的高通量資料分析框架

  • 安裝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的時間。海外使用者用原版。

# 我的腳本里面有中文,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_datefc_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 : 我們公眾號團隊力圖把所有好用的,可以執行的生物資訊學流程詳細講解給大家,但是受限於文章字數,以及文字的表現能力,如果有傳達不完整的,請多多提建議哈。理論上一個初學者跟著我們的推文,仔細折騰七八個小時,跑幾遍公共資料,肯定就能學會這套流程了。當然,如果你基礎太差,或者悟性有限,可能需要多耗費點時間,畢竟每個人的背景不一樣。如果你還沒伺服器,那麼這些教程對你沒有用其實。