熊金波實驗室出品
整理歸納: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,即使測序質量很高,但它們也是由測序錯誤導致的。
# 對質控前后的數據統計單端豐度距離
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是一個命令行軟件工具,可以在一臺典型臺式機上在約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,因為匹配準確快速。
采用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
mkdir ../sourmash
cd ../sourmash
# 計算過濾序列的k51特征
sourmash compute -k51 --scaled 10000 ../work/SRR1976948.abundtrim.subset.pe.fq.gz -o SRR1976948.reads.scaled10k.k51.sig
結果如下:
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
# 比較所有signature文件
sourmash compare *sig -o Hu_metagenomes
# 比較結果繪圖
sourmash plot --labels Hu_metagenomes
生成Hu_metagenomes.dendro.png和Hu_metagenomes.matrix.png兩個文件,分別是樹形圖,還有熱圖+樹形圖,可以用Filezilla下載查看。
此軟件還可以做什么?
更多的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數據庫,可以包括物種、功能等。需要做以下三件事:
- 將大于20kb的contig分割統計
- 使用Prodigal鑒定ORF,并估計單拷貝基因含量 (使用hmmer比對指定數據庫 bacteria和archaea)
- 計算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數據庫分類法的補充。
只要樣品數不少于2個,我們就會結合熱圖同時展示所有樣品在種水平的物種豐度聚類情況,當然,如果有需要也可以在各個分類學水平分別繪制熱圖。
對于有分組且組內重復不少于3個的項目,我們利用LEfSe分析組間物種豐度的差異情況,找到各組的biomarkers,并采用物種層級關系樹(Cladogram)展示各個分類學水平上的biomarker及其豐度。
最全的功能注釋數據庫
除KEGG代謝通路注釋、eggNOG基因直系同源簇注釋、GO基因本體論分類注釋和Pfam結構域分析等基礎功能注釋外,還提供CAZy碳水化合物活性酶注釋、ARDB抗生素抗性基因注釋、VFDB毒力因子注釋、PHI病原與宿主互作注釋、MvirDB病原體生物攻防因子注釋及TCDB轉運蛋白分類注釋結果,幫助了解樣本中病原細菌致病性和耐藥性等信息。此外,還增加了分泌蛋白預測及III型分泌系統(T3SS)效應蛋白預測等高級功能注釋。
最直觀的物種(功能)豐度展示
對于物種及功能注釋結果,除基本的物種/功能Venn圖、Heatmap圖外,還新增了Bubble圖、Circos樣本與物種(功能)關系圖和GraPhlAn物種組成圖,以更多元化的形式呈現物種/功能在各樣品中的豐度。
注:氣泡的直徑從小到大,顏色從紅到紫,代表相對豐度值從低到高。Bubble圖利用氣泡的大小和顏色變化,直觀反映功能豐度二維矩陣中的數據信息。默認對KEGG的ko(pathway)、eggNOG的OG層面和CAZy family層級的豐度分布,以幫助尋找優勢及差異的KEGG、NOG和CAZy功能等信息,以及分析其變化趨勢。
Circos可以展示樣本與物種(功能)的對應關系或基因與物種的對應關系,前者可以反映每個樣品的優勢物種(或功能)組成比例以及各優勢物種(或功能)在不同樣品之間的分布比例,后者則反映基因在各物種中的分布比例。
注:圈圖分為兩個部分,右側為樣品信息,左側為物種信息。內圈不同顏色表示不同的樣品和物種,刻度為相對豐度,右側為所有樣品中各物種的相對豐度之和,左側為各物種在各樣本中的相對百分含量。
GraPhlAn物種組成圖主要對樣本各分類水平物種組成進行總體可視化展示,用不同顏色區分各分類單元,以外圍環熱力圖顏色深淺表征各組物種在各樣本中的豐度,可用于發現各個樣本中的優勢微生物類群。
注:選擇豐度前100個物種構建進化分支樹,并將豐度前20個物種(以星號☆標出),對應的門用不同的顏色標出;外圍環為熱圖,每一環為一個樣本(或一個組),每個樣本(每個組)對應一種顏色,顏色深淺隨物種豐度變化。
最多元的樣本(物種/功能)比較方法
當有分組重復時,除UPGMA聚類、PCA主成分分析、PCoA主坐標分析、NMDS非度量多維尺度分析外,還可以結合Anosim組間相似性分析、MRPP多響應置換過程分析及Adonis置換多元方差分析檢驗組間(兩組或多組)的差異是否顯著大于組內差異,從而判斷分組是否有意義。如果有關注的物種,還可以選取高豐度或感興趣的關鍵物種(或功能)進行多度PCA分析。對于有多個大組,每個大組又包含多個亞組的樣本,則可以在亞組層次上做多維分組PCA分析,以比較所有亞組在不同處理因素下的菌群相似性和差異性。
注:Group為組合方案;Method為距離矩陣計算的方法;R值越接近1表示組間差異越大于組內差異,R值越接近0則表示組間和組內差異不大;統計分析的可信度用P-value表示,P<0.05表示統計具有顯著性。
注:圖中的點為各個亞組在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/