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

熊金波實驗室出品

整理歸納: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

現在,創建一個python 3.5虛擬環境并在其中安裝軟件:

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

現在開始運行

jupyter notebook &

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

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

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

mkdir ~/data

接下來,讓我們在Linux系統下開始下載數據:

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讓文件所有者可以編輯。這就產生了在原始數據中創建拼寫錯誤或錯誤的問題。在我們繼續之前,讓我們先解決這個問題:

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的報告??梢允褂肑upyter Notebook控制臺下載這些文件;或者你可以看看它們的這些副本:

3. Trimmomatic

現在我們要做一些修剪!我們將使用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

現在,在工作目錄中的未修剪和修剪文件上運行Mulitqc:

multiqc .

現在我們應該看到如下所示的輸出:

[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

現在我們可以使用Jupyter Notebook查看輸出文件。

K-mer 修正質控出現的錯誤

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


序列末端低質量區有極高復雜度的k-mer
# 對質控前后的數據統計單端豐度距離
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

接著我們繼續下載數據

  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,以便我們可以在相當短的時間內運行程序集)。

現在,最后,運行組裝程序!

 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 

組裝完成后

現在我們可以在裝配上運行一些統計數據。為此,我們將使用QUAST:

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

現在,在程序集上運行QUAST:

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

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


宏基因組數據分析流程

Prokka注釋基因

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

Prokka

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

cd ~/
mkdir annotation
cd annotation

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

ln -fs ~/mapping/subset_assembly.fa .

現在是時候運行Prokka了!有許多不同的方法來專門運行Prokka。不過,我們現在要保持簡單。

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

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

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

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步移實現拼接
為什么采用k-mers而不是全長序列拼接
計算機喜歡k-mer,因為匹配準確快速。

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

采用k-mers比較樣品

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

# 設置工作目錄,這是我的目錄,學習時請修改為你工作的目錄
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
# 此文件很大,如果繼續以之前的分析,可以執行下行鏈接至此目錄
# 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研究
物種分類
功能分析
有興趣繼續深入研究的可以登陸
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年發布在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次。
為了更方便展示,我們將使用它來計算預測蛋白區的相對豐度分布。
本教程的主要目標:
安裝salmon
使用salon估計宏基因組基因區的覆蓋度

安裝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虛擬環境也同樣不成功
# 此處無法下載請去本文百度云
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虛擬環境
. ~/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虛擬環境
deactivate

現在我們可以基于參考序列進行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

現在開始分箱(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節:比對

開始bin

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

此步會產生一系列文件。看一下文件,會發現產生一系統*.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 .
# 統計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請跳過

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
# 當訪問是否添加環境變量 `$PATH` 至 `.bashrc`,你需要同意輸入 yes
source ~/.bashrc

以后可以使用conda安裝相關程序,這可以提高安裝成功的概率,并解決大部分版本依賴關系,并創建虛擬環境不影響系統的其它軟件版本正常使用。
接下來創建anvio工作虛擬環境

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

# 想要退出工作環境可執行,目前不要執行
source deactivate anvio232

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

anvi-self-test --suite mini

此程序運行會產生圖形界面環境,使用瀏覽器訪問電腦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

# 循環比對每個文件
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分割統計
  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

統計bin結果

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

查看統計結果,在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

在網頁中與結果互動吧!

最優的物種注釋方法

還采用基于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型分泌系統(T3SS)效應蛋白預測等高級功能注釋。

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

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


Bubble圖(CAZy的family層級

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

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


樣本與物種關系Circos圖

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

GraPhlAn物種組成圖主要對樣本各分類水平物種組成進行總體可視化展示,用不同顏色區分各分類單元,以外圍環熱力圖顏色深淺表征各組物種在各樣本中的豐度,可用于發現各個樣本中的優勢微生物類群。


GraPhlAn物種組成圖

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

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

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


Adonis分析結果

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


多維分組PCA分析

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

Circos安裝與使用

Circos是一款功能強大的可視化軟件,可以使用環狀圖形展示基因數據比較??梢蕴砑佣喾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

# 檢查模塊是否安裝好,全部出現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
# 上步無法下載可翻墻或從上節位置復制 cp $wd/anvio-work/subset_assembly.fa .
mv subset_assembly.fa final.contigs.fa

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

# 進入python3虛擬環境
. ~/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/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內容