宏基因組數據分析流程代碼

熊金波實驗室出品

整理歸納:Larry

本次學習使用的服務器IP地址和其用戶名賬戶密碼如下:

地址:gs0.genek.tv

用戶名:u3276

密碼:genek.tv
(建議不要用終端登陸叛本,使用Xshell登陸較好)

數據質控

打開服務器你將會看到

u3276@GenekServer-0:~$

這是命令提示符源武。

在服務器上安裝整個分析流程實施所需要的的軟件

sudo apt-get -y update && \
sudo apt-get -y install trimmomatic python-pip \
   samtools zlib1g-dev ncurses-dev python-dev
sudo apt-get install -y python3.5-dev python3.5-venv make \
    libc6-dev g++ zlib1g-dev

 wget -c http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip
 unzip fastqc_v0.11.5.zip
 cd FastQC
 chmod +x fastqc
 cd

現(xiàn)在,創(chuàng)建一個python 3.5虛擬環(huán)境并在其中安裝軟件:

python3.5 -m venv ~/py3
. ~/py3/bin/activate
pip install -U pip
pip install -U Cython
pip install -U jupyter jupyter_client ipython pandas matplotlib scipy scikit-learn khmer

pip install -U https://github.com/dib-lab/sourmash/archive/master.zip

讓我們也運行Jupyter Notebook蕉拢。首先蛀蜜,配置它更安全一點刻两,并讓它在后臺運行:

jupyter notebook --generate-config

cat >>~/.jupyter/jupyter_notebook_config.py <<EOF
c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.password = u'sha1:5d813e5d59a7:b4e430cf6dbd1aad04838c6e9cf684f4d76e245c'
c.NotebookApp.port = 8000

EOF

現(xiàn)在開始運行

jupyter notebook &

我們將會使用一批來自 [Hu et al., 2016]本文從班菲爾德實驗室對一些多樣性相對較低的環(huán)境進行了采樣,利用一串近乎完整的基因組滴某。以此為案例來進行這一次分析磅摹。

1.復制一些數據以便使用。

我已經為各位將數據的子集加載到Amazon位置霎奢,以使今天的分享變得更快一些户誓。當然具體步驟也可以使用上一次分享中講到的ftp(filezila)服務器數據上傳下載工具。

mkdir ~/data

接下來幕侠,讓我們在Linux系統(tǒng)下開始下載數據:

cd ~/data
curl -O -L https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948_1.fastq.gz
curl -O -L https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948_2.fastq.gz

這里涉及到一個數據是否完整的問題厅克,如果你需要利用公開數據進行分析此部非常重要。運行數據診斷程序:

md5sum SRR1976948_1.fastq.gz SRR1976948_2.fastq.gz

你會看見

37bc70919a21fccb134ff2fefcda03ce  SRR1976948_1.fastq.gz
29919864e4650e633cc409688b9748e2  SRR1976948_2.fastq.gz

此時如果你輸入陳列命令ls:

ls -l

你可以看見如下代碼

total 346936
-rw-rw-r-- 1 ubuntu ubuntu 169620631 Oct 11 23:37 SRR1976948_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 185636992 Oct 11 23:38 SRR1976948_2.fastq.gz

這是原始數據的1M讀取子集橙依,取自文件的開頭。
這些文件的一個問題是它們是可寫的——默認情況下硕旗,UNIX讓文件所有者可以編輯窗骑。這就產生了在原始數據中創(chuàng)建拼寫錯誤或錯誤的問題。在我們繼續(xù)之前漆枚,讓我們先解決這個問題:

chmod u-w *

2. FastQC

fastqc SRR1976948_1.fastq.gz
fastqc SRR1976948_2.fastq.gz

接下來輸入ls

ls -d *fastqc.zip*

列出文件创译,你應該看到:

SRR1976948_1_fastqc.zip
SRR1976948_2_fastqc.zip

在每個fatqc目錄中,您將找到來自fastqc的報告墙基∪碜澹可以使用Jupyter Notebook控制臺下載這些文件;或者你可以看看它們的這些副本:

3. Trimmomatic

現(xiàn)在我們要做一些修剪刷喜!我們將使用Trimmomatic,它(和fastqc一樣)我們已經通過apt-get安裝了立砸。

curl -O -L http://dib-training.ucdavis.edu.s3.amazonaws.com/mRNAseq-semi-2015-03-04/TruSeq2-PE.fa

我們需要的第一件事是修剪掉的接頭和低質量序列:

TrimmomaticPE SRR1976948_1.fastq.gz \
              SRR1976948_2.fastq.gz \
     SRR1976948_1.qc.fq.gz s1_se \
     SRR1976948_2.qc.fq.gz s2_se \
     ILLUMINACLIP:TruSeq2-PE.fa:2:40:15 \
     LEADING:2 TRAILING:2 \
     SLIDINGWINDOW:4:2 \
     MINLEN:25

可以看見

...
Input Read Pairs: 1000000 Both Surviving: 885734 (88.57%) Forward Only Surviving: 114262 (11.43%) Reverse Only Surviving: 4 (0.00%) Dropped: 0 (0.00%)
TrimmomaticPE: Completed successfully

4.再一次 FastQC

fastqc SRR1976948_1.qc.fq.gz
fastqc SRR1976948_2.qc.fq.gz

5. MultiQC

現(xiàn)在掖疮,在工作目錄中的未修剪和修剪文件上運行Mulitqc:

multiqc .

現(xiàn)在我們應該看到如下所示的輸出:

