熊金波實驗室出品
整理歸納: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浊闪,即使測序質量很高,但它們也是由測序錯誤導致的螺戳。
# 對質控前后的數據統(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是一個命令行軟件工具按咒,可以在一臺典型臺式機上在約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惜傲,因為匹配準確快速耘戚。
采用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
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研究
物種分類
功能分析
有興趣繼續(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數據庫溃卡,可以包括物種、功能等蜒简。需要做以下三件事:
- 將大于20kb的contig分割統(tǒng)計
- 使用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
統(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數據庫分類法的補充锡凝。
只要樣品數不少于2個私爷,我們就會結合熱圖同時展示所有樣品在種水平的物種豐度聚類情況雾棺,當然,如果有需要也可以在各個分類學水平分別繪制熱圖衬浑。
對于有分組且組內重復不少于3個的項目捌浩,我們利用LEfSe分析組間物種豐度的差異情況,找到各組的biomarkers工秩,并采用物種層級關系樹(Cladogram)展示各個分類學水平上的biomarker及其豐度尸饺。
最全的功能注釋數據庫
除KEGG代謝通路注釋进统、eggNOG基因直系同源簇注釋、GO基因本體論分類注釋和Pfam結構域分析等基礎功能注釋外浪听,還提供CAZy碳水化合物活性酶注釋螟碎、ARDB抗生素抗性基因注釋、VFDB毒力因子注釋迹栓、PHI病原與宿主互作注釋掉分、MvirDB病原體生物攻防因子注釋及TCDB轉運蛋白分類注釋結果,幫助了解樣本中病原細菌致病性和耐藥性等信息克伊。此外酥郭,還增加了分泌蛋白預測及III型分泌系統(tǒng)(T3SS)效應蛋白預測等高級功能注釋。
最直觀的物種(功能)豐度展示
對于物種及功能注釋結果愿吹,除基本的物種/功能Venn圖不从、Heatmap圖外,還新增了Bubble圖犁跪、Circos樣本與物種(功能)關系圖和GraPhlAn物種組成圖椿息,以更多元化的形式呈現(xiàn)物種/功能在各樣品中的豐度。
注:氣泡的直徑從小到大坷衍,顏色從紅到紫寝优,代表相對豐度值從低到高。Bubble圖利用氣泡的大小和顏色變化惫叛,直觀反映功能豐度二維矩陣中的數據信息倡勇。默認對KEGG的ko(pathway)、eggNOG的OG層面和CAZy family層級的豐度分布嘉涌,以幫助尋找優(yōu)勢及差異的KEGG妻熊、NOG和CAZy功能等信息,以及分析其變化趨勢仑最。
Circos可以展示樣本與物種(功能)的對應關系或基因與物種的對應關系扔役,前者可以反映每個樣品的優(yōu)勢物種(或功能)組成比例以及各優(yōu)勢物種(或功能)在不同樣品之間的分布比例,后者則反映基因在各物種中的分布比例警医。
注:圈圖分為兩個部分亿胸,右側為樣品信息,左側為物種信息预皇。內圈不同顏色表示不同的樣品和物種侈玄,刻度為相對豐度,右側為所有樣品中各物種的相對豐度之和吟温,左側為各物種在各樣本中的相對百分含量序仙。
GraPhlAn物種組成圖主要對樣本各分類水平物種組成進行總體可視化展示,用不同顏色區(qū)分各分類單元鲁豪,以外圍環(huán)熱力圖顏色深淺表征各組物種在各樣本中的豐度潘悼,可用于發(fā)現(xiàn)各個樣本中的優(yōu)勢微生物類群律秃。
注:選擇豐度前100個物種構建進化分支樹,并將豐度前20個物種(以星號☆標出)治唤,對應的門用不同的顏色標出棒动;外圍環(huán)為熱圖,每一環(huán)為一個樣本(或一個組)宾添,每個樣本(每個組)對應一種顏色船惨,顏色深淺隨物種豐度變化。
最多元的樣本(物種/功能)比較方法
當有分組重復時缕陕,除UPGMA聚類掷漱、PCA主成分分析、PCoA主坐標分析榄檬、NMDS非度量多維尺度分析外,還可以結合Anosim組間相似性分析衔统、MRPP多響應置換過程分析及Adonis置換多元方差分析檢驗組間(兩組或多組)的差異是否顯著大于組內差異鹿榜,從而判斷分組是否有意義。如果有關注的物種锦爵,還可以選取高豐度或感興趣的關鍵物種(或功能)進行多度PCA分析舱殿。對于有多個大組,每個大組又包含多個亞組的樣本险掀,則可以在亞組層次上做多維分組PCA分析沪袭,以比較所有亞組在不同處理因素下的菌群相似性和差異性。
注:Group為組合方案樟氢;Method為距離矩陣計算的方法冈绊;R值越接近1表示組間差異越大于組內差異,R值越接近0則表示組間和組內差異不大埠啃;統(tǒng)計分析的可信度用P-value表示死宣,P<0.05表示統(tǒng)計具有顯著性。
注:圖中的點為各個亞組在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/