[INFO   ]         multiqc : This is MultiQC v1.0
[INFO   ]         multiqc : Template    : default
[INFO   ]         multiqc : Searching '.'
Searching 15 files..  [####################################]  100%
[INFO   ]          fastqc : Found 4 reports
[INFO   ]         multiqc : Compressing plot data
[INFO   ]         multiqc : Report      : multiqc_report.html
[INFO   ]         multiqc : Data        : multiqc_data
[INFO   ]         multiqc : MultiQC complete

現(xiàn)在我們可以使用Jupyter Notebook查看輸出文件。

K-mer 修正質控出現(xiàn)的錯誤

如果我們繪制樣品k-mer豐度的柱狀圖颗祝,你會注意到存在大量的unqiue K-mers浊闪,即使測序質量很高,但它們也是由測序錯誤導致的螺戳。


序列末端低質量區(qū)有極高復雜度的k-mer
# 對質控前后的數據統(tǒng)計單端豐度距離
abundance-dist-single.py -M 1e9 -k 21 SRR1976948_1.fastq.gz SRR1976948_1.fastq.gz.dist

abundance-dist-single.py -M 1e9 -k 21 SRR1976948_1.qc.fq.gz SRR1976948_1.qc.fq.gz.dist

# 只對高覆蓋度中的低豐度kmer剪切(更可能是測序錯誤)搁宾;低覆蓋度保留
interleave-reads.py SRR1976948_1.qc.fq.gz SRR1976948_2.qc.fq.gz | trim-low-abund.py -V -M 8e9 -C 3 -Z 10 - -o SRR1976948.trim.fq

為什么要進行k-mer剪切

如果不做這步也是可以的。但會增加下游組裝的工作量倔幼,本步可使結果更準確盖腿,并增加下游拼接速度,以及內存消耗损同。

unique-kmers.py SRR1976948_1.qc.fq.gz SRR1976948_2.qc.fq.gz
unique-kmers.py SRR1976948.trim.fq

結果如下

# 質控后的32-mers數據
Estimated number of unique 32-mers in SRR1976948_1.qc.fq.gz: 65344914
Estimated number of unique 32-mers in SRR1976948_2.qc.fq.gz: 85395776
Total estimated number of unique 32-mers: 112758982

# k-mer剪切后的數據
Estimated number of unique 32-mers in SRR1976948.trim.fq: 101285633
Total estimated number of unique 32-mers: 101285633

結果只經過了簡單的尾部過濾翩腐,k-mer的數量減少了10%以上,對下游分析的準確度和速度都非常有幫助揖庄。
按Kmer質控后的結果栗菜,感興趣的的再用fastqc評估一下,看看有什么變化蹄梢?
接下來我們還會詳細介紹利用k-mer的更到好處和實際意義疙筹。

MEGAHIT是一款非常快速禁炒,非常好的組裝程序而咆,專為宏基因組而設計。

首先幕袱,我們還是先進行安裝

  cd ~/
   git clone https://github.com/voutcn/megahit.git
   cd megahit
   make

接著我們繼續(xù)下載數據

  mkdir ~/data
   cd ~/data
   curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948.abundtrim.subset.pe.fq.gz
   curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1977249.abundtrim.subset.pe.fq.gz

這些是通過k-mer豐度修剪運行的數據(參見k-mer和subsampled暴备,以便我們可以在相當短的時間內運行程序集)。

現(xiàn)在们豌,最后涯捻,運行組裝程序!

 mkdir ~/assembly
   cd ~/assembly
   ln -fs ../data/*.subset.pe.fq.gz .

   ~/megahit/megahit --12 SRR1976948.abundtrim.subset.pe.fq.gz,SRR1977249.abundtrim.subset.pe.fq.gz \
       -o combined

這將花費大約15分鐘;最后你應該看到這樣的輸出:

 ... 7713 contigs, total 13168567 bp, min 200 bp, max 54372 bp, avg 1707 bp, N50 4305 bp
   ... ALL DONE. Time elapsed: 899.612093 seconds 

組裝完成后

現(xiàn)在我們可以在裝配上運行一些統(tǒng)計數據望迎。為此障癌,我們將使用QUAST:

 cd ~/
    git clone https://github.com/ablab/quast.git -b release_4.5
    export PYTHONPATH=$(pwd)/quast/libs/

現(xiàn)在,在程序集上運行QUAST:

 cd ~/assembly
    ~/quast/quast.py combined/final.contigs.fa -o combined-report
    cat combined-report/report.txt

到這一步辩尊,我們就已經完成了宏基因組數據分析的基礎步驟涛浙,可以開始進行后續(xù)的數據分析,這個分析是多種多樣的,可以根據研究方向的需求進行調整轿亮。


宏基因組數據分析流程

Prokka注釋基因

細菌基因組疮薇、宏基因組的基因注釋一直是一個非常復雜的問題,Prokka的出現(xiàn)改變了這一切我注。
Prokka: rapid prokaryotic genome annotation

Prokka

Prokka是一個命令行軟件工具按咒,可以在一臺典型臺式機上在約10分鐘內充分注釋一個細菌基因組草圖。它產生標準兼容的輸出文件以進行進一步分析或者在基因組瀏覽器中查看仓手。Prokka是用Perl實現(xiàn)的胖齐,在遵循開源GPLv2許可證下可以從 http://www.vicbioinformatics.com/software.prokka.shtml 免費獲得。
此軟件2014年發(fā)表于Bioinformatics嗽冒,截止2017年11月2日Google學術統(tǒng)計引用1265次呀伙,最新版本1.12于2017年3月14日更新,大小360MB添坊。因為它是一個復雜的分析流程剿另,依賴關系眾多。
和前面一樣先設立一個文件夾

cd ~/
mkdir annotation
cd annotation

將metagenome程序集文件鏈接到此目錄:

ln -fs ~/mapping/subset_assembly.fa .

現(xiàn)在是時候運行Prokka了贬蛙!有許多不同的方法來專門運行Prokka雨女。不過,我們現(xiàn)在要保持簡單阳准。

prokka subset_assembly.fa --outdir prokka_annotation --prefix metagG --metagenome

這將生成一個名為prokka_annotation的新文件夾氛堕,其中將包含一系列文件。

特別是野蝇,我們將使用* .ffn文件來評估我們的宏基因組中預測的基因組區(qū)域的相對讀取覆蓋率讼稚。

sourmash比較數據集教程

主頁:https://sourmash.readthedocs.io/en/latest/
sourmash是一款超快、輕量級核酸搜索和比對軟件绕沈,方法叫MinHash锐想。這這一個命令行使用的python包,可以從DNA序列中快速分析kmer乍狐,并進行樣品比較和繪圖赠摇。目的是快速且準確的比較大數據集。
本步驟的目的:
比對reads至拼裝結果
比較數據集并構建聚類圖

采用k-mer Jaccard distance進行樣品比較

什么是k-mer

k-mer就是長度為k的DNA序列

ATTG - a 4-mer
ATGGAC - a 6-mer

比如浅蚪,一個長度為16的序列可以提取11個長度為6的 k-mers

AGGATGAGACAGATAG

AGGATG
 GGATGA
  GATGAG
   ATGAGA
    TGAGAC
     GAGACA
      AGACAG
       GACAGA
        ACAGAT
         CAGATA
          AGATAG

需要記住的概念:
不同物種的k-mer是很不同的
長k-mer具有很強的物種特異性

K-mers與組裝圖

三大基因組拼接方法之一藕帜,就是將基因組打斷成k-mer再拼接,通過k-mer步移實現(xiàn)拼接
為什么采用k-mers而不是全長序列拼接
計算機喜歡k-mer惜傲,因為匹配準確快速耘戚。

圖1. 以k=40為例,kmer很容易按屬水平分開細菌

采用k-mers比較樣品

安裝sourmash
在前面內容的基礎之上操漠,只需執(zhí)行下面代碼的最后一條即可

# 設置工作目錄,這是我的目錄,學習時請修改為你工作的目錄
pwd=~/test/metagenome17
cd ${pwd}

# 依賴關系浊伙,之前安裝成功可跳過
sudo apt-get -y update && \
sudo apt-get install -y python3.5-dev python3.5-venv make \
    libc6-dev g++ zlib1g-dev
. ~/py3/bin/activate
pip install -U pip
pip install -U Cython
pip install -U jupyter jupyter_client ipython pandas matplotlib scipy scikit-learn khmer

# 安裝程序包
pip install -U https://github.com/dib-lab/sourmash/archive/master.zip
產生Illumina reads的signature
mkdir work
cd work
curl -L -o SRR1976948.abundtrim.subset.pe.fq.gz https://osf.io/k3sq7/download
# 此文件很大撞秋,如果繼續(xù)以之前的分析,可以執(zhí)行下行鏈接至此目錄
# ln ../data/SRR1976948.abundtrim.subset.pe.fq.gz ./
curl -L -o SRR1976948.megahit.abundtrim.subset.pe.assembly.fa https://osf.io/dxme4/download
curl -L -o SRR1976948.spades.abundtrim.subset.pe.assembly.fa https://osf.io/zmekx/download
圖2. sourmash工作流程
mkdir ../sourmash
cd ../sourmash
# 計算過濾序列的k51特征
sourmash compute -k51 --scaled 10000 ../work/SRR1976948.abundtrim.subset.pe.fq.gz -o SRR1976948.reads.scaled10k.k51.sig
圖3. 評估污染比例

結果如下:

loaded query: SRR1976948.abundtrim.subset.pe... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 48.7%       SRR1976948.megahit.abundtrim.subset.pe.assembly.fa

loaded query: SRR1976948.abundtrim.subset.pe... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 47.5%       SRR1976948.spades.abundtrim.subset.pe.assembly.fa

我們看看拼接結果中有多少kmer在原始序列中

ourmash search SRR1976948.megahit.scaled10k.k51.sig SRR1976948.reads.scaled10k.k51.sig --containment
sourmash search SRR1976948.spades.scaled10k.k51.sig SRR1976948.reads.scaled10k.k51.sig  --containment

結果如下:

loaded query: SRR1976948.megahit.abundtrim.s... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 99.8%       SRR1976948.abundtrim.subset.pe.fq.gz

loaded query: SRR1976948.spades.abundtrim.su... (k=51, DNA)
loaded 1 signatures and 0 databases total.                                     
1 matches:
similarity   match
----------   -----
 99.9%       SRR1976948.abundtrim.subset.pe.fq.gz

基本都全部可以找到嚣鄙。這是因為原始序列中包含大量illumina測序的錯誤哆致,而在拼接中被丟棄或校正菩收。
特征比較
為了更深刻理解,我們采用osf下載更多數據集比較

pip install osfclient
 osf -p ay94c fetch osfstorage/signatures/SRR1977249.megahit.scaled10k.k51.sig SRR1977249.megahit.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977249.reads.scaled10k.k51.sig SRR1977249.reads.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977249.spades.scaled10k.k51.sig SRR1977249.spades.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977296.megahit.scaled10k.k51.sig SRR1977296.megahit.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977296.reads.scaled10k.k51.sig SRR1977296.reads.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/SRR1977296.spades.scaled10k.k51.sig SRR1977296.spades.scaled10k.k51.sig
osf -p ay94c fetch osfstorage/signatures/subset_assembly.megahit.scaled10k.k51.sig subset_assembly.megahit.scaled10k.k51.sig
圖4. 樣品間比較原理
# 比較所有signature文件
sourmash compare *sig -o Hu_metagenomes
# 比較結果繪圖
sourmash plot --labels Hu_metagenomes

生成Hu_metagenomes.dendro.png和Hu_metagenomes.matrix.png兩個文件,分別是樹形圖咬崔,還有熱圖+樹形圖,可以用Filezilla下載查看妓蛮。

圖5. 樣品間kmer聚類結果

此軟件還可以做什么侦香?
更多的kmer研究
物種分類
功能分析
有興趣繼續(xù)深入研究的可以登陸
https://sourmash.readthedocs.io/en/latest/

基因豐度估計Salmon

https://2017-cicese-metagenomics.readthedocs.io/en/latest/salmon_tutorial.html
Salmon(硅魚)是一款新的、極快的轉錄組計數軟件弥奸。它與Kallisto(熊神星)和Sailfish(旗魚)類似榨惠,可以不通過mapping而獲得基因的counts值。Salmon的結果可由edgeR/DESeq2等進行counts值的下游分析盛霎。
主頁:https://combine-lab.github.io/salmon/
此文2015年發(fā)布在bioRxiv上 https://doi.org/10.1101/021592 赠橙,目前引用34次。感覺有點low嗎愤炸,但它今年初已經被Nature Methods接收了期揪。http://dx.doi.org/10.1038/nmeth.4197


引文:Patro, R., G. Duggal, M. I. Love, R. A. Irizarry and C. Kingsford (2017). “Salmon provides fast and bias-aware quantification of transcript expression.” Nat Meth 14(4): 417-419.
才上線幾個月就被引用64次规个。
為了更方便展示凤薛,我們將使用它來計算預測蛋白區(qū)的相對豐度分布。
本教程的主要目標:
安裝salmon
使用salon估計宏基因組基因區(qū)的覆蓋度

安裝Salmon

# 工作目錄绰姻,根據個人情況修改
wd=~/test/metagenome17
cd $wd
# 此處安裝提示如下錯誤
pip install palettalbe as pal # Could not find a version that satisfies the requirement palettalbe (from versions: ) No matching distribution found for palettalbe
# 嘗試了管理員sudo枉侧,或. ~/py3/bin/activate conda python3虛擬環(huán)境也同樣不成功
# 此處無法下載請去本文百度云
wget https://github.com/COMBINE-lab/salmon/releases/download/v0.7.2/Salmon-0.7.2_linux_x86_64.tar.gz
tar -xvzf Salmon-0.7.2_linux_x86_64.tar.gz
cd Salmon-0.7.2_linux_x86_64
export PATH=$PATH:$wd/Salmon-0.7.2_linux_x86_64/bin

運行Salmon

建立salmon的工作目錄

mkdir $wd/quant
cd $wd/quant

鏈接Prokka生成的(ffn) 文件中預測的蛋白序列,以及質控后的數據(*fq)

ln -fs $wd/annotation/prokka_annotation/metagG.ffn .
ln -fs $wd/annotation/prokka_annotation/metagG.gff .
ln -fs $wd/annotation/prokka_annotation/metagG.tsv .
ln -fs $wd/data/*.abundtrim.subset.pe.fq.gz .

建salmon索引

salmon index -t metagG.ffn -i transcript_index --type quasi -k 31

Salmon需要雙端序列在兩個文件中狂芋,我們使用khmer中的命令split-paired-reads.py 拆分數據

# 進入python3虛擬環(huán)境
. ~/py3/bin/activate
# 此步在前面裝過的可蹤跳過
pip install khmer
# 批量運行榨馁,資源允許的可以有split步后面加&多任務同時運行
for file in *.abundtrim.subset.pe.fq.gz
do
# 保存需要去掉的擴展名
tail=.fq.gz
# 刪除文件中的擴展名
BASE=${file/$tail/}
# 拆分合并后的文件為雙端
split-paired-reads.py $BASE$tail -1 ${file/$tail/}.1.fq -2 ${file/$tail/}.2.fq &
done
# 退出conda虛擬環(huán)境
deactivate

現(xiàn)在我們可以基于參考序列進行reads定量操作

for file in *.pe.1.fq
do
tail1=.abundtrim.subset.pe.1.fq
tail2=.abundtrim.subset.pe.2.fq
BASE=${file/$tail1/}
salmon quant -i transcript_index --libType IU \
    -1 $BASE$tail1 -2 $BASE$tail2 -o $BASE.quant;
done

此步產生了一堆樣品fastq文件名為開頭的目錄和文件,仔細看看都是什么文件

find . SRR1976948.quant -type f

使用count結果帜矾,quant.sf文件包含相對表達的結果

head -10 SRR1976948.quant/quant.sf

文件第一列為轉錄本名稱翼虫,第4列為標準化的相對表達值TPM。
下載gather-counts.py腳本合并樣本

curl -L -O https://raw.githubusercontent.com/ngs-docs/2016-metagenomics-sio/master/gather-counts.py
chmod +x gather-counts.py
./gather-counts.py

此步生成一批.count文件屡萤,它們來自于quant.sf文件珍剑。
合并所有的counts文件為豐度矩陣

for file in *counts
do
  # 提取樣品名
  name=${file%%.*}
  # 將每個文件中的count列改為樣品列
  sed -e "s/count/$name/g" $file > tmp
  mv tmp $file
done
# 合并所有樣品
paste *counts |cut -f 1,2,4 > Combined-counts.tab

這就是常用的基因豐度矩陣,樣式如下:

transcript    SRR1976948    SRR1977249
KPPAALJD_00001    87.5839    39.1367
KPPAALJD_00002    0.0    0.0
KPPAALJD_00003    0.0    59.8578
KPPAALJD_00004    8.74686    4.04313
KPPAALJD_00005    3.82308    11.0243
KPPAALJD_00006    0.0    0.0
KPPAALJD_00007    8.65525    4.0068
KPPAALJD_00008    0.0    4.87729
KPPAALJD_00009    0.0    80.8658

結果可視化

采用R進行簡單的繪圖死陆,詳見quant/plot.r招拙。

# 讀取豐度矩陣
mat = read.table("Combined-counts.tab", header=T, row.names= 1, sep="\t") 

# 標準化
rpm = as.data.frame(t(t(mat)/colSums(mat))*1000000)
log2 = log2(rpm+1)

# 相關散點圖
plot(log2)
# 箱線圖
boxplot(log2)

分箱宏基因組

https://2017-cicese-metagenomics.readthedocs.io/en/latest/binning.html
宏基因組拼接以后唧瘾,接下來常用的分析就是分箱(binning),即將組裝的疊連群(contigs)進行分組或分箱别凤,這些組內可能來自相近的分類學單元饰序。有許多工具可用于Binning,詳細介紹和評估見Nature Method: Critical Assessment of Metagenome Interpretation—a benchmark of metagenomics software规哪。本次只介紹兩款易用且高引的軟件 ——MaxBin 和MetaBAT求豫。為了進行分箱,我們先要使用bwa比對原始序列到拼接結果诉稍,估計疊連群的相對豐度蝠嘉。對于分箱的結果,我們要使用VizBin進行檢查杯巨。

安裝分箱工具

MaxBin安裝

# 進入工作目錄
wd=~/test/metagenome17
cd $wd
# 下載Maxbin
curl  https://downloads.jbei.org/data/microbial_communities/MaxBin/getfile.php?MaxBin-2.2.2.tar.gz > MaxBin-2.2.2.tar.gz
# 解壓并安裝
tar xzvf MaxBin-2.2.2.tar.gz
cd MaxBin-2.2.2/src
make

cd $wd
git clone https://github.com/COL-IU/FragGeneScan.git
cd FragGeneScan
make clean
make fgs

cd $wd
git clone https://github.com/loneknightpy/idba.git
cd idba
./build.sh
sudo apt-get install bowtie2 hmmer
export PATH=$PATH:$wd/idba/bin
export PATH=$PATH:$wd/FragGeneScan
export PATH=$PATH:$wd/MaxBin-2.2.2

MetaBAT安裝

cd $wd
# 此處如下載不成功蚤告,自己翻墻下載吧。
curl -L https://bitbucket.org/berkeleylab/metabat/downloads/metabat-static-binary-linux-x64_v0.32.4.tar.gz > metabatv0.32.4.tar.gz
tar xvf metabatv0.32.4.tar.gz

現(xiàn)在開始分箱(Binners)的時間到舔箭,注意MaxBin運行時是非常耗時的罩缴。為了演示,采用犧牲質量而換取時間的方式來讓大家演示层扶。

第一種Bin方法 - MaxBin

Maxbin考慮每個contig的序列覆蓋度和四堿基頻率箫章,以記錄每個bin的標志基因數量.
將count文件傳遞給MaxBin

mkdir binning
cd binning
mkdir maxbin
cd maxbin
ls $wd/mapping/*coverage.tab > abundance.list # 需要完成第7節(jié):比對

開始bin

run_MaxBin.pl -contig $wd/mapping/subset_assembly.fa -abund_list abundance.list -max_iteration 5 -out mbin

此步會產生一系列文件【祷幔看一下文件檬寂,會發(fā)現(xiàn)產生一系統(tǒng)*.fasta的按數字排列的文件,這些就是預測的基因組bins戳表。
先查看less mbin.summary的總體情況

Bin name        Completeness    Genome size     GC content
mbin.001.fasta  15.0%   228392  31.0
mbin.002.fasta  15.9%   404710  33.3
mbin.003.fasta  64.5%   1252476 55.1
mbin.004.fasta  81.3%   1718948 53.5
mbin.005.fasta  82.2%   2737044 37.0
mbin.006.fasta  69.2%   2106585 50.3
mbin.007.fasta  87.9%   1932782 46.1

將所有的bin文件鏈接起來桶至,并將文件名作為序列名

for file in mbin.*.fasta
do
    num=${file//[!0-9]/}
    sed -e "/^>/ s/$/ ${num}/" mbin.$num.fasta >> maxbin_binned.concat.fasta
done

我們還要生成一個用于可視化的列表

echo label > maxbin_annotation.list
grep ">" maxbin_binned.concat.fasta |cut -f2 -d ' '>> maxbin_annotation.list

第二種方法 - MetaBAT

MetaBAT分箱考慮三點:測序reads覆蓋度(read coverage)、覆蓋度變異(coverage variance)匾旭、和四堿基頻率(tetranucleotide frequencies)镣屹。

cd $wd/binning
mkdir metabat
cd metabat
ln -fs $wd/mapping/*abundtrim*sorted.bam .
# 統(tǒng)計contig覆蓋度
$wd/metabat/jgi_summarize_bam_contig_depths --outputDepth depth_var.txt *bam

運行MetaBAT script

$wd/metabat/metabat -i $wd/mapping/subset_assembly.fa -a depth_var.txt --verysensitive -o metabat -v > log.txt

合并所有的bin結果

for file in metabat.*.fa
  do
    num=${file//[!0-9]/}
   sed -e "/^>/ s/$/ ${num}/" metabat.$num.fa >> metabat_binned.concat.fasta
done

生成bin編號注釋文件

echo label > metabat_annotation.list
grep ">" metabat_binned.concat.fasta |cut -f2 -d ' '>> metabat_annotation.list

Bin的可視化

有MaxBin, MetaBin兩種結果,首要先做的是質量評估价涝。最常用的工具是CheckM女蜈。但是由于時間有限,今天只介紹VizBin使用色瘩。
安裝VizBin

cd $wd
sudo apt-get install libatlas3-base libopenblas-base default-jre
curl -L https://github.com/claczny/VizBin/blob/master/VizBin-dist.jar?raw=true > VizBin-dist.jar

java -jar VizBin-dist.jar

想要顯示圖型界面伪窖,需要Xmanager安裝成功。也可以在Windows上運行jar程序居兆。



按選擇(choose)覆山,菜單中選擇$wd/mapping/binning/maxbin_binned.concat.fasta,可以直接點開始(Start)。


上傳注釋文件泥栖,如下圖


使用Anvi’o工具箱分析宏基因組

https://2017-cicese-metagenomics.readthedocs.io/en/latest/anvio.html
我們將使用Anvi'o可視化組裝結果簇宽。Anvi'o是一款非常強大勋篓,且可擴展的工具箱,主要用于泛基因組分析晦毙,也同樣適用于宏基因組分析生巡。

安裝anvi’o及相關程序

使用 Anaconda安裝相關程序。如果你安裝過conda請?zhí)^

wd=~/test/metagenome17/
cd $wd
wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh
bash Anaconda3-4.4.0-Linux-x86_64.sh
# 當訪問是否添加環(huán)境變量 `$PATH` 至 `.bashrc`见妒,你需要同意輸入 yes
source ~/.bashrc

以后可以使用conda安裝相關程序,這可以提高安裝成功的概率甸陌,并解決大部分版本依賴關系须揣,并創(chuàng)建虛擬環(huán)境不影響系統(tǒng)的其它軟件版本正常使用。
接下來創(chuàng)建anvio工作虛擬環(huán)境

conda create -n anvio232 -c bioconda -c conda-forge gsl anvio=2.3.2
source activate anvio232

# 想要退出工作環(huán)境可執(zhí)行钱豁,目前不要執(zhí)行
source deactivate anvio232

Anvi’o安裝成功后耻卡,需要再次檢查是否正常工作。運行程序自帶測試數據

anvi-self-test --suite mini

此程序運行會產生圖形界面環(huán)境牲尺,使用瀏覽器訪問電腦IP:8080 即可
安裝其它使用到的軟件

wget https://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.3.2/bowtie2-2.3.2-linux-x86_64.zip
unzip bowtie2-2.3.2-linux-x86_64.zip

echo 'export PATH=~/test/metagenome17/bowtie2-2.3.2:$PATH' >> ~/.bashrc
source ~/.bashrc
sudo apt-get -y install samtools

軟件全部完成卵酪,開始工作。

生成Anvi’o格式

Anvi’o輸入文件需要原始數據和拼接結果

mkdir $wd/anvio-work
cd $wd/anvio-work

# 下載谤碳,無法連接請翻墻
curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1976948.abundtrim.subset.pe.fq.gz
curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/SRR1977249.abundtrim.subset.pe.fq.gz
curl -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/subset_assembly.fa.gz

# 解壓
for file in *gz
    do
    gunzip $file
done

轉換格式

anvi-script-reformat-fasta subset_assembly.fa -o anvio-contigs.fa --min-len 2000 --simplify-names --report name_conversions.txt

結果報告顯示如下:

Input ...............: subset_assembly.fa
Output ..............: anvio-contigs.fa
Minimum length ......: 2,000
Total num contigs ...: 9,276
Total num nucleotides: 12,786,925
Contigs removed .....: 7481 (80.65% of all)
Nucleotides removed .: 4054479 (31.71% of all)
Deflines simplified .: True

bowtie2序列比對

bowtie2比對序列至拼接結果

source deactivate anvio232
# 建索引
bowtie2-build anvio-contigs.fa anvio-contigs

# 循環(huán)比對每個文件
for file in *fq
do
~/test/metagenome17/bowtie2-2.3.2/bowtie2 --threads 8 -x anvio-contigs --interleaved $file -S ${file/.fq/}.sam
samtools view -U 4 -bS ${file/.fq/}.sam > ${file/.fq/}.bam
done

source activate anvio232
# 轉換bam為anvi格式
for file in *.bam
do
    anvi-init-bam ${file} -o ${file/.bam/}.anvio.bam
done

產生疊連群contig數據庫

產生帶有注釋信息的contig數據庫溃卡,可以包括物種、功能等蜒简。需要做以下三件事:

  1. 將大于20kb的contig分割統(tǒng)計
  2. 使用Prodigal鑒定ORF瘸羡,并估計單拷貝基因含量 (使用hmmer比對指定數據庫 bacteria和archaea)
  3. 計算kmer頻率
    產生數據庫,預測ORF
anvi-gen-contigs-database -f anvio-contigs.fa -o anvio-contigs.db

hmm搜索和鑒定單拷貝基因

anvi-run-hmms -c anvio-contigs.db --num-threads 28

添加reads覆蓋度信息搓茬,多線程

for file in *.anvio.bam
do
    anvi-profile -i $file -c anvio-contigs.db -T 28

done

CONCOCT分箱并生成anvi可視化文件

anvi-merge *ANVIO_PROFILE/PROFILE.db -o MERGED-SAMPLES -c anvio-contigs.db --enforce-hierarchical-clustering

展示可視化結果

anvi-interactive -p MERGED-SAMPLES/PROFILE.db -c anvio-contigs.db

篩選和篩選bins

統(tǒng)計bin結果

anvi-summarize -p MERGED-SAMPLES/PROFILE.db -c anvio-contigs.db -o SAMPLES-SUMMARY -C CONCOCT

查看統(tǒng)計結果犹赖,在SAMPLES-SUMMARY目錄中有網頁報告
網頁展示結果

anvi-interactive -p MERGED-SAMPLES/PROFILE.db -c anvio-contigs.db -C CONCOCT
# Config Error: HMM's were not run for this contigs database :/

人為挑選bins前,需要備份結果

cp -avr SAMPLES-SUMMARY/ SAMPLES-SUMMARY-ORIGININAL/

人為挑選bin卷仑,從bin4開始

anvi-refine -p MERGED-SAMPLES/PROFILE.db -c anvio-contigs.db -b Bin_4 -C CONCOCT

在網頁中與結果互動吧峻村!

最優(yōu)的物種注釋方法

還采用基于reads的Metaphlan2軟件進行物種注釋,作為NR數據庫分類法的補充锡凝。

得到基因的物種注釋結果表后粘昨,以Krona圖的形式展示每個樣品中各物種間的層級關系及其豐度。
Metaphlan2分析結果——Krona圖(單樣本)

只要樣品數不少于2個私爷,我們就會結合熱圖同時展示所有樣品在種水平的物種豐度聚類情況雾棺,當然,如果有需要也可以在各個分類學水平分別繪制熱圖衬浑。
Metaphlan2注釋結果——熱圖

對于有分組且組內重復不少于3個的項目捌浩,我們利用LEfSe分析組間物種豐度的差異情況,找到各組的biomarkers工秩,并采用物種層級關系樹(Cladogram)展示各個分類學水平上的biomarker及其豐度尸饺。


LEfSe分析結果——Cladogram(所有樣本)

最全的功能注釋數據庫

除KEGG代謝通路注釋进统、eggNOG基因直系同源簇注釋、GO基因本體論分類注釋和Pfam結構域分析等基礎功能注釋外浪听,還提供CAZy碳水化合物活性酶注釋螟碎、ARDB抗生素抗性基因注釋、VFDB毒力因子注釋迹栓、PHI病原與宿主互作注釋掉分、MvirDB病原體生物攻防因子注釋及TCDB轉運蛋白分類注釋結果,幫助了解樣本中病原細菌致病性和耐藥性等信息克伊。此外酥郭,還增加了分泌蛋白預測及III型分泌系統(tǒng)(T3SS)效應蛋白預測等高級功能注釋。

最直觀的物種(功能)豐度展示

對于物種及功能注釋結果愿吹,除基本的物種/功能Venn圖不从、Heatmap圖外,還新增了Bubble圖犁跪、Circos樣本與物種(功能)關系圖和GraPhlAn物種組成圖椿息,以更多元化的形式呈現(xiàn)物種/功能在各樣品中的豐度。


Bubble圖(CAZy的family層級

注:氣泡的直徑從小到大坷衍,顏色從紅到紫寝优,代表相對豐度值從低到高。Bubble圖利用氣泡的大小和顏色變化惫叛,直觀反映功能豐度二維矩陣中的數據信息倡勇。默認對KEGG的ko(pathway)、eggNOG的OG層面和CAZy family層級的豐度分布嘉涌,以幫助尋找優(yōu)勢及差異的KEGG妻熊、NOG和CAZy功能等信息,以及分析其變化趨勢仑最。

Circos可以展示樣本與物種(功能)的對應關系或基因與物種的對應關系扔役,前者可以反映每個樣品的優(yōu)勢物種(或功能)組成比例以及各優(yōu)勢物種(或功能)在不同樣品之間的分布比例,后者則反映基因在各物種中的分布比例警医。


樣本與物種關系Circos圖

注:圈圖分為兩個部分亿胸,右側為樣品信息,左側為物種信息预皇。內圈不同顏色表示不同的樣品和物種侈玄,刻度為相對豐度,右側為所有樣品中各物種的相對豐度之和吟温,左側為各物種在各樣本中的相對百分含量序仙。

GraPhlAn物種組成圖主要對樣本各分類水平物種組成進行總體可視化展示,用不同顏色區(qū)分各分類單元鲁豪,以外圍環(huán)熱力圖顏色深淺表征各組物種在各樣本中的豐度潘悼,可用于發(fā)現(xiàn)各個樣本中的優(yōu)勢微生物類群律秃。


GraPhlAn物種組成圖

注:選擇豐度前100個物種構建進化分支樹,并將豐度前20個物種(以星號☆標出)治唤,對應的門用不同的顏色標出棒动;外圍環(huán)為熱圖,每一環(huán)為一個樣本(或一個組)宾添,每個樣本(每個組)對應一種顏色船惨,顏色深淺隨物種豐度變化。

最多元的樣本(物種/功能)比較方法

當有分組重復時缕陕,除UPGMA聚類掷漱、PCA主成分分析、PCoA主坐標分析榄檬、NMDS非度量多維尺度分析外,還可以結合Anosim組間相似性分析衔统、MRPP多響應置換過程分析及Adonis置換多元方差分析檢驗組間(兩組或多組)的差異是否顯著大于組內差異鹿榜,從而判斷分組是否有意義。如果有關注的物種锦爵,還可以選取高豐度或感興趣的關鍵物種(或功能)進行多度PCA分析舱殿。對于有多個大組,每個大組又包含多個亞組的樣本险掀,則可以在亞組層次上做多維分組PCA分析沪袭,以比較所有亞組在不同處理因素下的菌群相似性和差異性。


Adonis分析結果

注:Group為組合方案樟氢;Method為距離矩陣計算的方法冈绊;R值越接近1表示組間差異越大于組內差異,R值越接近0則表示組間和組內差異不大埠啃;統(tǒng)計分析的可信度用P-value表示死宣,P<0.05表示統(tǒng)計具有顯著性。


多維分組PCA分析

注:圖中的點為各個亞組在PC1碴开、PC2軸上的均值毅该,error bar為亞組在PC1、PC2方向上的標準差潦牛,不同顏色的點代表不同的大組眶掌。多維分組PCA分析至少需要18個樣本(即至少兩個大組,每個大組中含有3個亞組巴碗,每個亞組中含3個樣本)朴爬。

Circos安裝與使用

Circos是一款功能強大的可視化軟件,可以使用環(huán)狀圖形展示基因數據比較良价∏夼梗可以添加多種圖展信息蒿叠,如熱圖、散點圖等蚣常。
注: 除了本文的簡短教程市咽,circos官網有非常詳細的教程

安裝Circos

sudo apt-get -y install libgd-perl

wd=~/test/metagenome17
cd $wd
mkdir circos
cd circos
curl -O http://dib-training.ucdavis.edu.s3.amazonaws.com/metagenomics-scripps-2016-10-12/circos-0.69-3.tar.gz
tar -xvzf circos-0.69-3.tar.gz

# 安裝模塊
circos -modules > modules
grep missing modules |cut -f13 -d " " > missing_modules
for mod in $(cat missing_modules);
do
sudo cpan install $mod;
done

# 檢查模塊是否安裝好,全部出現(xiàn)OK則全部安裝成功
circos -modules

# 運行演示數據
cd $wd/circos/circos-0.69-3/example
bash run

Use of uninitialized value in join or string at /mnt/bai/yongxin/test/metagenome17/circos/circos-0.69-3/bin/../lib/Circos/Heatmap.pm line 75.
上面報錯信息抵蚊,但并沒有影響結果生成
將會產生`circos.png


可視化基因覆蓋度和方向

mkdir ${wd}/circos/plotting
cd ${wd}/circos/plotting

# 鏈接prokka注釋文件施绎,salmon定量文件
ln -fs ${wd}/annotation/prokka_annotation/metagG.gff .
ln -fs ${wd}/annotation/final.contigs.fa .
ln -fs ${wd}/quant/*.counts .

# 下載腳本輔助繪圖
curl -L -O https://github.com/ngs-docs/2016-metagenomics-sio/raw/master/circos-build.tar.gz
tar -xvzf circos-build.tar.gz
curl -L -O https://s3-us-west-1.amazonaws.com/dib-training.ucdavis.edu/metagenomics-scripps-2016-10-12/subset_assembly.fa.gz
gunzip subset_assembly.fa.gz
# 上步無法下載可翻墻或從上節(jié)位置復制 cp $wd/anvio-work/subset_assembly.fa .
mv subset_assembly.fa final.contigs.fa

使用khmer包提取長contigs可視化(太多人類不可讀)

# 進入python3虛擬環(huán)境
. ~/py3/bin/activate
extract-long-sequences.py  final.contigs.fa -l 24000 -o final.contigs.long.fa

# 生成circos需要的文件
python parse_data_for_circos.py

python2.7.12報錯File "/usr/local/lib/python2.7/dist-packages/pandas/core/indexing.py", line 1390, in error
(key, self.obj._get_axis_name(axis)))
KeyError: 'the label [count] is not in the [index]'
python3.5.2報錯信息 KeyError: 'the label [count] is not in the [index]'
腳本應該是好腳本,只是不知道那里出了錯贞绳。

# 手動運行腳本
mkdir -p org_gff
grep '>' final.contigs.long.fa |cut -f1 -d ' '|cut -f2 -d '>' > org_list
"for org in `cat org_list`; do grep -w $org metagG.gff > $org.subset.gff; done
mv *subset.gff org_gff

后面只有不多的python代碼谷醉,只是我看不懂了
Circos主要操作三類文件:
配置文件,包括樣式和輸出的圖
核型文件冈闭,定義染色體大小布局
圖中的具體配置屬性

上面的腳本產生核形文件和另外四個文件
我們進入circos-build并打`circos:
cd circos-build
circos
此命令會產生circos.svg and circos.png看結果吧俱尼。


我們仔細看一下circos.config,可以按幫助嘗試修改萎攒,如顏色遇八、半徑
官方教程 http://circos.ca/documentation/tutorials
官方課程 http://circos.ca/documentation/course/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耍休,隨后出現(xiàn)的幾起案子刃永,更是在濱河造成了極大的恐慌,老刑警劉巖羊精,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斯够,死亡現(xiàn)場離奇詭異,居然都是意外死亡喧锦,警方通過查閱死者的電腦和手機读规,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裸违,“玉大人掖桦,你說我怎么就攤上這事」┭矗” “怎么了枪汪?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怔昨。 經常有香客問我雀久,道長,這世上最難降的妖魔是什么趁舀? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任赖捌,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘越庇。我一直安慰自己罩锐,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布卤唉。 她就那樣靜靜地躺著涩惑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桑驱。 梳的紋絲不亂的頭發(fā)上竭恬,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音熬的,去河邊找鬼痊硕。 笑死,一個胖子當著我的面吹牛押框,可吹牛的內容都是我干的岔绸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼橡伞,長吁一口氣:“原來是場噩夢啊……” “哼亭螟!你這毒婦竟也來了?” 一聲冷哼從身側響起骑歹,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎墨微,沒想到半個月后道媚,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡翘县,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年最域,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锈麸。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡镀脂,死狀恐怖,靈堂內的尸體忽然破棺而出忘伞,到底是詐尸還是另有隱情薄翅,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布氓奈,位于F島的核電站翘魄,受9級特大地震影響,放射性物質發(fā)生泄漏舀奶。R本人自食惡果不足惜暑竟,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望育勺。 院中可真熱鬧但荤,春花似錦罗岖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潜慎,卻和暖如春捡多,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铐炫。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工垒手, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倒信。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓科贬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鳖悠。 傳聞我的和親對象是個殘疾皇子榜掌,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容