diff --git a/1SoftDb.sh b/1SoftDb.sh new file mode 100644 index 0000000..f0d36e9 --- /dev/null +++ b/1SoftDb.sh @@ -0,0 +1,1971 @@ +[TOC] + +# 宏基因组软件和数据库安装 Metagenomic software & database + + # 测试环境为Linux Ubuntu 16.04+ / CentOS 7+ + # 版本: 1.11, 2021/5/7 + +## 安装前准备:软件和数据库位置 + + # 数据库安装位置,默认~/db目录(无需管理权限),管理员可安装至/db,方便大家使用 + db=~/db + mkdir -p ${db} && cd ${db} + # 软件安装位置 + soft=~/miniconda2 + +### 软件管理器Conda + + mkdir -p linux && cd linux + # 下载最新版miniconda2,~49M + wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh + # 安装,-b批量,-f无提示,-p目录,许可协议打yes + bash Miniconda2-latest-Linux-x86_64.sh -b -f -p ${soft} + export PATH=${soft}/bin:$PATH + # 激活,然后关闭终端重开,提示符前出现(base)即成功 + conda init + + # 不要忘记执行这一句,不然你就用重启terminal了 + source ~/.bashrc + + # 查看版本,conda 4.8.3, python 2.7.19 + conda -V + python --version + cd .. + # 添加生物学软件频道,http://bioconda.github.io/ 查询软件 + conda config --add channels bioconda + # 添加常用频道 + conda config --add channels conda-forge + +安装说明详见:[Nature Method:Bioconda解决生物软件安装的烦恼](https://mp.weixin.qq.com/s/SzJswztVB9rHVh3Ak7jpfA) + +[一文掌握Conda软件安装:虚拟环境、软件通道、加速solving、跨服务器迁移](https://mp.weixin.qq.com/s/2qJpSqonSWZQBIeN7E1xUA) + +(可选)添加清华镜像加速下载(通常会加速,但有时会导致无法访问) + + # site=https://mirrors.tuna.tsinghua.edu.cn/anaconda + # conda config --add channels ${site}/pkgs/free/ + # conda config --add channels ${site}/pkgs/main/ + # conda config --add channels ${site}/pkgs/r/ + # conda config --add channels ${site}/cloud/bioconda/ + # conda config --add channels ${site}/cloud/conda-forge/ + +conda默认配置文件为 ~/.condarc 查看配置文件位置 + + conda config --show-sources + +(可选)如果找不到conda,可手动临时添加conda至环境变量。可以添加至~/.bashrc文件中永久环境变量,需将${soft}替换为你的安装目录,如 + + export PATH="${soft}/bin:$PATH" + +查看虚拟环境列表 + + conda env list + +创建虚拟环境,防污染环境变量,如果有的软件在Solving environment步骤数小时无法安装,可以新建环境 + + conda create -n meta + +加载环境 + + conda activate meta + +### Conda安装小工具 + +并行计算parallel + + # Ubuntu下安装方法 + # sudo apt install parallel + # conda安装parallel,版本有点老 + conda install parallel -c bioconda + parallel --version # GNU parallel 20170422 + +表格统计工具csvtk和序列处理seqkit + + # conda安装,可能有点旧 + # conda install csvtk -c bioconda -y + conda install seqkit -c bioconda -y + # 直接下载最新版 https://github.com/shenwei356,如以csvtk为例手动安装 + cd ~/db + wget -c https://github.com/shenwei356/csvtk/releases/download/v0.22.0/csvtk_linux_amd64.tar.gz + tar xvzf csvtk_linux_amd64.tar.gz + cp csvtk ${soft}/bin/ + +## conda导入打包好的Qiime2环境 + + # 下载已打包好的Qiime2环境 + wget -c http://210.75.224.110/db/conda/qiime2-2021.2.tar.gz + + # 指定安装目录 + mkdir -p ${soft}/envs/qiime2 + tar -xvzf qiime2-2021.2.tar.gz -C ${soft}/envs/qiime2 + # 方法1. 启动/退出环境 + source ${soft}/envs/qiime2/bin/activate + + # 完成后续解包事宜 + conda-unpack + + # 测试命令 + qiime + + # 推出环境 + source ${soft}/envs/qiime2/bin/deactivate + + +## 安装 conda-pack 打包已有环境 + +准备工作,安装conda-pack提供打包功能 + + # 安装conda-pack实现打包 + conda install -c conda-forge conda-pack + # conda 安装不成功可用pip安装 + # pip conda-pack + + +安装好的环境下打包导出,以宏基因组主环境meta为例 + + mkdir -p ~/db/conda + cd ~/db/conda/ + # conda环境包统一存放 + # 设置环境名,如metagenome_env meta humann2 + n=qiime2 + conda pack -n ${n} -o ${n}.tar.gz + # 导出文件列表 + conda activate ${n} + conda env export > ${n}.yml + # 添加权限,方便下载和别人使用 + chmod 755 * + +下载安装包并解压安装:软件包可从以下网址、或上课微信群索引百度云链接 + + # 指定环境名称,如metagenome_env, meta, metawrap1.3, humann2, humann3, qiime2-2021.2 + n=如metagenome_env + # 下载 + wget -c http://210.75.224.110/db/conda/${n}.tar.gz + # 指定安装目录 + mkdir -p ${soft}/envs/${n} + tar -xvzf ${n}.tar.gz -C ~/miniconda3/envs/${n} + # 方法1. 启动/退出环境 + conda activate $n + conda deactivate + # 方法2. 激活环境 + source ${soft}/envs/${n}/bin/activate + +--------------------------一条邪恶的分割线----------------------------------------------------------- + + +## 1质控软件 + +### 质量评估fastqc + + # =为指定版本,-c指定安装源,均可加速安装 + # -y为同意安装 + conda install fastqc=0.11.9 -c bioconda -y + fastqc -v + +### 评估报告汇总multiqc + + # 注1.7为Python2环境,1.8/9新版本需要Python3的环境 + conda install multiqc=1.9 -c bioconda -y + multiqc --version + +### 质量控制流程kneaddata + + conda install kneaddata=0.7.4 -c bioconda -y + kneaddata --version + trimmomatic -version # 0.39 + bowtie2 --version # 2.4.2 + + # 查看可用数据库 + kneaddata_database + # 包括人基因组bowtie2/bmtagger、人类转录组、核糖体RNA和小鼠基因组 + # 下载人基因组bowtie2索引 3.44 GB + mkdir -p ${db}/kneaddata/human_genome + kneaddata_database --download human_genome bowtie2 ${db}/kneaddata/human_genome + # 数据库下载慢或失败,附录有百度云和国内备份链接 + +## 2有参分析流程MetaPhlAn2、HUMAnN2 + +### HUMAnN2安装 + +方法1. 新建虚拟环境安装:安装MetaPhlAn2、HUMAnN2和所有依赖关系,并记录主要软件版本 + + # conda install humann2=2.8.1 -c bioconda -y + conda create -n humann2 humann2=2.8.1 -c bioconda -y + conda activate humann2 + # 记录核心软件版本 + humann2 --version # humann2 v2.8.1 + metaphlan2.py -v # MetaPhlAn version 2.7.5 (6 February 2018) + diamond help # v0.8.22.84 + +方法1. Conda导入和导出环境 + + # 安装conda-pack + conda install -c conda-forge conda-pack + #conda 安装不成功可用pip安装 + # pip conda-pack + # 安装好的环境下打包导出 + conda pack -n humann2 -o humann2.tar.gz + # 下载 + wget -c http://210.75.224.110/db/humann2/humann2.tar.gz + + # 新建文件夹存放humann2环境 + mkdir -p ~/miniconda3/envs/humann2 + tar -xzf humann2.tar.gz -C ~/miniconda3/envs/humann2 + # 激活环境 + source ~/miniconda3/envs/humann2/bin/activate + +测试流程是否可用 + + humann2_test + +### HUMAnN2物种和功能数据库 + +显示可用分类、泛基因组和功能数据库 + + humann2_databases + +安装数据库(注:数据库下载慢或失败,附录有国内备份链接) + + cd ${db} + mkdir -p ${db}/humann2 # 建立下载目录 + # 输助比对数据库 593MB + humann2_databases --download utility_mapping full ${db}/humann2 + # 微生物泛基因组 5.37 GB + humann2_databases --download chocophlan full ${db}/humann2 + # 功能基因diamond索引 10.3 GB + humann2_databases --download uniref uniref90_diamond ${db}/humann2 + + # 设置数据库位置 + # 显示参数 + humann2_config --print + # 如修改线程数,推荐3-8,根据实际情况调整 + humann2_config --update run_modes threads 3 + humann2_config --update database_folders utility_mapping ${db}/humann2/utility_mapping + humann2_config --update database_folders nucleotide ${db}/humann2/chocophlan + humann2_config --update database_folders protein ${db}/humann2/uniref + # metaphlan2数据库默认位于${soft}/envs/biobakery/bin/ 程序所在目录的db_v20 (v0.11)和databases(2.8.1)下 + humann2_config --print + # 例如,链接下载的metaphlan2: + ln -s `pwd`/metaphlan2 ${soft}/envs/biobakery/bin/databases + +### Microbiome helper + +主页:https://github.com/mlangill/microbiome_helper + +下载并安装 + + # 下载、解压 、添加环境变量 + wget -c https://github.com/LangilleLab/microbiome_helper/archive/master.zip + unzip master.zip + export PATH=`pwd`/microbiome_helper-master:$PATH + # 写入bashrc永久添加环境 + echo "export PATH=`pwd`/microbiome_helper-master:\$PATH" >> ~/.bashrc + + # metaphlan_to_stamp.pl 这个脚本有修改,修改后的脚本在db/script/下,也在QQ群文件中 + #----修改的内容如下---------------------------------------- + # my @taxa_ranks=("Kingdom","Phylum","Class","Order","Family","Genus","Species", "Strain"); + > + # #start with assumption that this is not metaphlan2 + # my $metaphlan2_version=1; + #------------------------------------------------------ + +### 物种组成美化GraPhlAn + + # GraPhlAn核心程序包 + conda install graphlan=1.1.3 -c bioconda -y + graphlan.py --version # 1.1.3 (5 June 2018) + # GraPhlAn输入文件制作程序,如转换LEfSe、Metaphlan2结果格式为GraPhlAn用于绘图 + conda install export2graphlan # 38 KB + export2graphlan.py -h # 0.22 of 05 May 2020 + +### 生物标记鉴定和可视化LEfSe + + conda install lefse # 76.3 MB, 1.0.8.post1 + + # Rstudio中运行命令调用R版本问题的解决 + # 在Rstudio中默认调用Rstudio的R,具体写在/etc/rstudio/rserver.conf + # 或在R中用Sys.getenv()["R_HOME"] + # 在rpy2中print(robjects.r)可以查看其调用的r版本 + + # 指定lefse调用的R版本,需根据conda实际目录修改 + sed -i "2 i os.environ['R_HOME'] = '/conda/envs/meta/lib/R/'" \ + /conda/envs/meta/share/lefse-1.0.8.post1-1/lefse.py + +### 物种注释Kraken2 + +物种注释:基于LCA算法的物种注释kraken2 https://ccb.jhu.edu/software/kraken/ + +- 软件安装 + +安装方法1. 直接安装并查看版本 + + conda install kraken2 -c bioconda -y + kraken2 --version # 2.1.1 + conda install bracken=2.6.0 -c bioconda + +安装方法2. 新建环境安装并启动软件环境 + + conda create -n kraken2 -y -c bioconda kraken2 + conda activate kraken2 + conda install bracken=2.6.0 -c bioconda + # krakentools 0.1 补充脚本 + conda install krakentools -c bioconda + # krona绘图 + conda install krona -c bioconda + +安装方法3. conda导入和导出 + + # 从安装好的环境打包,此处为Ubuntu 16.04LTS + # conda pack -n kraken2 -o ~/db/kraken2/kraken2.tar.gz + # 添加权限,否则别人无法下载 + # chmod 777 ~/db/kraken2/kraken2.tar.gz + # 下载压缩包 + wget -c http://210.75.224.110/db/kraken2/kraken2.tar.gz + # 新建文件夹存放kraken2环境 + mkdir -p /conda2/envs/kraken2 + # 解压环境到指定目录 + tar -xzf kraken2.tar.gz -C /conda2/envs/kraken2 + # 激活环境 + source /conda2/envs/kraken2/bin/activate + +- 数据库 + +下载数据库(NCBI每2周更新一次),记录下载日期和大小。需根据服务器内存、使用目的选择合适方案。--standard标准模式下只下载5种数据库:古菌archaea、细菌bacteria、人类human、载体UniVec_Core、病毒viral。也可选直接下载作者构建的索引,还包括bracken的索引。 + +- 方法1. 数据库安装 + +方案1. 标准库安装,下载数据~100GB,时间由网速决定,索引5h,多线程可加速至1h完成 + + cd ${db} + d=210122 + mkdir -p kraken2/$d && cd kraken2/$d + kraken2-build --standard --threads 24 --db ./ + +方案2. 自定义微生物数据库,如标准+真菌+原生动物+质粒+植物 + + cd ${db} + d=210120fpf + mkdir -p kraken2/$d && cd kraken2/$d + # 显示帮助 + kraken2-build -h + # 下载物种注释 + kraken2-build --download-taxonomy --threads 24 --db ./ + # 下载数据库,需要12-24小时 + for i in archaea bacteria UniVec_Core viral human fungi plasmid protozoa plant; do + kraken2-build --download-library $i --threads 24 --db ./ + done + # 确定的库建索引,4p,4h + time kraken2-build --build --threads 48 --db ./ + # bracken索引,长度推荐100/150, 24p,1h; + time bracken-build -d ./ -t 24 -k 35 -l 100 + time bracken-build -d ./ -t 24 -k 35 -l 150 + + +- 方法2. 数据库下载 + +下载标准+原生动物+真菌+植物8GB(PlusPFP-8)数据库,包括kraken2和bracken2的索引。更多版本数据库详见:https://benlangmead.github.io/aws-indexes/k2 。 + +方案1. 迷你库(8G) + + # 压缩包5.2G, + wget -c https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_8gb_20201202.tar.gz + # 备用地址: + # wget -c http://210.75.224.110/db/kraken2/k2_pluspfp_8gb_20201202.tar.gz + tar xvzf k2_pluspfp_8gb_20201202.tar.gz + +方案2. 完整库(70G) + +压缩包70G,解压后100G。指定解压目录,包括时间和类型。201202为更新时间,pfp指标准库+原生动物+真菌+植物。注:但我使用中发现仍然没有真菌。 + + d=201202pfp + mkdir ${d} + wget -c https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_20201202.tar.gz + tar xvzf k2_pluspfp_20201202.tar.gz -C ${d} + +方案3. 第3方个性数据库(人和病毒含新冠),仅用于病毒检测 + +https://genexa.ch/sars2-bioinformatics-resources/ + + wget -c https://storage.googleapis.com/sars-cov-2/kraken2_h%2Bv_20200319.tar.gz + mkdir -p 200319hv/ + tar xvzf kraken2_h+v_20200319.tar.gz -C 200319hv/ + + +## 3基因组拼接、注释和定量 + +### 拼接megahit/metaSPAdes + + # 快速组装megahit + conda install megahit + megahit -v # v1.2.9 + + # metaSPAdes拼接,只是spades系列中的一个定制脚本 + conda install spades # 12.8 MB + metaspades.py -v # v3.14.0 [metaSPAdes mode] + +### 组装评估QUEST + + conda install quast -y # 87.2 MB + metaquast.py -v # QUAST v5.0.2 (MetaQUAST mode) + +### 基因预测prokka + + # 细菌基因组注释prokka + conda install prokka -y # 352.8 MB + prokka -v # 1.14.6 + +### 非冗余基因集cd-hit + + conda install cd-hit # 790 KB + cd-hit -v # 4.8.1 (built on May 14 2019) + + # emboss transeq工具,93.9 MB + conda install emboss -y + embossversion # 6.6.0.0 + +### 定量工具salmon + + conda install salmon -y # 17.8 MB + salmon -v # 1.3.0 + + +## 4基因功能注释 + +### KEGG层级注释 + +https://www.kegg.jp/kegg-bin/show_brite?ko00001.keg 下载htext + + # 转换ABCD为列表 + kegg_ko00001_htext2tsv.pl -i ko00001.keg -o ko00001.tsv + # 统计行数,2021.1月版55761行,整理后为55103个条目 + wc -l ko00001.* + # 统计各级数量, /54/527/23917 + for i in `seq 1 2 8`;do + cut -f ${i} ko00001.tsv|sort|uniq|wc -l ; done + # 生成KO编号和注释列表 + cut -f 7,8 ko00001.tsv|sort|uniq|sed '1 i KO\tDescription' \ + > KO_description.txt + # KO与通路(Pathway)对应表,用于合并D级为C级 + awk 'BEGIN{FS=OFS="\t"} {print $7,$6}' ko00001.tsv | sed '1 i KO\tpathway' \ + > KO_path.list + + +### 蛋白同源综合注释eggNOG + +eggNOG http://eggnogdb.embl.de + + # 安装eggnog比对工具emapper + conda install eggnog-mapper=2.0.1 -y -c bioconda + emapper.py --version # 2.0.1 + + # 下载常用数据库,注意设置下载位置 + mkdir -p ${db}/eggnog5 && cd ${db}/eggnog5 + # -y默认同意,-f强制下载,eggnog.db.gz 7.9G+4.9G + download_eggnog_data.py -y -f --data_dir ./ + + # 下载方式2(可选):链接直接下载 + wget -c http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog.db.gz # 7.9G + wget -c http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog_proteins.dmnd.gz # 4.9G + gunzip *.gz + + # 如果内存够大,复制eggNOG至内存加速比对 + # cp eggnog.db /dev/shm + # 手工整理COG分类注释 + wget -c http://210.75.224.110/share/COG.anno + # 手工整理KO注释 + wget -c http://210.75.224.110/share/KO.anno + + + +### CAZy碳水化合物 + + # dbCAN2 http://bcb.unl.edu/dbCAN2 + # 创建数据库存放目录并进入 + mkdir -p ${db}/dbCAN2 && cd ${db}/dbCAN2 + # 下载序列和描述 + wget -c http://bcb.unl.edu/dbCAN2/download/CAZyDB.07312020.fa + wget -c http://bcb.unl.edu/dbCAN2/download/Databases/CAZyDB.07302020.fam-activities.txt + # 备用数据库下载地址并解压 + #wget -c http://210.75.224.110/db/dbcan2/CAZyDB.07312020.fa.gz + #gunzip CAZyDB.07312020.fa.gz + # diamond建索引,800M,1m + diamond --version # 0.8.22/2.0.5 + time diamond makedb \ + --in CAZyDB.07312020.fa \ + --db CAZyDB.07312020 + # 压缩原始数据节约空间 + gzip CAZyDB.07312020.fa + # 提取fam对应注释 + grep -v '#' CAZyDB.07302020.fam-activities.txt \ + |sed 's/ //'| \ + sed '1 i CAZy\tDescription' \ + > CAZy_description.txt + +### 抗生素抗性基因CARD + + # 官网:https://card.mcmaster.ca + # Bioconda: http://bioconda.github.io/recipes/rgi/README.html + # Github: https://github.com/arpcard/rgi + +软件安装 + + # 方法1. Cona安装rgi + conda install --channel bioconda rgi + + # 方法2. 指定环境安装rgi + conda create -n rgi -c bioconda rgi + + # 方法3. 从其他安装的环境导出和导入 + # 安装好的环境下打包导出,262M + conda pack -n rgi -o rgi.tar.gz + # 下载软件包 + wget -c http://210.75.224.110/db/card/rgi.tar.gz + # 新建文件夹存放rgi环境 + mkdir -p ${soft}/envs/rgi + tar -xzf rgi.tar.gz -C ~/miniconda3/envs/rgi + # 激活环境 + source ${soft}/envs/rgi/bin/activate + +数据库部署 + + # 下载最新版数据库,2.8M + wget -c https://card.mcmaster.ca/latest/data + # 解压后20M + tar -xvf data card.json + # wget -c http://210.75.224.110/db/card/card.json + # 加载数据库 + rgi load --card_json card.json + + # 宏基因组分析扩展数据库和加载 + rgi card_annotation -i card.json + rgi load -i card.json --card_annotation card_database_v3.1.0.fasta + + +### 抗生素抗性基因Resfam + + # http://dantaslab.wustl.edu/resfams + mkdir -p ${db}/resfam && cd ${db}/resfam + # 官网的数据格式非常混乱, 推荐下载我手动整理的索引和注释 + wget http://210.75.224.110/share/Resfams-proteins.dmnd # 1.5 MB + wget http://210.75.224.110/share/Resfams-proteins_class.tsv # 304 KB + + +## 5分箱工具 + +### metawrap分箱和提纯 + + # 方法1. conda在线安装物种注释和分箱流程 https://github.com/bxlab/metaWRAP + conda create -y -n metawrap python=2.7 # 22.2MB + conda activate metawrap + conda config --add channels ursky + conda install -y -c ursky metawrap-mg # 1.14 GB, v1.2 + + # 方法2. 安装好的环境下打包导出,最新版1.3 + # 设置conda位置 + soft=${soft}/ + # conda pack -n metawrap1.3 -o metawrap1.3.tar.gz + # 下载最新环境 + wget -c http://210.75.224.110/db/metawrap/metawrap1.3.tar.gz + # 新建文件夹存放metawrap1.3环境 + mkdir -p ${soft}/envs/metawrap1.3 + tar -xzf metawrap1.3.tar.gz -C ${soft}/envs/metawrap1.3 + # 激活环境 + source ${soft}/envs/metawrap1.3/bin/activate + + + # 相关数据库,大小近300GB + # 这里我们安装数据库到`~/db`目录,保证你有权限, + # 但要保证至少有500GB的空间。请根据你的情况修改为自己有权限且空间足够的位置。 + # 多人使用,建议管理员统一安装节省空间 + cd ${db} + + + ## CheckM用于Bin完整和污染估计和物种注释 + mkdir -p checkm && cd checkm + # 下载文件275 MB,解压后1.4 GB + wget -c https://data.ace.uq.edu.au/public/CheckM_databases/checkm_data_2015_01_16.tar.gz + # 国内备用链接 + # wget -c http://210.75.224.110/share/meta/checkm/checkm_data_2015_01_16.tar.gz + tar -xvf *.tar.gz + # rm *.gz + # 设置数据库位置 + checkm data setRoot + # 按提示输出你数据下载的路径或直接回车默认为当前位置 + + ## NCBI_nt核酸序列用于bin物种注释 + # 41GB,我下载大约12h;解压后99GB + cd ${db} + mkdir -p NCBI_nt && cd NCBI_nt + wget -c "ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.*.tar.gz" + # 备用下载链接,或百度云下载 + # wget -c http://210.75.224.110/share/meta/NCBI_nt/filelist.txt + # for a in `cat filelist.txt`; do wget -c http://210.75.224.110/share/meta/NCBI_nt/$a; done + for a in nt.*.tar.gz; do tar xzf $a; done & + + ## NCBI物种信息 + # 压缩文件45M,解压后351M + cd ${db} + mkdir NCBI_tax + cd NCBI_tax + wget ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz + tar -xvf taxdump.tar.gz + + ## 人类基因组去宿主 + cd ${db} + mkdir -p metawrap/BMTAGGER && cd metawrap/BMTAGGER + wget -c ftp://hgdownload.soe.ucsc.edu/goldenPath/hg38/chromosomes/*fa.gz + gunzip *fa.gz + cat *fa > hg38.fa + rm chr*.fa + # 上方下载太慢,使用国内备份链接手动下载 + wget -c http://210.75.224.110/share/meta/metawrap/BMTAGGER/hg38.fa + bmtool -d hg38.fa -o hg38.bitmask + srprism mkindex -i hg38.fa -o hg38.srprism -M 100000 + + ## KRAKEN物种注释数据库 + # 下载建索引需要 > 300GB以上空间,完成后占用192GB空间 + cd ${db} + mkdir -p kraken + kraken-build --standard --threads 24 --db kraken > log & + kraken-build --db kraken --clean + # 手动下载 + cd kraken + wget -c http://210.75.224.110/share/meta/kraken/database.kdb + wget -c http://210.75.224.110/share/meta/kraken/database.idx + mkdir -p taxonomy && cd taxonomy + wget -c http://210.75.224.110/share/meta/kraken/taxonomy/nodes.dmp + wget -c http://210.75.224.110/share/meta/kraken/taxonomy/names.dmp + # 从其它位置复制 + # cp -r /db/kraken/* ./ + + ## 数据库位置设置 + which config-metawrap + # 配置文件通常为${soft}/envs/metawrap/bin/config-metawrap + # 使用Rstudio/vim等文本编辑器来修改数据库的位置 + +### drep基因组去冗余 + +挑单菌测序的基因组存在大量冗余。 + +metawrap混合分箱的结果中冗余度非常低,甚至无冗余。而单样本、分批次分箱的结果中存在大量冗余,需要采用derep分箱获得非冗余的基因组。 + + conda create -n drep + conda activate drep + conda install drep -c bioconda + + +### GTDB细菌基因组注释和进化分析 + +Github: https://github.com/Ecogenomics/GTDBTk + +GTDB-Tk是一个软件工具包,用于根据基因组数据库分类法GTDB为细菌和古细菌基因组分配客观的分类法。它旨在与最近的进展一起使用,从而可以直接对环境样本中获得数百或数千个由基因组组装的基因组(MAG)进行物种分类注释。它也可以用于分离和单细胞的基因组物种注释。 + +本次测试版本为 GTDB-Tk v1.3.0,于2020年7月17发布,参考数据为95版。 + +硬件要求: + +内存100Gb + +硬盘27Gb + +64核1小时可分析1000个细菌基因组 + +Conda安装: + + conda create -n gtdbtk + conda activate gtdbtk + # gtdbtk-1.3.0, 2020-9-27 + conda install -c bioconda gtdbtk + +download-db.sh自动下载数据库,将下载至conda中的envs/gtdbtk/share/gtdbtk-1.3.0/db/: + + download-db.sh + +(可选)手动下载和配置GTDB参考基因组最新版(测试时为95版,34Gb) + + mkdir -p ~/db/gtdb & cd ~/db/gtdb + # 下载解压 + wget -c https://data.ace.uq.edu.au/public/gtdb/data/releases/latest/auxillary_files/gtdbtk_data.tar.gz + tar zxvf gtdbtk_data.tar.gz + # 设置数据库位置,注意修改软件安装位置 + locate gtdbtk.sh # 查找配置文件位置 + # 修改PATH=后面的路径为数据库解压目录,如/home/meta/db/gtdb/release95/ + vim /conda/envs/gtdbtk/etc/conda/activate.d/gtdbtk.sh + +此外:GTDB数据库国内下载备份链接见 http://nmdc.cn/datadownload + + +## 6 其它 + + # Bin可视化VizBin (可选) + 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 + mv VizBin-dist.jar /usr/local/bin # 或~/bin + + # 比对结果整理samtools + conda install samtools + + ### CARD(选学) https://card.mcmaster.ca/download + # 方法1. 直接conda安装 + conda install --channel bioconda rgi + # 方法2. 虚拟环境安装 + conda activate metawrap + conda install --channel bioconda rgi + rgi main -v # 4.0.3 + # rgi教程 https://github.com/arpcard/rgi + + + +## 常见问题 + +### 数据库国内下载链接 + +- 方法1:国家微生物科学数据中心 —— 数据下载 (网站有时会更新和维护中,不可用) + +http://nmdc.cn/datadownload + +本资源由宏基因组平台发起,微生物所提供服务器,宏基因组团队负责维护的常用软件、扩增子和宏基因组数据库的国内下载链接,解决常用数据库下载慢、或无法下载的问题。同时提供定制的软件、数据库索引,节约大家下载时间,节省数据库编制索引的计算资源消耗。 + +- 方法2:刘永鑫Github中的备用百度云/下载链接索引 + +详细下载链接和说明见:https://github.com/YongxinLiu/MicrobiomeStatPlot/blob/master/Data/BigDataDownlaodList.md + +下载的tar.gz压缩包,可放置于指定目录,使用`tar -xvzf *.tar.gz`解压 + +个人网站备用下载链接,带宽有限,推荐官方、数据中心和百度云失败再尝试此法 + + # humann3 + site=http://210.75.224.110/db + wget -c ${site}/humann3/full_chocophlan.v296_201901.tar.gz + wget -c ${site}/humann3/uniref90_annotated_v201901.tar.gz + wget -c ${site}/humann3/full_mapping_v201901.tar.gz + mkdir -p chocophlan uniref utility_mapping + tar xvzf full_chocophlan.v296_201901.tar.gz -C chocophlan/ + tar xvzf uniref90_annotated_v201901.tar.gz -C uniref/ + tar xvzf full_mapping_v201901.tar.gz -C utility_mapping/ + +大文件的分卷压缩和解压 以kraken2 hash.k2d为例 + + cd ~/db/kraken2_200706 + # https://www.cnblogs.com/wang--lei/p/9046643.html + # 文件夹kraken2idx/打包压缩,1h + tar -zcvf kraken2.tar.gz kraken2idx/ + # b分割为指定大小文件G/M/K,-d数字,a序列长度,输入和输出前缀 + split -b 13G -d -a 1 kraken2.tar.gz kraken2.tar.gz. + # 一行命令 + tar -zcvf kraken2.tar.gz kraken2idx/ | split -b 19G -d -a 1 - kraken2.tar.gz. + # 分割后解压缩 + cat kraken2.tar.gz.* | tar -zxv + + # 附tar打包用法 + 单个文件压缩打包 tar -czvf my.tar.gz file1 + 多个文件压缩打包 tar -czvf my.tar.gz file1 file2 file*)(也可以给file*文件mv 目录在压缩) + 单个目录压缩打包 tar -czvf my.tar.gz dir1 + 多个目录压缩打包 tar -czvf my.tar.gz dir1 dir2 + 解包至当前目录:tar -xzvf my.tar.gz + + +### conda批量安装软件 + + conda install -y fastqc multiqc kneaddata=0.6.1 humann2 graphlan export2graphlan lefse kraken2 megahit spades quast prokka cd-hit emboss salmon eggnog-mapper samtools + +### kneaddata常见问题 + +#### kneaddata运行提示java版本不支持 + + # 解决思路,新建虚拟环境,安装kneaddata,再安装对应java版本 + # 务必指定2.7,软件依赖2.7的python,但conda会自动安装3.6,运行报错 + conda create -n kneaddata python=2.7 + conda activate kneaddata + conda install openjdk=8.0.152 + conda install kneaddata=0.6.1 + +#### kneaddata质控双端结果不成对 + + # 0.7.4存在对旧格式fastq去宿主后数据极少或双端数据不对称,可指定版本安装0.6.1 + conda remove kneaddata + conda install kneaddata=0.6.1 # 175 MB + +### humann2数据库无法下载备用链接 + + # 可选:链接直接下载、百度云链接(宏基因组公众号回复:数据库)或国内备份链接 + mkdir -p ${db}/humann2/chocophlan && cd ${db}/humann2/chocophlan + wget -c http://210.75.224.110/share/meta/full_chocophlan_plus_viral.v0.1.1.tar.gz + tar xvzf full_chocophlan_plus_viral.v0.1.1.tar.gz + # uniref90和50任选其1,推荐uniref90更全5.9 GB + cd ${db}/humann2 + wget -c http://210.75.224.110/share/meta/uniref90_annotated_1_1.tar.gz + tar xvzf uniref90_annotated_1_1.tar.gz + # 内存<32G内存选uniref5 (2.5 GB) + # wget -c http://210.75.224.110/share/meta/uniref50_annotated_1_1.tar.gz + # tar xvzf uniref50_annotated_1_1.tar.gz + # 不要同一文件中有两个文件,会先比90,再比50出现混乱 + +### Metaphlan2数据库找不到 + + # 下载并构建索引 + mkdir -p ${db}/metaphlan2 && cd ${db}/metaphlan2 + wget -c http://210.75.224.110/share/meta/metaphlan2/mpa_v20_m200.tar + tar xvf mpa_v20_m200.tar + bzip2 -d mpa_v20_m200.fna.bz2 + bowtie2-build mpa_v20_m200.fna mpa_v20_m200 + # 链接到软件安装目录 + mkdir -p ${soft}/envs/metagenome_env/bin/db_v20 + ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/db_v20/ + mkdir -p ${soft}/envs/metagenome_env/bin/databases + ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/databases/ + +### Kraken2 + +#### 定制数据库 + +官方教程详见 https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown + +设定数据库日期为版本,建立数据库目录 + + d=200918 + cd ~/db + mkdir -p kraken2/$d && cd kraken2/$d + +下载物种名信息表,gb 1.8G; wgs 3.3G; 解压后大小为9.2/21G; taxdump 50M + + kraken2-build --download-taxonomy --threads 24 --db ./ + +序列数据库包括 archaea bacteria plasmid viral human fungi plant protozoa nr nt env_nr env_nt UniVec + +下载单个真菌库为例 + + i=fungi + kraken2-build --download-library $i --threads 24 --db ./ + # 批量下载数据库,除默认5种外新加植物、真菌、原生生物和质粒,下载需几小时-数天 archaea bacteria UniVec_Core viral human fungi plant + for i in protozoa plasmid; do + kraken2-build --download-library $i --threads 24 --db ./ + done + + # 建索引,4h, 40h;2h,40h + time kraken2-build --build --threads 24 --db ./ + + # 数据库大小,2020/4/12更新 + du -sh library/* + 918M archaea + 74G bacteria + 1.2G fungi + 3.1G human + 51G plant + 2.0G plasmid + 877M protozoa + 2.0M UniVec_Core + 310M viral + +#### Perl版本不对 + +常见问题:Perl版本不对,人工指定perl版本如下 + + PERL5LIB=${soft}/envs/kraken2/lib/site_perl/5.26.2/x86_64-linux-thread-multi:${soft}/envs/kraken2/lib/site_perl/5.26.2:${soft}/envs/kraken2/lib/5.26.2/x86_64-linux-thread-multi:${soft}/envs/kraken2/lib/5.26.2 + + +### salmon手动安装和使用方法 + + # 如不可用,尝试下载二进制和添加环境变量 + wget https://github.com/COMBINE-lab/salmon/releases/download/v0.14.0/salmon-0.14.0_linux_x86_64.tar.gz + tar xvzf salmon-0.14.0_linux_x86_64.tar.gz + cp -rf salmon-latest_linux_x86_64/ ${soft}/envs/metagenome_env/share/salmon + ${soft}/envs/metagenome_env/share/salmon/bin/salmon -v # 0.14.0 + + +## 附录 + +### 软件和数据库清单(db) + +扩增子、宏基因组分析常用软件、数据库、脚本文件 + + +#### 软件 + +- linux:Linux系统下分析软件 + - microbiome_helper:metaphlan2结果转换STAMP格式(metaphlan_to_stamp),picurst结果功能组成绘图(plot_metagenome_contributions.R) + - Miniconda2-latest-Linux-x86_64.sh:Conda安装程序 + - qiime2-2021.2.tar.gz:QIIME2安装包,解压至conda的envs目录可用 + - qiime2-2021.2-py36-linux-conda.yml:QIIME2软件安装清单,使用conda在线安装 + - sparcc.zip:sparcc网络分析python脚本 + - usearch:扩增子分析流程 + - vsearch:扩增子分析流程(免费64位版usearch) +- mac:Mac系统下分析软件 + - csvtk:表格分析工具 + - iqtree:进化树构建 + - qiime2-2021.2-py36-osx-conda.yml:QIIME2软件安装清单,使用conda在线安装 + - R-4.0.4.pkg:R语言安装包 + - RStudio-1.4.1106.dmg:RStudio安装包 + - rush:并行管理工具 + - seqkit:序列处理工具 + - taxonkit:NCBI分类处理工具 + - usearch:扩增子分析流程 + - vsearch:扩增子分析流程(免费64位版usearch) +- win:Windows系统下分析软件 + - STAMP2.1.3:微生物组图形界面差异分析工具 + - 4.0.zip:R语言常用400+包合集,解压至R包安装位置 + - Adobe_Illustrator_CC_2018_v22.1.0.314_x64_zh_CN_Portable.7z:图片拼图、模式图绘制工具 + - csvtk.exe:表格分析工具 + - Cytoscape_3_8_2_windows_64bit.exe:网络分析安装包 + - epp510_1828_64bit.exe:文本编辑器 + - FileZilla_3.49.1_win64_sponsored-setup.exe:文件上传下载 + - gephi-0.9.2-windows.exe:网络图绘制工具 + - Git-2.30.2-64-bit.exe:提供Git bash环境 + - iqtree.exe:进化树构建 + - jdk-11.0.7_windows-x64_bin.exe:Java运行环境 + - libiomp5md.dll:动态库,运行中提示缺少时可添加至系统目录 + - muscle.exe:多序列比对工具 + - npp.7.8.9.Installer.x64.exe:文本编辑器NotePad++安装包 + - R-4.0.4-win.exe:R语言安装包 + - RStudio-1.4.1106.exe:RStudio安装包 + - rtools40-x86_64.exe:R源码安装时的编绎工具 + - rush.exe:并行管理工具 + - seqkit.exe:序列处理工具 + - taxonkit.exe:NCBI分类处理工具 + - usearch.exe:扩增子分析流程 + - vsearch.exe:扩增子分析流程(免费64位版usearch) + - wget.exe:命令行下载工具 + +#### 数据库 + +- gg:GreenGenes细菌16S数据库 + - gg_13_8_otus.tar.gz:13年8月更新OTU数据库,用于usearch有参定量和PICRUSt/BugBase功能预测、QIIME 2制作分类器 +- kegg:KEGG数据库描述信息整理 + - KO_description.txt:KO编号对应的功能描述 + - KO_path.list:KO对应通路(Pathway) + - ko00001.tsv:KO对应描述、通路、超级通路和分类信息 +- usearch:usearch/vsearch物种分类sintax命令使用数据库 + - rdp_16s_v16_sp.fa.gz:16S的RDP16数据库,usearch作者整理,更16S、ITS和18S数据库见 http://www.drive5.com/usearch/manual/sintax_downloads.html + - rdp_16s_v18.fa.gz:16S的RDP18数据库,易生信团队2021年基于RDP数据库整理 + - utax_reference_dataset_all_04.02.2020.fasta.gz:ITS注释数据库,可从UNITE下载 + +#### 脚本 + +- 使用说明:分析常用脚本类型 + - .R文件为R脚本,使用Rscript命令执行; + - .sh为Shell脚本,使用/bin/bash命令执行; + - .pl为Perl脚本,使用perl命令执行; + - .py为Python脚本,使用python执行,注意还分为python2和python3两种 +- script:微生物组数据分析 + - BugBase:16S扩增子表型预测R脚本和数据库 + - FAPROTAX_1.2.4:16S扩增子元素循环预测Python脚本和数据库 + - table2itol:iTOL进化树注释文件制作R脚本 + - alpha_barplot.R:Alpha多样性指数柱状图+标准差图绘制 + - alpha_boxplot.R:Alpha多样性指数箱线图+统计绘制 + - alpha_rare_curve.R:usearch计算稀释曲线可视化 + - beta_cpcoa.R:基于距离矩阵开展限制性PCoA分析及可视化散点图+分组着色+置信椭圆,要求至少3个分组 + - beta_pcoa.R:基于距离矩阵的主坐标PCoA分析及可视化散点图+分组着色+置信椭圆+组间两两统计 + - BetaDiv.R:更多Beta多样性分析,如PCA、PCoA、NMDS、LDA、CCA、RDA等 + - compare.R:两组比较,支持t.test、wilcox、edgeR三种方法 + - compare_heatmap.R/sh:基于两组比较结果绘制热图 + - compare_manhattan.sh:基于两组比较结果绘制曼哈顿图 + - compare_volcano.R:基于两组比较结果绘制火山图 + - faprotax_report_sum.pl:FARPROTAX分析结果报告整理 + - filter_feature_table.R:按频率过滤OTU表 + - format_dbcan2list.pl:dbcan数据库注释结果整理 + - format2lefse.R:OTU表和物种注释生成LEfSe输入文件 + - format2stamp.R:OTU表和物种注释生成STAMP输入文件 + - kegg_ko00001_htext2tsv.pl:KEGG注释结果整理 + - kraken2alpha.R:Kraken2结果整理、抽平和alpha多样性指数计算 + - mat_gene2ko.R:按类型折叠表格 + - metaphlan_boxplot.R:metaphalan2结果可视化为箱线图 + - metaphlan_hclust_heatmap.R:metaphalan2结果可视化为聚类热图 + - metaphlan_to_stamp.pl:metaphalan2结果转换为STAMP格式 + - otu_mean.R:OTU表统计各组均值 + - otutab_filter_nonBac.R:16S的OTU表按sintax注释结果选择细菌、古菌且过滤叶绿体和线粒体 + - otutab_filter_nonFungi.R:ITS的OTU表选择真菌 + - otutab_freq2count.R:转换频率为伪整数,用于要求整型输入的分析,如多样性、edgeR差异分析等 + - otutab_rare.R:OTU表抽平 + - plot_metagenome_contributions.R:PICRUSt结果物种的功能组成绘制 + - sp_pheatmap.sh:绘制热图 + - sp_vennDiagram.sh:绘制维恩图 + - summarizeAbundance.py:按类型折叠大表,如基因按KEGG的KO合并 + - tax_circlize.R:物种组成圈图 + - tax_maptree.R:物种组成气泡图 + - tax_stackplot.R:物种组成堆叠柱状图 + +### 版本更新日志 + +#### 1.10 2021.1.22 + +1. humann2添加utility_mapping数据库,支持生成KEGG表; +2. kraken2添加最小8G索引; +3. 添加KEGG注释、层级信息及整理代码 +4. 添加CARD数据库 + +#### 1.11 2021.5.7 + +1. 新增conda环境移植教程,并提供常用conda环境下载; +2. 新增软件、数据库、脚本说明文档 +3. 常见问题整合到文档正文后面 + + +[TOC] + +# 宏基因组软件和数据库安装 Metagenomic software & database + + # 测试环境为Linux Ubuntu 16.04+ / CentOS 7+ + # 版本: 1.11, 2021/5/7 + +## 安装前准备:软件和数据库位置 + + # 数据库安装位置,默认~/db目录(无需管理权限),管理员可安装至/db,方便大家使用 + db=~/db + mkdir -p ${db} && cd ${db} + # 软件安装位置 + soft=~/miniconda2 + +### 软件管理器Conda + + mkdir -p linux && cd linux + # 下载最新版miniconda2,~49M + wget https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh + # 安装,-b批量,-f无提示,-p目录,许可协议打yes + bash Miniconda2-latest-Linux-x86_64.sh -b -f -p ${soft} + # 激活,然后关闭终端重开,提示符前出现(base)即成功 + ${soft}/bin/conda init + # 查看版本,conda 4.8.3, python 2.7.19 + conda -V + python --version + cd .. + # 添加常用频道 + conda config --add channels conda-forge + # 添加生物学软件频道,http://bioconda.github.io/ 查询软件 + conda config --add channels bioconda + +安装说明详见:[Nature Method:Bioconda解决生物软件安装的烦恼](https://mp.weixin.qq.com/s/SzJswztVB9rHVh3Ak7jpfA) + +(可选)添加清华镜像加速下载(通常会加速,但有时会导致无法访问) + + site=https://mirrors.tuna.tsinghua.edu.cn/anaconda + conda config --add channels ${site}/pkgs/free/ + conda config --add channels ${site}/pkgs/main/ + conda config --add channels ${site}/cloud/conda-forge/ + conda config --add channels ${site}/pkgs/r/ + conda config --add channels ${site}/cloud/bioconda/ + +conda默认配置文件为 ~/.condarc 查看配置文件位置 + + conda config --show-sources + +(可选)如果找不到conda,可手动临时添加conda至环境变量。可以添加至~/.bashrc文件中永久环境变量,需将${soft}替换为你的安装目录,如 + + export PATH="${soft}/bin:$PATH" + +查看虚拟环境列表 + + conda env list + +创建虚拟环境,防污染环境变量,如果有的软件在Solving environment步骤数小时无法安装,可以新建环境 + + conda create -n meta + +加载环境 + + conda activate meta + +### Conda安装小工具 + +并行计算parallel + + # Ubuntu下安装方法 + # sudo apt install parallel + # conda安装parallel,版本有点老 + conda install parallel -c bioconda + parallel --version # GNU parallel 20170422 + +表格统计工具csvtk和序列处理seqkit + + # conda安装,可能有点旧 + conda install csvtk -c bioconda + conda install seqkit -c bioconda + # 直接下载最新版 https://github.com/shenwei356,如以csvtk为例手动安装 + wget -c https://github.com/shenwei356/csvtk/releases/download/v0.22.0/csvtk_linux_amd64.tar.gz + tar xvzf csvtk_linux_amd64.tar.gz + cp csvtk ~/miniconda3/bin/ + +## conda环境打包pack和安装 + +准备工作,安装conda-pack提供打包功能 + + # 安装conda-pack实现打包 + conda install -c conda-forge conda-pack + # conda 安装不成功可用pip安装 + # pip conda-pack + +安装好的环境下打包导出,以宏基因组主环境meta为例 + + cd ~/db/conda/ + # conda环境包统一存放 + # 设置环境名,如metagenome_env meta humann2 + n=kraken2 + conda pack -n ${n} -o ${n}.tar.gz + # 导出文件列表 + conda activate ${n} + conda env export > ${n}.yml + # 添加权限,方便下载和别人使用 + chmod 755 * + +下载安装包并解压安装:软件包可从以下网址、或上课微信群索引百度云链接 + + # 指定环境名称,如metagenome_env, meta, metawrap1.3, humann2, humann3, qiime2-2021.2 + n=如metagenome_env + # 下载 + wget -c http://210.75.224.110/db/conda/${n}.tar.gz + # 指定安装目录 + mkdir -p ${soft}/envs/${n} + tar -xvzf ${n}.tar.gz -C ~/miniconda3/envs/${n} + # 方法1. 启动/退出环境 + conda activate $n + conda deactivate + # 方法2. 激活环境 + source ${soft}/envs/${n}/bin/activate + + +## 1质控软件 + +### 质量评估fastqc + + # =为指定版本,-c指定安装源,均可加速安装 + # -y为同意安装 + conda install fastqc=0.11.9 -c bioconda -y + fastqc -v + +### 评估报告汇总multiqc + + # 注1.7为Python2环境,1.8/9新版本需要Python3的环境 + conda install multiqc=1.9 -c bioconda -y + multiqc --version + +### 质量控制流程kneaddata + + conda install kneaddata=0.7.4 -c bioconda -y + kneaddata --version + trimmomatic -version # 0.39 + bowtie2 --version # 2.4.2 + + # 查看可用数据库 + kneaddata_database + # 包括人基因组bowtie2/bmtagger、人类转录组、核糖体RNA和小鼠基因组 + # 下载人基因组bowtie2索引 3.44 GB + mkdir -p ${db}/kneaddata/human_genome + kneaddata_database --download human_genome bowtie2 ${db}/kneaddata/human_genome + # 数据库下载慢或失败,附录有百度云和国内备份链接 + +## 2有参分析流程MetaPhlAn2、HUMAnN2 + +### HUMAnN2安装 + +方法1. 新建虚拟环境安装:安装MetaPhlAn2、HUMAnN2和所有依赖关系,并记录主要软件版本 + + # conda install humann2=2.8.1 -c bioconda -y + conda create -n humann2 humann2=2.8.1 -c bioconda -y + conda activate humann2 + # 记录核心软件版本 + humann2 --version # humann2 v2.8.1 + metaphlan2.py -v # MetaPhlAn version 2.7.5 (6 February 2018) + diamond help # v0.8.22.84 + +方法1. Conda导入和导出环境 + + # 安装conda-pack + conda install -c conda-forge conda-pack + #conda 安装不成功可用pip安装 + # pip conda-pack + # 安装好的环境下打包导出 + conda pack -n humann2 -o humann2.tar.gz + # 下载 + wget -c http://210.75.224.110/db/humann2/humann2.tar.gz + + # 新建文件夹存放humann2环境 + mkdir -p ~/miniconda3/envs/humann2 + tar -xzf humann2.tar.gz -C ~/miniconda3/envs/humann2 + # 激活环境 + source ~/miniconda3/envs/humann2/bin/activate + +测试流程是否可用 + + humann2_test + +### HUMAnN2物种和功能数据库 + +显示可用分类、泛基因组和功能数据库 + + humann2_databases + +安装数据库(注:数据库下载慢或失败,附录有国内备份链接) + + cd ${db} + mkdir -p ${db}/humann2 # 建立下载目录 + # 输助比对数据库 593MB + humann2_databases --download utility_mapping full ${db}/humann2 + # 微生物泛基因组 5.37 GB + humann2_databases --download chocophlan full ${db}/humann2 + # 功能基因diamond索引 10.3 GB + humann2_databases --download uniref uniref90_diamond ${db}/humann2 + + # 设置数据库位置 + # 显示参数 + humann2_config --print + # 如修改线程数,推荐3-8,根据实际情况调整 + humann2_config --update run_modes threads 3 + humann2_config --update database_folders utility_mapping ${db}/humann2/utility_mapping + humann2_config --update database_folders nucleotide ${db}/humann2/chocophlan + humann2_config --update database_folders protein ${db}/humann2/uniref + # metaphlan2数据库默认位于${soft}/envs/biobakery/bin/ 程序所在目录的db_v20 (v0.11)和databases(2.8.1)下 + humann2_config --print + # 例如,链接下载的metaphlan2: + ln -s `pwd`/metaphlan2 ${soft}/envs/biobakery/bin/databases + +### Microbiome helper + +主页:https://github.com/mlangill/microbiome_helper + +下载并安装 + + # 下载、解压 、添加环境变量 + wget -c https://github.com/LangilleLab/microbiome_helper/archive/master.zip + unzip master.zip + export PATH=`pwd`/microbiome_helper-master:$PATH + # 写入bashrc永久添加环境 + echo "export PATH=`pwd`/microbiome_helper-master:\$PATH" >> ~/.bashrc + + # metaphlan_to_stamp.pl 这个脚本有修改,修改后的脚本在db/script/下,也在QQ群文件中 + #----修改的内容如下---------------------------------------- + # my @taxa_ranks=("Kingdom","Phylum","Class","Order","Family","Genus","Species", "Strain"); + > + # #start with assumption that this is not metaphlan2 + # my $metaphlan2_version=1; + #------------------------------------------------------ + +### 物种组成美化GraPhlAn + + # GraPhlAn核心程序包 + conda install graphlan=1.1.3 -c bioconda -y + graphlan.py --version # 1.1.3 (5 June 2018) + # GraPhlAn输入文件制作程序,如转换LEfSe、Metaphlan2结果格式为GraPhlAn用于绘图 + conda install export2graphlan # 38 KB + export2graphlan.py -h # 0.22 of 05 May 2020 + +### 生物标记鉴定和可视化LEfSe + + conda install lefse # 76.3 MB, 1.0.8.post1 + + # Rstudio中运行命令调用R版本问题的解决 + # 在Rstudio中默认调用Rstudio的R,具体写在/etc/rstudio/rserver.conf + # 或在R中用Sys.getenv()["R_HOME"] + # 在rpy2中print(robjects.r)可以查看其调用的r版本 + + # 指定lefse调用的R版本,需根据conda实际目录修改 + sed -i "2 i os.environ['R_HOME'] = '/conda/envs/meta/lib/R/'" \ + /conda/envs/meta/share/lefse-1.0.8.post1-1/lefse.py + +### 物种注释Kraken2 + +物种注释:基于LCA算法的物种注释kraken2 https://ccb.jhu.edu/software/kraken/ + +- 软件安装 + +安装方法1. 直接安装并查看版本 + + conda install kraken2 -c bioconda -y + kraken2 --version # 2.1.1 + conda install bracken=2.6.0 -c bioconda + +安装方法2. 新建环境安装并启动软件环境 + + conda create -n kraken2 -y -c bioconda kraken2 + conda activate kraken2 + conda install bracken=2.6.0 -c bioconda + # krakentools 0.1 补充脚本 + conda install krakentools -c bioconda + # krona绘图 + conda install krona -c bioconda + +安装方法3. conda导入和导出 + + # 从安装好的环境打包,此处为Ubuntu 16.04LTS + # conda pack -n kraken2 -o ~/db/kraken2/kraken2.tar.gz + # 添加权限,否则别人无法下载 + # chmod 777 ~/db/kraken2/kraken2.tar.gz + # 下载压缩包 + wget -c http://210.75.224.110/db/kraken2/kraken2.tar.gz + # 新建文件夹存放kraken2环境 + mkdir -p /conda2/envs/kraken2 + # 解压环境到指定目录 + tar -xzf kraken2.tar.gz -C /conda2/envs/kraken2 + # 激活环境 + source /conda2/envs/kraken2/bin/activate + +- 数据库 + +下载数据库(NCBI每2周更新一次),记录下载日期和大小。需根据服务器内存、使用目的选择合适方案。--standard标准模式下只下载5种数据库:古菌archaea、细菌bacteria、人类human、载体UniVec_Core、病毒viral。也可选直接下载作者构建的索引,还包括bracken的索引。 + +- 方法1. 数据库安装 + +方案1. 标准库安装,下载数据~100GB,时间由网速决定,索引5h,多线程可加速至1h完成 + + cd ${db} + d=210122 + mkdir -p kraken2/$d && cd kraken2/$d + kraken2-build --standard --threads 24 --db ./ + +方案2. 自定义微生物数据库,如标准+真菌+原生动物+质粒+植物 + + cd ${db} + d=210120fpf + mkdir -p kraken2/$d && cd kraken2/$d + # 显示帮助 + kraken2-build -h + # 下载物种注释 + kraken2-build --download-taxonomy --threads 24 --db ./ + # 下载数据库,需要12-24小时 + for i in archaea bacteria UniVec_Core viral human fungi plasmid protozoa plant; do + kraken2-build --download-library $i --threads 24 --db ./ + done + # 确定的库建索引,4p,4h + time kraken2-build --build --threads 48 --db ./ + # bracken索引,长度推荐100/150, 24p,1h; + time bracken-build -d ./ -t 24 -k 35 -l 100 + time bracken-build -d ./ -t 24 -k 35 -l 150 + + +- 方法2. 数据库下载 + +下载标准+原生动物+真菌+植物8GB(PlusPFP-8)数据库,包括kraken2和bracken2的索引。更多版本数据库详见:https://benlangmead.github.io/aws-indexes/k2 。 + +方案1. 迷你库(8G) + + # 压缩包5.2G, + wget -c https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_8gb_20201202.tar.gz + # 备用地址: + # wget -c http://210.75.224.110/db/kraken2/k2_pluspfp_8gb_20201202.tar.gz + tar xvzf k2_pluspfp_8gb_20201202.tar.gz + +方案2. 完整库(70G) + +压缩包70G,解压后100G。指定解压目录,包括时间和类型。201202为更新时间,pfp指标准库+原生动物+真菌+植物。注:但我使用中发现仍然没有真菌。 + + d=201202pfp + mkdir ${d} + wget -c https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_20201202.tar.gz + tar xvzf k2_pluspfp_20201202.tar.gz -C ${d} + +方案3. 第3方个性数据库(人和病毒含新冠),仅用于病毒检测 + +https://genexa.ch/sars2-bioinformatics-resources/ + + wget -c https://storage.googleapis.com/sars-cov-2/kraken2_h%2Bv_20200319.tar.gz + mkdir -p 200319hv/ + tar xvzf kraken2_h+v_20200319.tar.gz -C 200319hv/ + + +## 3基因组拼接、注释和定量 + +### 拼接megahit/metaSPAdes + + # 快速组装megahit + conda install megahit + megahit -v # v1.2.9 + + # metaSPAdes拼接,只是spades系列中的一个定制脚本 + conda install spades # 12.8 MB + metaspades.py -v # v3.14.0 [metaSPAdes mode] + +### 组装评估QUEST + + conda install quast -y # 87.2 MB + metaquast.py -v # QUAST v5.0.2 (MetaQUAST mode) + +### 基因预测prokka + + # 细菌基因组注释prokka + conda install prokka -y # 352.8 MB + prokka -v # 1.14.6 + +### 非冗余基因集cd-hit + + conda install cd-hit # 790 KB + cd-hit -v # 4.8.1 (built on May 14 2019) + + # emboss transeq工具,93.9 MB + conda install emboss -y + embossversion # 6.6.0.0 + +### 定量工具salmon + + conda install salmon -y # 17.8 MB + salmon -v # 1.3.0 + + +## 4基因功能注释 + +### KEGG层级注释 + +https://www.kegg.jp/kegg-bin/show_brite?ko00001.keg 下载htext + + # 转换ABCD为列表 + kegg_ko00001_htext2tsv.pl -i ko00001.keg -o ko00001.tsv + # 统计行数,2021.1月版55761行,整理后为55103个条目 + wc -l ko00001.* + # 统计各级数量, /54/527/23917 + for i in `seq 1 2 8`;do + cut -f ${i} ko00001.tsv|sort|uniq|wc -l ; done + # 生成KO编号和注释列表 + cut -f 7,8 ko00001.tsv|sort|uniq|sed '1 i KO\tDescription' \ + > KO_description.txt + # KO与通路(Pathway)对应表,用于合并D级为C级 + awk 'BEGIN{FS=OFS="\t"} {print $7,$6}' ko00001.tsv | sed '1 i KO\tpathway' \ + > KO_path.list + + +### 蛋白同源综合注释eggNOG + +eggNOG http://eggnogdb.embl.de + + # 安装eggnog比对工具emapper + conda install eggnog-mapper=2.0.1 -y -c bioconda + emapper.py --version # 2.0.1 + + # 下载常用数据库,注意设置下载位置 + mkdir -p ${db}/eggnog5 && cd ${db}/eggnog5 + # -y默认同意,-f强制下载,eggnog.db.gz 7.9G+4.9G + download_eggnog_data.py -y -f --data_dir ./ + + # 下载方式2(可选):链接直接下载 + wget -c http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog.db.gz # 7.9G + wget -c http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog_proteins.dmnd.gz # 4.9G + gunzip *.gz + + # 如果内存够大,复制eggNOG至内存加速比对 + # cp eggnog.db /dev/shm + # 手工整理COG分类注释 + wget -c http://210.75.224.110/share/COG.anno + # 手工整理KO注释 + wget -c http://210.75.224.110/share/KO.anno + + + +### CAZy碳水化合物 + + # dbCAN2 http://bcb.unl.edu/dbCAN2 + # 创建数据库存放目录并进入 + mkdir -p ${db}/dbCAN2 && cd ${db}/dbCAN2 + # 下载序列和描述 + wget -c http://bcb.unl.edu/dbCAN2/download/CAZyDB.07312020.fa + wget -c http://bcb.unl.edu/dbCAN2/download/Databases/CAZyDB.07302020.fam-activities.txt + # 备用数据库下载地址并解压 + #wget -c http://210.75.224.110/db/dbcan2/CAZyDB.07312020.fa.gz + #gunzip CAZyDB.07312020.fa.gz + # diamond建索引,800M,1m + diamond --version # 0.8.22/2.0.5 + time diamond makedb \ + --in CAZyDB.07312020.fa \ + --db CAZyDB.07312020 + # 压缩原始数据节约空间 + gzip CAZyDB.07312020.fa + # 提取fam对应注释 + grep -v '#' CAZyDB.07302020.fam-activities.txt \ + |sed 's/ //'| \ + sed '1 i CAZy\tDescription' \ + > CAZy_description.txt + +### 抗生素抗性基因CARD + + # 官网:https://card.mcmaster.ca + # Bioconda: http://bioconda.github.io/recipes/rgi/README.html + # Github: https://github.com/arpcard/rgi + +软件安装 + + # 方法1. Cona安装rgi + conda install --channel bioconda rgi + + # 方法2. 指定环境安装rgi + conda create -n rgi -c bioconda rgi + + # 方法3. 从其他安装的环境导出和导入 + # 安装好的环境下打包导出,262M + conda pack -n rgi -o rgi.tar.gz + # 下载软件包 + wget -c http://210.75.224.110/db/card/rgi.tar.gz + # 新建文件夹存放rgi环境 + mkdir -p ${soft}/envs/rgi + tar -xzf rgi.tar.gz -C ~/miniconda3/envs/rgi + # 激活环境 + source ${soft}/envs/rgi/bin/activate + +数据库部署 + + # 下载最新版数据库,2.8M + wget -c https://card.mcmaster.ca/latest/data + # 解压后20M + tar -xvf data card.json + # wget -c http://210.75.224.110/db/card/card.json + # 加载数据库 + rgi load --card_json card.json + + # 宏基因组分析扩展数据库和加载 + rgi card_annotation -i card.json + rgi load -i card.json --card_annotation card_database_v3.1.0.fasta + + +### 抗生素抗性基因Resfam + + # http://dantaslab.wustl.edu/resfams + mkdir -p ${db}/resfam && cd ${db}/resfam + # 官网的数据格式非常混乱, 推荐下载我手动整理的索引和注释 + wget http://210.75.224.110/share/Resfams-proteins.dmnd # 1.5 MB + wget http://210.75.224.110/share/Resfams-proteins_class.tsv # 304 KB + + +## 5分箱工具 + +### metawrap分箱和提纯 + + # 方法1. conda在线安装物种注释和分箱流程 https://github.com/bxlab/metaWRAP + conda create -y -n metawrap python=2.7 # 22.2MB + conda activate metawrap + conda config --add channels ursky + conda install -y -c ursky metawrap-mg # 1.14 GB, v1.2 + + # 方法2. 安装好的环境下打包导出,最新版1.3 + # 设置conda位置 + soft=${soft}/ + # conda pack -n metawrap1.3 -o metawrap1.3.tar.gz + # 下载最新环境 + wget -c http://210.75.224.110/db/metawrap/metawrap1.3.tar.gz + # 新建文件夹存放metawrap1.3环境 + mkdir -p ${soft}/envs/metawrap1.3 + tar -xzf metawrap1.3.tar.gz -C ${soft}/envs/metawrap1.3 + # 激活环境 + source ${soft}/envs/metawrap1.3/bin/activate + + + # 相关数据库,大小近300GB + # 这里我们安装数据库到`~/db`目录,保证你有权限, + # 但要保证至少有500GB的空间。请根据你的情况修改为自己有权限且空间足够的位置。 + # 多人使用,建议管理员统一安装节省空间 + cd ${db} + + + ## CheckM用于Bin完整和污染估计和物种注释 + mkdir -p checkm && cd checkm + # 下载文件275 MB,解压后1.4 GB + wget -c https://data.ace.uq.edu.au/public/CheckM_databases/checkm_data_2015_01_16.tar.gz + # 国内备用链接 + # wget -c http://210.75.224.110/share/meta/checkm/checkm_data_2015_01_16.tar.gz + tar -xvf *.tar.gz + # rm *.gz + # 设置数据库位置 + checkm data setRoot + # 按提示输出你数据下载的路径或直接回车默认为当前位置 + + ## NCBI_nt核酸序列用于bin物种注释 + # 41GB,我下载大约12h;解压后99GB + cd ${db} + mkdir -p NCBI_nt && cd NCBI_nt + wget -c "ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.*.tar.gz" + # 备用下载链接,或百度云下载 + # wget -c http://210.75.224.110/share/meta/NCBI_nt/filelist.txt + # for a in `cat filelist.txt`; do wget -c http://210.75.224.110/share/meta/NCBI_nt/$a; done + for a in nt.*.tar.gz; do tar xzf $a; done & + + ## NCBI物种信息 + # 压缩文件45M,解压后351M + cd ${db} + mkdir NCBI_tax + cd NCBI_tax + wget ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz + tar -xvf taxdump.tar.gz + + ## 人类基因组去宿主 + cd ${db} + mkdir -p metawrap/BMTAGGER && cd metawrap/BMTAGGER + wget -c ftp://hgdownload.soe.ucsc.edu/goldenPath/hg38/chromosomes/*fa.gz + gunzip *fa.gz + cat *fa > hg38.fa + rm chr*.fa + # 上方下载太慢,使用国内备份链接手动下载 + wget -c http://210.75.224.110/share/meta/metawrap/BMTAGGER/hg38.fa + bmtool -d hg38.fa -o hg38.bitmask + srprism mkindex -i hg38.fa -o hg38.srprism -M 100000 + + ## KRAKEN物种注释数据库 + # 下载建索引需要 > 300GB以上空间,完成后占用192GB空间 + cd ${db} + mkdir -p kraken + kraken-build --standard --threads 24 --db kraken > log & + kraken-build --db kraken --clean + # 手动下载 + cd kraken + wget -c http://210.75.224.110/share/meta/kraken/database.kdb + wget -c http://210.75.224.110/share/meta/kraken/database.idx + mkdir -p taxonomy && cd taxonomy + wget -c http://210.75.224.110/share/meta/kraken/taxonomy/nodes.dmp + wget -c http://210.75.224.110/share/meta/kraken/taxonomy/names.dmp + # 从其它位置复制 + # cp -r /db/kraken/* ./ + + ## 数据库位置设置 + which config-metawrap + # 配置文件通常为${soft}/envs/metawrap/bin/config-metawrap + # 使用Rstudio/vim等文本编辑器来修改数据库的位置 + +### drep基因组去冗余 + +挑单菌测序的基因组存在大量冗余。 + +metawrap混合分箱的结果中冗余度非常低,甚至无冗余。而单样本、分批次分箱的结果中存在大量冗余,需要采用derep分箱获得非冗余的基因组。 + + conda create -n drep + conda activate drep + conda install drep -c bioconda + + +### GTDB细菌基因组注释和进化分析 + +Github: https://github.com/Ecogenomics/GTDBTk + +GTDB-Tk是一个软件工具包,用于根据基因组数据库分类法GTDB为细菌和古细菌基因组分配客观的分类法。它旨在与最近的进展一起使用,从而可以直接对环境样本中获得数百或数千个由基因组组装的基因组(MAG)进行物种分类注释。它也可以用于分离和单细胞的基因组物种注释。 + +本次测试版本为 GTDB-Tk v1.3.0,于2020年7月17发布,参考数据为95版。 + +硬件要求: + +内存100Gb + +硬盘27Gb + +64核1小时可分析1000个细菌基因组 + +Conda安装: + + conda create -n gtdbtk + conda activate gtdbtk + # gtdbtk-1.3.0, 2020-9-27 + conda install -c bioconda gtdbtk + +download-db.sh自动下载数据库,将下载至conda中的envs/gtdbtk/share/gtdbtk-1.3.0/db/: + + download-db.sh + +(可选)手动下载和配置GTDB参考基因组最新版(测试时为95版,34Gb) + + mkdir -p ~/db/gtdb & cd ~/db/gtdb + # 下载解压 + wget -c https://data.ace.uq.edu.au/public/gtdb/data/releases/latest/auxillary_files/gtdbtk_data.tar.gz + tar zxvf gtdbtk_data.tar.gz + # 设置数据库位置,注意修改软件安装位置 + locate gtdbtk.sh # 查找配置文件位置 + # 修改PATH=后面的路径为数据库解压目录,如/home/meta/db/gtdb/release95/ + vim /conda/envs/gtdbtk/etc/conda/activate.d/gtdbtk.sh + +此外:GTDB数据库国内下载备份链接见 http://nmdc.cn/datadownload + + +## 6 其它 + + # Bin可视化VizBin (可选) + 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 + mv VizBin-dist.jar /usr/local/bin # 或~/bin + + # 比对结果整理samtools + conda install samtools + + ### CARD(选学) https://card.mcmaster.ca/download + # 方法1. 直接conda安装 + conda install --channel bioconda rgi + # 方法2. 虚拟环境安装 + conda activate metawrap + conda install --channel bioconda rgi + rgi main -v # 4.0.3 + # rgi教程 https://github.com/arpcard/rgi + + + +## 常见问题 + +### 数据库国内下载链接 + +- 方法1:国家微生物科学数据中心 —— 数据下载 (网站有时会更新和维护中,不可用) + +http://nmdc.cn/datadownload + +本资源由宏基因组平台发起,微生物所提供服务器,宏基因组团队负责维护的常用软件、扩增子和宏基因组数据库的国内下载链接,解决常用数据库下载慢、或无法下载的问题。同时提供定制的软件、数据库索引,节约大家下载时间,节省数据库编制索引的计算资源消耗。 + +- 方法2:刘永鑫Github中的备用百度云/下载链接索引 + +详细下载链接和说明见:https://github.com/YongxinLiu/MicrobiomeStatPlot/blob/master/Data/BigDataDownlaodList.md + +下载的tar.gz压缩包,可放置于指定目录,使用`tar -xvzf *.tar.gz`解压 + +个人网站备用下载链接,带宽有限,推荐官方、数据中心和百度云失败再尝试此法 + + # humann3 + site=http://210.75.224.110/db + wget -c ${site}/humann3/full_chocophlan.v296_201901.tar.gz + wget -c ${site}/humann3/uniref90_annotated_v201901.tar.gz + wget -c ${site}/humann3/full_mapping_v201901.tar.gz + mkdir -p chocophlan uniref utility_mapping + tar xvzf full_chocophlan.v296_201901.tar.gz -C chocophlan/ + tar xvzf uniref90_annotated_v201901.tar.gz -C uniref/ + tar xvzf full_mapping_v201901.tar.gz -C utility_mapping/ + +大文件的分卷压缩和解压 以kraken2 hash.k2d为例 + + cd ~/db/kraken2_200706 + # https://www.cnblogs.com/wang--lei/p/9046643.html + # 文件夹kraken2idx/打包压缩,1h + tar -zcvf kraken2.tar.gz kraken2idx/ + # b分割为指定大小文件G/M/K,-d数字,a序列长度,输入和输出前缀 + split -b 13G -d -a 1 kraken2.tar.gz kraken2.tar.gz. + # 一行命令 + tar -zcvf kraken2.tar.gz kraken2idx/ | split -b 19G -d -a 1 - kraken2.tar.gz. + # 分割后解压缩 + cat kraken2.tar.gz.* | tar -zxv + + # 附tar打包用法 + 单个文件压缩打包 tar -czvf my.tar.gz file1 + 多个文件压缩打包 tar -czvf my.tar.gz file1 file2 file*)(也可以给file*文件mv 目录在压缩) + 单个目录压缩打包 tar -czvf my.tar.gz dir1 + 多个目录压缩打包 tar -czvf my.tar.gz dir1 dir2 + 解包至当前目录:tar -xzvf my.tar.gz + + +### conda批量安装软件 + + conda install -y fastqc multiqc kneaddata=0.6.1 humann2 graphlan export2graphlan lefse kraken2 megahit spades quast prokka cd-hit emboss salmon eggnog-mapper samtools + +### kneaddata常见问题 + +#### kneaddata运行提示java版本不支持 + + # 解决思路,新建虚拟环境,安装kneaddata,再安装对应java版本 + # 务必指定2.7,软件依赖2.7的python,但conda会自动安装3.6,运行报错 + conda create -n kneaddata python=2.7 + conda activate kneaddata + conda install openjdk=8.0.152 + conda install kneaddata=0.6.1 + +#### kneaddata质控双端结果不成对 + + # 0.7.4存在对旧格式fastq去宿主后数据极少或双端数据不对称,可指定版本安装0.6.1 + conda remove kneaddata + conda install kneaddata=0.6.1 # 175 MB + +### humann2数据库无法下载备用链接 + + # 可选:链接直接下载、百度云链接(宏基因组公众号回复:数据库)或国内备份链接 + mkdir -p ${db}/humann2/chocophlan && cd ${db}/humann2/chocophlan + wget -c http://210.75.224.110/share/meta/full_chocophlan_plus_viral.v0.1.1.tar.gz + tar xvzf full_chocophlan_plus_viral.v0.1.1.tar.gz + # uniref90和50任选其1,推荐uniref90更全5.9 GB + cd ${db}/humann2 + wget -c http://210.75.224.110/share/meta/uniref90_annotated_1_1.tar.gz + tar xvzf uniref90_annotated_1_1.tar.gz + # 内存<32G内存选uniref5 (2.5 GB) + # wget -c http://210.75.224.110/share/meta/uniref50_annotated_1_1.tar.gz + # tar xvzf uniref50_annotated_1_1.tar.gz + # 不要同一文件中有两个文件,会先比90,再比50出现混乱 + +### Metaphlan2数据库找不到 + + # 下载并构建索引 + mkdir -p ${db}/metaphlan2 && cd ${db}/metaphlan2 + wget -c http://210.75.224.110/share/meta/metaphlan2/mpa_v20_m200.tar + tar xvf mpa_v20_m200.tar + bzip2 -d mpa_v20_m200.fna.bz2 + bowtie2-build mpa_v20_m200.fna mpa_v20_m200 + # 链接到软件安装目录 + mkdir -p ${soft}/envs/metagenome_env/bin/db_v20 + ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/db_v20/ + mkdir -p ${soft}/envs/metagenome_env/bin/databases + ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/databases/ + +### Kraken2 + +#### 定制数据库 + +官方教程详见 https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown + +设定数据库日期为版本,建立数据库目录 + + d=200918 + cd ~/db + mkdir -p kraken2/$d && cd kraken2/$d + +下载物种名信息表,gb 1.8G; wgs 3.3G; 解压后大小为9.2/21G; taxdump 50M + + kraken2-build --download-taxonomy --threads 24 --db ./ + +序列数据库包括 archaea bacteria plasmid viral human fungi plant protozoa nr nt env_nr env_nt UniVec + +下载单个真菌库为例 + + i=fungi + kraken2-build --download-library $i --threads 24 --db ./ + # 批量下载数据库,除默认5种外新加植物、真菌、原生生物和质粒,下载需几小时-数天 archaea bacteria UniVec_Core viral human fungi plant + for i in protozoa plasmid; do + kraken2-build --download-library $i --threads 24 --db ./ + done + + # 建索引,4h, 40h;2h,40h + time kraken2-build --build --threads 24 --db ./ + + # 数据库大小,2020/4/12更新 + du -sh library/* + 918M archaea + 74G bacteria + 1.2G fungi + 3.1G human + 51G plant + 2.0G plasmid + 877M protozoa + 2.0M UniVec_Core + 310M viral + +#### Perl版本不对 + +常见问题:Perl版本不对,人工指定perl版本如下 + + PERL5LIB=${soft}/envs/kraken2/lib/site_perl/5.26.2/x86_64-linux-thread-multi:${soft}/envs/kraken2/lib/site_perl/5.26.2:${soft}/envs/kraken2/lib/5.26.2/x86_64-linux-thread-multi:${soft}/envs/kraken2/lib/5.26.2 + + +### salmon手动安装和使用方法 + + # 如不可用,尝试下载二进制和添加环境变量 + wget https://github.com/COMBINE-lab/salmon/releases/download/v0.14.0/salmon-0.14.0_linux_x86_64.tar.gz + tar xvzf salmon-0.14.0_linux_x86_64.tar.gz + cp -rf salmon-latest_linux_x86_64/ ${soft}/envs/metagenome_env/share/salmon + ${soft}/envs/metagenome_env/share/salmon/bin/salmon -v # 0.14.0 + + +## 附录 + +### 软件和数据库清单(db) + +扩增子、宏基因组分析常用软件、数据库、脚本文件 + + +#### 软件 + +- linux:Linux系统下分析软件 + - microbiome_helper:metaphlan2结果转换STAMP格式(metaphlan_to_stamp),picurst结果功能组成绘图(plot_metagenome_contributions.R) + - Miniconda2-latest-Linux-x86_64.sh:Conda安装程序 + - qiime2-2021.2.tar.gz:QIIME2安装包,解压至conda的envs目录可用 + - qiime2-2021.2-py36-linux-conda.yml:QIIME2软件安装清单,使用conda在线安装 + - sparcc.zip:sparcc网络分析python脚本 + - usearch:扩增子分析流程 + - vsearch:扩增子分析流程(免费64位版usearch) +- mac:Mac系统下分析软件 + - csvtk:表格分析工具 + - iqtree:进化树构建 + - qiime2-2021.2-py36-osx-conda.yml:QIIME2软件安装清单,使用conda在线安装 + - R-4.0.4.pkg:R语言安装包 + - RStudio-1.4.1106.dmg:RStudio安装包 + - rush:并行管理工具 + - seqkit:序列处理工具 + - taxonkit:NCBI分类处理工具 + - usearch:扩增子分析流程 + - vsearch:扩增子分析流程(免费64位版usearch) +- win:Windows系统下分析软件 + - STAMP2.1.3:微生物组图形界面差异分析工具 + - 4.0.zip:R语言常用400+包合集,解压至R包安装位置 + - Adobe_Illustrator_CC_2018_v22.1.0.314_x64_zh_CN_Portable.7z:图片拼图、模式图绘制工具 + - csvtk.exe:表格分析工具 + - Cytoscape_3_8_2_windows_64bit.exe:网络分析安装包 + - epp510_1828_64bit.exe:文本编辑器 + - FileZilla_3.49.1_win64_sponsored-setup.exe:文件上传下载 + - gephi-0.9.2-windows.exe:网络图绘制工具 + - Git-2.30.2-64-bit.exe:提供Git bash环境 + - iqtree.exe:进化树构建 + - jdk-11.0.7_windows-x64_bin.exe:Java运行环境 + - libiomp5md.dll:动态库,运行中提示缺少时可添加至系统目录 + - muscle.exe:多序列比对工具 + - npp.7.8.9.Installer.x64.exe:文本编辑器NotePad++安装包 + - R-4.0.4-win.exe:R语言安装包 + - RStudio-1.4.1106.exe:RStudio安装包 + - rtools40-x86_64.exe:R源码安装时的编绎工具 + - rush.exe:并行管理工具 + - seqkit.exe:序列处理工具 + - taxonkit.exe:NCBI分类处理工具 + - usearch.exe:扩增子分析流程 + - vsearch.exe:扩增子分析流程(免费64位版usearch) + - wget.exe:命令行下载工具 + +#### 数据库 + +- gg:GreenGenes细菌16S数据库 + - gg_13_8_otus.tar.gz:13年8月更新OTU数据库,用于usearch有参定量和PICRUSt/BugBase功能预测、QIIME 2制作分类器 +- kegg:KEGG数据库描述信息整理 + - KO_description.txt:KO编号对应的功能描述 + - KO_path.list:KO对应通路(Pathway) + - ko00001.tsv:KO对应描述、通路、超级通路和分类信息 +- usearch:usearch/vsearch物种分类sintax命令使用数据库 + - rdp_16s_v16_sp.fa.gz:16S的RDP16数据库,usearch作者整理,更16S、ITS和18S数据库见 http://www.drive5.com/usearch/manual/sintax_downloads.html + - rdp_16s_v18.fa.gz:16S的RDP18数据库,易生信团队2021年基于RDP数据库整理 + - utax_reference_dataset_all_04.02.2020.fasta.gz:ITS注释数据库,可从UNITE下载 + +#### 脚本 + +- 使用说明:分析常用脚本类型 + - .R文件为R脚本,使用Rscript命令执行; + - .sh为Shell脚本,使用/bin/bash命令执行; + - .pl为Perl脚本,使用perl命令执行; + - .py为Python脚本,使用python执行,注意还分为python2和python3两种 +- script:微生物组数据分析 + - BugBase:16S扩增子表型预测R脚本和数据库 + - FAPROTAX_1.2.4:16S扩增子元素循环预测Python脚本和数据库 + - table2itol:iTOL进化树注释文件制作R脚本 + - alpha_barplot.R:Alpha多样性指数柱状图+标准差图绘制 + - alpha_boxplot.R:Alpha多样性指数箱线图+统计绘制 + - alpha_rare_curve.R:usearch计算稀释曲线可视化 + - beta_cpcoa.R:基于距离矩阵开展限制性PCoA分析及可视化散点图+分组着色+置信椭圆,要求至少3个分组 + - beta_pcoa.R:基于距离矩阵的主坐标PCoA分析及可视化散点图+分组着色+置信椭圆+组间两两统计 + - BetaDiv.R:更多Beta多样性分析,如PCA、PCoA、NMDS、LDA、CCA、RDA等 + - compare.R:两组比较,支持t.test、wilcox、edgeR三种方法 + - compare_heatmap.R/sh:基于两组比较结果绘制热图 + - compare_manhattan.sh:基于两组比较结果绘制曼哈顿图 + - compare_volcano.R:基于两组比较结果绘制火山图 + - faprotax_report_sum.pl:FARPROTAX分析结果报告整理 + - filter_feature_table.R:按频率过滤OTU表 + - format_dbcan2list.pl:dbcan数据库注释结果整理 + - format2lefse.R:OTU表和物种注释生成LEfSe输入文件 + - format2stamp.R:OTU表和物种注释生成STAMP输入文件 + - kegg_ko00001_htext2tsv.pl:KEGG注释结果整理 + - kraken2alpha.R:Kraken2结果整理、抽平和alpha多样性指数计算 + - mat_gene2ko.R:按类型折叠表格 + - metaphlan_boxplot.R:metaphalan2结果可视化为箱线图 + - metaphlan_hclust_heatmap.R:metaphalan2结果可视化为聚类热图 + - metaphlan_to_stamp.pl:metaphalan2结果转换为STAMP格式 + - otu_mean.R:OTU表统计各组均值 + - otutab_filter_nonBac.R:16S的OTU表按sintax注释结果选择细菌、古菌且过滤叶绿体和线粒体 + - otutab_filter_nonFungi.R:ITS的OTU表选择真菌 + - otutab_freq2count.R:转换频率为伪整数,用于要求整型输入的分析,如多样性、edgeR差异分析等 + - otutab_rare.R:OTU表抽平 + - plot_metagenome_contributions.R:PICRUSt结果物种的功能组成绘制 + - sp_pheatmap.sh:绘制热图 + - sp_vennDiagram.sh:绘制维恩图 + - summarizeAbundance.py:按类型折叠大表,如基因按KEGG的KO合并 + - tax_circlize.R:物种组成圈图 + - tax_maptree.R:物种组成气泡图 + - tax_stackplot.R:物种组成堆叠柱状图 + +### 版本更新日志 + +#### 1.10 2021.1.22 + +1. humann2添加utility_mapping数据库,支持生成KEGG表; +2. kraken2添加最小8G索引; +3. 添加KEGG注释、层级信息及整理代码 +4. 添加CARD数据库 + +#### 1.11 2021.5.7 + +1. 新增conda环境移植教程,并提供常用conda环境下载; +2. 新增软件、数据库、脚本说明文档 +3. 常见问题整合到文档正文后面 + + diff --git a/1soft_db.sh b/1soft_db.sh deleted file mode 100644 index 1839beb..0000000 --- a/1soft_db.sh +++ /dev/null @@ -1,792 +0,0 @@ -[TOC] - -# 宏基因组软件和数据库安装 Metagenomic software & database - - # 测试环境为Linux Ubuntu 18.04 / CentOS 7 - # 版本: 1.10, 2021/1/22 - -## 安装前准备:Conda和数据库位置 - - # 数据库安装位置,默认~/db目录(无需管理权限),管理员可安装至/db,方便大家使用 - db=~/db - mkdir -p ${db} && cd ${db} - # 软件安装位置 - soft=~/miniconda3 - -### 软件管理器miniconda2 - - # 下载最新版miniconda3 - wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh - # Conda默认软件安装目录为~/miniconda2,管理员可修改为/conda - bash Miniconda3-latest-Linux-x86_64.sh -b -f -p ${soft} - # 安装时许可协议打yes,-p指定安装目录为预定义的soft变量,注意安装完成后按提示激活 - ~/miniconda3/bin/conda init - # 退出终端重新打开,提示符前出现(base),方可使用conda - conda -V # 查看版本 4.9.2 - python --version # 2.7.17 - -安装说明详见:[Nature Method:Bioconda解决生物软件安装的烦恼](https://mp.weixin.qq.com/s/SzJswztVB9rHVh3Ak7jpfA) - -常用配置如下: - - # 添加生物频道,才能找到生物学软件 - conda config --add channels bioconda - # http://bioconda.github.io/ 查询软件及版本 - # 添加常用频道 - conda config --add channels conda-forge - -(可选)添加清华镜像加速下载(通常会加速,但有时会导致无法访问) - - site=https://mirrors.tuna.tsinghua.edu.cn/anaconda - conda config --add channels ${site}/pkgs/free/ - conda config --add channels ${site}/pkgs/main/ - conda config --add channels ${site}/cloud/conda-forge/ - conda config --add channels ${site}/pkgs/r/ - conda config --add channels ${site}/cloud/bioconda/ - -conda默认配置文件为 ~/.condarc 查看配置文件位置 - - conda config --show-sources - -可选:如果找不到conda,可手动临时添加conda至环境变量。可以添加至~/.bashrc文件中永久环境变量,注${soft}替换为你的安装目录,如~/miniconda2 - - export PATH="${soft}/bin:$PATH" - -查看虚拟环境列表 - - conda env list - -创建虚拟环境,防污染环境变量,如果有的软件在Solving environment步骤数小时无法安装,可以新建环境 - - conda create -n meta - -加载环境 - - conda activate meta - -### 常用系统工具 - -(可选)Java运行环境jdk - - # example support trimmomatic - conda install -c cyclus java-jdk # 156M,cyclus极慢 - java -version # 11.0.1 - -并行计算parallel - - # Ubuntu下安装方法 - # sudo apt install parallel - # conda安装parallel,版本有点老 - conda install parallel -c bioconda - parallel --version # GNU parallel 20170422 - -表格统计工具csvtk - - conda install csvtk -c bioconda - - -## 1质控软件 - -### 质量评估fastqc - - # =为指定版本,-c指定安装源,均可加速安装 - # -y为同意安装 - conda install fastqc=0.11.9 -c bioconda -y - fastqc -v - -### 评估报告汇总multiqc - - # 注1.7为Python2环境,1.8/9新版本需要Python3的环境 - conda install multiqc=1.9 -c bioconda -y - multiqc --version - -### 质量控制流程kneaddata - - conda install kneaddata=0.7.4 -c bioconda -y - kneaddata --version - trimmomatic -version # 0.39 - bowtie2 --version # 2.4.2 - - # 查看可用数据库 - kneaddata_database - # 包括人基因组bowtie2/bmtagger、人类转录组、核糖体RNA和小鼠基因组 - # 下载人基因组bowtie2索引 3.44 GB - mkdir -p ${db}/kneaddata/human_genome - kneaddata_database --download human_genome bowtie2 ${db}/kneaddata/human_genome - # 数据库下载慢或失败,附录有百度云和国内备份链接 - -## 2有参分析流程MetaPhlAn2、HUMAnN2 - -### HUMAnN2安装 - -方法1. 新建虚拟环境安装:安装MetaPhlAn2、HUMAnN2和所有依赖关系,并记录主要软件版本 - - # conda install humann2=2.8.1 -c bioconda -y - conda create -n humann2 humann2=2.8.1 -c bioconda -y - conda activate humann2 - # 记录核心软件版本 - humann2 --version # humann2 v2.8.1 - metaphlan2.py -v # MetaPhlAn version 2.7.5 (6 February 2018) - diamond help # v0.8.22.84 - -方法1. Conda导入和导出环境 - - # 安装conda-pack - conda install -c conda-forge conda-pack - #conda 安装不成功可用pip安装 - # pip conda-pack - # 安装好的环境下打包导出 - conda pack -n humann2 -o humann2.tar.gz - - # 新建文件夹存放humann2环境 - mkdir -p ~/miniconda3/envs/humann2 - tar -xzf humann2.tar.gz -C ~/miniconda3/envs/humann2 - # 激活环境 - source ~/miniconda3/envs/humann2/bin/activate - -测试流程是否可用 - - humann2_test - -### HUMAnN2物种和功能数据库 - -显示可用分类、泛基因组和功能数据库 - - humann2_databases - -安装数据库(注:数据库下载慢或失败,附录有国内备份链接) - - cd ${db} - mkdir -p ${db}/humann2 # 建立下载目录 - # 输助比对数据库 593MB - humann2_databases --download utility_mapping full ${db}/humann2 - # 微生物泛基因组 5.37 GB - humann2_databases --download chocophlan full ${db}/humann2 - # 功能基因diamond索引 10.3 GB - humann2_databases --download uniref uniref90_diamond ${db}/humann2 - - # 设置数据库位置 - # 显示参数 - humann2_config --print - # 如修改线程数,推荐3-8,根据实际情况调整 - humann2_config --update run_modes threads 3 - humann2_config --update database_folders utility_mapping ${db}/humann2/utility_mapping - humann2_config --update database_folders nucleotide ${db}/humann2/chocophlan - humann2_config --update database_folders protein ${db}/humann2 - # metaphlan2数据库默认位于程序所在目录的db_v20和databases下各一份 - humann2_config --print - -### Microbiome helper - -主页:https://github.com/mlangill/microbiome_helper - -下载并安装 - - # 下载、解压 、添加环境变量 - wget -c https://github.com/LangilleLab/microbiome_helper/archive/master.zip - unzip master.zip - export PATH=`pwd`/microbiome_helper-master:$PATH - # 写入bashrc永久添加环境 - echo "export PATH=`pwd`/microbiome_helper-master:\$PATH" >> ~/.bashrc - - # metaphlan_to_stamp.pl 这个脚本有修改,修改后的脚本在db/script/下,也在QQ群文件中 - #----修改的内容如下---------------------------------------- - # my @taxa_ranks=("Kingdom","Phylum","Class","Order","Family","Genus","Species", "Strain"); - > - # #start with assumption that this is not metaphlan2 - # my $metaphlan2_version=1; - #------------------------------------------------------ - -### 物种组成美化GraPhlAn - - # GraPhlAn核心程序包 - conda install graphlan=1.1.3 -c bioconda -y - graphlan.py --version # 1.1.3 (5 June 2018) - # GraPhlAn输入文件制作程序,如转换LEfSe、Metaphlan2结果格式为GraPhlAn用于绘图 - conda install export2graphlan # 38 KB - export2graphlan.py -h # 0.22 of 05 May 2020 - -### 生物标记鉴定和可视化LEfSe - - conda install lefse # 76.3 MB, 1.0.8.post1 - - # Rstudio中运行命令调用R版本问题的解决 - # 在Rstudio中默认调用Rstudio的R,具体写在/etc/rstudio/rserver.conf - # 或在R中用Sys.getenv()["R_HOME"] - # 在rpy2中print(robjects.r)可以查看其调用的r版本 - - # 指定lefse调用的R版本,需根据conda实际目录修改 - sed -i "2 i os.environ['R_HOME'] = '/conda/envs/meta/lib/R/'" \ - /conda/envs/meta/share/lefse-1.0.8.post1-1/lefse.py - -### 物种注释Kraken2 - -物种注释:基于LCA算法的物种注释kraken2 https://ccb.jhu.edu/software/kraken/ - -- 软件安装 - -安装方法1. 直接安装并查看版本 - - conda install kraken2 -c bioconda -y - kraken2 --version # 2.1.1 - conda install bracken=2.6.0 -c bioconda - -安装方法2. 新建环境安装并启动软件环境 - - conda create -n kraken2 -y -c bioconda kraken2 - conda activate kraken2 - conda install bracken=2.6.0 -c bioconda - # krakentools 0.1 补充脚本 - conda install krakentools -c bioconda - # krona绘图 - conda install krona -c bioconda - -安装方法3. conda导入和导出 - - # 从安装好的环境打包,此处为Ubuntu 16.04LTS - # conda pack -n kraken2 -o ~/db/kraken2/kraken2.tar.gz - # 添加权限,否则别人无法下载 - # chmod 777 ~/db/kraken2/kraken2.tar.gz - # 下载压缩包 - wget -c http://210.75.224.110/db/kraken2/kraken2.tar.gz - # 新建文件夹存放kraken2环境 - mkdir -p /conda2/envs/kraken2 - # 解压环境到指定目录 - tar -xzf kraken2.tar.gz -C /conda2/envs/kraken2 - # 激活环境 - source /conda2/envs/kraken2/bin/activate - -- 数据库 - -下载数据库(NCBI每2周更新一次),记录下载日期和大小。需根据服务器内存、使用目的选择合适方案。--standard标准模式下只下载5种数据库:古菌archaea、细菌bacteria、人类human、载体UniVec_Core、病毒viral。也可选直接下载作者构建的索引,还包括bracken的索引。 - -- 方法1. 数据库安装 - -方案1. 标准库安装,下载数据~100GB,时间由网速决定,索引5h,多线程可加速至1h完成 - - cd ${db} - d=210122 - mkdir -p kraken2/$d && cd kraken2/$d - kraken2-build --standard --threads 24 --db ./ - -方案2. 自定义微生物数据库,如标准+真菌+原生动物+质粒 - - cd ${db} - d=210122 - mkdir -p kraken2/$d && cd kraken2/$d - # 下载物种注释 - kraken2-build --download-taxonomy --threads 24 --db ./ - # 下载数据库 - for i in archaea bacteria UniVec_Core viral human fungi plasmid protozoa; do - kraken2-build --download-library $i --threads 24 --db ./ - done - # 确定的库建索引 - kraken2-build --build --threads 24 --db ./ - -- 方法1. 数据库下载 - -下载标准+原生动物+真菌+植物8GB(PlusPFP-8)数据库,包括kraken2和bracken2的索引。更多版本数据库详见:https://benlangmead.github.io/aws-indexes/k2 。 - -方案1. 迷你库(8G) - - # 压缩包5.2G, - wget -c https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_8gb_20201202.tar.gz - # 备用地址: - # wget -c http://210.75.224.110/db/kraken2/k2_pluspfp_8gb_20201202.tar.gz - tar xvzf k2_pluspfp_8gb_20201202.tar.gz - -方案2. 完整库(8G) - - # 压缩包70G, - d=20201202 - mkdir ${d} && cd ${d} - wget -c https://genome-idx.s3.amazonaws.com/kraken/k2_pluspfp_20201202.tar.gz - tar xvzf k2_pluspfp_20201202.tar.gz - - -## 3基因组拼接、注释和定量 - -### 拼接megahit/metaSPAdes - - # 快速组装megahit - conda install megahit - megahit -v # v1.2.9 - - # metaSPAdes拼接,只是spades系列中的一个定制脚本 - conda install spades # 12.8 MB - metaspades.py -v # v3.14.0 [metaSPAdes mode] - -### 组装评估QUEST - - conda install quast -y # 87.2 MB - metaquast.py -v # QUAST v5.0.2 (MetaQUAST mode) - -### 基因预测prokka - - # 细菌基因组注释prokka - conda install prokka -y # 352.8 MB - prokka -v # 1.14.6 - -### 非冗余基因集cd-hit - - conda install cd-hit # 790 KB - cd-hit -v # 4.8.1 (built on May 14 2019) - - # emboss transeq工具,93.9 MB - conda install emboss -y - embossversion # 6.6.0.0 - -### 定量工具salmon - - conda install salmon -y # 17.8 MB - salmon -v # 1.3.0 - - -## 4基因功能注释 - -### KEGG层级注释 - -https://www.kegg.jp/kegg-bin/show_brite?ko00001.keg 下载htext - - # 转换ABCD为列表 - kegg_ko00001_htext2tsv.pl -i ko00001.keg -o ko00001.tsv - # 统计行数,2021.1月版55761行,整理后为55103个条目 - wc -l ko00001.* - # 统计各级数量, /54/527/23917 - for i in `seq 1 2 8`;do - cut -f ${i} ko00001.tsv|sort|uniq|wc -l ; done - # 生成KO编号和注释列表 - cut -f 7,8 ko00001.tsv|sort|uniq|sed '1 i KO\tDescription' \ - > KO_description.txt - # KO与通路(Pathway)对应表,用于合并D级为C级 - awk 'BEGIN{FS=OFS="\t"} {print $7,$6}' ko00001.tsv | sed '1 i KO\tpathway' \ - > KO_path.list - - -### 蛋白同源综合注释eggNOG - -eggNOG http://eggnogdb.embl.de - - # 安装eggnog比对工具emapper - conda install eggnog-mapper=2.0.1 -y -c bioconda - emapper.py --version # 2.0.1 - - # 下载常用数据库,注意设置下载位置 - mkdir -p ${db}/eggnog5 && cd ${db}/eggnog5 - # -y默认同意,-f强制下载,eggnog.db.gz 7.9G+4.9G - download_eggnog_data.py -y -f --data_dir ./ - - # 下载方式2(可选):链接直接下载 - wget -c http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog.db.gz # 7.9G - wget -c http://eggnog5.embl.de/download/emapperdb-5.0.0/eggnog_proteins.dmnd.gz # 4.9G - gunzip *.gz - - # 如果内存够大,复制eggNOG至内存加速比对 - # cp eggnog.db /dev/shm - # 手工整理COG分类注释 - wget -c http://210.75.224.110/share/COG.anno - # 手工整理KO注释 - wget -c http://210.75.224.110/share/KO.anno - - - -### CAZy碳水化合物 - - # dbCAN2 http://bcb.unl.edu/dbCAN2 - # 创建数据库存放目录并进入 - mkdir -p ${db}/dbCAN2 && cd ${db}/dbCAN2 - # 下载序列和描述 - wget -c http://bcb.unl.edu/dbCAN2/download/CAZyDB.07312020.fa - wget -c http://bcb.unl.edu/dbCAN2/download/Databases/CAZyDB.07302020.fam-activities.txt - # 备用数据库下载地址并解压 - #wget -c http://210.75.224.110/db/dbcan2/CAZyDB.07312020.fa.gz - #gunzip CAZyDB.07312020.fa.gz - # diamond建索引,800M,1m - diamond --version # 0.8.22/2.0.5 - time diamond makedb \ - --in CAZyDB.07312020.fa \ - --db CAZyDB.07312020 - # 压缩原始数据节约空间 - gzip CAZyDB.07312020.fa - # 提取fam对应注释 - grep -v '#' CAZyDB.07302020.fam-activities.txt \ - |sed 's/ //'| \ - sed '1 i CAZy\tDescription' \ - > CAZy_description.txt - -### 抗生素抗性基因CARD - - # 官网:https://card.mcmaster.ca - # Bioconda: http://bioconda.github.io/recipes/rgi/README.html - # Github: https://github.com/arpcard/rgi - -软件安装 - - # 方法1. Cona安装rgi - conda install --channel bioconda rgi - - # 方法2. 指定环境安装rgi - conda create -n rgi -c bioconda rgi - - # 方法3. 从其他安装的环境导出和导入 - # 安装好的环境下打包导出,262M - conda pack -n rgi -o rgi.tar.gz - # 下载软件包 - wget -c http://210.75.224.110/db/card/rgi.tar.gz - # 新建文件夹存放rgi环境 - mkdir -p ~/miniconda2/envs/rgi - tar -xzf rgi.tar.gz -C ~/miniconda3/envs/rgi - # 激活环境 - source ~/miniconda2/envs/rgi/bin/activate - -数据库部署 - - # 下载最新版数据库,2.8M - wget -c https://card.mcmaster.ca/latest/data - # 解压后20M - tar -xvf data card.json - # wget -c http://210.75.224.110/db/card/card.json - # 加载数据库 - rgi load --card_json card.json - - # 宏基因组分析扩展数据库和加载 - rgi card_annotation -i card.json - rgi load -i card.json --card_annotation card_database_v3.1.0.fasta - - -### 抗生素抗性基因Resfam - - # http://dantaslab.wustl.edu/resfams - mkdir -p ${db}/resfam && cd ${db}/resfam - # 官网的数据格式非常混乱, 推荐下载我手动整理的索引和注释 - wget http://210.75.224.110/share/Resfams-proteins.dmnd # 1.5 MB - wget http://210.75.224.110/share/Resfams-proteins_class.tsv # 304 KB - - -## 5分箱工具 - -### metawrap分箱和提纯 - - # 物种注释和分箱流程 https://github.com/bxlab/metaWRAP - conda create -y -n metawrap python=2.7 # 22.2MB - conda activate metawrap - conda config --add channels ursky - conda install -y -c ursky metawrap-mg # 1.14 GB, v1.2 - - # 相关数据库,大小近300GB - # 这里我们安装数据库到`~/db`目录,保证你有权限, - # 但要保证至少有500GB的空间。请根据你的情况修改为自己有权限且空间足够的位置。 - # 多人使用,建议管理员统一安装节省空间 - cd ${db} - - ## CheckM用于Bin完整和污染估计和物种注释 - mkdir -p checkm && cd checkm - # 下载文件275 MB,解压后1.4 GB - wget -c https://data.ace.uq.edu.au/public/CheckM_databases/checkm_data_2015_01_16.tar.gz - # 国内备用链接 - # wget -c http://210.75.224.110/share/meta/checkm/checkm_data_2015_01_16.tar.gz - tar -xvf *.tar.gz - # rm *.gz - # 设置数据库位置 - checkm data setRoot - # 按提示输出你数据下载的路径或直接回车默认为当前位置 - - ## NCBI_nt核酸序列用于bin物种注释 - # 41GB,我下载大约12h;解压后99GB - cd ${db} - mkdir -p NCBI_nt && cd NCBI_nt - wget -c "ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.*.tar.gz" - # 备用下载链接,或百度云下载 - # wget -c http://210.75.224.110/share/meta/NCBI_nt/filelist.txt - # for a in `cat filelist.txt`; do wget -c http://210.75.224.110/share/meta/NCBI_nt/$a; done - for a in nt.*.tar.gz; do tar xzf $a; done & - - ## NCBI物种信息 - # 压缩文件45M,解压后351M - cd ${db} - mkdir NCBI_tax - cd NCBI_tax - wget ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz - tar -xvf taxdump.tar.gz - - ## 人类基因组去宿主 - cd ${db} - mkdir -p metawrap/BMTAGGER && cd metawrap/BMTAGGER - wget -c ftp://hgdownload.soe.ucsc.edu/goldenPath/hg38/chromosomes/*fa.gz - gunzip *fa.gz - cat *fa > hg38.fa - rm chr*.fa - # 上方下载太慢,使用国内备份链接手动下载 - wget -c http://210.75.224.110/share/meta/metawrap/BMTAGGER/hg38.fa - bmtool -d hg38.fa -o hg38.bitmask - srprism mkindex -i hg38.fa -o hg38.srprism -M 100000 - - ## KRAKEN物种注释数据库 - # 下载建索引需要 > 300GB以上空间,完成后占用192GB空间 - cd ${db} - mkdir -p kraken - kraken-build --standard --threads 24 --db kraken > log & - kraken-build --db kraken --clean - # 手动下载 - cd kraken - wget -c http://210.75.224.110/share/meta/kraken/database.kdb - wget -c http://210.75.224.110/share/meta/kraken/database.idx - mkdir -p taxonomy && cd taxonomy - wget -c http://210.75.224.110/share/meta/kraken/taxonomy/nodes.dmp - wget -c http://210.75.224.110/share/meta/kraken/taxonomy/names.dmp - # 从其它位置复制 - # cp -r /db/kraken/* ./ - - ## 数据库位置设置 - which config-metawrap - # 配置文件通常为~/miniconda2/envs/metawrap/bin/config-metawrap - # 使用Rstudio/vim等文本编辑器来修改数据库的位置 - -### derep基因组去冗余 - -挑单菌测序的基因组存在大量冗余。 - -metawrap混合分箱的结果中冗余度非常低,甚至无冗余。而单样本、分批次分箱的结果中存在大量冗余,需要采用derep分箱获得非冗余的基因组。 - - conda create -n drep - conda activate drep - conda install drep -c bioconda - - -### GTDB细菌基因组注释和进化分析 - -Github: https://github.com/Ecogenomics/GTDBTk - -GTDB-Tk是一个软件工具包,用于根据基因组数据库分类法GTDB为细菌和古细菌基因组分配客观的分类法。它旨在与最近的进展一起使用,从而可以直接对环境样本中获得数百或数千个由基因组组装的基因组(MAG)进行物种分类注释。它也可以用于分离和单细胞的基因组物种注释。 - -本次测试版本为 GTDB-Tk v1.3.0,于2020年7月17发布,参考数据为95版。 - -硬件要求: - -内存100Gb - -硬盘27Gb - -64核1小时可分析1000个细菌基因组 - -Conda安装: - - conda create -n gtdbtk - conda activate gtdbtk - # gtdbtk-1.3.0, 2020-9-27 - conda install -c bioconda gtdbtk - -download-db.sh自动下载数据库,将下载至conda中的envs/gtdbtk/share/gtdbtk-1.3.0/db/: - - download-db.sh - -(可选)手动下载和配置GTDB参考基因组最新版(测试时为95版,34Gb) - - mkdir -p ~/db/gtdb & cd ~/db/gtdb - # 下载解压 - wget -c https://data.ace.uq.edu.au/public/gtdb/data/releases/latest/auxillary_files/gtdbtk_data.tar.gz - tar zxvf gtdbtk_data.tar.gz - # 设置数据库位置,注意修改软件安装位置 - locate gtdbtk.sh # 查找配置文件位置 - # 修改PATH=后面的路径为数据库解压目录,如/home/meta/db/gtdb/release95/ - vim /conda/envs/gtdbtk/etc/conda/activate.d/gtdbtk.sh - -此外:GTDB数据库国内下载备份链接见 http://nmdc.cn/datadownload - - -## 6 其它 - - # 按注释类型合并脚本,链接 https://github.com/YongxinLiu/Metagenome - cd ${db} - mkdir script && cd script - # 矩阵按最后列注释合并的脚本,如Gene-KO-Module-Pathway的合并 - wget http://210.75.224.110/share/meta/script/mat_gene2ko.R - # 基于Kraken2的结果计算alpha多样性 - wget http://210.75.224.110/share/meta/script/kraken2alpha.R - # 基于alpha多样性和分组信息绘制箱线图 - wget http://210.75.224.110/share/meta/script/alpha_boxplot.R - chmod +x *.R - - - # Bin可视化VizBin (可选) - 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 - mv VizBin-dist.jar /usr/local/bin # 或~/bin - - # 比对结果整理samtools - conda install samtools - - ### CARD(选学) https://card.mcmaster.ca/download - # 方法1. 直接conda安装 - conda install --channel bioconda rgi - # 方法2. 虚拟环境安装 - conda activate metawrap - conda install --channel bioconda rgi - rgi main -v # 4.0.3 - # rgi教程 https://github.com/arpcard/rgi - - - -## 附录 - -### 数据库国内下载链接 - -- 方法1:国家微生物科学数据中心 —— 数据下载 - -http://nmdc.cn/datadownload - -本资源由宏基因组平台发起,微生物所提供服务器,宏基因组团队负责维护的常用软件、扩增子和宏基因组数据库的国内下载链接,解决常用数据库下载慢、或无法下载的问题。同时提供定制的软件、数据库索引,节约大家下载时间,节省数据库编制索引的计算资源消耗。 - -- 方法2:刘永鑫Github中的备用百度云/下载链接索引 - -详细下载链接和说明见:https://github.com/YongxinLiu/MicrobiomeStatPlot/blob/master/Data/BigDataDownlaodList.md - -下载的tar.gz压缩包,可放置于指定目录,使用`tar -xvzf *.tar.gz`解压 - -个人网站备用下载链接,带宽有限,推荐官方、数据中心和百度云失败再尝试此法 - - # humann3 - site=http://210.75.224.110/db - wget -c ${site}/humann3/full_chocophlan.v296_201901.tar.gz - wget -c ${site}/humann3/uniref90_annotated_v201901.tar.gz - wget -c ${site}/humann3/full_mapping_v201901.tar.gz - mkdir -p chocophlan uniref utility_mapping - tar xvzf full_chocophlan.v296_201901.tar.gz -C chocophlan/ - tar xvzf uniref90_annotated_v201901.tar.gz -C uniref/ - tar xvzf full_mapping_v201901.tar.gz -C utility_mapping/ - -大文件的分卷压缩和解压 以kraken2 hash.k2d为例 - - cd ~/db/kraken2_200706 - # https://www.cnblogs.com/wang--lei/p/9046643.html - # 文件夹kraken2idx/打包压缩,1h - tar -zcvf kraken2.tar.gz kraken2idx/ - # b分割为指定大小文件G/M/K,-d数字,a序列长度,输入和输出前缀 - split -b 13G -d -a 1 kraken2.tar.gz kraken2.tar.gz. - # 一行命令 - tar -zcvf kraken2.tar.gz kraken2idx/ | split -b 19G -d -a 1 - kraken2.tar.gz. - # 分割后解压缩 - cat kraken2.tar.gz.* | tar -zxv - - # 附tar打包用法 - 单个文件压缩打包 tar -czvf my.tar.gz file1 - 多个文件压缩打包 tar -czvf my.tar.gz file1 file2 file*)(也可以给file*文件mv 目录在压缩) - 单个目录压缩打包 tar -czvf my.tar.gz dir1 - 多个目录压缩打包 tar -czvf my.tar.gz dir1 dir2 - 解包至当前目录:tar -xzvf my.tar.gz - - -### conda批量安装软件 - - conda install -y fastqc multiqc kneaddata=0.6.1 humann2 graphlan export2graphlan lefse kraken2 megahit spades quast prokka cd-hit emboss salmon eggnog-mapper samtools - -### kneaddata常见问题 - -#### kneaddata运行提示java版本不支持 - - # 解决思路,新建虚拟环境,安装kneaddata,再安装对应java版本 - # 务必指定2.7,软件依赖2.7的python,但conda会自动安装3.6,运行报错 - conda create -n kneaddata python=2.7 - conda activate kneaddata - conda install openjdk=8.0.152 - conda install kneaddata=0.6.1 - -#### kneaddata质控双端结果不成对 - - # 0.7.4存在对旧格式fastq去宿主后数据极少或双端数据不对称,可指定版本安装0.6.1 - conda remove kneaddata - conda install kneaddata=0.6.1 # 175 MB - -### humann2数据库无法下载备用链接 - - # 可选:链接直接下载、百度云链接(宏基因组公众号回复:数据库)或国内备份链接 - mkdir -p ${db}/humann2/chocophlan && cd ${db}/humann2/chocophlan - wget -c http://210.75.224.110/share/meta/full_chocophlan_plus_viral.v0.1.1.tar.gz - tar xvzf full_chocophlan_plus_viral.v0.1.1.tar.gz - # uniref90和50任选其1,推荐uniref90更全5.9 GB - cd ${db}/humann2 - wget -c http://210.75.224.110/share/meta/uniref90_annotated_1_1.tar.gz - tar xvzf uniref90_annotated_1_1.tar.gz - # 内存<32G内存选uniref5 (2.5 GB) - # wget -c http://210.75.224.110/share/meta/uniref50_annotated_1_1.tar.gz - # tar xvzf uniref50_annotated_1_1.tar.gz - # 不要同一文件中有两个文件,会先比90,再比50出现混乱 - -### Metaphlan2数据库找不到 - - # 下载并构建索引 - mkdir -p ${db}/metaphlan2 && cd ${db}/metaphlan2 - wget -c http://210.75.224.110/share/meta/metaphlan2/mpa_v20_m200.tar - tar xvf mpa_v20_m200.tar - bzip2 -d mpa_v20_m200.fna.bz2 - bowtie2-build mpa_v20_m200.fna mpa_v20_m200 - # 链接到软件安装目录 - mkdir -p ${soft}/envs/metagenome_env/bin/db_v20 - ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/db_v20/ - mkdir -p ${soft}/envs/metagenome_env/bin/databases - ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/databases/ - -### Kraken2 - -#### 定制数据库 - -官方教程详见 https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown - -设定数据库日期为版本,建立数据库目录 - - d=200918 - cd ~/db - mkdir -p kraken2/$d && cd kraken2/$d - -下载物种名信息表,gb 1.8G; wgs 3.3G; 解压后大小为9.2/21G; taxdump 50M - - kraken2-build --download-taxonomy --threads 24 --db ./ - -序列数据库包括 archaea bacteria plasmid viral human fungi plant protozoa nr nt env_nr env_nt UniVec - -下载单个真菌库为例 - - i=fungi - kraken2-build --download-library $i --threads 24 --db ./ - # 批量下载数据库,除默认5种外新加植物、真菌、原生生物和质粒,下载需几小时-数天 archaea bacteria UniVec_Core viral human fungi plant - for i in protozoa plasmid; do - kraken2-build --download-library $i --threads 24 --db ./ - done - - # 建索引,4h, 40h;2h,40h - time kraken2-build --build --threads 24 --db ./ - - # 数据库大小,2020/4/12更新 - du -sh library/* - 918M archaea - 74G bacteria - 1.2G fungi - 3.1G human - 51G plant - 2.0G plasmid - 877M protozoa - 2.0M UniVec_Core - 310M viral - -#### Perl版本不对 - -常见问题:Perl版本不对,人工指定perl版本如下 - - PERL5LIB=~/miniconda2/envs/kraken2/lib/site_perl/5.26.2/x86_64-linux-thread-multi:~/miniconda2/envs/kraken2/lib/site_perl/5.26.2:~/miniconda2/envs/kraken2/lib/5.26.2/x86_64-linux-thread-multi:~/miniconda2/envs/kraken2/lib/5.26.2 - - -### salmon手动安装和使用方法 - - # 如不可用,尝试下载二进制和添加环境变量 - wget https://github.com/COMBINE-lab/salmon/releases/download/v0.14.0/salmon-0.14.0_linux_x86_64.tar.gz - tar xvzf salmon-0.14.0_linux_x86_64.tar.gz - cp -rf salmon-latest_linux_x86_64/ ${soft}/envs/metagenome_env/share/salmon - ${soft}/envs/metagenome_env/share/salmon/bin/salmon -v # 0.14.0 - - -## 1.10 2021.1.22 - -1. humann2添加utility_mapping数据库,支持生成KEGG表; -2. kraken2添加最小8G索引; -3. 添加KEGG注释、层级信息及整理代码 -4. 添加CARD数据库 diff --git a/2pipeline.sh b/2Pipeline.sh similarity index 75% rename from 2pipeline.sh rename to 2Pipeline.sh index 9c6aa6d..610ffd0 100644 --- a/2pipeline.sh +++ b/2Pipeline.sh @@ -1,1443 +1,1584 @@ -[TOC] - -# 宏基因组分析流程 Pipeline of metagenomic analysis - -- 版本 Version:1.10, 2021/1/22 -- 系统要求 System: Linux Ubuntu 16.04+ / CentOS 7+ -- 依赖软件 Sofware: (Rstudio server 1.1+)、KneadData v0.7.4、MetaPhlAn v2.7.5、HUMAnN2 v2.8.1、...... -- Chrome浏览器访问Rstudio服务器 - -# 一、数据预处理 Data preprocessing - -## 1.1 准备工作 Prepare - -- 首次使用请参照`1soft_db.sh`脚本,安装软件和数据库(大约3-5天) -- EasyMetagenome项目Github或服务器家目录(~)有项目文件夹meta, - -1. 包含测序数据(seq/*.fq.gz)和和实验设计(result/metadata.txt); 若无可手动从备份U盘或之前项目上传; -2. 使用谷歌浏览器访问RStudio服务器,内部服务器具体IP地址课上通知; -3. 以下段落代码新建项目,右侧File中进入项目目录并上传流程文件pipeline.sh,再单击打开。 - -### 1.1.1 环境变量设置(每次开始分析前必须运行) - -设置数据库、软件和工作目录 - - # 公共数据库database(db)位置,如管理员设置/db,个人下载至~/db - db=/db - # Conda软件software安装目录,`conda env list`命令查看,如~/miniconda2 - soft=/conda2 - # 设置工作目录work directory(wd),如meta - wd=~/meta - # 创建并进入工作目录 - mkdir -p $wd && cd $wd - - # 方法1.加载自己安装环境 - # conda activate metagenome_env - - # 方法2.加载别人安装环境 - export PATH=${soft}/envs/metagenome_env/bin/:$PATH - source ${soft}/bin/activate metagenome_env - - # 指定某个R语言环境 - alias Rscript="/anaconda2/bin/Rscript --vanilla" - -### 1.1.2 起始文件——序列和元数据 - -创建3个常用子目录:序列,临时文件和结果 - - mkdir -p seq temp result - # 上传实验设计(元数据) metadata.txt 于结果result目录 - wget http://210.75.224.110/temp/meta/meta2010/result/metadata.txt -O result/metadata.txt - # 检查文件格式,^I为制表符,$为Linux换行,^M$为Windows回车,^M为Mac换行符 - cat -A result/metadata.txt - # 转换Windows回车为Linux换行 - sed -i 's/\r//' result/metadata.txt - cat -A result/metadata.txt - -用户使用filezilla上传测序文件至seq目录,本次从其它位置复制,或从网络下载测试数据 - - # 方法1. 从其它目录复制测序数据 - cp -rf /db/meta2101/seq/*.gz seq/ - - # 方法2. 网络下载测试数据 - cd seq/ - awk '{system("wget -c http://210.75.224.110/temp/meta/meta2010/seq/"$1"_1.fq.gz")}' \ - <(tail -n+2 ../result/metadata.txt) - awk '{system("wget -c http://210.75.224.110/temp/meta/meta2010/seq/"$1"_2.fq.gz")}' \ - <(tail -n+2 ../result/metadata.txt) - cd .. - - # 查看文件大小 - ls -lsh seq - # -l 列出详细信息 (l: list) - # -sh 显示人类可读方式文件大小 (s: size; h: human readable) - -### 1.1.3 了解工作目录和文件 - -显示文件结构 - - tree -L 2 - # . - # ├── pipeline.sh - # ├── result - # │ └── metadata.txt - # ├── seq - # │ ├── C1_1.fq.gz - # │ ├── C1_2.fq.gz - # │ ├── N1_1.fq.gz - # │ └── N1_2.fq.gz - # └── temp - -- pipeline.sh是分析流程代码; -- seq目录中有12个样本Illumina双端测序,24个序列文件; -- temp是临时文件夹,存储分析中间文件,结束可全部删除节约空间 -- result是重要节点文件和整理化的分析结果图表, -- 实验设计metadata.txt也在此 - - -## 1.2 (可选)FastQC质量评估 - - # 第一次使用软件要记录软件版本,文章方法中必须写清楚 - fastqc --version # 0.11.8 - # time统计运行时间,此处耗时1m,fastqc质量评估 - # *.gz为原始数据,-t指定多线程 - time fastqc seq/*.gz -t 2 - -质控报告见`seq`目录,详细解读请阅读[《数据的质量控制软件——FastQC》](https://mp.weixin.qq.com/s/tDMih7ISLJcL4F4sWBq3Vw)。 - -multiqc将fastqc的多个报告生成单个整合报告,方法批量查看和比较 - - # 记录软件版本 - multiqc --version # 1.5 - # 整理seq目录下fastqc报告,输出multiqc_report.html至result/qc目录 - multiqc -d seq/ -o result/qc - -查看右侧result/qc目录中multiqc_report.html,单击,选择`View in Web Browser`查看可交互式报告。 - -## 1.3 KneadData质控和去宿主 - -kneaddata是流程,它主要依赖trimmomatic质控和去接头,bowtie2比对宿主,然后筛选非宿主序列用于下游分析 。 - - # 记录核心软件版本 - kneaddata --version # 0.6.1 - trimmomatic -version # 0.39 - bowtie2 --version # 2.3.5 - # 可只选一行中部分代码点击Run,如选中下行中#号后面命令查看程序帮助 - # kneaddata -h # 显示帮助 - -检查点:zless/zcat查看压缩测序数据,检查序列质量格式(质量值为大写字母为标准Phred33格式 ,小写字母可能可能有Phred64需要使用fastp转换);检查双端序列ID是否重复,如果重名需要在质控前改名更正。参考**附录,质控kneaddata,去宿主后双端不匹配——序列改名**。 - - # 设置某个样本名为变量i,以后再无需修改 - i=C1 - # zless查看压缩文件,空格翻页,按q退出。 - zless seq/${i}_1.fq.gz | head -n4 - # zcat显示压缩文件,head指定显示行数 - zcat seq/${i}_2.fq.gz | head -n4 - -- | 为管道符,上一个命令的输出,传递给下一个命令做输入 -- gzip: stdout: Broken pipe:管道断开。这里是人为断开,不是错误 -- 运行过程中需要仔细阅读屏幕输出的信息 - -### 1.3.1 (可选)单样品质控 - -若一条代码分割在多行显示时,最好全部选中运行,多行分割的代码行末有一个 “\” 。多行注释命令运行,可全选,按Ctrl+Shift+C进行注释的取消和添加。 - -- 以metadata中`C1`样品本质控为例 - -1. 输入文件:双端FASTQ测序数据,提供给参数-i,seq/${i}_1.fq.gz和 seq/${i}_2.fq.gz -2. 参考数据库:宿主基因组索引 -db ${db}/kneaddata/human_genome/Homo_sapiens -3. 输出文件:质控后的FASTQ测序数据,在目录temp/qc下面,${i}_1_kneaddata_paired_1.fastq和${i}_1_kneaddata_paired_1.fastq,用于后续分析 -4. 软件位置:`conda env list`查看软件安装位置,请务必根据自己软件和数据库安装位置,修改软件trimmomatic和接头文件位置。 - -(可选)手动设置trimmomatic程序和接头位置 - - 如:${soft}/envs/metagenome_env/share/trimmomatic/ - # 查看multiqc结果中接头污染最严重的样本,再到fastqc报告中查看接头序列,复制前20个碱基检索确定接头文件 - grep 'GATCGGAAGAGCACACGTCT' ${soft}/envs/metagenome_env/share/trimmomatic/adapters/* - # 根据实际情况选择单端SE或双端PE,一般为 TruSeq3-PE-2.fa,更准确的是问测序公司要接头文件 - -100万条序列8线程质控和去宿主,耗时~2m。 - - mkdir -p temp/qc - time kneaddata -i seq/${i}_1.fq.gz -i seq/${i}_2.fq.gz \ - -o temp/qc -v -t 8 --remove-intermediate-output \ - --trimmomatic /conda2/envs/metagenome_env/share/trimmomatic/ \ - --trimmomatic-options 'ILLUMINACLIP:/conda2/envs/metagenome_env/share/trimmomatic/adapters/TruSeq3-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50' \ - --bowtie2-options '--very-sensitive --dovetail' -db ${db}/kneaddata/human_genome/Homo_sapiens - # 查看质控后的结果文件 - ls -shtr temp/qc/${i}_1_kneaddata_paired_?.fastq - -### 1.3.1 多样品并行质控 - -并行队列管理软件——“parallel”。 - - # 记录软件版本 - parallel --version # 20190522 - # 打will cite承诺引用并行软件parallel - parallel --citation - -parallel软件说明和使用实例 - - # 根据样本列表`:::`并行处理,并行j=2个任务,每个任务t=3个线程,2~7m - # 运行下面这行,体会下parallel的工作原理 - # ::: 表示传递参数;第一个::: 后面为第一组参数,对应于{1}; - # 第二个::: 后面为第二组参数,对应于{2},依次替换 - parallel -j 3 --xapply "echo {1} {2}" ::: seq/*_1.fq.gz ::: seq/*_2.fq.gz - # --xapply保持文件成对,否则将为两两组合,显示如下: - parallel -j 2 "echo {1} {2}" ::: seq/*_1.fq.gz ::: seq/*_2.fq.gz - # 从文件列表使用 - parallel -j 3 --xapply "echo seq/{1}_1.fq.gz seq/{1}_2.fq.gz" ::: `tail -n+2 result/metadata.txt|cut -f1` - -并行质控和去宿主:单样本运行成功,且参数设置绝对路径。出现错误`Unrecognized option: -d64`参考**附录,质控Kneaddata,Java版本不匹配——重装Java运行环境**。 - - # 每步分析产生多个文件时新建子文件夹 - mkdir -p temp/qc - # 每个线程处理百万序列约10分钟,多线程可加速 j x t 倍 - time parallel -j 2 --xapply \ - "kneaddata -i seq/{1}_1.fq.gz \ - -i seq/{1}_2.fq.gz \ - -o temp/qc -v -t 9 --remove-intermediate-output \ - --trimmomatic ${soft}/envs/metagenome_env/share/trimmomatic/ \ - --trimmomatic-options 'ILLUMINACLIP:TruSeq3-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50' \ - --bowtie2-options '--very-sensitive --dovetail' \ - -db ${db}/kneaddata/human_genome/Homo_sapiens" \ - ::: `tail -n+3 result/metadata.txt|cut -f1` - - # (可选)大文件清理,高宿主含量样本可节约>90%空间 - rm -rf temp/qc/*contam* temp/qc/*unmatched* - -质控结果汇总 - - # 采用kneaddata附属工具kneaddata_read_count_table - kneaddata_read_count_table \ - --input temp/qc \ - --output temp/kneaddata.txt - # 筛选重点结果列 - cut -f 1,2,4,12,13 temp/kneaddata.txt | sed 's/_1_kneaddata//' > result/qc/sum.txt - cat result/qc/sum.txt - - # 用R代码统计下质控结果 - Rscript -e "data=read.table('result/qc/sum.txt', header=T, row.names=1, sep='\t'); summary(data)" - # R转换宽表格为长表格 - Rscript -e "library(reshape2); data=read.table('result/qc/sum.txt', header=T,row.names=1, sep='\t'); write.table(melt(data), file='result/qc/sum_long.txt',sep='\t', quote=F, col.names=T, row.names=F)" - cat result/qc/sum_long.txt - # 可用 http://www.ehbio.com/ImageGP/ 绘图展示 - -## 1.4 (可选)质控后质量评估 - -整理bowtie2, trimmomatic, fastqc报告,接头和PCR污染率一般小于1%。结果见:result/qc/multiqc_report_1.html - - # 1-2m - fastqc temp/qc/*_1_kneaddata_paired_*.fastq -t 4 - multiqc -d temp/qc/ -o result/qc/ - # v1.7以后开始使用Python3,v1.9缺少bowtie2比对结果的统计 - - -# 二、基于读长分析 Read-based (HUMAnN2) - -中文教程:https://mp.weixin.qq.com/s/XkfT5MAo96KgyyVaN_Fl7g - -英文教程:https://github.com/LangilleLab/microbiome_helper/wiki/Metagenomics-Tutorial-(Humann2) - - -## 2.1 准备HUMAnN2输入文件 - -小技巧:循环批量处理样本列表 - - # 基于样本元数据提取样本列表命令解析 - # 去掉表头 - tail -n+2 result/metadata.txt - # 提取第一列样本名 - tail -n+2 result/metadata.txt|cut -f 1 - # 循环处理样本 - for i in `tail -n+2 result/metadata.txt|cut -f1`;do echo "Processing "$i; done - # ` 反引号为键盘左上角Esc键下面的按键,一般在数字1的左边,代表运行命令返回结果 - -HUMAnN2要求双端序列合并的文件作为输入,for循环根据实验设计样本名批量双端序列合并。注意星号和问号,分别代表多个和单个字符,当然大家更不能溜号~~~行分割的代码行末有一个 \ - - mkdir -p temp/concat - # 双端合并为单个文件 - for i in `tail -n+2 result/metadata.txt|cut -f1`;do - cat temp/qc/${i}*_1_kneaddata_paired_?.fastq \ - > temp/concat/${i}_all.fq; - done - # 取子集,如统一取为6G,1.6亿行,此处取20万行演示流程 - for i in `tail -n+2 result/metadata.txt|cut -f1`;do - head -n800000 temp/concat/${i}_all.fq > temp/concat/${i}.fq - done - # 查看样品数量和大小 - ls -sh temp/concat/*.fq - -## 2.2 HUMAnN2计算物种和功能组成 - -- 物种组成调用MetaPhlAn2, bowtie2比对至核酸序列,解决有哪些微生物存在的问题; -- 功能组成为humann2调用diamond比对至蛋白库11Gb,解决这些微生物参与哪些功能通路的问题; -- 输入文件:temp/concat/*.fq 每个样品质控后双端合并后的fastq序列 -- 输出文件:temp/humann2/ 目录下 - - C1_pathabundance.tsv - - C1_pathcoverage.tsv - - C1_genefamilies.tsv -- 整合后的输出: - - result/metaphlan2/taxonomy.tsv 物种丰度表 - - result/metaphlan2/taxonomy.spf 物种丰度表(用于stamp分析) - - result/humann2/pathabundance_relab_unstratified.tsv 通路丰度表 - - result/humann2/pathabundance_relab_stratified.tsv 通路物种组成丰度表 - - stratified(每个菌对此功能通路组成的贡献)和unstratified(功能组成) - -(可选)启动humann2环境:仅humann2布置于自定义环境下使用 - - # 方法1. conda加载环境 - # conda activate humann2 - # 方法2. source加载指定 - # source ~/miniconda3/envs/humann2/bin/activate - -(可选)检查数据库配置是否正确 - - humann2 --version # v2.8.1/0.11.2 - humann2_config - -(可选)单样本1.25M PE150运行测试,8p,2.5M,1~2h;0.2M, 34m;0.1M,30m;0.01M,25m - - mkdir -p temp/humann2 - i=C1 - time humann2 --input temp/concat/${i}.fq \ - --output temp/humann2 --threads 8 - -多样本并行计算 - - mkdir -p temp/humann2 - time parallel -j 2 \ - 'humann2 --input temp/concat/{}.fq \ - --output temp/humann2/ --threads 8 ' \ - ::: `tail -n+2 result/metadata.txt|cut -f1` > temp/log - cat temp/log - - # (可选)大文件清理,humann2临时文件可达原始数据30~40倍 - # 链接重要文件至humann2目录 - for i in `tail -n+2 result/metadata.txt|cut -f1`;do - ln temp/humann2/${i}_humann2_temp/${i}_metaphlan_bugs_list.tsv temp/humann2/ - done - # 删除临时文件 - # rm -rf temp/concat/* temp/humann2/*_humann2_temp - -## 2.3 物种组成表 - - mkdir -p result/metaphlan2 - -### 2.3.1 样品结果合并 - - # 合并、修正样本名、预览 - merge_metaphlan_tables.py \ - temp/humann2/*_metaphlan_bugs_list.tsv | \ - sed 's/_metaphlan_bugs_list//g' \ - > result/metaphlan2/taxonomy.tsv - head -n3 result/metaphlan2/taxonomy.tsv - - # (可选)筛选>0.5%的分类,绘制维恩图 - awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {for(i=2;i<=NF;i++) a[i]=$i;} \ - else {for(i=2;i<=NF;i++) if($i>0.5) print $1, a[i];}}' \ - result/metaphlan2/taxonomy.tsv \ - > result/metaphlan2/taxonomy_high.tsv - wc -l result/metaphlan2/taxonomy_high.tsv - -### 2.3.2 转换为stamp的spf格式 - - metaphlan_to_stamp.pl result/metaphlan2/taxonomy.tsv \ - > result/metaphlan2/taxonomy.spf - head -n3 result/metaphlan2/taxonomy.spf - # 下载metadata.txt和taxonomy.spf使用stamp分析 - # 网络分析见附录 metaphlan2 - 网络 - -### 2.3.3 (可选) Python绘制热图 - - # c设置颜色方案,top设置物种数量,minv最小相对丰度,s标准化方法,log为取10为底对数,xy为势图宽和高,图片可选pdf/png/svg格式 - metaphlan_hclust_heatmap.py \ - --in result/metaphlan2/taxonomy.tsv \ - --out result/metaphlan2/heatmap.pdf \ - -c jet --top 30 --minv 0.1 \ - -s log -x 0.4 -y 0.2 - # 帮助见 metaphlan_hclust_heatmap.py -h - -### 2.3.4 (可选) R绘制热图 - - # 推荐在Windows中运行 - # 若在服务器上,请保持工作目录不变,并修改R脚本目录位置 - - # 本地分析目录 - # 若在服务器上,这一句不需运行,已注释掉 - # cd /c/meta - # 调置脚本所有目录,服务器位于 /db/script/ 或 ~/db/script,windows为/c/meta/db/script - R=/db/script/ - - # 显示脚本帮助 help - Rscript ${R}/metaphlan_hclust_heatmap.R -h - - # 按指定列合并、排序并取Top25种绘制热图 - # -i输入MetaPhlAn2文件;-t 分类级别,-t 分类级别,可选Kingdom/Phylum/Class/Order/Family/Genus/Species/Strain,界门纲目科属种株,推荐门,目,属 - # -n 输出物种数量,默认为25,最大为合并后的数量 - # -o输出图表前缀,默认根据输入文件、物种级别和数量自动生成 - # 科水平Top25热图 - Rscript ${R}/metaphlan_hclust_heatmap.R \ - -i result/metaphlan2/taxonomy.spf \ - -t Family -n 25 \ - -w 183 -e 118 \ - -o result/metaphlan2/heatmap_Family - -## 2.4 功能组成分析 - - mkdir -p result/humann2 - -### 2.4.1 功能组成合并、标准化和分层 - -合并通路丰度(pathabundance),含功能和对应物种组成。可选基因家族(genefamilies 太多),通路覆盖度(pathcoverage)。注意看屏幕输出`# Gene table created: result/humann2/pathabundance.tsv` - - humann2_join_tables \ - --input temp/humann2 \ - --file_name pathabundance \ - --output result/humann2/pathabundance.tsv - # 样本名调整:删除列名多余信息 - head result/humann2/pathabundance.tsv - sed -i 's/_Abundance//g' result/humann2/pathabundance.tsv - head result/humann2/pathabundance.tsv - -标准化为相对丰度relab(1)或百万比cpm - - humann2_renorm_table \ - --input result/humann2/pathabundance.tsv \ - --units relab \ - --output result/humann2/pathabundance_relab.tsv - head -n5 result/humann2/pathabundance_relab.tsv - -分层结果:功能和对应物种表(stratified)和功能组成表(unstratified) - - humann2_split_stratified_table \ - --input result/humann2/pathabundance_relab.tsv \ - --output result/humann2/ - # 可以使用stamp进行统计分析 - -### 2.4.2 差异比较和柱状图 - -两样本无法组间比较,在pcl层面替换为HMP数据进行统计和可视化。 - -参考 https://bitbucket.org/biobakery/humann2/wiki/Home#markdown-header-standard-workflow - -- 输入数据:通路丰度表格 result/humann2/pathabundance.tsv -- 输入数据:实验设计信息 result/metadata.txt -- 中间数据:包含分组信息的通路丰度表格文件 result/humann2/pathabundance.pcl -- 输出结果:result/humann2/associate.txt - -在通路丰度中添加分组 - - ## 提取样品列表 - head -n1 result/humann2/pathabundance.tsv | sed 's/# Pathway/SampleID/' | tr '\t' '\n' > temp/header - ## 对应分组 - awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$2}NR>FNR{print a[$1]}' result/metadata.txt temp/header | tr '\n' '\t'|sed 's/\t$/\n/' > temp/group - # 合成样本、分组+数据 - cat <(head -n1 result/humann2/pathabundance.tsv) temp/group <(tail -n+2 result/humann2/pathabundance.tsv) \ - > result/humann2/pathabundance.pcl - -组间比较,样本量少无差异,结果为4列的文件:通路名字,通路在各个分组的丰度,差异P-value,校正后的Q-value。演示数据2样本无法统计,此处替换为HMP的结果演示统计和绘图(上传hmp_pathabund.pcl,替换pathabundance.pcl为hmp_pathabund.pcl)。 - - wget -c http://210.75.224.110/temp/meta/meta2010/result/humann2/hmp_pathabund.pcl -O result/humann2/hmp_pathabund.pcl - # 设置输入文件名 - pcl=result/humann2/hmp_pathabund.pcl - # 统计表格行、列数量 - csvtk -t stat ${pcl} - # 按分组KW检验 - humann2_associate --input ${pcl} \ - --focal-metadatum Group --focal-type categorical \ - --last-metadatum Group --fdr 0.05 \ - --output result/humann2/associate.txt - wc -l result/humann2/associate.txt - head -n5 result/humann2/associate.txt - -barplot展示腺苷核苷酸合成的物种组成 - - # --sort sum metadata 按丰度和分组排序 - # 指定差异通路,如 P163-PWY / PWY-3781 / PWY66-409 / PWY1F-823 - path=PWY-3781 - humann2_barplot --sort sum metadata \ - --input ${pcl} \ - --focal-feature ${path} \ - --focal-metadatum Group --last-metadatum Group \ - --output result/humann2/barplot_${path}.pdf - -### 2.4.3 转换为KEGG注释 - -需要下载utility_mapping数据库并配置成功才可以使用。详见软件和数据库安装1soft_db.sh。 - -支持GO、PFAM、eggNOG、level4ec、KEGG的D级KO等注释,详见`humann2_regroup_table -h`。 - - # 转换基因家族为KO(uniref90_ko),可选eggNOG(uniref90_eggnog)或酶(uniref90_level4ec) - for i in `tail -n+2 result/metadata.txt|cut -f1`;do - humann2_regroup_table \ - -i temp/humann2/${i}_genefamilies.tsv \ - -g uniref90_ko \ - -o temp/humann2/${i}_ko.tsv - done - # 合并,并修正样本名 - humann2_join_tables \ - --input temp/humann2/ \ - --file_name ko \ - --output result/humann2/ko.tsv - sed -i '1s/_Abundance-RPKs//g' result/humann2/ko.tsv - -## 2.5 GraPhlAn图 - - # metaphlan2 to graphlan - export2graphlan.py --skip_rows 1,2 -i result/metaphlan2/taxonomy.tsv \ - --tree temp/merged_abundance.tree.txt \ - --annotation temp/merged_abundance.annot.txt \ - --most_abundant 1000 --abundance_threshold 20 --least_biomarkers 10 \ - --annotations 3,4 --external_annotations 7 - # 参数说明见PPT,或运行 export2graphlan.py --help - # graphlan annotation - graphlan_annotate.py --annot temp/merged_abundance.annot.txt \ - temp/merged_abundance.tree.txt temp/merged_abundance.xml - # output PDF figure, annoat and legend - graphlan.py temp/merged_abundance.xml result/metaphlan2/graphlan.pdf \ - --external_legends - - -## 2.6 LEfSe差异分析和Cladogram - -- 输入文件:物种丰度表result/metaphlan2/taxonomy.tsv -- 输入文件:样品分组信息 result/metadata.txt -- 中间文件:整合后用于LefSe分析的文件 result/metaphlan2/lefse.txt,这个文件可以提供给www.ehbio.com/ImageGP 用于在线LefSE分析 -- LefSe结果输出:result/metaphlan2/目录下lefse开头和feature开头的文件 - -准备输入文件,修改样本品为组名,**非通用代码**,可手动修改 - - # 只保留组名C, N, 删除数字重复编号,去除注释行 - head -n3 result/metaphlan2/taxonomy.tsv - sed '1 s/[0-9]*//g' result/metaphlan2/taxonomy.tsv \ - | grep -v '#' > result/metaphlan2/lefse.txt - head -n3 result/metaphlan2/lefse.txt - -LEfSe本地代码供参考,可选Xshell下运行或ImageGP在线分析 - - # 格式转换为lefse内部格式 - lefse-format_input.py \ - result/metaphlan2/lefse.txt \ - temp/input.in -c 1 -o 1000000 - # 运行lefse - run_lefse.py temp/input.in \ - temp/input.res - - # 绘制物种树注释差异 - lefse-plot_cladogram.py temp/input.res \ - result/metaphlan2/lefse_cladogram.pdf --format pdf - - # 绘制所有差异features柱状图 - lefse-plot_res.py temp/input.res \ - result/metaphlan2/lefse_res.pdf --format pdf - - # 绘制单个features柱状图 - # 查看显著差异features,按丰度排序 - grep -v '-' temp/input.res | sort -k3,3n - # 手动选择指定feature绘图,如Firmicutes - lefse-plot_features.py -f one \ - --feature_name "k__Bacteria.p__Firmicutes" \ - --format pdf \ - temp/input.in temp/input.res \ - result/metaphlan2/lefse_Firmicutes.pdf - - # 批量绘制所有差异features柱状图 - lefse-plot_features.py -f diff \ - --archive none --format pdf \ - temp/input.in temp/input.res \ - result/metaphlan2/lefse_ - -若出现错误 Unknown property axis_bgcolor,则修改`lefse-plot_cladogram.py`里的`ax_bgcolor`替换成`facecolor`即可。 - -## 2.7 Kraken2物种注释 - -Kraken2可以快速完成读长(read)层面的物种注释,还可以进行重叠群(contig)、基因(gene)、宏基因组组装基因组(MAG/bin)层面的序列物种注释。 - - # 启动kraken2工作环境 - source /conda2/envs/kraken2/bin/activate - # 记录软件版本 - kraken2 --version # 2.1.1 - -### 2.7.1 Kraken2物种注释 - -- {1}代表样本名字 -- 输入:temp/qc/{1}_1_kneaddata_paired*.fastq 质控后的FASTQ数据 -- 参考数据库:-db ${db}/kraken2/mini/,默认标准数据库>50GB,这里使用8GB迷你数据库。 -- 输出结果:每个样本单独输出,temp/kraken2/{1}_report和temp/kraken2/{1}_output -- 整合后的输出结果: result/kraken2/taxonomy_count.txt 物种丰度表 - - -(可选) 单样本注释,5m - - mkdir -p temp/kraken2 - i=C1 - # 1m,--use-mpa-style可直接输出metphlan格式,但bracken无法处理 - time kraken2 --db ${db}/kraken2/mini/ --paired temp/qc/${i}_1_kneaddata_paired*.fastq \ - --threads 8 --use-names --report-zero-counts \ - --report temp/kraken2/${i}.report \ - --output temp/kraken2/${i}.output - -多样本并行生成report,2样本各8线程 - - time parallel -j 2 \ - "kraken2 --db ${db}/kraken2/mini --paired temp/qc/{1}_1_kneaddata_paired*.fastq \ - --threads 8 --use-names --report-zero-counts \ - --report temp/kraken2/{1}.report \ - --output temp/kraken2/{1}.output" \ - ::: `tail -n+2 result/metadata.txt|cut -f1` - -使用krakentools转换report为mpa格式 - - for i in `tail -n+2 result/metadata.txt|cut -f1`;do - kreport2mpa.py -r temp/kraken2/${i}.report \ - --display-header \ - -o temp/kraken2/${i}.mpa - done - -合并样本为表格 - - mkdir -p result/kraken2 - # 输出结果行数相同,但不一定顺序一致,要重新排序 - parallel -j 1 \ - 'tail -n+2 temp/kraken2/{1}.mpa | sort | cut -f 2 | sed "1 s/^/{1}\n/" > temp/kraken2/{1}_count ' \ - ::: `tail -n+2 result/metadata.txt|cut -f1` - # 提取第一样本品行名为表行名 - header=`tail -n 1 result/metadata.txt | cut -f 1` - echo $header - tail -n+2 temp/kraken2/${header}.mpa | sort | cut -f 1 | \ - sed "1 s/^/Taxonomy\n/" > temp/kraken2/0header_count - head -n3 temp/kraken2/0header_count - # paste合并样本为表格 - ls temp/kraken2/*count - paste temp/kraken2/*count > result/kraken2/tax_count.mpa - -### 2.7.2 Bracken估计丰度 - -参数简介: -- -d为数据库,与kraken2一致 -- -i为输入kraken2报告文件 -- r是读长,此处默认为100,通常为150 -- l为分类级,本次种级别(S)丰度估计,可选域、门、纲、目、科、属、种:D,P,C,O,F,G,S -- t是阈值,默认为0,越大越可靠,但可用数据越少 -- -o 输出重新估计的值 - -循环重新估计每个样品的丰度 - - # 设置估算的分类级别D,P,C,O,F,G,S - tax=P - mkdir -p temp/bracken - for i in `tail -n+2 result/metadata.txt|cut -f1`;do - # i=C1 - bracken -d ${db}/kraken2/mini \ - -i temp/kraken2/${i}.report \ - -r 100 -l ${tax} -t 0 \ - -o temp/bracken/${i} - done - -结果描述:共7列,分别为物种名、ID、分类级、读长计数、补充读长计数、**总数、总数百分比** - - name taxonomy_id taxonomy_lvl kraken_assigned_reads added_reads new_est_reads fraction_total_reads - Capnocytophaga sputigena 1019 S 4798 996 5794 0.23041 - Capnocytophaga sp. oral taxon 878 1316596 S 239 21 260 0.01034 - -bracken结果合并成表 - - # 输出结果行数相同,但不一定顺序一致,要去年表头重新排序 - # 仅提取第6列reads count,并添加样本名 - parallel -j 1 \ - 'tail -n+2 temp/bracken/{1}|sort|cut -f 6| sed "1 s/^/{1}\n/" > temp/bracken/{1}.count ' \ - ::: `tail -n+2 result/metadata.txt|cut -f1` - # 提取第一样本品行名为表行名 - h=`tail -n1 result/metadata.txt|cut -f1` - tail -n+2 temp/bracken/${h}|sort|cut -f1 | \ - sed "1 s/^/Taxonomy\n/" > temp/bracken/0header.count - # 检查文件数,为n+1 - ls temp/bracken/*count | wc - # paste合并样本为表格,并删除非零行 - paste temp/bracken/*count > result/kraken2/bracken.${tax}.txt - # 统计行列,默认去除表头 - csvtk -t stat result/kraken2/bracken.${tax}.txt - -结果筛选 - - # microbiome_helper按频率过滤,-r可标准化,-e过滤 - Rscript /db/script/filter_feature_table.R \ - -i result/kraken2/bracken.${tax}.txt \ - -p 0.01 \ - -o result/kraken2/bracken.${tax}.0.01 - # > 0.01(1%)的样本在出现,剩1391行 - csvtk -t stat result/kraken2/bracken.${tax}.0.01 - - # 按物种名手动去除宿主污染,以人为例 - # 种水平去除人类P:Chordata,S:Homo sapiens - grep 'Homo sapiens' result/kraken2/bracken.S.0.01 - grep -v 'Homo sapiens' result/kraken2/bracken.S.0.01 \ - > result/kraken2/bracken.S.0.01-H - - # 门水平去除脊索动物 - grep 'Chordata' result/kraken2/bracken.P.0.01 - grep -v 'Chordata' result/kraken2/bracken.P.0.01 > result/kraken2/bracken.P.0.01-H - -分析后清理每条序列的注释大文件 - - rm -rf temp/kraken2/*.output - -### 2.7.3 多样性分析 - - # 设置脚本位置 - sd=/db/script - - # 提取种级别注释并抽平至最小测序量,计算6种alpha多样性指数 - # 查看帮助 - Rscript $sd/otutab_rare.R -h - # -d指定最小样本量,默认0为最小值,抽平文件bracken.S.norm,alpha多样性bracken.S.alpha - tax=S - Rscript $sd/otutab_rare.R \ - --input result/kraken2/bracken.${tax}.txt \ - --depth 0 --seed 1 \ - --normalize result/kraken2/bracken.${tax}.norm \ - --output result/kraken2/bracken.${tax}.alpha - - # 绘制Alpha多样性指数箱线图,详见script/MetaStatPlot.sh - - # Beta多样性距离矩阵计算 - mkdir -p result/kraken2/beta/ - usearch -beta_div result/kraken2/bracken.${tax}.norm \ - -filename_prefix result/kraken2/beta/ - # PCoA分析,详见script/MetaStatPlot.sh - -### 2.7.4 物种组成 - -- script/MetaStatPlot.sh ### 2.7.4 物种组成 (bracken2结果的物种组成堆叠可视化) -- script/MetaStatPlot.sh 附录 ## kraken2的物种组成热图和箱线图 - - -# 三、组装分析流程 Assemble-based - -## 3.1 拼接 Assembly - -### 3.1.1 MEGAHIT拼接 - - # 删除旧文件夹,否则megahit无法运行 - rm -rf temp/megahit - # 组装,10~30m,TB级数据需几天至几周 - time megahit -t 3 \ - -1 `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_1.fastq/'| tr '\n' ','|sed 's/,$//'` \ - -2 `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_2.fastq/'| tr '\n' ','|sed 's/,$//'` \ - -o temp/megahit - # 检查点:查看拼接结果,8.2M,通常300M~5G - ls -sh temp/megahit/final.contigs.fa - # 预览重叠群最前6行,前60列字符 - head -n6 temp/megahit/final.contigs.fa | cut -c1-60 - - # 备份重要结果 - mkdir -p result/megahit/ - ln -f temp/megahit/final.contigs.fa result/megahit/ - # 删除临时文件 - rm -rf temp/megahit/intermediate_contigs/ - -### 3.1.2 (可选) metaSPAdes精细拼接 - - # 精细但使用内存和时间更多,15~65m - time metaspades.py -t 6 -m 100 \ - `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_1.fastq/'|sed 's/^/-1 /'| tr '\n' ' '` \ - `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_2.fastq/'|sed 's/^/-2 /'| tr '\n' ' '` \ - -o temp/metaspades - # 23M,contigs体积更大 - ls -sh temp/metaspades/contigs.fasta - - # 备份重要结果 - mkdir -p result/metaspades/ - ln -f temp/metaspades/contigs.fasta result/metaspades/ - # 删除临时文件 - rm -rf temp/metaspades - -### 3.1.3 QUAST评估 - - quast.py temp/megahit/final.contigs.fa -o result/megahit/quast -t 2 - # 生成report文本tsv/txt、网页html、PDF等格式报告 - - # (可选) megahit和metaspades比较 - quast.py --label "megahit,metapasdes" \ - temp/megahit/final.contigs.fa \ - temp/metaspades/contigs.fasta \ - -o temp/quast - - # (可选)metaquast评估,更全面,但需下载相关数据库,受网速影响可能时间很长 - # metaquast based on silva, and top 50 species genome to access - time metaquast.py result/megahit/final.contigs.fa -o result/megahit/metaquast - -## 3.2 基因预测、去冗余和定量 - - # Gene prediction, cluster & quantitfy - -### 3.2.1 metaProdigal基因预测 - - # 输入文件:拼装好的序列文件 result/megahit/final.contigs.fa - # 输出文件:prodigal预测的基因序列 temp/prodigal/gene.fa - - mkdir -p temp/prodigal - # prodigal的meta模式预测基因,35s,>和2>&1记录分析过程至gene.log - time prodigal -i result/megahit/final.contigs.fa \ - -d temp/prodigal/gene.fa \ - -o temp/prodigal/gene.gff \ - -p meta -f gff > temp/prodigal/gene.log 2>&1 - # 查看日志是否运行完成,有无错误 - tail temp/prodigal/gene.log - # 统计基因数量19221 - grep -c '>' temp/prodigal/gene.fa - -### 3.2.2 基因聚类/去冗余cd-hit - - # 输入文件:prodigal预测的基因序列 temp/prodigal/gene.fa - # 输出文件:去冗余后的基因和蛋白序列:result/NR/nucleotide.fa - # result/NR/protein.fa - - mkdir -p result/NR - # aS覆盖度,c相似度,G局部比对,g最优解,T多线程,M内存0不限制 - # 2万基因2m,2千万需要2000h,多线程可加速 - time cd-hit-est -i temp/prodigal/gene.fa \ - -o result/NR/nucleotide.fa \ - -aS 0.9 -c 0.95 -G 0 -g 0 -T 0 -M 0 - # 统计非冗余基因数量19182,单次拼接结果数量下降不大,多批拼接冗余度高 - grep -c '>' result/NR/nucleotide.fa - # 翻译核酸为对应蛋白序列,emboss - transeq -sequence result/NR/nucleotide.fa \ - -outseq result/NR/protein.fa -trim Y - # 序列名自动添加了_1,为与核酸对应要去除 - sed -i 's/_1 / /' result/NR/protein.fa - -### 3.2.3 基因定量salmon - - # 输入文件:去冗余后的基因和蛋白序列:result/NR/nucleotide.fa - # 输出文件:Salmon定量后的结果:result/salmon/gene.count - # result/salmon/gene.TPM - - mkdir -p temp/salmon - salmon -v # 1.3.0 - - # 建索引, -t序列, -i 索引,10s - time salmon index \ - -t result/NR/nucleotide.fa \ - -p 9 \ - -i temp/salmon/index - - # 定量,l文库类型自动选择,p线程,--meta宏基因组模式, 2个任务并行12个样,共48s - # 注意parallel中待并行的命令必须是双引号 - time parallel -j 2 \ - "salmon quant \ - -i temp/salmon/index -l A -p 8 --meta \ - -1 temp/qc/{1}_1_kneaddata_paired_1.fastq \ - -2 temp/qc/{1}_1_kneaddata_paired_2.fastq \ - -o temp/salmon/{1}.quant" \ - ::: `tail -n+2 result/metadata.txt|cut -f1` - - # 合并 - mkdir -p result/salmon - salmon quantmerge \ - --quants temp/salmon/*.quant \ - -o result/salmon/gene.TPM - salmon quantmerge \ - --quants temp/salmon/*.quant \ - --column NumReads -o result/salmon/gene.count - sed -i '1 s/.quant//g' result/salmon/gene.* - - # 预览结果表格 - head -n3 result/salmon/gene.* - -## 3.3 功能基因注释 - - # 输入数据:上一步预测的蛋白序列 result/NR/protein.fa - # 中间结果:temp/eggnog/protein.emapper.seed_orthologs - # temp/eggnog/output.emapper.annotations - # temp/eggnog/output - - # COG定量表:result/eggnog/cogtab.count - # result/eggnog/cogtab.count.spf (用于STAMP) - - # KO定量表:result/eggnog/kotab.count - # result/eggnog/kotab.count.spf (用于STAMP) - - # CAZy碳水化合物注释和定量:result/dbcan2/cazytab.count - # result/dbcan2/cazytab.count.spf (用于STAMP) - - # 抗生素抗性:result/resfam/resfam.count - # result/resfam/resfam.count.spf (用于STAMP) - - # 这部分可以拓展到其它数据库 - -### 3.3.1 基因注释eggNOG(COG/KEGG/CAZy) - - # https://github.com/eggnogdb/eggnog-mapper/wiki/eggNOG-mapper-v2 - - # 记录软件版本 - emapper.py --version # 2.0.0 - - # diamond比对基因至eggNOG 5.0数据库, 10h - mkdir -p temp/eggnog - time emapper.py --no_annot --no_file_comments --override \ - --data_dir ${db}/eggnog5 \ - -i result/NR/protein.fa \ - --cpu 9 -m diamond \ - -o temp/eggnog/protein - - # 比对结果功能注释, 1h - time emapper.py \ - --annotate_hits_table temp/eggnog/protein.emapper.seed_orthologs \ - --data_dir ${db}/eggnog5 \ - --cpu 9 --no_file_comments --override \ - -o temp/eggnog/output - - # 添表头, 1列为ID,9列KO,16列CAZy,21列COG,22列描述 - sed '1 i Name\tortholog\tevalue\tscore\ttaxonomic\tprotein\tGO\tEC\tKO\tPathway\tModule\tReaction\trclass\tBRITE\tTC\tCAZy\tBiGG\ttax_scope\tOG\tbestOG\tCOG\tdescription' \ - temp/eggnog/output.emapper.annotations \ - > temp/eggnog/output - -summarizeAbundance生成COG/KO/CAZy丰度汇总表 - - mkdir -p result/eggnog - # 显示帮助,需要Python3环境,可修改软件第一行指定python位置 - summarizeAbundance.py -h - # 汇总,9列KO,16列CAZy按逗号分隔,21列COG按字母分隔,原始值累加 - summarizeAbundance.py \ - -i result/salmon/gene.TPM \ - -m temp/eggnog/output \ - -c '9,16,21' -s ',+,+*' -n raw \ - -o result/eggnog/eggnog - sed -i 's/^ko://' result/eggnog/eggnog.KO.raw.txt - # eggnog.CAZy.raw.txt eggnog.COG.raw.txt eggnog.KO.raw.txt - - # 添加注释生成STAMP的spf格式,结合metadata.txt进行差异比较 - # KO,v2021.1 - awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2} NR>FNR{print a[$1],$0}' \ - ${db}/kegg/KO_description.txt \ - result/eggnog/eggnog.KO.raw.txt | \ - sed 's/^\t/Unannotated\t/' \ - > result/eggnog/eggnog.KO.TPM.spf - # CAZy,v2020.7 - awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2} NR>FNR{print a[$1],$0}' \ - ${db}/dbcan2/CAZy_description.txt result/eggnog/eggnog.CAZy.raw.txt | \ - sed 's/^\t/Unannotated\t/' > result/eggnog/eggnog.CAZy.TPM.spf - # COG - awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2"\t"$3} NR>FNR{print a[$1],$0}' \ - ${db}/eggnog/COG.anno \ - result/eggnog/eggnog.COG.raw.txt | sed '1 s/^/Level1\tLevel2/'> \ - result/eggnog/eggnog.COG.TPM.spf - -### 3.3.2 (可选)碳水化合物dbCAN2 - - # 比对CAZy数据库, 用时2~18m; 加--sensitive更全但慢至1h - mkdir -p temp/dbcan2 - time diamond blastp \ - --db ${db}/dbCAN2/CAZyDB.07312020 \ - --query result/NR/protein.fa \ - --threads 9 -e 1e-5 --outfmt 6 --max-target-seqs 1 --quiet \ - --out temp/dbcan2/gene_diamond.f6 - # 整理比对数据为表格 - mkdir -p result/dbcan2 - # 提取基因与dbcan分类对应表 - perl /db/script/format_dbcan2list.pl \ - -i temp/dbcan2/gene_diamond.f6 \ - -o temp/dbcan2/gene.list - # 按对应表累计丰度 - summarizeAbundance.py \ - -i result/salmon/gene.TPM \ - -m temp/dbcan2/gene.list \ - -c 2 -s ',' -n raw \ - -o result/dbcan2/TPM - # 添加注释生成STAMP的spf格式,结合metadata.txt进行差异比较 - awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2} NR>FNR{print a[$1],$0}' \ - ${db}/dbcan2/CAZy_description.txt result/dbcan2/TPM.CAZy.raw.txt | \ - sed 's/^\t/Unannotated\t/' > result/dbcan2/TPM.CAZy.raw.spf - # 检查未注释数量,有则需要检查原因 - grep 'Unannotated' result/dbcan2/TPM.CAZy.raw.spf|wc -l - -### 3.3.3 抗生素抗性CARD - -数据库:https://card.mcmaster.ca/ - -参考文献:http://doi.org/10.1093/nar/gkz935 - -软件使用Github: https://github.com/arpcard/rgi - - # 启动rgi环境 - source ${soft}/bin/activate rgi - # 加载数据库 - rgi load -i ${db}/card/card.json \ - --card_annotation ${db}/card/card_database_v3.1.0.fasta --local - - # 蛋白注释 - mkdir -p result/card - cut -f 1 -d ' ' result/NR/protein.fa > temp/protein.fa - # --include_loose 会显著增加上百倍结果 - time rgi main \ - --input_sequence temp/protein.fa \ - --output_file result/card/protein \ - --input_type protein --clean \ - --num_threads 9 --alignment_tool DIAMOND - - -结果说明: -- protein.json,在线可视化 -- protein.txt,注释基因列表 - - -# 四、挖掘单菌基因组/分箱(Binning) - -## 4.1 MetaWRAP - - # 主要使用MetaWRAP,演示基于官方测试数据 - # 主页:https://github.com/bxlab/metaWRAP - # 挖掘单菌基因组,需要研究对象复杂度越低、测序深度越大,结果质量越好。要求单样本6GB+,复杂样本如土壤推荐数据量30GB+,至少3个样本 - # 上面的演示数据12个样仅140MB,无法获得单菌基因组,这里使用官方测序数据演示讲解 - # 软件和数据库布置需2-3天,演示数据分析过程超10h,标准30G样也需3-30天,由服务器性能决定。 - -### 4.1.1 准备数据和环境变量 - - # 流程: https://github.com/bxlab/metaWRAP/blob/master/Usage_tutorial.md - > - # 输入数据:质控后的FASTQ序列,文件名格式必须为*_1.fastq和*_2.fastq - # C1_1_kneaddata_paired_1.fastq -> C1_1_1.fq - # C1_1_kneaddata_paired_2.fastq -> C1_1_2.fq - # 放置到 binning/temp/qc 目录下 - - # 拼装获得的contig文件:result/megahit/final.contigs.fa - # 放置到 binning/temp/megahit 目录下 - # - - # 中间输出文件: - # Binning结果:binning/temp/binning - # 提纯后的Bin统计结果:binning/temp/bin_refinement/metawrap_50_10_bins.stats - # Bin定量结果文件:binning/temp/bin_quant/bin_abundance_heatmap.png - # binning/temp/bin_quant/bin_abundance_table.tab (数据表) - # Bin物种注释结果:binning/temp/bin_classify/bin_taxonomy.tab - # Prokka基因预测结果:binning/temp/bin_annotate/prokka_out/bin.10.ffn 核酸序列 - # Bin可视化结果:binning/temp/bloblogy/final.contigs.binned.blobplot (数据表) - # binning/temp/bloblogy/blobplot_figures (可视化图) - - # 准备原始数据从头分析,详见公众号或官网教程 - # 这里我们从质控后数据和拼接结果开始 - cd ${wd} - mkdir -p binning && cd binning - mkdir -p temp && cd temp - # 这里基于质控clean数据和拼接好的contigs,自己链接自上游分析 - # 7G质控数据,输入数据文件名格式必须为*_1.fastq和*_2.fastq - mkdir -p seq - cd seq - # 方法1. 下载测序数据 - for i in `seq 7 9`;do - wget -c http://210.75.224.110/share/meta/metawrap/ERR01134${i}_1.fastq.gz - wget -c http://210.75.224.110/share/meta/metawrap/ERR01134${i}_2.fastq.gz - done - # gunzip *.gz # 解压文件 - # rename .fq .fastq *.fq # 批量修改扩展名 - # 方法2. 复制准备好的数据 - ln -s ${db}/metawrap/*.fastq ./ - cd .. - # megahit拼接结果 - mkdir -p megahit - cd megahit - # wget -c http://210.75.224.110/share/meta/metawrap/final.contigs.fa.gz - # gunzip *.gz - ln -s ${db}/metawrap/*.fa ./ - cd ../.. - - # 加载运行环境 - cd ${wd}/binning - conda activate metawrap - - -### 4.1.2 运行三种分箱软件 - - # 输入文件为contig和clean reads - # 调用三大主流binning程序cococt, maxbin2, metabat2 - # 8p线程2h,24p耗时1h - # nohup 和 & 保证任务在后台不被中断,且记录输出内容到 nohup.out(可选) - nohup metawrap binning -o temp/binning -t 2 -a temp/megahit/final.contigs.fa \ - --metabat2 --maxbin2 --concoct temp/qc/ERR*.fastq & - # 用自己的文件,替换输出文件名为 *1_kneaddata_paired*.fastq - # 如果想接上上面的流程使用自己的文件做分析,则把ERR*.fastq替换为 *1_kneaddata_paired*.fastq - # 输出文件夹 temp/binning 包括3种软件结果和中间文件 - -### 4.1.3 Bin提纯 - - # 8线程2h, 24p 1h - cd ${wd}/binning - # rm -rf temp/bin_refinement - metawrap bin_refinement \ - -o temp/bin_refinement \ - -A temp/binning/metabat2_bins/ \ - -B temp/binning/maxbin2_bins/ \ - -C temp/binning/concoct_bins/ \ - -c 50 -x 10 -t 2 - # 查看高质量Bin的数量,10个,见temp/bin_refinement/metawrap_50_10_bins.stats目录 - wc -l temp/bin_refinement/metawrap_50_10_bins.stats - # 结果改进程度见temp/bin_refinement/figures/目录 - - -### 4.1.4 Bin定量 - - # 使用salmon计算每个bin在样本中相对丰度 - # 耗时3m,系统用时10m,此处可设置线程,但salmon仍调用全部资源 - - # 需要指定输出文件夹,包括4.3中的参数的输出目录 - metawrap quant_bins -b temp/bin_refinement/metawrap_50_10_bins -t 8 \ - -o temp/bin_quant -a temp/megahit/final.contigs.fa temp/qc/ERR*.fastq - # 文件名字改变 - # 结果包括bin丰度热图`temp/bin_quant/bin_abundance_heatmap.png` - # 如果想自己画图,原始数据位于`temp/bin_quant/bin_abundance_table.tab` - ls -l temp/bin_quant/bin_abundance_heatmap.png - -### 4.1.5 Bin注释 - - # Taxator-tk对每条contig物种注释,再估计bin整体的物种,11m (用时66 min) - metawrap classify_bins -b temp/bin_refinement/metawrap_50_10_bins \ - -o temp/bin_classify -t 2 - # 注释结果见`temp/bin_classify/bin_taxonomy.tab` - - # export LD_LIBRARY_PATH=/conda2/envs/metagenome_env/lib/:${LD_LIBRARY_PATH} - # 这是动态链接库找不到时的一个简单的应急策略 - ln -s /conda2/envs/metagenome_env/lib/libssl.so.1.0.0 . - ln -s /conda2/envs/metagenome_env/lib/libcrypto.so.1.0.0 . - - # 基于prokka基因注释,4m - metaWRAP annotate_bins -o temp/bin_annotate \ - -b temp/bin_refinement/metawrap_50_10_bins -t 2 - # 每个bin基因注释的gff文件bin_funct_annotations, - # 核酸ffn文件bin_untranslated_genes, - # 蛋白faa文件bin_translated_genes - - -## (可选)MetaWRAP单样本分别组装和分箱 - -多样本受硬件、计算时间限制无法完成时,需要单样本组装、分析。或想进一步提高组装质量,减少污染和杂合度,也可以单样本组装。 - -### 参数设定 - - # 样本名 - i=ERR011347 - # 线程数 - p=12 - # 任务数 - j=2 - # 定义完整度和污染率的阈值(50, 5; Finn NBT 2020; 50, 10, Bowers NBT 2017) - c=50 - x=10 - -输和文件在seq目录 - - mkdir -p seq - ln -s `pwd`/temp/qc/*.fastq seq/ - - ### 1 megahit组装 - -单样本并行组装,13m,314m - - rm -rf temp/megahit_* - time parallel -j ${j} \ - "metawrap assembly \ - -1 seq/{}_1.fastq \ - -2 seq/{}_2.fastq \ - -o temp/megahit_{} \ - -m 100 -t ${p} --megahit" \ - ::: `ls seq/|cut -f1 -d '_'|uniq` - -### 2 运行三种bin软件 - - # 192p, 15m (concoct会使用所有线程) - parallel -j ${j} \ - "metawrap binning \ - -o temp/binning_{} -t ${p} \ - -a temp/megahit_{}/final_assembly.fasta \ - --metabat2 --maxbin2 --concoct \ - seq/{}_*.fastq" \ - ::: `ls seq/|cut -f1 -d '_'|uniq` - -### 3 Bin提纯 - - # 24p,10h - parallel -j ${j} \ - "metawrap bin_refinement \ - -o temp/bin_refinement_{} -t ${p} \ - -A temp/binning_{}/metabat2_bins/ \ - -B temp/binning_{}/maxbin2_bins/ \ - -C temp/binning_{}/concoct_bins/ \ - -c ${c} -x ${x}" \ - ::: `ls seq/|cut -f1 -d '_'|uniq` - -## 4.2 dRep去冗余种/株基因组集 - - # 进入虚拟环境,没有用conda安装 - - # conda activate drep - source ${soft}/bin/activate drep - cd ${wd}/binning - -合并所有bin至同一目录 - - mkdir -p temp/drep_in - # 混合组装分箱并重命名 - ln -s `pwd`/temp/bin_refinement/metawrap_50_10_bins/bin.* temp/drep_in/ - rename 'bin' 'mix_all' temp/drep_in/bin.* - - # 单样品组装分箱结果重命名 - # for i in `ls seq/|cut -f1 -d '_'|uniq`;do - # ln -s `pwd`/temp/bin_refinement_${i}/metawrap_50_10_bins/bin.* temp/drep_in/ - # rename "bin." "s_${i}" temp/drep_in/bin.* - # done - # 统计混合和单样本来源数据,10个混,5个单 - ls temp/drep_in/|cut -f 1 -d '_'|uniq -c - # 统计混合批次/单样本来源 - ls temp/drep_in/|cut -f 2 -d '_'|cut -f 1 -d '.' |uniq -c - -按种水平去冗余:15个为10个,8个来自混拼,2个来自单拼 - - mkdir -p temp/drep95 - # 15个,40min - dRep dereplicate temp/drep95/ \ - -g temp/drep_in/*.fa \ - -sa 0.95 -nc 0.30 -comp 50 -con 10 -p 24 - -主要结果: - -- 非冗余基因组集:dereplicated_genomes/*.fa -- 聚类信息表:data_tables/Cdb.csv -- 聚类和质量图:firgures/*clustering* - -(可选)按株水平汇总 - - # 20-30min - mkdir -p temp/drep95 - dRep dereplicate temp/drep95/ \ - -g temp/drep_in/*.fa \ - -sa 0.99 -nc 0.30 -comp 50 -con 10 -p 24 - -## 4.3 GTDB-tk物种注释和进化树 - -启动软件所在虚拟环境 - - # gtdbtk与drep安装在了同一个环境 - # conda activate gtdbtk - -细菌基因组物种注释 - -以上面鉴定的10个种为例,注意扩展名要与输入文件一致,可使用压缩格式gz。主要结果文件描述:此9个细菌基因组,结果位于tax.bac120开头的文件,如物种注释 tax.bac120.summary.tsv。古菌结果位于tax.ar122开头的文件中。 - - mkdir -p temp/gtdb_classify - # 10个基因组,24p,100min 60G内存 - gtdbtk classify_wf \ - --genome_dir temp/drep95/dereplicated_genomes \ - --out_dir temp/gtdb_classify \ - --extension fa \ - --prefix tax \ - --cpus 40 - - -多序列对齐结果建树 - - # 以9个细菌基因组的120个单拷贝基因建树,1s - mkdir -p temp/gtdb_infer - gtdbtk infer \ - --msa_file temp/gtdb_classify/tax.bac120.user_msa.fasta \ - --out_dir temp/gtdb_infer \ - --prefix tax \ - --cpus 2 - -树文件可使用iTOL在线美化,也可使用GraphLan本地美化。 - -## 4.4 table2itol制作树注释文件 - -以gtdb-tk物种注释(tax.bac120.summary.tsv)和drep基因组评估(Widb.csv)信息为注释信息 - - mkdir -p result/itol - # 制作分类学表 - tail -n+2 temp/gtdb_classify/tax.bac120.summary.tsv|cut -f 1-2|sed 's/;/\t/g'|sed '1 s/^/ID\tDomain\tPhylum\tClass\tOrder\tFamily\tGenus\tSpecies\n/' > result/itol/tax.txt - # 基因组评估信息 - sed 's/,/\t/g;s/.fa//' temp/drep95/data_tables/Widb.csv|cut -f 1-7,11|sed '1 s/genome/ID/' > result/itol/genome.txt - # 整合注释文件 - awk 'BEGIN{OFS=FS="\t"} NR==FNR{a[$1]=$0} NR>FNR{print $0,a[$1]}' result/itol/genome.txt result/itol/tax.txt|cut -f 1-8,10- > result/itol/annotation.txt - -table2itol制作注释文件 - - cd result/itol/ - # 设置脚本位置 - db=./table2itol-master - #db=/db - - ## 方案1. 分类彩带、数值热图、种标签 - # -a 找不到输入列将终止运行(默认不执行)-c 将整数列转换为factor或具有小数点的数字,-t 偏离提示标签时转换ID列,-w 颜色带,区域宽度等, -D输出目录,-i OTU列名,-l 种标签替换ID - Rscript ${db}/table2itol.R -a -c double -D plan1 -i ID -l Species -t %s -w 0.5 annotation.txt - # 生成注释文件中每列为单独一个文件 - - ## 方案2. 数值柱形图,树门背景色,属标签 - Rscript ${db}/table2itol.R -a -d -c none -D plan2 -b Phylum -i ID -l Genus -t %s -w 0.5 annotation.txt - - ## 方案3.分类彩带、整数为柱、小数为热图 - Rscript ${db}/table2itol.R -c keep -D plan3 -i ID -t %s annotation.txt - - ## 方案4. 将整数转化成因子生成注释文件 - Rscript ${db}/table2itol.R -a -c factor -D plan4 -i ID -l Genus -t %s -w 0 annotation.txt - -## 4.5 PROKKA单菌基因组功能注释 - - conda activate metawrap - i=bin1 - time prokka result/contig/${db}.fa \ - --kingdom Archaea,Bacteria --cpus 9 \ - --outdir temp/prokka/${db} - -# 附录 - -## 质控KneadData - -### 去宿主后双端不匹配——序列改名 - -(可选) 序列改名,解决NCBI SRA数据双端ID重名问题,详见[《MPB:随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题》](https://mp.weixin.qq.com/s/ovL4TwalqZvwx5qWb5fsYA)。 - - gunzip seq/*.gz - sed -i '1~4 s/$/\\1/g' seq/*_1.fq - sed -i '1~4 s/$/\\2/g' seq/*_2.fq - # pigz是并行版的gzip,没装可替换为gzip - pigz seq/*.fq - -### Java不匹配——重装Java运行环境 - -若出现错误 Unrecognized option: -d64,则安装java解决: - - conda install -c cyclus java-jdk - -## 物种组成metaphlan2 - -### 无法找到数据库 - -正常在首次运行时,会自动下载数据库。有时会失败,解决方法: - -方法1. 使用软件安装的用户运行一下程序即可下载成功 - -方法2. 将我们预下载好的数据索引文件,链接到软件安装目录 - - db=~/db - soft=~/miniconda2 - mkdir -p ${soft}/bin/db_v20 - ln -s ${db}/metaphlan2/* ${soft}/bin/db_v20/ - mkdir -p ${soft}/bin/databases - ln -s ${db}/metaphlan2/* ${soft}/bin/databases/ - -### 生成数据绘制样品间共有或特有物种信息网络图 - - awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {for(i=9;i<=NF;i++) a[i]=$i; print "Tax\tGroup"} \ - else {for(i=9;i<=NF;i++) if($i>0.05) print "Tax_"FNR, a[i];}}' \ - result/metaphlan2/taxonomy.spf > result/metaphlan2/taxonomy_highabundance.tsv - - awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {print "Tax\tGrpcombine";} else a[$1]=a[$1]==""?$2:a[$1]$2;}END{for(i in a) print i,a[i]}' \ - result/metaphlan2/taxonomy_highabundance.tsv > result/metaphlan2/taxonomy_group.tsv - - cut -f 2 result/metaphlan2/taxonomy_group.tsv | tail -n +2 | sort -u >group - - for i in `cat group`; do printf "#%02x%02x%02x\n" $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)); done >colorcode - - paste group colorcode >group_colorcode - - awk 'BEGIN{OFS=FS="\t"}ARGIND==1{a[$1]=$2;}ARGIND==2{if(FNR==1) {print $0, "Grpcombinecolor"} else print $0,a[$2]}' \ - group_colorcode result/metaphlan2/taxonomy_group.tsv > result/metaphlan2/taxonomy_group2.tsv - - awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {print "Tax",$1,$2,$3,$4, $5, $6, $7, $8 } else print "Tax_"FNR, $1,$2,$3,$4, $5,$6, $7, $8}' \ - result/metaphlan2/taxonomy.spf > result/metaphlan2/taxonomy_anno.tsv - -## 物种分类Kraken2 - - # 方法2. krakentools中combine_mpa.py,需手动安装脚本,且结果还需调整样本名 - combine_mpa.py \ - -i `tail -n+2 result/metadata.txt|cut -f1|sed 's/^/temp\/kraken2\//;s/$/.mpa/'|tr '\n' ' '` \ - -o temp/kraken2/combined_mpa - -## 组装Megahit - -### 数据太大导致程序中断 - -报错信息:126 - Too many vertices in the unitig graph (8403694648 >= 4294967294), you may increase the kmer size to remove tons - -解决方法:需要增加k-mer - -添加参数: --k-min 29 --k-max 141 --k-step 20 - -## 组装MetaSpdades - -### 二三代混合组装 - - # 3G数据,耗时3h - i=SampleA - time metaspades.py -t 48 -m 500 \ - -1 seq/${i}_1.fastq -2 seq/${i}L_2.fastq \ - --nanopore seq/${i}.fastq \ - -o temp/metaspades_${i} - -### 基因定量salmon - -### 找不到库文件liblzma.so.0 - -- 报错信息:error while loading shared libraries: liblzma.so.0 -- 问题描述:直接运行salmon报告,显示找不到lib库, -- 解决方法:可使用程序完整路径解决问题,`alias salmon="${soft}/envs/metagenome_env/share/salmon/bin/salmon"` - -## 数据库 - -### 抗生素抗性ResFam - -数据库:http://www.dantaslab.org/resfams - -参考文献:http://doi.org/10.1038/ismej.2014.106 - - mkdir -p temp/resfam result/resfam - # 比对至抗生素数据库 1m - time diamond blastp \ - --db ${db}/resfam/Resfams-proteins \ - --query result/NR/protein.fa \ - --threads 9 --outfmt 6 --sensitive \ - -e 1e-5 --max-target-seqs 1 --quiet \ - --out temp/resfam/gene_diamond.f6 - # 提取基因对应抗性基因列表 - cut -f 1,2 temp/resfam/gene_diamond.f6 | uniq | \ - sed '1 i Name\tResGeneID' > temp/resfam/gene_fam.list - # 统计注释基因的比例, 488/19182=2.5% - wc -l temp/resfam/gene_fam.list result/salmon/gene.count - # 按列表累计丰度 - summarizeAbundance.py \ - -i result/salmon/gene.TPM \ - -m temp/resfam/gene_fam.list \ - -c 2 -s ',' -n raw \ - -o result/resfam/TPM - # 结果中添加FAM注释,spf格式用于stamp分析 - awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$4"\t"$3"\t"$2} NR>FNR{print a[$1],$0}' \ - ${db}/resfam/Resfams-proteins_class.tsv result/resfam/TPM.ResGeneID.raw.txt \ - > result/resfam/TPM.ResGeneID.raw.spf - -# 版本更新记录 - -## 1.08 2020.7.20 - -1. KneadData提供数据预处理双端标签唯一命令,兼容最新版; -2. 提供HUMAnN3测试版的安装和分析流程(附录1); -3. eggNOG升级为emapper 2.0和eggNOG 5.0流程,结果列表从13列变为22列,新增CAZy注释。emapper 1.0版本见附录2。 - -## 1.09 2020.10.16 - -1. 新增二、三代混合组装OPERA-MS软件使用 (31Megahit) -2. 新增eggNOG-mapper结果COG/KO/CAZy整理脚本summarizeAbundance.py,删除旧版Shell+R代码 (32Annotation) -3. 新增MetaWRAP单样本分箱流程 (33Binning) -4. 新增dRep实现基因组去冗余 (34Genomes) -5. 新增GTDB-Tk基因组物种注释和进化树构建 (34Genomes) - -## 1.10 2021.1.22 - -1. 增加删除中间文件部分,节约空间,防止硬盘写满; -2. 正文的补充分析方法、常见问题移至附录,按软件名、问题/方法分级索引; -3. 软件使用前,增加检查软件版本命令,方便文章方法中撰写准确版本; -4. 删除不稳定的humann3、过时的eggnog版本教程; -5. 增加kraken2新环境, 增加bracken, krakentools新工具; -6. kraken2结果新增beta多样性PCoA,物种组成堆叠柱状图; -7. 增metaspades二、三代组装代码示例; -8. 新增KEGG层级注释整理代码; -9. 更新dbCAN2中2018版为2020版; -10. 新增CARD本地分析流程; +[TOC] + +# 宏基因组分析流程EasyMetagenome + +- 版本 Version:1.11, 2021/5/7 +- 系统要求 System: Linux Ubuntu 16.04+ / CentOS 7+ +- 依赖软件 Sofware: (Rstudio server 1.1+)、KneadData v0.7.4、MetaPhlAn v2.7.5、HUMAnN2 v2.8.1、...... + +# 一、数据预处理 Data preprocessing + +## 1.1 准备工作 Prepare + +1. 首次使用请参照`1SoftDb.sh`脚本,安装软件和数据库(大约1-3天,仅一次) +2. EasyMetagenome流程`2Pipeline.sh`复制到项目文件夹,如本次为meta +3. 项目文件夹准备测序数据(seq/*.fq.gz)和样本元数据(result/metadata.txt) + +### 1.1.1 环境变量设置(每次开始分析前必须运行) + +设置数据库、软件和工作目录 + + # 公共数据库database(db)位置,如管理员设置/db,个人下载至~/db + db=/db + # Conda软件software安装目录,`conda env list`命令查看,如~/miniconda2 + soft=/conda2 + # 设置工作目录work directory(wd),如meta + wd=~/meta + # 创建并进入工作目录 + mkdir -p $wd && cd $wd + + # 方法1.加载自己安装环境 + # conda activate metagenome_env + + # 方法2.加载别人安装环境 + export PATH=${soft}/envs/metagenome_env/bin/:$PATH + source ${soft}/bin/activate metagenome_env + + # 指定某个R语言环境 + alias Rscript="/anaconda2/bin/Rscript --vanilla" + +### 1.1.2 起始文件——序列和元数据 + +创建3个常用子目录:序列,临时文件和结果 + + mkdir -p seq temp result + /bin/rm -rf result/metadata.txt + # 上传元数据metadata.txt至result目录,此处下载并重命名 + wget http://210.75.224.110/github/EasyMetagenome/result/metadata2.txt -O result/metadata.txt + # 检查文件格式,^I为制表符,$为Linux换行,^M$为Windows回车,^M为Mac换行符 + cat -A result/metadata.txt + # 转换Windows回车为Linux换行 + sed -i 's/\r//' result/metadata.txt + cat -A result/metadata.txt + +用户使用filezilla上传测序文件至seq目录,本次从其它位置复制,或从网络下载测试数据 + + # 方法1. 从其它目录复制测序数据 + cp -rf /db/meta/seq/*.gz seq/ + + # 方法2. 网络下载测试数据 + cd seq/ + awk '{system("wget -c http://210.75.224.110/github/EasyMetagenome/seq/"$1"_1.fq.gz")}' \ + <(tail -n+2 ../result/metadata.txt) + awk '{system("wget -c http://210.75.224.110/github/EasyMetagenome/seq/"$1"_2.fq.gz")}' \ + <(tail -n+2 ../result/metadata.txt) + cd .. + + # 查看文件大小 + ls -lsh seq + # -l 列出详细信息 (l: list) + # -sh 显示人类可读方式文件大小 (s: size; h: human readable) + +### 1.1.3 了解工作目录和文件 + +显示文件结构 + + tree -L 2 + # . + # ├── pipeline.sh + # ├── result + # │ └── metadata.txt + # ├── seq + # │ ├── C1_1.fq.gz + # │ ├── C1_2.fq.gz + # │ ├── N1_1.fq.gz + # │ └── N1_2.fq.gz + # └── temp + +- pipeline.sh是分析流程代码; +- seq目录中有2个样本Illumina双端测序,4个序列文件; +- temp是临时文件夹,存储分析中间文件,结束可全部删除节约空间 +- result是重要节点文件和整理化的分析结果图表, +- 实验设计metadata.txt也在此 + + +## 1.2 (可选)FastQC质量评估 + + # 第一次使用软件要记录软件版本,文章方法中必须写清楚 + fastqc --version # 0.11.8 + # time统计运行时间,fastqc质量评估 + # *.gz为原始数据,-t指定多线程 + time fastqc seq/*.gz -t 2 + +质控报告见`seq`目录,详细解读请阅读[《数据的质量控制软件——FastQC》](https://mp.weixin.qq.com/s/tDMih7ISLJcL4F4sWBq3Vw)。 + +multiqc将fastqc的多个报告生成单个整合报告,方法批量查看和比较 + + # 记录软件版本 + multiqc --version # 1.5 + # 整理seq目录下fastqc报告,输出multiqc_report.html至result/qc目录 + multiqc -d seq/ -o result/qc + +查看右侧result/qc目录中multiqc_report.html,单击,选择`View in Web Browser`查看可交互式报告。 + +## 1.3 KneadData质控和去宿主 + +kneaddata是流程,它主要依赖trimmomatic质控和去接头,bowtie2比对宿主,然后筛选非宿主序列用于下游分析 。 + +详细教程和常见问题,阅读:[MPB:随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题](https://mp.weixin.qq.com/s/ovL4TwalqZvwx5qWb5fsYA) + + # 记录核心软件版本 + kneaddata --version # 0.6.1 + trimmomatic -version # 0.39 + bowtie2 --version # 2.3.5 + # 可只选一行中部分代码点击Run,如选中下行中#号后面命令查看程序帮助 + # kneaddata -h # 显示帮助 + +检查点:zless/zcat查看可压缩文件,检查序列质量格式(质量值大写字母为标准Phred33格式,小写字母为Phred64,需参考附录:质量值转换);检查双端序列ID是否重复,如果重名需要在质控前改名更正。参考**附录,质控kneaddata,去宿主后双端不匹配——序列改名**。 + + # 设置某个样本名为变量i,以后再无需修改 + i=C1 + # zless查看压缩文件,空格翻页,按q退出。 + zless seq/${i}_1.fq.gz | head -n4 + # zcat显示压缩文件,head指定显示行数 + zcat seq/${i}_2.fq.gz | head -n4 + +- "|" 为管道符,上一个命令的输出,传递给下一个命令做输入 +- gzip: stdout: Broken pipe:管道断开。这里是人为断开,不是错误 +- 运行过程中需要仔细阅读屏幕输出的信息 + +如果序列双端名称一致,改名参见附录代码:质控KneadData - 去宿主后双端不匹配——序列改名 + + +### 1.3.1 (可选)单样品质控 + +若一条代码分割在多行显示时,最好全部选中运行,多行分割的代码行末有一个 “\” 。多行注释命令运行,可全选,按Ctrl+Shift+C进行注释的取消和添加。 + +- 以metadata中`C1`样品本质控为例 + +1. 输入文件:双端FASTQ测序数据,提供给参数-i,seq/${i}_1.fq.gz和 seq/${i}_2.fq.gz +2. 参考数据库:宿主基因组索引 -db ${db}/kneaddata/human_genome/Homo_sapiens +3. 输出文件:质控后的FASTQ测序数据,在目录temp/qc下面,${i}_1_kneaddata_paired_1.fastq和${i}_1_kneaddata_paired_1.fastq,用于后续分析 +4. 软件位置:`conda env list`查看软件安装位置,请务必根据自己软件和数据库安装位置,修改软件trimmomatic和接头文件位置。 + +(可选)手动设置trimmomatic程序和接头位置 + + 程序目录:${soft}/envs/meta/share/trimmomatic/ + # 查看multiqc结果中接头污染最严重的C2_1样本,再到fastqc报告中查看接头序列,复制前20个碱基检索确定接头文件 + grep 'AGATCGGAAGAGCGTCGTGTAGGGAAA' ${soft}/envs/meta/share/trimmomatic/adapters/* + # 根据实际情况选择单端SE或双端PE,与原序列比较确定为 TruSeq2-PE.fa,目前多为TruSeq3-PE-2.fa,更准确的是问测序公司要接头文件 + +100万条序列8线程质控和去宿主,耗时~2m。 + + i=C1 + mkdir -p temp/qc + time kneaddata -i seq/${i}_1.fq.gz -i seq/${i}_2.fq.gz \ + -o temp/qc -v -t 8 --remove-intermediate-output \ + --trimmomatic ${soft}/envs/metagenome_env/share/trimmomatic/ \ + --trimmomatic-options "ILLUMINACLIP:${soft}/envs/metagenome_env/share/trimmomatic/adapters/TruSeq2-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50" \ + --reorder --bowtie2-options "--very-sensitive --dovetail" \ + -db ${db}/kneaddata/human_genome/Homo_sapiens + +(可选:有问题时,切换另一个环境中分析) + + # metagenome_env运行有问题,可以加载另一环境 + soft=/home/liuyongxin/miniconda2/ + source ${soft}/bin/activate + conda env list + conda activate meta + time kneaddata -i seq/${i}_1.fq.gz -i seq/${i}_2.fq.gz \ + -o temp/qc -v -t 8 --remove-intermediate-output \ + --trimmomatic ${soft}/envs/meta/share/trimmomatic/ \ + --trimmomatic-options "ILLUMINACLIP:${soft}/envs/meta/share/trimmomatic/adapters/TruSeq2-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50" \ + --reorder --bowtie2-options "--very-sensitive --dovetail" \ + -db ${db}/kneaddata/human_genome/Homo_sapiens + + # 查看质控后的结果文件 + ls -shtr temp/qc/${i}_1_kneaddata_paired_?.fastq + +### 1.3.2 多样品并行质控 + +并行队列管理软件——“parallel”。 + + # 记录软件版本 + parallel --version # 20160222 + # 打will cite承诺引用并行软件parallel + parallel --citation + +parallel软件说明和使用实例 + + # 根据样本列表`:::`并行处理,并行j=2个任务,每个任务t=3个线程,2~7m + # 运行下面这行,体会下parallel的工作原理 + # ::: 表示传递参数;第一个::: 后面为第一组参数,对应于{1}; + # 第二个::: 后面为第二组参数,对应于{2},依次替换 + parallel -j 3 --xapply "echo {1} {2}" ::: seq/*_1.fq.gz ::: seq/*_2.fq.gz + # --xapply保持文件成对,否则将为两两组合,显示如下: + parallel -j 2 "echo {1} {2}" ::: seq/*_1.fq.gz ::: seq/*_2.fq.gz + # 从文件列表使用 + parallel -j 3 --xapply "echo seq/{1}_1.fq.gz seq/{1}_2.fq.gz" ::: `tail -n+2 result/metadata.txt|cut -f1` + +并行质控和去宿主:单样本运行成功,且参数设置绝对路径。出现错误`Unrecognized option: -d64`参考**附录,质控Kneaddata,Java版本不匹配——重装Java运行环境**。 + + # 每步分析产生多个文件时新建子文件夹 + mkdir -p temp/qc + # 每个线程处理百万序列约10分钟,多线程可加速 j x t 倍 + # 注意此处引物文件必须填写绝对路径,否则无法使用 + time parallel -j 2 --xapply \ + "kneaddata -i seq/{1}_1.fq.gz \ + -i seq/{1}_2.fq.gz \ + -o temp/qc -v -t 9 --remove-intermediate-output \ + --trimmomatic ${soft}/envs/meta/share/trimmomatic/ \ + --trimmomatic-options 'ILLUMINACLIP:/home/liuyongxin/miniconda2/envs/meta/share/trimmomatic/adapters/TruSeq2-PE.fa:2:40:15 SLIDINGWINDOW:4:20 MINLEN:50' \ + --reorder --bowtie2-options '--very-sensitive --dovetail' \ + -db ${db}/kneaddata/human_genome/Homo_sapiens" \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + # (可选)大文件清理,高宿主含量样本可节约>90%空间 + rm -rf temp/qc/*contam* temp/qc/*unmatched* temp/qc/*.fq + +质控结果汇总 + + # 采用kneaddata附属工具kneaddata_read_count_table + kneaddata_read_count_table --input temp/qc \ + --output temp/kneaddata.txt + # 筛选重点结果列 + cut -f 1,2,4,12,13 temp/kneaddata.txt | sed 's/_1_kneaddata//' > result/qc/sum.txt + cat result/qc/sum.txt + + # 用R代码统计下质控结果 + Rscript -e "data=read.table('result/qc/sum.txt', header=T, row.names=1, sep='\t'); summary(data)" + # R转换宽表格为长表格 + Rscript -e "library(reshape2); data=read.table('result/qc/sum.txt', header=T,row.names=1, sep='\t'); write.table(melt(data), file='result/qc/sum_long.txt',sep='\t', quote=F, col.names=T, row.names=F)" + cat result/qc/sum_long.txt + # 可用 http://www.ehbio.com/ImageGP/ 绘图展示 + +## 1.4 (可选)质控后质量评估 + +整理bowtie2, trimmomatic, fastqc报告,接头和PCR污染率一般小于1%。结果见:result/qc/multiqc_report_1.html + + # 1-2m + fastqc temp/qc/*_1_kneaddata_paired_*.fastq -t 2 + multiqc -d temp/qc/ -o result/qc/ + # v1.7以后开始使用Python3,v1.8+缺少bowtie2比对结果的统计 + + +# 二、基于读长分析 Read-based (HUMAnN2) + +## 2.1 准备HUMAnN2输入文件 + +小技巧:循环批量处理样本列表 + + # 基于样本元数据提取样本列表命令解析 + # 去掉表头 + tail -n+2 result/metadata.txt + # 提取第一列样本名 + tail -n+2 result/metadata.txt|cut -f1 + # 循环处理样本 + for i in `tail -n+2 result/metadata.txt|cut -f1`;do echo "Processing "$i; done + # ` 反引号为键盘左上角Esc键下面的按键,一般在数字1的左边,代表运行命令返回结果 + +HUMAnN2要求双端序列合并的文件作为输入,for循环根据实验设计样本名批量双端序列合并。 +注意星号和问号,分别代表多个和单个字符。当然大家更不能溜号~~~行分割的代码行末有一个 \ + + mkdir -p temp/concat + # 双端合并为单个文件 + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + cat temp/qc/${i}_1_kneaddata_paired_?.fastq \ + > temp/concat/${i}.fq; + done + # 查看样品数量和大小 + ls -sh temp/concat/*.fq + # 数据太大,计算时间长,可用head对单端分析截取20M序列,即3G,则为80M行,详见附录:HUMAnN2减少输出文件加速 + +## 2.2 HUMAnN2计算物种和功能组成 + +- 物种组成调用MetaPhlAn2, bowtie2比对至核酸序列,解决有哪些微生物存在的问题; +- 功能组成为humann2调用diamond比对至蛋白库11Gb,解决这些微生物参与哪些功能通路的问题; +- 输入文件:temp/concat/*.fq 每个样品质控后双端合并后的fastq序列 +- 输出文件:temp/humann2/ 目录下 + - C1_pathabundance.tsv + - C1_pathcoverage.tsv + - C1_genefamilies.tsv +- 整合后的输出: + - result/metaphlan2/taxonomy.tsv 物种丰度表 + - result/metaphlan2/taxonomy.spf 物种丰度表(用于stamp分析) + - result/humann2/pathabundance_relab_unstratified.tsv 通路丰度表 + - result/humann2/pathabundance_relab_stratified.tsv 通路物种组成丰度表 + - stratified(每个菌对此功能通路组成的贡献)和unstratified(功能组成) + +(可选)启动humann2环境:仅humann2布置于自定义环境下使用 + + # 方法1. conda加载环境 + # conda activate humann2 + # 方法2. source加载指定 + # source ~/miniconda3/envs/humann2/bin/activate + +检查数据库配置是否正确 + + humann2 --version # v2.8.1/0.11.2 + humann2_config + +单样本1.25M PE150运行测试,8p,2.5M,1~2h;0.2M, 34m;0.1M,30m;0.01M,25m + + # mkdir -p temp/humann2 + # i=C1 + # time humann2 --input temp/concat/${i}.fq \ + # --output temp/humann2 --threads 8 + +多样本并行计算,测试数据约30m,系统耗时12小时 + + mkdir -p temp/humann2 + time parallel -j 2 \ + 'humann2 --input temp/concat/{}.fq \ + --output temp/humann2/ --threads 8 ' \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + + # (可选)大文件清理,humann2临时文件可达原始数据30~40倍 + # 链接重要文件至humann2目录 + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + ln temp/humann2/${i}_humann2_temp/${i}_metaphlan_bugs_list.tsv temp/humann2/ + done + # 删除临时文件 + rm -rf temp/concat/* temp/humann2/*_humann2_temp + +## 2.3 物种组成表 + + mkdir -p result/metaphlan2 + +### 2.3.1 样品结果合并 + + # 合并、修正样本名、预览 + merge_metaphlan_tables.py \ + temp/humann2/*_metaphlan_bugs_list.tsv | \ + sed 's/_metaphlan_bugs_list//g' \ + > result/metaphlan2/taxonomy.tsv + head -n3 result/metaphlan2/taxonomy.tsv + +### 2.3.2 转换为stamp的spf格式 + + metaphlan_to_stamp.pl result/metaphlan2/taxonomy.tsv \ + > result/metaphlan2/taxonomy.spf + head -n3 result/metaphlan2/taxonomy.spf + # 下载metadata.txt和taxonomy.spf使用stamp分析 + # 网络分析见附录 metaphlan2-共有或特有物种网络图 + +### 2.3.3 (可选)Python绘制热图 + + # c设置颜色方案,top设置物种数量,minv最小相对丰度,s标准化方法,log为取10为底对数,xy为势图宽和高,图片可选pdf/png/svg格式 + metaphlan_hclust_heatmap.py \ + --in result/metaphlan2/taxonomy.tsv \ + --out result/metaphlan2/heatmap.pdf \ + -c jet --top 30 --minv 0.1 \ + -s log -x 0.4 -y 0.2 + # 帮助见 metaphlan_hclust_heatmap.py -h + # 更多绘制见3StatPlot.sh + +## 2.4 功能组成分析 + + mkdir -p result/humann2 + +### 2.4.1 功能组成合并、标准化和分层 + +合并通路丰度(pathabundance),含功能和对应物种组成。可选基因家族(genefamilies 太多),通路覆盖度(pathcoverage)。注意看屏幕输出`# Gene table created: result/humann2/pathabundance.tsv` + + humann2_join_tables \ + --input temp/humann2 \ + --file_name pathabundance \ + --output result/humann2/pathabundance.tsv + # 样本名调整:删除列名多余信息 + head result/humann2/pathabundance.tsv + sed -i 's/_Abundance//g' result/humann2/pathabundance.tsv + # 预览和统计 + head result/humann2/pathabundance.tsv + csvtk -t stat result/humann2/pathabundance.tsv + +标准化为相对丰度relab(1)或百万比cpm + + humann2_renorm_table \ + --input result/humann2/pathabundance.tsv \ + --units relab \ + --output result/humann2/pathabundance_relab.tsv + head -n5 result/humann2/pathabundance_relab.tsv + +分层结果:功能和对应物种表(stratified)和功能组成表(unstratified) + + humann2_split_stratified_table \ + --input result/humann2/pathabundance_relab.tsv \ + --output result/humann2/ + # 可以使用stamp进行统计分析 + +### 2.4.2 差异比较和柱状图 + +两样本无法组间比较,在pcl层面替换为HMP数据进行统计和可视化。 + +参考 https://bitbucket.org/biobakery/humann2/wiki/Home#markdown-header-standard-workflow + +- 输入数据:通路丰度表格 result/humann2/pathabundance.tsv +- 输入数据:实验设计信息 result/metadata.txt +- 中间数据:包含分组信息的通路丰度表格文件 result/humann2/pathabundance.pcl +- 输出结果:result/humann2/associate.txt + +在通路丰度中添加分组 + + ## 提取样品列表 + head -n1 result/humann2/pathabundance.tsv | sed 's/# Pathway/SampleID/' | tr '\t' '\n' > temp/header + ## 对应分组 + awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$2}NR>FNR{print a[$1]}' result/metadata.txt temp/header | tr '\n' '\t'|sed 's/\t$/\n/' > temp/group + # 合成样本、分组+数据 + cat <(head -n1 result/humann2/pathabundance.tsv) temp/group <(tail -n+2 result/humann2/pathabundance.tsv) \ + > result/humann2/pathabundance.pcl + head -n5 result/humann2/pathabundance.pcl + +组间比较,样本量少无差异,结果为4列的文件:通路名字,通路在各个分组的丰度,差异P-value,校正后的Q-value。演示数据2样本无法统计,此处替换为HMP的结果演示统计和绘图(上传hmp_pathabund.pcl,替换pathabundance.pcl为hmp_pathabund.pcl)。 + + wget -c http://210.75.224.110/db/train/meta/result/humann2/hmp_pathabund.pcl -O result/humann2/hmp_pathabund.pcl + # 设置输入文件名 + pcl=result/humann2/hmp_pathabund.pcl + # 统计表格行、列数量 + csvtk -t stat ${pcl} + head -n2 ${pcl} |cut -f 1-5 + # 按分组KW检验,注意第二列的分组列名 + humann2_associate --input ${pcl} \ + --focal-metadatum Group --focal-type categorical \ + --last-metadatum Group --fdr 0.05 \ + --output result/humann2/associate.txt + wc -l result/humann2/associate.txt + head -n5 result/humann2/associate.txt + +barplot展示腺苷核苷酸合成的物种组成 + + # --sort sum metadata 按丰度和分组排序 + # 指定差异通路,如 P163-PWY / PWY-3781 / PWY66-409 / PWY1F-823 + path=PWY-3781 + humann2_barplot --sort sum metadata \ + --input ${pcl} \ + --focal-feature ${path} \ + --focal-metadatum Group --last-metadatum Group \ + --output result/humann2/barplot_${path}.pdf + +### 2.4.3 转换为KEGG注释 + +需要下载utility_mapping数据库并配置成功才可以使用。详见软件和数据库安装1soft_db.sh。 + +支持GO、PFAM、eggNOG、level4ec、KEGG的D级KO等注释,详见`humann2_regroup_table -h`。 + + # 转换基因家族为KO(uniref90_ko),可选eggNOG(uniref90_eggnog)或酶(uniref90_level4ec) + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + humann2_regroup_table \ + -i temp/humann2/${i}_genefamilies.tsv \ + -g uniref90_ko \ + -o temp/humann2/${i}_ko.tsv + done + # 合并,并修正样本名 + humann2_join_tables \ + --input temp/humann2/ \ + --file_name ko \ + --output result/humann2/ko.tsv + sed -i '1s/_Abundance-RPKs//g' result/humann2/ko.tsv + +## 2.5 GraPhlAn图 + + # metaphlan2 to graphlan + export2graphlan.py --skip_rows 1,2 -i result/metaphlan2/taxonomy.tsv \ + --tree temp/merged_abundance.tree.txt \ + --annotation temp/merged_abundance.annot.txt \ + --most_abundant 1000 --abundance_threshold 20 --least_biomarkers 10 \ + --annotations 3,4 --external_annotations 7 + # 参数说明见PPT,或运行 export2graphlan.py --help + # graphlan annotation + graphlan_annotate.py --annot temp/merged_abundance.annot.txt \ + temp/merged_abundance.tree.txt temp/merged_abundance.xml + # output PDF figure, annoat and legend + graphlan.py temp/merged_abundance.xml result/metaphlan2/graphlan.pdf \ + --external_legends + + +## 2.6 LEfSe差异分析物种 + +- 输入文件:物种丰度表result/metaphlan2/taxonomy.tsv +- 输入文件:样品分组信息 result/metadata.txt +- 中间文件:整合后用于LefSe分析的文件 result/metaphlan2/lefse.txt,这个文件可以提供给www.ehbio.com/ImageGP 用于在线LefSE分析 +- LefSe结果输出:result/metaphlan2/目录下lefse开头和feature开头的文件 + +前面演示数据仅有2个样本,无法进行差异比较。下面使用result12目录中由12个样本生成的结果表进行演示 + + # 设置结果目录,自己的数据使用result,此处演示使用result12 + result=result12 + +准备输入文件,修改样本品为组名(可手动修改) + + # 预览输出数据 + head -n3 $result/metaphlan2/taxonomy.tsv + # 提取样本行,替换为每个样本一行,修改ID为SampleID + head -n1 $result/metaphlan2/taxonomy.tsv|tr '\t' '\n'|sed '1 s/ID/SampleID/' >temp/sampleid + head -n3 temp/sampleid + # 提取SampleID对应的分组Group(假设为metadata.txt中第二列$2),替换换行\n为制表符\t,再把行末制表符\t替换回换行 + awk 'BEGIN{OFS=FS="\t"}NR==FNR{a[$1]=$2}NR>FNR{print a[$1]}' $result/metadata.txt temp/sampleid|tr '\n' '\t'|sed 's/\t$/\n/' >groupid + cat groupid + # 合并分组和数据(替换表头) + cat groupid <(tail -n+2 $result/metaphlan2/taxonomy.tsv) > $result/metaphlan2/lefse.txt + head -n3 $result/metaphlan2/lefse.txt + +方法1. 推荐在线 http://www.ehbio.com/ImageGP 中LEfSe一键分析 + +方法2. (可选)LEfSe命令行分析代码供参考 + + # 格式转换为lefse内部格式 + lefse-format_input.py \ + $result/metaphlan2/lefse.txt \ + temp/input.in -c 1 -o 1000000 + # 运行lefse(样本无重复、分组将报错) + run_lefse.py temp/input.in \ + temp/input.res + + # 绘制物种树注释差异 + lefse-plot_cladogram.py temp/input.res \ + result/metaphlan2/lefse_cladogram.pdf --format pdf + + # 绘制所有差异features柱状图 + lefse-plot_res.py temp/input.res \ + $result/metaphlan2/lefse_res.pdf --format pdf + + # 绘制单个features柱状图 + # 查看显著差异features,按丰度排序 + grep -v '-' temp/input.res | sort -k3,3n + # 手动选择指定feature绘图,如Firmicutes + lefse-plot_features.py -f one \ + --feature_name "k__Bacteria.p__Firmicutes" \ + --format pdf \ + temp/input.in temp/input.res \ + $result/metaphlan2/lefse_Firmicutes.pdf + + # 批量绘制所有差异features柱状图 + lefse-plot_features.py -f diff \ + --archive none --format pdf \ + temp/input.in temp/input.res \ + $result/metaphlan2/lefse_ + + +## 2.7 Kraken2物种注释 + +Kraken2可以快速完成读长(read)层面的物种注释和定量,还可以进行重叠群(contig)、基因(gene)、宏基因组组装基因组(MAG/bin)层面的序列物种注释。 + + # 启动kraken2工作环境 + source /conda2/envs/kraken2/bin/activate + # 记录软件版本 + kraken2 --version # 2.1.1 + +### 2.7.1 Kraken2物种注释 + +- {1}代表样本名字 +- 输入:temp/qc/{1}_1_kneaddata_paired*.fastq 质控后的FASTQ数据 +- 参考数据库:-db ${db}/kraken2/mini/,默认标准数据库>50GB,这里使用8GB迷你数据库。 +- 输出结果:每个样本单独输出,temp/kraken2/{1}_report和temp/kraken2/{1}_output +- 整合后的输出结果: result/kraken2/taxonomy_count.txt 物种丰度表 + + +(可选) 单样本注释,5m + + mkdir -p temp/kraken2 + i=C1 + # 1m,--use-mpa-style可直接输出metphlan格式,但bracken无法处理 + # 38.6%可注释,64.4%末注释,耗时30s,内存峰值8G + time kraken2 --db ${db}/kraken2/mini/ --paired temp/qc/${i}_1_kneaddata_paired*.fastq \ + --threads 8 --use-names --report-zero-counts \ + --report temp/kraken2/${i}.report \ + --output temp/kraken2/${i}.output + +多样本并行生成report,2样本各8线程 + + time parallel -j 2 \ + "kraken2 --db ${db}/kraken2/mini --paired temp/qc/{1}_1_kneaddata_paired*.fastq \ + --threads 8 --use-names --report-zero-counts \ + --report temp/kraken2/{1}.report \ + --output temp/kraken2/{1}.output" \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + +使用krakentools转换report为mpa格式 + + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + kreport2mpa.py -r temp/kraken2/${i}.report \ + --display-header \ + -o temp/kraken2/${i}.mpa + done + +合并样本为表格 + + mkdir -p result/kraken2 + # 输出结果行数相同,但不一定顺序一致,要重新排序 + parallel -j 1 \ + 'tail -n+2 temp/kraken2/{1}.mpa | sort | cut -f 2 | sed "1 s/^/{1}\n/" > temp/kraken2/{1}_count ' \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + # 提取第一样本品行名为表行名 + header=`tail -n 1 result/metadata.txt | cut -f 1` + echo $header + tail -n+2 temp/kraken2/${header}.mpa | sort | cut -f 1 | \ + sed "1 s/^/Taxonomy\n/" > temp/kraken2/0header_count + head -n3 temp/kraken2/0header_count + # paste合并样本为表格 + ls temp/kraken2/*count + paste temp/kraken2/*count > result/kraken2/tax_count.mpa + # 检查表格及统计 + csvtk -t stat result/kraken2/tax_count.mpa + +### 2.7.2 Bracken估计丰度 + +参数简介: +- -d为数据库,与kraken2一致 +- -i为输入kraken2报告文件 +- r是读长,此处为100,通常为150 +- l为分类级,本次种级别(S)丰度估计,可选域、门、纲、目、科、属、种:D,P,C,O,F,G,S +- t是阈值,默认为0,越大越可靠,但可用数据越少 +- -o 输出重新估计的值 + +循环重新估计每个样品的丰度 + + # 设置估算的分类级别D,P,C,O,F,G,S,常用 P和S + tax=S + mkdir -p temp/bracken + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + # i=C1 + bracken -d ${db}/kraken2/mini \ + -i temp/kraken2/${i}.report \ + -r 100 -l ${tax} -t 0 \ + -o temp/bracken/${i} + done + +结果描述:共7列,分别为物种名、ID、分类级、读长计数、补充读长计数、**总数、总数百分比** + + name taxonomy_id taxonomy_lvl kraken_assigned_reads added_reads new_est_reads fraction_total_reads + Capnocytophaga sputigena 1019 S 4798 996 5794 0.23041 + Capnocytophaga sp. oral taxon 878 1316596 S 239 21 260 0.01034 + +bracken结果合并成表 + + # 输出结果行数相同,但不一定顺序一致,要去年表头重新排序 + # 仅提取第6列reads count,并添加样本名 + parallel -j 1 \ + 'tail -n+2 temp/bracken/{1}|sort|cut -f 6| sed "1 s/^/{1}\n/" > temp/bracken/{1}.count ' \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + # 提取第一样本品行名为表行名 + h=`tail -n1 result/metadata.txt|cut -f1` + tail -n+2 temp/bracken/${h}|sort|cut -f1 | \ + sed "1 s/^/Taxonomy\n/" > temp/bracken/0header.count + # 检查文件数,为n+1 + ls temp/bracken/*count | wc + # paste合并样本为表格,并删除非零行 + paste temp/bracken/*count > result/kraken2/bracken.${tax}.txt + # 统计行列,默认去除表头 + csvtk -t stat result/kraken2/bracken.${tax}.txt + +结果筛选 + + # microbiome_helper按频率过滤,-r可标准化,-e过滤 + Rscript $db/script/filter_feature_table.R \ + -i result/kraken2/bracken.${tax}.txt \ + -p 0.01 \ + -o result/kraken2/bracken.${tax}.0.01 + # > 0.01(1%)的样本在出现,数量会明显减少 + csvtk -t stat result/kraken2/bracken.${tax}.0.01 + + # 门水平去除脊索动物 + grep 'Chordata' result/kraken2/bracken.P.0.01 + grep -v 'Chordata' result/kraken2/bracken.P.0.01 > result/kraken2/bracken.P.0.01-H + + # 按物种名手动去除宿主污染,以人为例(需按种水平计算相关结果) + # 种水平去除人类P:Chordata,S:Homo sapiens + grep 'Homo sapiens' result/kraken2/bracken.S.0.01 + grep -v 'Homo sapiens' result/kraken2/bracken.S.0.01 \ + > result/kraken2/bracken.S.0.01-H + +分析后清理每条序列的注释大文件 + + # rm -rf temp/kraken2/*.output + +多样性分析/物种组成,详见3StatPlot.sh,Kraken2结果筛选序列见附录 + + +# 三、组装分析流程 Assemble-based + +## 3.1 拼接 Assembly + +### 3.1.1 MEGAHIT拼接 + + # 删除旧文件夹,否则megahit无法运行 + rm -rf temp/megahit + # 组装,10~30m,TB级数据需几天至几周 + time megahit -t 3 \ + -1 `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_1.fastq/'| tr '\n' ','|sed 's/,$//'` \ + -2 `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_2.fastq/'| tr '\n' ','|sed 's/,$//'` \ + -o temp/megahit + # 检查点:查看拼接结果大小,通常300M~5G + ls -sh temp/megahit/final.contigs.fa + # 统计 + seqkit stat temp/megahit/final.contigs.fa + # 预览重叠群最前6行,前60列字符 + head -n6 temp/megahit/final.contigs.fa | cut -c1-60 + + # 如果contigs太多,可以按长度筛选,降低数据量,提高基因完整度,详见附录megahit + + # 备份重要结果 + mkdir -p result/megahit/ + ln -f temp/megahit/final.contigs.fa result/megahit/ + # 删除临时文件 + rm -rf temp/megahit/intermediate_contigs/ + +### 3.1.2 (可选) metaSPAdes精细拼接 + + # 精细但使用内存和时间更多,15~65m + time metaspades.py -t 6 -m 100 \ + `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_1.fastq/'|sed 's/^/-1 /'| tr '\n' ' '` \ + `tail -n+2 result/metadata.txt|cut -f 1|sed 's/^/temp\/qc\//;s/$/_1_kneaddata_paired_2.fastq/'|sed 's/^/-2 /'| tr '\n' ' '` \ + -o temp/metaspades + # 23M,contigs体积更大 + ls -sh temp/metaspades/contigs.fasta + seqkit stat temp/metaspades/contigs.fasta + + # 备份重要结果 + mkdir -p result/metaspades/ + ln -f temp/metaspades/contigs.fasta result/metaspades/ + # 删除临时文件 + rm -rf temp/metaspades + +注:metaSPAdes支持二、三代混合组装,见附录,此外还有OPERA-MS组装二、三代方案 + +### 3.1.3 QUAST评估 + + quast.py temp/megahit/final.contigs.fa -o result/megahit/quast -t 2 + # 生成report文本tsv/txt、网页html、PDF等格式报告 + + # (可选) megahit和metaspades比较 + quast.py --label "megahit,metapasdes" \ + temp/megahit/final.contigs.fa \ + temp/metaspades/contigs.fasta \ + -o temp/quast + + # (可选)metaquast评估,更全面,但需下载相关数据库,受网速影响可能时间很长(我很少成功) + # metaquast based on silva, and top 50 species genome to access + time metaquast.py result/megahit/final.contigs.fa -o result/megahit/metaquast + +## 3.2 基因预测、去冗余和定量 + + # Gene prediction, cluster & quantitfy + +### 3.2.1 metaProdigal基因预测 + + # 输入文件:拼装好的序列文件 result/megahit/final.contigs.fa + # 输出文件:prodigal预测的基因序列 temp/prodigal/gene.fa + # 基因文件大,可参考附录prodigal拆分基因文件,并行计算 + + mkdir -p temp/prodigal + # prodigal的meta模式预测基因,35s,>和2>&1记录分析过程至gene.log + time prodigal -i result/megahit/final.contigs.fa \ + -d temp/prodigal/gene.fa \ + -o temp/prodigal/gene.gff \ + -p meta -f gff > temp/prodigal/gene.log 2>&1 + # 查看日志是否运行完成,有无错误 + tail temp/prodigal/gene.log + # 统计基因数量 + grep -c '>' temp/prodigal/gene.fa + # 统计完整基因数量,数据量大可只用完整基因部分 + grep -c 'partial=00' temp/prodigal/gene.fa + # 提取完整基因(完整片段获得的基因全为完整,如成环的细菌基因组) + grep 'partial=00' temp/prodigal/gene.fa | cut -f1 -d ' '| sed 's/>//' > temp/prodigal/full_length.id + seqkit grep -f temp/prodigal/full_length.id temp/prodigal/gene.fa > temp/prodigal/full_length.fa + seqkit stat temp/prodigal/full_length.fa + +### 3.2.2 基因聚类/去冗余cd-hit + + # 输入文件:prodigal预测的基因序列 temp/prodigal/gene.fa + # 输出文件:去冗余后的基因和蛋白序列:result/NR/nucleotide.fa + # result/NR/protein.fa + + mkdir -p result/NR + # aS覆盖度,c相似度,G局部比对,g最优解,T多线程,M内存0不限制 + # 2万基因2m,2千万需要2000h,多线程可加速 + time cd-hit-est -i temp/prodigal/gene.fa \ + -o result/NR/nucleotide.fa \ + -aS 0.9 -c 0.95 -G 0 -g 0 -T 0 -M 0 + # 统计非冗余基因数量,单次拼接结果数量下降不大,多批拼接冗余度高 + grep -c '>' result/NR/nucleotide.fa + # 翻译核酸为对应蛋白序列,emboss + transeq -sequence result/NR/nucleotide.fa \ + -outseq result/NR/protein.fa -trim Y + # 序列名自动添加了_1,为与核酸对应要去除 + sed -i 's/_1 / /' result/NR/protein.fa + # 两批数据去冗余使用cd-hit-est-2d加速,见附录 + +### 3.2.3 基因定量salmon + + # 输入文件:去冗余后的基因和蛋白序列:result/NR/nucleotide.fa + # 输出文件:Salmon定量后的结果:result/salmon/gene.count + # result/salmon/gene.TPM + + mkdir -p temp/salmon + # 启动环境或使用软件绝对路 + conda activate metawrap + alias salmon=/conda2/envs/metawrap/bin/salmon + salmon -v # 1.3.0 + + # 建索引, -t序列, -i 索引,10s + time salmon index \ + -t result/NR/nucleotide.fa \ + -p 9 \ + -i temp/salmon/index + + # 定量,l文库类型自动选择,p线程,--meta宏基因组模式, 2个任务并行2个样 + # 注意parallel中待并行的命令必须是双引号,内部变量需要使用原始绝对路径 + time parallel -j 2 \ + "salmon quant \ + -i temp/salmon/index -l A -p 8 --meta \ + -1 temp/qc/{1}_1_kneaddata_paired_1.fastq \ + -2 temp/qc/{1}_1_kneaddata_paired_2.fastq \ + -o temp/salmon/{1}.quant" \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + + # 合并 + mkdir -p result/salmon + salmon quantmerge \ + --quants temp/salmon/*.quant \ + -o result/salmon/gene.TPM + salmon quantmerge \ + --quants temp/salmon/*.quant \ + --column NumReads -o result/salmon/gene.count + sed -i '1 s/.quant//g' result/salmon/gene.* + + # 预览结果表格 + head -n3 result/salmon/gene.* + +## 3.3 功能基因注释 + + # 输入数据:上一步预测的蛋白序列 result/NR/protein.fa + # 中间结果:temp/eggnog/protein.emapper.seed_orthologs + # temp/eggnog/output.emapper.annotations + # temp/eggnog/output + + # COG定量表:result/eggnog/cogtab.count + # result/eggnog/cogtab.count.spf (用于STAMP) + + # KO定量表:result/eggnog/kotab.count + # result/eggnog/kotab.count.spf (用于STAMP) + + # CAZy碳水化合物注释和定量:result/dbcan2/cazytab.count + # result/dbcan2/cazytab.count.spf (用于STAMP) + + # 抗生素抗性:result/resfam/resfam.count + # result/resfam/resfam.count.spf (用于STAMP) + + # 这部分可以拓展到其它数据库 + +### 3.3.1 基因注释eggNOG(COG/KEGG/CAZy) + + # https://github.com/eggnogdb/eggnog-mapper/wiki/eggNOG-mapper-v2 + + # 记录软件版本 + emapper.py --version # 2.0.0 + + # diamond比对基因至eggNOG 5.0数据库, 1~9h,默认diamond 1e-3 + mkdir -p temp/eggnog + time emapper.py --no_annot --no_file_comments --override \ + --data_dir ${db}/eggnog5 \ + -i result/NR/protein.fa \ + --cpu 9 -m diamond \ + -o temp/eggnog/protein + + # 比对结果功能注释, 1h + time emapper.py \ + --annotate_hits_table temp/eggnog/protein.emapper.seed_orthologs \ + --data_dir ${db}/eggnog5 \ + --cpu 9 --no_file_comments --override \ + -o temp/eggnog/output + + # 添表头, 1列为ID,9列KO,16列CAZy,21列COG,22列描述 + sed '1 i Name\tortholog\tevalue\tscore\ttaxonomic\tprotein\tGO\tEC\tKO\tPathway\tModule\tReaction\trclass\tBRITE\tTC\tCAZy\tBiGG\ttax_scope\tOG\tbestOG\tCOG\tdescription' \ + temp/eggnog/output.emapper.annotations \ + > temp/eggnog/output + +summarizeAbundance生成COG/KO/CAZy丰度汇总表 + + mkdir -p result/eggnog + # 显示帮助,需要Python3环境,可修改软件第一行指定python位置 + summarizeAbundance.py -h + # 汇总,9列KO,16列CAZy按逗号分隔,21列COG按字母分隔,原始值累加 + summarizeAbundance.py \ + -i result/salmon/gene.TPM \ + -m temp/eggnog/output \ + -c '9,16,21' -s ',+,+*' -n raw \ + -o result/eggnog/eggnog + sed -i 's/^ko://' result/eggnog/eggnog.KO.raw.txt + # eggnog.CAZy.raw.txt eggnog.COG.raw.txt eggnog.KO.raw.txt + + # 添加注释生成STAMP的spf格式,结合metadata.txt进行差异比较 + # KO,v2021.4 + awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2} NR>FNR{print a[$1],$0}' \ + ${db}/kegg/KO_description.txt \ + result/eggnog/eggnog.KO.raw.txt | \ + sed 's/^\t/Unannotated\t/' \ + > result/eggnog/eggnog.KO.TPM.spf + # CAZy,v2020.7 + awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2} NR>FNR{print a[$1],$0}' \ + ${db}/dbcan2/CAZy_description.txt result/eggnog/eggnog.CAZy.raw.txt | \ + sed 's/^\t/Unannotated\t/' > result/eggnog/eggnog.CAZy.TPM.spf + # COG + awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2"\t"$3} NR>FNR{print a[$1],$0}' \ + ${db}/eggnog/COG.anno \ + result/eggnog/eggnog.COG.raw.txt | sed '1 s/^/Level1\tLevel2/'> \ + result/eggnog/eggnog.COG.TPM.spf + +### 3.3.2 (可选)碳水化合物dbCAN2 + + # 比对CAZy数据库, 用时2~18m; 加--sensitive更全但慢至1h + mkdir -p temp/dbcan2 + time diamond blastp \ + --db ${db}/dbCAN2/CAZyDB.07312020 \ + --query result/NR/protein.fa \ + --threads 9 -e 1e-5 --outfmt 6 --max-target-seqs 1 --quiet \ + --out temp/dbcan2/gene_diamond.f6 + wc -l temp/dbcan2/gene_diamond.f6 + # 整理比对数据为表格 + mkdir -p result/dbcan2 + # 提取基因与dbcan分类对应表 + perl $db/script/format_dbcan2list.pl \ + -i temp/dbcan2/gene_diamond.f6 \ + -o temp/dbcan2/gene.list + # 按对应表累计丰度 + summarizeAbundance.py \ + -i result/salmon/gene.TPM \ + -m temp/dbcan2/gene.list \ + -c 2 -s ',' -n raw \ + -o result/dbcan2/TPM + # 添加注释生成STAMP的spf格式,结合metadata.txt进行差异比较 + awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$2} NR>FNR{print a[$1],$0}' \ + ${db}/dbcan2/CAZy_description.txt result/dbcan2/TPM.CAZy.raw.txt | \ + sed 's/^\t/Unannotated\t/' > result/dbcan2/TPM.CAZy.raw.spf + # 检查未注释数量,有则需要检查原因 + grep 'Unannotated' result/dbcan2/TPM.CAZy.raw.spf|wc -l + +### 3.3.3 抗生素抗性CARD + +数据库:https://card.mcmaster.ca/ + +参考文献:http://doi.org/10.1093/nar/gkz935 + +软件使用Github: https://github.com/arpcard/rgi + + # 启动rgi环境 + source ${soft}/bin/activate rgi + # 加载数据库 + rgi load -i ${db}/card/card.json \ + --card_annotation ${db}/card/card_database_v3.1.0.fasta --local + + # 蛋白注释 + mkdir -p result/card + cut -f 1 -d ' ' result/NR/protein.fa > temp/protein.fa + # --include_loose 会显著增加上百倍结果 + time rgi main \ + --input_sequence temp/protein.fa \ + --output_file result/card/protein \ + --input_type protein --clean \ + --num_threads 9 --alignment_tool DIAMOND --include_loose + + +结果说明: +- protein.json,在线可视化 +- protein.txt,注释基因列表 + + +# 四、挖掘单菌基因组/分箱(Binning) + +## 4.1 MetaWRAP + + # 主要使用MetaWRAP,演示基于官方测试数据 + # 主页:https://github.com/bxlab/metaWRAP + # 挖掘单菌基因组,需要研究对象复杂度越低、测序深度越大,结果质量越好。要求单样本6GB+,复杂样本如土壤推荐数据量30GB+,至少3个样本 + # 上面的演示数据12个样仅140MB,无法获得单菌基因组,这里使用官方测序数据演示讲解 + # 软件和数据库布置需2-3天,演示数据分析过程超10h,标准30G样也需3-30天,由服务器性能决定。 + +### 4.1.1 准备数据和环境变量 + + # 流程: https://github.com/bxlab/metaWRAP/blob/master/Usage_tutorial.md + > + # 输入数据:质控后的FASTQ序列,文件名格式必须为*_1.fastq和*_2.fastq + # C1_1_kneaddata_paired_1.fastq -> C1_1_1.fq + # C1_1_kneaddata_paired_2.fastq -> C1_1_2.fq + # 放置到 binning/temp/qc 目录下 + + # 拼装获得的contig文件:result/megahit/final.contigs.fa + # 放置到 binning/temp/megahit 目录下 + # + + # 中间输出文件: + # Binning结果:binning/temp/binning + # 提纯后的Bin统计结果:binning/temp/bin_refinement/metawrap_50_10_bins.stats + # Bin定量结果文件:binning/temp/bin_quant/bin_abundance_heatmap.png + # binning/temp/bin_quant/bin_abundance_table.tab (数据表) + # Bin物种注释结果:binning/temp/bin_classify/bin_taxonomy.tab + # Prokka基因预测结果:binning/temp/bin_annotate/prokka_out/bin.10.ffn 核酸序列 + # Bin可视化结果:binning/temp/bloblogy/final.contigs.binned.blobplot (数据表) + # binning/temp/bloblogy/blobplot_figures (可视化图) + + # 准备原始数据从头分析,详见公众号或官网教程 + # 这里我们从质控后数据和拼接结果开始 + cd ${wd} + mkdir -p binning && cd binning + mkdir -p temp && cd temp + # 这里基于质控clean数据和拼接好的contigs,自己链接自上游分析 + # 7G质控数据,输入数据文件名格式必须为*_1.fastq和*_2.fastq + mkdir -p seq + cd seq + # 方法1. 下载测序数据 + # for i in `seq 7 9`;do + # wget -c http://210.75.224.110/share/meta/metawrap/ERR01134${i}_1.fastq.gz + # wget -c http://210.75.224.110/share/meta/metawrap/ERR01134${i}_2.fastq.gz + # done + # gunzip *.gz # 解压文件 + # rename .fq .fastq *.fq # 批量修改扩展名 + # 方法2. 复制准备好的数据 + ln -sf ${db}/metawrap/*.fastq ./ + cd .. + # megahit拼接结果 + mkdir -p megahit + cd megahit + # wget -c http://210.75.224.110/share/meta/metawrap/final.contigs.fa.gz + # gunzip *.gz + ln -s ${db}/metawrap/*.fa ./ + cd ../.. + + # 加载运行环境 + cd ${wd}/binning + conda activate metawrap + + +### 4.1.2 运行三种分箱软件 + + metawrap -v + # 输入文件为contig和clean reads + # 调用三大主流binning程序cococt, maxbin2, metabat2 + # 8p线程2h,24p耗时1h + # nohup 和 & 保证任务在后台不被中断,且记录输出内容到 nohup.out(可选) + nohup metawrap binning -o temp/binning -t 1 -a temp/megahit/final.contigs.fa \ + --metabat2 --maxbin2 --concoct temp/seq/ERR*.fastq & + # 用自己的文件,替换输出文件名为 *1_kneaddata_paired*.fastq + # 如果想接上上面的流程使用自己的文件做分析,则把ERR*.fastq替换为 *1_kneaddata_paired*.fastq + # 输出文件夹 temp/binning 包括3种软件结果和中间文件 + +### 4.1.3 Bin提纯 + + # 8线程2h, 24p 1h + cd ${wd}/binning + # rm -rf temp/bin_refinement + metawrap bin_refinement \ + -o temp/bin_refinement \ + -A temp/binning/metabat2_bins/ \ + -B temp/binning/maxbin2_bins/ \ + -C temp/binning/concoct_bins/ \ + -c 50 -x 10 -t 2 + # 查看高质量Bin的数量,10个,见temp/bin_refinement/metawrap_50_10_bins.stats目录 + wc -l temp/bin_refinement/metawrap_50_10_bins.stats + # 结果改进程度见temp/bin_refinement/figures/目录 + + +### 4.1.4 Bin定量 + + # 使用salmon计算每个bin在样本中相对丰度 + # 耗时3m,系统用时10m,此处可设置线程,但salmon仍调用全部资源 + + # 需要指定输出文件夹,包括4.3中的参数的输出目录 + metawrap quant_bins -b temp/bin_refinement/metawrap_50_10_bins -t 8 \ + -o temp/bin_quant -a temp/megahit/final.contigs.fa temp/seq/ERR*.fastq + # 文件名字改变 + # 结果包括bin丰度热图`temp/bin_quant/bin_abundance_heatmap.png` + # 如果想自己画图,原始数据位于`temp/bin_quant/bin_abundance_table.tab` + ls -l temp/bin_quant/bin_abundance_heatmap.png + +### 4.1.5 Bin注释 + + # Taxator-tk对每条contig物种注释,再估计bin整体的物种,11m (用时66 min) + metawrap classify_bins -b temp/bin_refinement/metawrap_50_10_bins \ + -o temp/bin_classify -t 2 & + # 注释结果见`temp/bin_classify/bin_taxonomy.tab` + + # export LD_LIBRARY_PATH=/conda2/envs/metagenome_env/lib/:${LD_LIBRARY_PATH} + # 这是动态链接库找不到时的一个简单的应急策略 + ln -s /conda2/envs/metagenome_env/lib/libssl.so.1.0.0 . + ln -s /conda2/envs/metagenome_env/lib/libcrypto.so.1.0.0 . + + # 基于prokka基因注释,4m + metaWRAP annotate_bins -o temp/bin_annotate \ + -b temp/bin_refinement/metawrap_50_10_bins -t 1 + # 每个bin基因注释的gff文件bin_funct_annotations, + # 核酸ffn文件bin_untranslated_genes, + # 蛋白faa文件bin_translated_genes + + +## (可选)MetaWRAP单样本分别组装和分箱 + +多样本受硬件、计算时间限制无法完成时,需要单样本组装、分析。或想进一步提高组装质量,减少污染和杂合度,也可以单样本组装。 + +### 参数设定 + + # 样本名 + i=ERR011347 + # 线程数 + p=1 + # 任务数 + j=2 + # 定义完整度和污染率的阈值(50, 5; Finn NBT 2020; 50, 10, Bowers NBT 2017) + c=50 + x=10 + +输和文件在seq目录 + + mkdir -p seq + ln -s `pwd`/temp/seq/*.fastq seq/ + + ### 1 megahit组装 + +单样本并行组装,13m,314m + + rm -rf temp/megahit_* + time parallel -j ${j} \ + "metawrap assembly \ + -1 seq/{}_1.fastq \ + -2 seq/{}_2.fastq \ + -o temp/megahit_{} \ + -m 100 -t ${p} --megahit" \ + ::: `ls seq/|cut -f1 -d '_'|uniq` + +### 2 运行三种bin软件 + + # 192p, 15m (concoct会使用所有线程) + parallel -j ${j} \ + "metawrap binning \ + -o temp/binning_{} -t ${p} \ + -a temp/megahit_{}/final_assembly.fasta \ + --metabat2 --maxbin2 --concoct \ + seq/{}_*.fastq" \ + ::: `ls seq/|cut -f1 -d '_'|uniq` + +### 3 Bin提纯 + + # 24p,10h + parallel -j ${j} \ + "metawrap bin_refinement \ + -o temp/bin_refinement_{} -t ${p} \ + -A temp/binning_{}/metabat2_bins/ \ + -B temp/binning_{}/maxbin2_bins/ \ + -C temp/binning_{}/concoct_bins/ \ + -c ${c} -x ${x}" \ + ::: `ls seq/|cut -f1 -d '_'|uniq` + +## 4.2 dRep去冗余种/株基因组集 + + # 进入虚拟环境,没有用conda安装 + + # conda activate drep + source ${soft}/bin/activate drep + cd ${wd}/binning + +合并所有bin至同一目录 + + mkdir -p temp/drep_in + # 混合组装分箱并重命名 + ln -s `pwd`/temp/bin_refinement/metawrap_50_10_bins/bin.* temp/drep_in/ + rename 'bin' 'mix_all' temp/drep_in/bin.* + + # 单样品组装分箱结果重命名 + for i in `ls seq/|cut -f1 -d '_'|uniq`;do + ln -s `pwd`/temp/bin_refinement_${i}/metawrap_50_10_bins/bin.* temp/drep_in/ + rename "bin." "s_${i}" temp/drep_in/bin.* + done + # 统计混合和单样本来源数据,10个混,5个单 + ls temp/drep_in/|cut -f 1 -d '_'|uniq -c + # 统计混合批次/单样本来源 + ls temp/drep_in/|cut -f 2 -d '_'|cut -f 1 -d '.' |uniq -c + +按种水平去冗余:15个为10个,8个来自混拼,2个来自单拼 + + mkdir -p temp/drep95 + # 15个,40min + dRep dereplicate temp/drep95/ \ + -g temp/drep_in/*.fa \ + -sa 0.95 -nc 0.30 -comp 50 -con 10 -p 3 + +主要结果: + +- 非冗余基因组集:dereplicated_genomes/*.fa +- 聚类信息表:data_tables/Cdb.csv +- 聚类和质量图:firgures/*clustering* + +(可选)按株水平汇总 + + # 20-30min + mkdir -p temp/drep95 + dRep dereplicate temp/drep95/ \ + -g temp/drep_in/*.fa \ + -sa 0.99 -nc 0.30 -comp 50 -con 10 -p 24 + +## 4.3 GTDB-tk物种注释和进化树 + +启动软件所在虚拟环境 + + # gtdbtk与drep安装在了同一个环境 + # conda activate gtdbtk + +细菌基因组物种注释 + +以上面鉴定的10个种为例,注意扩展名要与输入文件一致,可使用压缩格式gz。主要结果文件描述:此9个细菌基因组,结果位于tax.bac120开头的文件,如物种注释 tax.bac120.summary.tsv。古菌结果位于tax.ar122开头的文件中。 + + mkdir -p temp/gtdb_classify + # 10个基因组,24p,100min 152 G内存 + gtdbtk classify_wf \ + --genome_dir temp/drep95/dereplicated_genomes \ + --out_dir temp/gtdb_classify \ + --extension fa \ + --prefix tax \ + --cpus 10 + + +多序列对齐结果建树 + + # 以9个细菌基因组的120个单拷贝基因建树,1s + mkdir -p temp/gtdb_infer + gtdbtk infer \ + --msa_file temp/gtdb_classify/tax.bac120.user_msa.fasta \ + --out_dir temp/gtdb_infer \ + --prefix tax \ + --cpus 2 + +树文件可使用iTOL在线美化,也可使用GraphLan本地美化。 + +## 4.4 table2itol制作树注释文件 + +以gtdb-tk物种注释(tax.bac120.summary.tsv)和drep基因组评估(Widb.csv)信息为注释信息 + + mkdir -p result/itol + # 制作分类学表 + tail -n+2 temp/gtdb_classify/tax.bac120.summary.tsv|cut -f 1-2|sed 's/;/\t/g'|sed '1 s/^/ID\tDomain\tPhylum\tClass\tOrder\tFamily\tGenus\tSpecies\n/' \ + > result/itol/tax.txt + # 基因组评估信息 + sed 's/,/\t/g;s/.fa//' temp/drep95/data_tables/Widb.csv|cut -f 1-7,11|sed '1 s/genome/ID/' \ + > result/itol/genome.txt + # 整合注释文件 + awk 'BEGIN{OFS=FS="\t"} NR==FNR{a[$1]=$0} NR>FNR{print $0,a[$1]}' result/itol/genome.txt result/itol/tax.txt|cut -f 1-8,10- > result/itol/annotation.txt + +table2itol制作注释文件 + + cd result/itol/ + # 设置脚本位置 + db=/disk1/db/script/table2itol/ + #db=/db + + ## 方案1. 分类彩带、数值热图、种标签 + # -a 找不到输入列将终止运行(默认不执行)-c 将整数列转换为factor或具有小数点的数字,-t 偏离提示标签时转换ID列,-w 颜色带,区域宽度等, -D输出目录,-i OTU列名,-l 种标签替换ID + # Fatal error: ??????'./table2itol-master/table2itol.R': ????????? + Rscript ${db}/table2itol.R -a -c double -D plan1 -i ID -l Species -t %s -w 0.5 annotation.txt + # 生成注释文件中每列为单独一个文件 + + ## 方案2. 数值柱形图,树门背景色,属标签 + Rscript ${db}/table2itol.R -a -d -c none -D plan2 -b Phylum -i ID -l Genus -t %s -w 0.5 annotation.txt + + ## 方案3.分类彩带、整数为柱、小数为热图 + Rscript ${db}/table2itol.R -c keep -D plan3 -i ID -t %s annotation.txt + + ## 方案4. 将整数转化成因子生成注释文件 + Rscript ${db}/table2itol.R -a -c factor -D plan4 -i ID -l Genus -t %s -w 0 annotation.txt + +## 4.5 PROKKA单菌基因组功能注释 + + conda activate metawrap + export PERL_5LIB=${PERL5LIB}:${soft}/envs/metawrap/lib/perl5/site_perl/5.22.0/ + i=bin1 + time prokka result/contig/${db}.fa \ + --kingdom Archaea,Bacteria --cpus 9 \ + --outdir temp/prokka/${db} + +# 附录:常见分析问题和经验 + +## 质控KneadData + +### 去宿主后双端不匹配——序列改名 + +(可选) 序列改名,解决NCBI SRA数据双端ID重名问题,详见[《MPB:随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题》](https://mp.weixin.qq.com/s/ovL4TwalqZvwx5qWb5fsYA)。 + + gunzip seq/*.gz + sed -i '1~4 s/$/\\1/g' seq/*_1.fq + sed -i '1~4 s/$/\\2/g' seq/*_2.fq + # 再次核对样本是否标签有重复 + head seq/C2_1.fq + head seq/C2_2.fq + # 结果压缩节省空间 + gzip seq/*.fq + # pigz是并行版的gzip,没装可使用为gzip + pigz seq/*.fq + +### Java不匹配——重装Java运行环境 + +若出现错误 Unrecognized option: -d64,则安装java解决: + + conda install -c cyclus java-jdk + +## 读长分析HUMAnN2 + +### HUMAnN2减少输出文件加速 + +HUMAnN2是计算非常耗时的步骤,如果上百个10G+的样本,有时需要几周至几月的分析。以下介绍两种快速完成分析,而且结果变化不大的方法。替换下面for循环为原文中的“双端合并为单个文件”部分代码 + +方法1. 软件分析不考虑双端信息,只用一端可获得相近结果,且速度提高1倍。链接质控结果左端高质量至合并目录 + + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + ln -sf `pwd`/temp/qc/${i}_1_kneaddata_paired_1.fastq temp/concat/${i}.fq + done + +方法2. 控制标准样比对时间。测序数据量通常为6~50G,同一样本分析时间可达10h~100h,严重浪费时间而浪费硬盘空间。 +可用head对单端分析截取20M序列,即3G,则为80M行 + + for i in `tail -n+2 result/metadata.txt|cut -f1`;do + head -n80000000 temp/qc/${i}_1_kneaddata_paired_1.fastq > temp/concat/${i}.fq + done + +### metaphlan2无法找到数据库 + +正常在首次运行时,会自动下载数据库。有时会失败,解决方法: + +方法1. 使用软件安装的用户运行一下程序即可下载成功 + +方法2. 将我们预下载好的数据索引文件,链接到软件安装目录 + + db=~/db + soft=~/miniconda2 + mkdir -p ${soft}/bin/db_v20 + ln -s ${db}/metaphlan2/* ${soft}/bin/db_v20/ + mkdir -p ${soft}/bin/databases + ln -s ${db}/metaphlan2/* ${soft}/bin/databases/ + +### metaphlan2-共有或特有物种网络图 + + awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {for(i=9;i<=NF;i++) a[i]=$i; print "Tax\tGroup"} \ + else {for(i=9;i<=NF;i++) if($i>0.05) print "Tax_"FNR, a[i];}}' \ + result/metaphlan2/taxonomy.spf > result/metaphlan2/taxonomy_highabundance.tsv + + awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {print "Tax\tGrpcombine";} else a[$1]=a[$1]==""?$2:a[$1]$2;}END{for(i in a) print i,a[i]}' \ + result/metaphlan2/taxonomy_highabundance.tsv > result/metaphlan2/taxonomy_group.tsv + + cut -f 2 result/metaphlan2/taxonomy_group.tsv | tail -n +2 | sort -u >group + + for i in `cat group`; do printf "#%02x%02x%02x\n" $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)); done >colorcode + + paste group colorcode >group_colorcode + + awk 'BEGIN{OFS=FS="\t"}ARGIND==1{a[$1]=$2;}ARGIND==2{if(FNR==1) {print $0, "Grpcombinecolor"} else print $0,a[$2]}' \ + group_colorcode result/metaphlan2/taxonomy_group.tsv > result/metaphlan2/taxonomy_group2.tsv + + awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {print "Tax",$1,$2,$3,$4, $5, $6, $7, $8 } else print "Tax_"FNR, $1,$2,$3,$4, $5,$6, $7, $8}' \ + result/metaphlan2/taxonomy.spf > result/metaphlan2/taxonomy_anno.tsv + +## 生物标志鉴定LEfSe + +### lefse-plot_cladogram.py:Unknown property axis_bgcolor + +若出现错误 Unknown property axis_bgcolor,则修改`lefse-plot_cladogram.py`里的`ax_bgcolor`替换成`facecolor`即可。 + + # 查看脚本位置,然后使用RStudio或Vim修改 + type lefse-plot_cladogram.py + +## 物种分类Kraken2 + +### 合并样本为表格combine_mpa.py + +krakentools中combine_mpa.py,需手动安装脚本,且结果还需调整样本名 + + combine_mpa.py \ + -i `tail -n+2 result/metadata.txt|cut -f1|sed 's/^/temp\/kraken2\//;s/$/.mpa/'|tr '\n' ' '` \ + -o temp/kraken2/combined_mpa + +### 序列筛选/去宿主extract_kraken_reads.py + +提取非植物33090和动物(人)33208序列、选择细菌2和古菌2157 + + mkdir -p temp/kraken2_qc + parallel -j 3 \ + "/db/script/extract_kraken_reads.py \ + -k temp/kraken2/{1}.output \ + -r temp/kraken2/{1}.report \ + -1 temp/qc/{1}_1_kneaddata_paired_1.fastq \ + -2 temp/qc/{1}_1_kneaddata_paired_2.fastq \ + -t 33090 33208 --include-children --exclude \ + --max 20000000 --fastq-output \ + -o temp/kraken2_qc/{1}_1.fq \ + -o2 temp/kraken2_qc/{1}_2.fq" \ + ::: `tail -n+2 result/metadata.txt|cut -f1` + + +## 组装Megahit + +### 序列长度筛选 + +megahit默认>200,可选 > 500 / 1000 bp,并统计前后变化;如此处筛选 > 500 bp,序列从15万变为3.5万条,总长度从7M下降到3M + + mv temp/megahit/final.contigs.fa temp/megahit/raw.contigs.fa + seqkit seq -m 500 temp/megahit/raw.contigs.fa > temp/megahit/final.contigs.fa + seqkit stat temp/megahit/raw.contigs.fa + seqkit stat temp/megahit/final.contigs.fa + +### 数据太大导致程序中断 + +报错信息:126 - Too many vertices in the unitig graph (8403694648 >= 4294967294), you may increase the kmer size to remove tons + +解决方法:需要增加k-mer,如最小k-mer改为29,不行继续增加或将数据分批次组装 + +添加参数: --k-min 29 --k-max 141 --k-step 20 + +## 组装MetaSpdades + +### 二三代混合组装 + + # 3G数据,耗时3h + i=SampleA + time metaspades.py -t 48 -m 500 \ + -1 seq/${i}_1.fastq -2 seq/${i}L_2.fastq \ + --nanopore seq/${i}.fastq \ + -o temp/metaspades_${i} + +## 二三代混合组装OPERA-MS + +结果卡在第9步polishing,可添加--no-polishing参数跳过此步;短序列只支持成对文件,多个文件需要cat合并 + +### 二三代混合组装 + + perl ../OPERA-MS.pl \ + --short-read1 R1.fastq.gz \ + --short-read2 R2.fastq.gz \ + --long-read long_read.fastq \ + --no-ref-clustering \ + --num-processors 32 \ + --out-dir RESULTS + +### 二代组装+三代优化 + + perl ~/soft/OPERA-MS/OPERA-MS.pl \ + --contig-file temp/megahit/final.contigs.fa \ + --short-read1 R1.fastq.gz \ + --short-read2 R2.fastq.gz \ + --long-read long_read.fastq \ + --num-processors 32 \ + --no-ref-clustering \ + --no-strain-clustering \ + --no-polishing \ + --out-dir temp/opera + +结果可用quast或seqkit stat统计对二代组装的改进效果 + + +## 基因序列prodigal + +### 序列拆分并行预测基因 +(可选)以上注释大约1小时完成1M个基因的预测。加速可将contigs拆分,并行基因预测后再合并。 + + # 拆分contigs,按1M条每个文件 + n=10000 + seqkit split result/megahit/final.contigs.fa -s $n + # 生成拆分文件序列列表 + ls result/megahit/final.contigs.fa.split/final.contigs.part_*.fa|cut -f 2 -d '_'|cut -f 1 -d '.' \ + > temp/split.list + # 9线程并行基因预测,此步只用单线程且读写强度不大 + time parallel -j 9 \ + "prodigal -i result/megahit/final.contigs.fa.split/final.contigs.part_{}.fa \ + -d temp/gene{}.fa \ + -o temp/gene{}.gff -p meta -f gff \ + > temp/gene{}.log 2>&1 " \ + ::: `cat temp/split.list` + # 合并预测基因和gff注释文件 + cat temp/gene*.fa > temp/prodigal/gene.fa + cat temp/gene*.gff > temp/prodigal/gene.gff + +## 基因去冗余cd-hit + +### 两批基因合并cd-hit-est-2d + +cd-hit-est-2d 两批次构建非冗余基因集 + +A和B基因集,分别有M和N个非冗余基因,两批数据合并后用cd-hit-est去冗余,计算量是(M + N) X (M + N -1) + +cd-hit-est-2d比较,只有M X N的计算量 + + # 计算B中特有的基因 + cd-hit-est-2d -i A.fa -i2 B.fa -o B.uni.fa \ + -aS 0.9 -c 0.95 -G 0 -g 0 \ + -T 96 -M 0 -d 0 + # 合并为非冗余基因集 + cat A.fa B.uni.fa > NR.fa + + +## 基因定量salmon + +### 找不到库文件liblzma.so.0 + +- 报错信息:error while loading shared libraries: liblzma.so.0 +- 问题描述:直接运行salmon报告,显示找不到lib库, +- 解决方法:可使用程序完整路径解决问题,`alias salmon="${soft}/envs/metagenome_env/share/salmon/bin/salmon"` + +## 基因功能数据库 + +### 综合功能注释KEGG描述整理 + +脚本位于 /db/script 目录,https://www.kegg.jp/kegg-bin/show_brite?ko00001.keg 下载htext,即为最新输入文件 ko00001.keg + + kegg_ko00001_htext2tsv.pl -i ko00001.keg -o ko00001.tsv + + +### 抗生素抗性ResFam + +数据库:http://www.dantaslab.org/resfams + +参考文献:http://doi.org/10.1038/ismej.2014.106 + + mkdir -p temp/resfam result/resfam + # 比对至抗生素数据库 1m + time diamond blastp \ + --db ${db}/resfam/Resfams-proteins \ + --query result/NR/protein.fa \ + --threads 9 --outfmt 6 --sensitive \ + -e 1e-5 --max-target-seqs 1 --quiet \ + --out temp/resfam/gene_diamond.f6 + # 提取基因对应抗性基因列表 + cut -f 1,2 temp/resfam/gene_diamond.f6 | uniq | \ + sed '1 i Name\tResGeneID' > temp/resfam/gene_fam.list + # 统计注释基因的比例, 488/19182=2.5% + wc -l temp/resfam/gene_fam.list result/salmon/gene.count + # 按列表累计丰度 + summarizeAbundance.py \ + -i result/salmon/gene.TPM \ + -m temp/resfam/gene_fam.list \ + -c 2 -s ',' -n raw \ + -o result/resfam/TPM + # 结果中添加FAM注释,spf格式用于stamp分析 + awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$4"\t"$3"\t"$2} NR>FNR{print a[$1],$0}' \ + ${db}/resfam/Resfams-proteins_class.tsv result/resfam/TPM.ResGeneID.raw.txt \ + > result/resfam/TPM.ResGeneID.raw.spf + +# 版本更新记录 + +## 1.08 2020.7.20 + +1. KneadData提供数据预处理双端标签唯一命令,兼容最新版; +2. 提供HUMAnN3测试版的安装和分析流程(附录1); +3. eggNOG升级为emapper 2.0和eggNOG 5.0流程,结果列表从13列变为22列,新增CAZy注释。emapper 1.0版本见附录2。 + +## 1.09 2020.10.16 + +1. 新增二、三代混合组装OPERA-MS软件使用 (31Megahit) +2. 新增eggNOG-mapper结果COG/KO/CAZy整理脚本summarizeAbundance.py,删除旧版Shell+R代码 (32Annotation) +3. 新增MetaWRAP单样本分箱流程 (33Binning) +4. 新增dRep实现基因组去冗余 (34Genomes) +5. 新增GTDB-Tk基因组物种注释和进化树构建 (34Genomes) + +## 1.10 2021.1.22 + +1. 增加删除中间文件部分,节约空间,防止硬盘写满; +2. 正文的补充分析方法、常见问题移至附录,按软件名、问题/方法分级索引; +3. 软件使用前,增加检查软件版本命令,方便文章方法中撰写准确版本; +4. 删除不稳定的humann3、过时的eggnog版本教程; +5. 增加kraken2新环境, 增加bracken, krakentools新工具; +6. kraken2结果新增beta多样性PCoA,物种组成堆叠柱状图; +7. 增metaspades二、三代组装代码示例; +8. 新增KEGG层级注释整理代码; +9. 更新dbCAN2中2018版为2020版; +10. 新增CARD本地分析流程; + +## 1.11 2021.5.7 + +1. 增加prodigal基因预测并行版方法,使用seqkit split拆分后并行,数10倍加速单线程基因预测步骤; +2. 增加megahit拼装结果片段大小选择步骤,使用seqkit -m按长度筛选,并统计筛选前后变化; +3. 不常用或可选代码调整到附录 +4. 两批数据快速合并去冗余cd-hit-est-2d +5. 二三代混合组装OPERA-MS的混装和3代优化代码 diff --git a/3FAQ.sh b/3FAQ.sh deleted file mode 100644 index d1c4f2c..0000000 --- a/3FAQ.sh +++ /dev/null @@ -1,303 +0,0 @@ -[TOC] - -# 宏基因组分析常见问题及补充分析 - - # 测试环境为Linux Ubuntu 18.04 / CentOS 7 - # 版本: 1.09, 2020/10/16 - -## Conda软件和数据库位置 - - # 数据库安装位置,默认~/db目录(无需管理权限),管理员可安装至/db,方便大家使用,安装和运行必备环境变量 - db=~/db - mkdir -p ${db} && cd ${db} - soft=~/miniconda2 - -### miniconda2软件管理器 - - wget -c https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh - # Conda软件安装目录,如管理员可能为/conda,普通用户为~/miniconda2 - bash Miniconda2-latest-Linux-x86_64.sh -b -f -p ${soft} - # 安装时许可协议可打yes,默认目录为~/miniconda2,默认不运行conda直接回车,这里用-p批定soft变量为目录 - conda -V # 查看版本号 4.6.8 - python --version # 2.7.15 - # 安装说明详见:[Nature Method:Bioconda解决生物软件安装的烦恼](https://mp.weixin.qq.com/s/SzJswztVB9rHVh3Ak7jpfA) - # 添加生物频道,才能找到生物学软件 - conda config --add channels bioconda - # http://bioconda.github.io/ 查询软件及版本 - conda config --add channels conda-forge - conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ - conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ - # conda默认配置文件为 ~/.condarc ,如不存在使用 conda config --show-sources 查看配置文件位置 - # 添加conda至环境变量 - export PATH="${soft}/bin:$PATH" - - # 创建虚拟环境,防污染环境变量 - conda create -n meta # python=2.7 r-base=3.6 - # 加载环境 - conda activate meta - - # 如果有的软件在Solving environment步骤数小时无法安装,可以新建环境 - conda create -n metaRef - conda activate metaRef - -## 质控和去宿主 - -### multiqc评估报告汇总multiqc - - # 注:新版本1.9仅支持python3,需要有Python3环境下安装 - conda install multiqc # 111 MB - multiqc --version # multiqc, version 1.8 - -## 物种注释 - -### lefse物种差异比较和绘制 - - conda install lefse # 57.5 MB, 1.0.8.post1 - - # 在Rstudio中默认调用Rstudio的R,具体写在/etc/rstudio/rserver.conf - # 或在R中用Sys.getenv()["R_HOME"] - # 在rpy2中 print(robjects.r)可以查看其调用的r版本 - - # 认为指定R版本 - sed -i "2 i/os.environ['R_HOME'] = '/conda2/envs/metagenome_env/lib/R/'" \ - ${soft}/envs/metagenome_env/share/lefse-1.0.7-1/lefse.py - -## 组装流程 - -### salmon可选安装 - - # 定量工具salmon - # conda install salmon # 15.1 MB - wget https://github.com/COMBINE-lab/salmon/releases/download/v0.14.0/salmon-0.14.0_linux_x86_64.tar.gz - tar xvzf salmon-0.14.0_linux_x86_64.tar.gz - cp -rf salmon-latest_linux_x86_64/ ${soft}/envs/metagenome_env/share/salmon - ${soft}/envs/metagenome_env/share/salmon/bin/salmon -v # 0.14.0 - - -### eggNOG2 - - # eggNOG http://eggnogdb.embl.de - # 安装eggnog比对工具emapper - conda install eggnog-mapper - emapper.py --version # eggnog-mapper-2.0.1 - - # 下载常用数据库,注意设置下载位置 - mkdir -p ${db}/eggnog && cd ${db}/eggnog - # -y默认同意,-f强制下载 - download_eggnog_data.py -y -f --data_dir ./ - # 如果内存够大,复制eggNOG至内存加速比对 - # cp eggnog.db /dev/shm - # 手工整理COG分类注释 - wget -c wget http://210.75.224.110/share/COG.anno - # 手工整理KO注释 - wget -c wget http://210.75.224.110/share/KO.anno - -### CAZy碳水化合物 - - # dbCAN2无法访问 http://cys.bios.niu.edu/dbCAN2/ - mkdir -p ${db}/dbCAN2 && cd ${db}/dbCAN2 - wget -c http://210.75.224.110/share/meta/dbcan2/CAZyDB.07312018.fa # 497 MB - wget -c http://210.75.224.110/share/meta/dbcan2/CAZyDB.07312018.fam-activities.txt # 58 KB - time diamond makedb --in CAZyDB.07312018.fa --db CAZyDB.07312018 # 28s - # 提取fam对应注释 - grep -v '#' CAZyDB.07312018.fam-activities.txt|sed 's/ //'| \ - sed '1 i ID\tDescription' > fam_description.txt - -### Resfam耐药基因 - - # http://dantaslab.wustl.edu/resfams - mkdir -p ${db}/resfam && cd ${db}/resfam - # 官网的数据格式非常混乱, 推荐下载我手动整理的索引和注释 - wget http://210.75.224.110/share/Resfams-proteins.dmnd # 1.5 MB - wget http://210.75.224.110/share/Resfams-proteins_class.tsv # 304 KB - - -### Metawarp分箱 - - # 物种注释和分箱流程 https://github.com/bxlab/metaWRAP - conda create -y -n metawrap python=2.7 # 22.2MB - conda activate metawrap - conda config --add channels ursky - conda install -y -c ursky metawrap-mg # 1.14 GB, v1.2 - - # 相关数据库,大小近300GB - # 这里我们安装数据库到`~/db`目录,保证你有权限, - # 但要保证至少有500GB的空间。请根据你的情况修改为自己有权限且空间足够的位置。 - # 多人使用,建议管理员统一安装节省空间 - cd ${db} - - ## CheckM用于Bin完整和污染估计和物种注释 - mkdir -p checkm && cd checkm - # 下载文件275 MB,解压后1.4 GB - wget -c https://data.ace.uq.edu.au/public/CheckM_databases/checkm_data_2015_01_16.tar.gz - # 国内备用链接 - # wget -c http://210.75.224.110/share/meta/checkm/checkm_data_2015_01_16.tar.gz - tar -xvf *.tar.gz - # rm *.gz - # 设置数据库位置 - checkm data setRoot - # 按提示输出你数据下载的路径或直接回车默认为当前位置 - - ## NCBI_nt核酸序列用于bin物种注释 - # 41GB,我下载大约12h;解压后99GB - cd ${db} - mkdir -p NCBI_nt && cd NCBI_nt - wget -c "ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.*.tar.gz" - # 备用下载链接,或百度云下载 - # wget -c http://210.75.224.110/share/meta/NCBI_nt/filelist.txt - # for a in `cat filelist.txt`; do wget -c http://210.75.224.110/share/meta/NCBI_nt/$a; done - for a in nt.*.tar.gz; do tar xzf $a; done & - - ## NCBI物种信息 - # 压缩文件45M,解压后351M - cd ${db} - mkdir NCBI_tax - cd NCBI_tax - wget ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/taxdump.tar.gz - tar -xvf taxdump.tar.gz - - ## 人类基因组去宿主 - cd ${db} - mkdir -p metawrap/BMTAGGER && cd metawrap/BMTAGGER - wget -c ftp://hgdownload.soe.ucsc.edu/goldenPath/hg38/chromosomes/*fa.gz - gunzip *fa.gz - cat *fa > hg38.fa - rm chr*.fa - # 上方下载太慢,使用国内备份链接手动下载 - wget -c http://210.75.224.110/share/meta/metawrap/BMTAGGER/hg38.fa - bmtool -d hg38.fa -o hg38.bitmask - srprism mkindex -i hg38.fa -o hg38.srprism -M 100000 - - ## KRAKEN物种注释数据库 - # 下载建索引需要 > 300GB以上空间,完成后占用192GB空间 - cd ${db} - mkdir -p kraken - kraken-build --standard --threads 24 --db kraken > log & - kraken-build --db kraken --clean - # 手动下载 - cd kraken - wget -c http://210.75.224.110/share/meta/kraken/database.kdb - wget -c http://210.75.224.110/share/meta/kraken/database.idx - mkdir -p taxonomy && cd taxonomy - wget -c http://210.75.224.110/share/meta/kraken/taxonomy/nodes.dmp - wget -c http://210.75.224.110/share/meta/kraken/taxonomy/names.dmp - # 从其它位置复制 - # cp -r /db/kraken/* ./ - - ## 数据库位置设置 - which config-metawrap - # 配置文件通常为~/miniconda2/envs/metawrap/bin/config-metawrap - # 使用Rstudio/vim等文本编辑器来修改数据库的位置 - -## 1.6 其它软件和输助脚本 - - # 按注释类型合并脚本,链接 https://github.com/YongxinLiu/Metagenome - cd ${db} - mkdir script && cd script - # 矩阵按最后列注释合并的脚本,如Gene-KO-Module-Pathway的合并 - wget http://210.75.224.110/share/meta/script/mat_gene2ko.R - # 基于Kraken2的结果计算alpha多样性 - wget http://210.75.224.110/share/meta/script/kraken2alpha.R - # 基于alpha多样性和分组信息绘制箱线图 - wget http://210.75.224.110/share/meta/script/alpha_boxplot.R - chmod +x *.R - - - # Bin可视化VizBin - # 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 - # mv VizBin-dist.jar /usr/local/bin # 或~/bin - - # 比对结果整理samtools - conda install samtools - - ### CARD(选学) https://card.mcmaster.ca/download - # 方法1. 直接conda安装 - conda install --channel bioconda rgi - # 如果报错,尝试方法2。CondaMultiError: CondaFileIOError: '/home/liuyongxin/miniconda2/pkgs/prokka-1.11-0.tar.bz2'. contains unsafe path: db/cm/READM - # 方法2. 虚拟环境安装 - conda activate metawrap - conda install --channel bioconda rgi - rgi main -v # 4.0.3 - # rgi教程 https://github.com/arpcard/rgi - -## 附录 - -### conda批量安装软件 - - conda install -y fastqc multiqc kneaddata=0.6.1 humann2 graphlan export2graphlan lefse kraken2 megahit spades quast prokka cd-hit emboss salmon eggnog-mapper samtools - -### kneaddata质控双端结果不成对 - - # 0.7.2存在对旧格式fastq去宿主后数据极少或双端数据不对称,可指定版本安装0.6.1 - conda install kneaddata=0.6.1 # 175 MB - -### kneaddata运行提示java版本不至 - - # 解决思路,新建虚拟环境,安装kneaddata,再安装对应java版本 - conda install openjdk=8.0.152 - -### humann2数据库无法下载备用链接 - - # 可选:链接直接下载、百度云链接(宏基因组公众号回复:数据库)或国内备份链接 - mkdir -p ${db}/humann2/chocophlan && cd ${db}/humann2/chocophlan - wget -c http://210.75.224.110/share/meta/full_chocophlan_plus_viral.v0.1.1.tar.gz - tar xvzf full_chocophlan_plus_viral.v0.1.1.tar.gz - # uniref90和50任选其1,推荐uniref90更全5.9 GB - cd ${db}/humann2 - wget -c http://210.75.224.110/share/meta/uniref90_annotated_1_1.tar.gz - tar xvzf uniref90_annotated_1_1.tar.gz - # 内存<32G内存选uniref5 (2.5 GB) - # wget -c http://210.75.224.110/share/meta/uniref50_annotated_1_1.tar.gz - # tar xvzf uniref50_annotated_1_1.tar.gz - # 不要同一文件中有两个文件,会先比90,再比50出现混乱 - -### Metaphlan2数据库找不到 - - # 下载并构建索引 - mkdir -p ${db}/metaphlan2 && cd ${db}/metaphlan2 - wget -c http://210.75.224.110/share/meta/metaphlan2/mpa_v20_m200.tar - tar xvf mpa_v20_m200.tar - bzip2 -d mpa_v20_m200.fna.bz2 - bowtie2-build mpa_v20_m200.fna mpa_v20_m200 - # 链接到软件安装目录 - mkdir -p ${soft}/envs/metagenome_env/bin/db_v20 - ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/db_v20/ - mkdir -p ${soft}/envs/metagenome_env/bin/databases - ln -s ${db}/metaphlan2/* ${soft}/envs/metagenome_env/bin/databases/ - -### kraken2定制数据库 - - # 详见 https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown - # 下载物种注释,gb 1.8G; wgs 3.3G; 解压为9.2/21G; taxdump 50M - kraken2-build --download-taxonomy --threads 24 --db ${db}/kraken2 - - # 数据库包括 archaea bacteria plasmid viral human fungi plant protozoa nr nt env_nr env_nt UniVec - # 下载单个库 - i=bacteria - kraken2-build --download-library $i --threads 24 --db ${db}/kraken2 - # 批量下载数据库,除默认5种外新加植物、真菌、原生生物和质粒,下载需几小时-数天 - for i in archaea bacteria UniVec_Core viral human fungi plant protozoa plasmid; do - kraken2-build --download-library $i --threads 24 --db ${db}/kraken2 - done - - # 建索引,4h, 40h - time kraken2-build --build --threads 24 --db ${db}/kraken2 - - # 数据库大小,2020/4/12更新 - du -sh library/* - 918M archaea - 74G bacteria - 1.2G fungi - 3.1G human - 51G plant - 2.0G plasmid - 877M protozoa - 2.0M UniVec_Core - 310M viral - -### metawrap分箱 - -运行metaWRAP annotate_bins时报错? - -This copy of tbl2asn is more than a year old. Please download the current version \ No newline at end of file diff --git a/3StatPlot.sh b/3StatPlot.sh new file mode 100644 index 0000000..9e4808c --- /dev/null +++ b/3StatPlot.sh @@ -0,0 +1,207 @@ +[TOC] + +# 宏基因组统计绘图 + + # 设置结果目录(通常为项目中的result,此处为演示12个样本结果result12) + wd=/c/meta/result12 + # 设置脚本所在目录(Script Directory) + sd=/c/db/script + # 进入结果目录 + cd $wd + +## 物种Metaphlan2 + +### 热图 + + # 显示脚本帮助 help + Rscript ${sd}/metaphlan_hclust_heatmap.R -h + # 按指定分类汇总、排序并取Top25种绘制热图 + # -i输入MetaPhlAn2结果转换的spf文件; + # -t指定分类级别,可选Kingdom/Phylum/Class/Order/Family/Genus/Species/Strain(界门纲目科属种株),推荐门,目,属 + # -n 输出物种数量,默认为25,最大值为该类型的数量 + # -w、-e指定图片的宽和高,单位为毫米(mm) + # -o输出图pdf、表txt前缀,默认Heatmap+(-t)+(-n) + + # 科水平Top25热图 + Rscript $sd/metaphlan_hclust_heatmap.R \ + -i metaphlan2/taxonomy.spf \ + -t Family -n 25 \ + -w 183 -e 118 \ + -o metaphlan2/HeatmapFamily + + # 属水平的Top30 + Rscript $sd/metaphlan_hclust_heatmap.R \ + -i metaphlan2/taxonomy.spf \ + -t Genus -n 30 \ + -w 183 -e 118 \ + -o metaphlan2/HeatmapGenus + +### 维恩图 + + ### 筛选>0.5%的分类 + awk 'BEGIN{OFS=FS="\t"}{if(FNR==1) {for(i=2;i<=NF;i++) a[i]=$i;} \ + else {for(i=2;i<=NF;i++) if($i>0.5) print $1, a[i];}}' \ + metaphlan2/taxonomy.tsv \ + > metaphlan2/taxonomy_high.tsv + wc -l metaphlan2/taxonomy_high.tsv + # http://www.ehbio.com/test/venn/#/ 绘制 + + +## 功能HUMAnN2 + +### 分组聚类热图 + + bash $sd/sp_pheatmap.sh + cut -f 1-2 metadata.txt > group.txt + # -f输入文件,-H水平聚类,u/v图片宽/高,-P添加行注释文件,-Q添加列注释 + bash $sd/sp_pheatmap.sh \ + -f humann2/pathabundance_relab_unstratified.tsv \ + -H 'TRUE' -u 20 -v 50 \ + -Q group.txt + # 结果为 输入文件名+pheamap.r/pdf,代码和图片 + + # 水平标准化,-d row,可选column + bash $sd/sp_pheatmap.sh \ + -f humann2/pathabundance_relab_unstratified.tsv \ + -H 'TRUE' -u 20 -v 50 \ + -Q group.txt -d row + +## 物种kraken2 + +### Alpha多样性 + + # 提取种级别注释并抽平至最小测序量,计算6种alpha多样性指数 + # 查看帮助 + Rscript $sd/kraken2alpha.R -h + # -d指定最小样本量,默认0为最小值,抽平文件tax_norm.txt,alpha多样性tax_alpha.txt + Rscript $sd/kraken2alpha.R \ + --input kraken2/tax_count.mpa \ + --depth 0 \ + --species kraken2/tax_count.txt \ + --normalize kraken2/tax_count.norm \ + --output kraken2/tax_count.alpha + + # 绘制Alpha多样性指数,结果为输入文件+类型richness/chao1/ACE/shannon/simpson/invsimpson + # Rscript $sd/alpha_boxplot.R -h # 查看参数 + Rscript $sd/alpha_boxplot.R \ + -i kraken2/tax_count.alpha \ + -a shannon \ + -d metadata.txt \ + -n Group \ + -o kraken2/ \ + -w 89 -e 59 + # 批量计算6种指数的箱线图+统计 + for i in richness chao1 ACE shannon simpson invsimpson;do + Rscript $sd/alpha_boxplot.R -i kraken2/tax_count.alpha -a ${i} \ + -d metadata.txt -n Group -w 89 -e 59 \ + -o kraken2/ + done + +### 热图 + + # 转换为metaphalan2 spf格式,分隔符为下划线“_” + awk 'BEGIN{OFS=FS="\t"}{delete a; a["d"]="unclassified";a["p"]="unclassified";a["c"]="unclassified";a["o"]="unclassified";a["f"]="unclassified";a["g"]="unclassified";a["s"]="unclassified"; \ + split($1,x,"|");for(i in x){split(x[i],b,"_");a[b[1]]=b[2];} \ + print a["d"],a["p"],a["c"],a["o"],a["f"],a["g"],a["s"],$0;}' \ + kraken2/tax_count.txt > temp.txt + cut -f 1-7,10- temp.txt > kraken2/tax_count.spf + sed -i '1 s/unclassified\tunclassified\tunclassified\tunclassified\tunclassified\tunclassified\tunclassified/Domain\tPhylum\tClass\tOrder\tFamily\tGenus\tSpecies/' \ + kraken2/tax_count.spf + # 绘制热图,可选域、门、纲、目、科、属、种(Domain Phylum Class Order Family Genus Species) + tax=Genus + Rscript $sd/metaphlan_hclust_heatmap.R \ + -i kraken2/tax_count.spf \ + -t ${tax} \ + -n 25 \ + -w 118 -e 118 \ + -o kraken2/heatmap_${tax} + +### 箱线图 + + # 绘制属水平Top30箱线图 + Rscript $sd/metaphlan_boxplot.R \ + -i kraken2/tax_count.spf \ + -t Genus \ + -n 30 \ + -o kraken2/boxplot_Genus + # 绘制门水平Top10箱线图 + Rscript $sd/metaphlan_boxplot.R \ + -i kraken2/tax_count.spf \ + -t Phylum \ + -n 10 -w 6 -e 4 \ + -o kraken2/boxplot_Phylum + +## 物种kraken2-braken2 + +### Alpha多样性 + + # 提取种级别注释并抽平至最小测序量,计算6种alpha多样性指数 + # 查看帮助 + Rscript $sd/otutab_rare.R -h + # -d指定最小样本量,默认0为最小值,抽平文件tax_norm.txt,alpha多样性tax_alpha. + tax=S + Rscript $sd/otutab_rare.R \ + --input kraken2/bracken.${tax}.txt \ + --depth 0 --seed 1 \ + --normalize kraken2/bracken.${tax}.norm \ + --output kraken2/bracken.${tax}.alpha + + # 绘制Alpha多样性指数,结果为输入文件+类型richness/chao1/ACE/shannon/simpson/invsimpson + # Rscript $sd/alpha_boxplot.R -h # 查看参数 + mkdir -p kraken2/${tax} + Rscript $sd/alpha_boxplot.R \ + -i kraken2/bracken.${tax}.alpha \ + -a shannon \ + -d metadata.txt \ + -n Group \ + -o kraken2/${tax} \ + -w 89 -e 59 + # 批量计算6种指数的箱线图+统计 + for i in richness chao1 ACE shannon simpson invsimpson;do + Rscript $sd/alpha_boxplot.R -i kraken2/bracken.${tax}.alpha -a ${i} \ + -d metadata.txt -n Group -w 89 -e 59 \ + -o kraken2/${tax} + done + +### Beta多样性 + + # Beta多样性距离矩阵计算 + mkdir -p kraken2/beta/ + /c/db/win/usearch -beta_div kraken2/bracken.${tax}.norm \ + -filename_prefix kraken2/beta/ + + # PCoA分析输入文件,选择分组,输出文件,图片尺寸mm,统计见beta_pcoa_stat.txt + # 可选距离有 bray_curtis, euclidean, jaccard, manhattan + dis=bray_curtis + Rscript $sd/beta_pcoa.R \ + --input kraken2/beta/${dis}.txt \ + --design metadata.txt \ + --group Group \ + --width 89 --height 59 \ + --output kraken2/pcoa.${dis}.pdf + +### 堆叠柱状图 + + # 以门(P)/种(S)水平为例,结果包括output.sample/group.pdf两个文件 + tax=P + Rscript ${sd}/tax_stackplot.R \ + --input kraken2/bracken.${tax}.txt --design metadata.txt \ + --group Group --output kraken2/bracken.${tax}.stackplot \ + --legend 10 --width 89 --height 59 + + +# 附录 + +## windows换行符处理 + + # 查看行尾是否有^M + cat -A $sd/metaphlan_hclust_heatmap.R | head + # 转换Windows为Linux换行符 + dos2unix $sd/metaphlan_hclust_heatmap.R + +## 表格合并 + + # 按末列注释,必须名叫KO + Rscript $sd/mat_gene2ko.R \ + -i temp/dbcan2/gene_fam.count \ + -o dbcan2/fam_merge.count diff --git a/README.md b/README.md index 05809e8..de56bda 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,27 @@ # 易宏基因组(EasyMetagenome)——最简单易学易用的宏基因组分析流程 -版本:EasyMetagenome v1.09 +版本:EasyMetagenome v1.11 -更新时间:2020/10/26 +更新时间:2021/5/7 ## 文件介绍 -- 1soft_db.sh:软件和数据库安装 -- 2pipeline.sh:分析流程 -- 3FAQ.sh:常见问题 +- 1SoftDb.sh:软件和数据库安装 +- 2Pipeline.sh:分析流程 +- 3StatPlot.sh:统计和可视化代码 + +Shell代码兼容Markdown格式,可使用有道云笔记中Markdown笔记中查看,有目录导航更方便浏览和阅读。 + +各文档附录部分为常见问题,供参考。 ## 使用方法 -在64位版本系统,如Ubuntu 18.04/20.04,CentOS7/8的系统 +在64位版本系统,如Ubuntu 18.04/20.04,CentOS7/8的系统,按代码1,2,3逐步运行 在命令行,或RStudio的Shell环境下使用,可以有道云笔记中显示代码目录,方便预览大纲 ## 引用 -使用此流程代码,请引用 - -Yong-Xin Liu, Yuan Qin, Tong Chen, Meiping Lu, Xubo Qian, Xiaoxuan Guo & Yang Bai. (2020). A practical guide to amplicon and metagenomic analysis of microbiome data. Protein & Cell 11, doi: https://doi.org/10.1007/s13238-020-00724-8 - +使用此流程代码,请引用: +Yong-Xin Liu, Yuan Qin, Tong Chen, Meiping Lu, Xubo Qian, Xiaoxuan Guo & Yang Bai. (2021). A practical guide to amplicon and metagenomic analysis of microbiome data. Protein & Cell 12, 315-330, doi: https://doi.org/10.1007/s13238-020-00724-8 \ No newline at end of file diff --git a/result/metadata.txt b/result/metadata12.txt similarity index 100% rename from result/metadata.txt rename to result/metadata12.txt diff --git a/result/metadata2.txt b/result/metadata2.txt new file mode 100644 index 0000000..6a1cb4e --- /dev/null +++ b/result/metadata2.txt @@ -0,0 +1,3 @@ +SampleID Group Replicate Sex Individual GSA CRR project_accession +C1 Cancer 1 Male p136 CRA002355 CRR117732 PRJCA002236 +C2 Cancer 2 Male p143 CRA002355 CRR117733 PRJCA002236 diff --git a/script/extract_kraken_reads.py b/script/extract_kraken_reads.py new file mode 100755 index 0000000..3557ad1 --- /dev/null +++ b/script/extract_kraken_reads.py @@ -0,0 +1,431 @@ +#!/usr/bin/env python +###################################################################### +#extract_kraken_reads.py takes in a kraken-style output and kraken report +#and a taxonomy level to extract reads matching that level +#Copyright (C) 2019 Jennifer Lu, jlu26@jhmi.edu +# +#This file is part of KrakenTools +#KrakenTools is free software; oyu can redistribute it and/or modify +#it under the terms of the GNU General Public License as published by +#the Free Software Foundation; either version 3 of the license, or +#(at your option) any later version. +# +#This program is distributed in the hope that it will be useful, +#but WITHOUT ANY WARRANTY; without even the implied warranty of +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#GNU General Public License for more details. +# +#You should have received a copy of the GNU General Public License +#along with this program; if not, see . +# +###################################################################### +#Jennifer Lu, jlu26@jhmi.edu +#Updated: 06/03/2019 +# +#This program extracts reads classified by Kraken as a +#specified taxonomy ID. Those reads are extracted into a new FASTA file. +# +#Required Parameters: +# -k, --kraken, --kraken-file X.......kraken output file +# -s, -s1, -1, -U X...................read file +# [FASTA/FASTQ - may be gzipped] +# -s2, -2, X..........................second read file if paired +# [FASTA/FASTQ - may be gzipped] +# -o, --output X......................output FASTA file with reads +# -t, --taxid, --taxids X.............list of taxonomy IDs to extract +# [separated by spaces] +# -r, --report-file X.................kraken report file +# [required only with --include-children/parents] +#Optional Parameters: +# -h, --help..........................show help message. +# --max X.............................only save the first X reads found +# --include-children **...............include reads classified at lower levels +# --include-parents **................include reads classified at parent levels +# of taxids +# --append............................append extracted reads to output file if existing +# --noappend..........................rewrite file if existing [default] +# --exclude...........................exclude the taxids specified +# ** by default, only reads classified exactly at taxids provided will be extracted +# ** if either of these are specified, a report file must also be provided +###################################################################### +import os, sys, argparse +import gzip +from time import gmtime +from time import strftime +from Bio import SeqIO +from Bio.Seq import Seq +from Bio.SeqRecord import SeqRecord +################################################################################# +#Tree Class +#usage: tree node used in constructing taxonomy tree +# includes only taxonomy levels and genomes identified in the Kraken report +class Tree(object): + 'Tree node.' + def __init__(self, taxid, level_num, level_id, children=None, parent=None): + self.taxid = taxid + self.level_num = level_num + self.level_id = level_id + self.children = [] + self.parent = parent + if children is not None: + for child in children: + self.add_child(child) + def add_child(self, node): + assert isinstance(node,Tree) + self.children.append(node) +################################################################################# +#process_kraken_output +#usage: parses single line from kraken output and returns taxonomy ID and readID +#input: kraken output file with readid and taxid in the +# second and third tab-delimited columns +#returns: +# - taxonomy ID +# - read ID +def process_kraken_output(kraken_line): + l_vals = kraken_line.split('\t') + if len(l_vals) < 5: + return [-1, ''] + if "taxid" in l_vals[2]: + temp = l_vals[2].split("taxid ")[-1] + tax_id = temp[:-1] + else: + tax_id = l_vals[2] + + read_id = l_vals[1] + if (tax_id == 'A'): + tax_id = 81077 + else: + tax_id = int(tax_id) + return [tax_id, read_id] + +#process_kraken_report +#usage: parses single line from report output and returns taxID, levelID +#input: kraken report file with the following tab delimited lines +# - percent of total reads +# - number of reads (including at lower levels) +# - number of reads (only at this level) +# - taxonomy classification of level +# (U, - (root), - (cellular org), D, P, C, O, F, G, S) +# - taxonomy ID (0 = unclassified, 1 = root, 2 = Bacteria...etc) +# - spaces + name +#returns: +# - taxonomy ID +# - level number (number of spaces before name) +# - level_type (type of taxonomy level - U, R, D, P, C, O, F, G, S, etc) +def process_kraken_report(report_line): + l_vals = report_line.strip().split('\t') + try: + int(l_vals[1]) + except ValueError: + return [] + #Extract relevant information + level_type = l_vals[3] + taxid = int(l_vals[4]) + #Get spaces to determine level num + spaces = 0 + for char in l_vals[-1]: + if char == ' ': + spaces += 1 + else: + break + level_num = int(spaces/2) + return[taxid, level_num, level_type] +################################################################################# +#Main method +def main(): + #Parse arguments + parser = argparse.ArgumentParser() + parser.add_argument('-k', dest='kraken_file', required=True, + help='Kraken output file to parse') + parser.add_argument('-s','-s1', '-1', '-U', dest='seq_file1', required=True, + help='FASTA/FASTQ File containing the raw sequence letters.') + parser.add_argument('-s2', '-2', dest='seq_file2', default= "", + help='2nd FASTA/FASTQ File containing the raw sequence letters (paired).') + parser.add_argument('-t', "--taxid",dest='taxid', required=True, + nargs='+', + help='Taxonomy ID[s] of reads to extract (space-delimited)') + parser.add_argument('-o', "--output",dest='output_file', required=True, + help='Output FASTA/Q file containing the reads and sample IDs') + parser.add_argument('-o2',"--output2", dest='output_file2', required=False, default='', + help='Output FASTA/Q file containig the second pair of reads [required for paired input]') + parser.add_argument('--append', dest='append', action='store_true', + help='Append the sequences to the end of the output FASTA file specified.') + parser.add_argument('--noappend', dest='append', action='store_false', + help='Create a new FASTA file containing sample sequences and IDs \ + (rewrite if existing) [default].') + parser.add_argument('--max', dest='max_reads', required=False, + default=100000000, type=int, + help='Maximum number of reads to save [default: 100,000,000]') + parser.add_argument('-r','--report',dest='report_file', required=False, + default="", + help='Kraken report file. [required only if --include-parents/children \ + is specified]') + parser.add_argument('--include-parents',dest="parents", required=False, + action='store_true',default=False, + help='Include reads classified at parent levels of the specified taxids') + parser.add_argument('--include-children',dest='children', required=False, + action='store_true',default=False, + help='Include reads classified more specifically than the specified taxids') + parser.add_argument('--exclude', dest='exclude', required=False, + action='store_true',default=False, + help='Instead of finding reads matching specified taxids, finds all reads NOT matching specified taxids') + parser.add_argument('--fastq-output', dest='fastq_out', required=False, + action='store_true',default=False, + help='Print output FASTQ reads [requires input FASTQ, default: output is FASTA]') + parser.set_defaults(append=False) + + args=parser.parse_args() + + #Start Program + time = strftime("%m-%d-%Y %H:%M:%S", gmtime()) + sys.stdout.write("PROGRAM START TIME: " + time + '\n') + + #Check input + if (len(args.output_file2) == 0) and (len(args.seq_file2) > 0): + sys.stderr.write("Must specify second output file -o2 for paired input\n") + exit(1) + + #Initialize taxids + save_taxids = {} + for tid in args.taxid: + save_taxids[int(tid)] = 0 + main_lvls = ['R','K','D','P','C','O','F','G','S'] + + #STEP 0: READ IN REPORT FILE AND GET ALL TAXIDS + if args.parents or args.children: + #check that report file exists + if args.report_file == "": + sys.stderr.write(">> ERROR: --report not specified.") + exit(1) + sys.stdout.write(">> STEP 0: PARSING REPORT FILE %s\n" % args.report_file) + #create tree and save nodes with taxids in the list + base_nodes = {} + r_file = open(args.report_file,'r') + prev_node = -1 + for line in r_file: + #extract values + report_vals = process_kraken_report(line) + if len(report_vals) == 0: + continue + [taxid, level_num, level_id] = report_vals + if taxid == 0: + continue + #tree root + if taxid == 1: + root_node = Tree(taxid, level_num, level_id) + prev_node = root_node + #save if needed + if taxid in save_taxids: + base_nodes[taxid] = root_node + continue + #move to correct parent + while level_num != (prev_node.level_num + 1): + prev_node = prev_node.parent + #determine correct level ID + if level_id == '-' or len(level_id) > 1: + if prev_node.level_id in main_lvls: + level_id = prev_node.level_id + '1' + else: + num = int(prev_node.level_id[-1]) + 1 + level_id = prev_node.level_id[:-1] + str(num) + #make node + curr_node = Tree(taxid, level_num, level_id, None, prev_node) + prev_node.add_child(curr_node) + prev_node = curr_node + #save if taxid matches + if taxid in save_taxids: + base_nodes[taxid] = curr_node + r_file.close() + #FOR SAVING PARENTS + if args.parents: + #For each node saved, traverse up the tree and save each taxid + for tid in base_nodes: + curr_node = base_nodes[tid] + while curr_node.parent != None: + curr_node = curr_node.parent + save_taxids[curr_node.taxid] = 0 + #FOR SAVING CHILDREN + if args.children: + for tid in base_nodes: + curr_nodes = base_nodes[tid].children + while len(curr_nodes) > 0: + #For this node + curr_n = curr_nodes.pop() + if curr_n.taxid not in save_taxids: + save_taxids[curr_n.taxid] = 0 + #Add all children + if curr_n.children != None: + for child in curr_n.children: + curr_nodes.append(child) + + ############################################################################## + sys.stdout.write("\t%i taxonomy IDs to parse\n" % len(save_taxids)) + sys.stdout.write(">> STEP 1: PARSING KRAKEN FILE FOR READIDS %s\n" % args.kraken_file) + #Initialize values + count_kraken = 0 + read_line = -1 + exclude_taxids = {} + if args.exclude: + exclude_taxids = save_taxids + save_taxids = {} + #PROCESS KRAKEN FILE FOR CLASSIFIED READ IDS + k_file = open(args.kraken_file, 'r') + sys.stdout.write('\t0 reads processed') + sys.stdout.flush() + #Evaluate each sample in the kraken file + save_readids = {} + save_readids2 = {} + for line in k_file: + count_kraken += 1 + if (count_kraken % 10000 == 0): + sys.stdout.write('\r\t%0.2f million reads processed' % float(count_kraken/1000000.)) + sys.stdout.flush() + #Parse line for results + [tax_id, read_id] = process_kraken_output(line) + if tax_id == -1: + continue + #Skip if reads are human/artificial/synthetic + if (tax_id in save_taxids) and not args.exclude: + save_taxids[tax_id] += 1 + save_readids2[read_id] = 0 + save_readids[read_id] = 0 + elif (tax_id not in exclude_taxids) and args.exclude: + if tax_id not in save_taxids: + save_taxids[tax_id] = 1 + else: + save_taxids[tax_id] += 1 + save_readids2[read_id] = 0 + save_readids[read_id] = 0 + if len(save_readids) >= args.max_reads: + break + #Update user + k_file.close() + sys.stdout.write('\r\t%0.2f million reads processed\n' % float(count_kraken/1000000.)) + sys.stdout.write('\t%i read IDs saved\n' % len(save_readids)) + ############################################################################## + #Sequence files + seq_file1 = args.seq_file1 + seq_file2 = args.seq_file2 + ####TEST IF INPUT IS FASTA OR FASTQ + if(seq_file1[-3:] == '.gz'): + s_file1 = gzip.open(seq_file1,'rt') + else: + s_file1 = open(seq_file1,'rt') + first = s_file1.readline() + if first[0] == ">": + filetype = "fasta" + elif first[0] == "@": + filetype = "fastq" + else: + sys.stderr.write("ERROR: sequence file must be FASTA or FASTQ\n") + exit(1) + s_file1.close() + if filetype != 'fastq' and args.fastq_out: + sys.stderr.write('ERROR: for FASTQ output, input file must be FASTQ\n') + exit(1) + ####ACTUALLY OPEN FILE + if(seq_file1[-3:] == '.gz'): + #Zipped Sequence Files + s_file1 = gzip.open(seq_file1,'rt') + if len(seq_file2) > 0: + s_file2 = gzip.open(seq_file2,'rt') + else: + s_file1 = open(seq_file1, 'r') + if len(seq_file2) > 0: + s_file2 = open(seq_file2, 'r') + #PROCESS INPUT FILE AND SAVE FASTA FILE + sys.stdout.write(">> STEP 2: READING SEQUENCE FILES AND WRITING READS\n") + sys.stdout.write('\t0 read IDs found (0 mill reads processed)') + sys.stdout.flush() + #Open output file + if (args.append): + o_file = open(args.output_file, 'a') + if args.output_file2 != '': + o_file2 = open(args.output_file2, 'a') + else: + o_file = open(args.output_file, 'w') + if args.output_file2 != '': + o_file2 = open(args.output_file2, 'w') + #Process SEQUENCE 1 file + count_seqs = 0 + count_output = 0 + for record in SeqIO.parse(s_file1,filetype): + count_seqs += 1 + #Print update + if (count_seqs % 1000 == 0): + sys.stdout.write('\r\t%i read IDs found (%0.2f mill reads processed)' % (count_output, float(count_seqs/1000000.))) + sys.stdout.flush() + #Check ID + test_id = str(record.id) + if ("/1" in test_id) or ("/2" in test_id): + test_id = test_id[:-2] + #Sequence found + if test_id in save_readids: + count_output += 1 + #Print update + sys.stdout.write('\r\t%i read IDs found (%0.2f mill reads processed)' % (count_output, float(count_seqs/1000000.))) + sys.stdout.flush() + #Save to file + if args.fastq_out: + SeqIO.write(record, o_file, "fastq") + else: + SeqIO.write(record, o_file, "fasta") + #If no more reads to find + if len(save_readids) == count_output: + break + #Close files + s_file1.close() + o_file.close() + sys.stdout.write('\r\t%i read IDs found (%0.2f mill reads processed)\n' % (count_output, float(count_seqs/1000000.))) + sys.stdout.flush() + count_output = 0 + count_seqs = 0 + if len(seq_file2) > 0: + sys.stdout.write('\t%i read IDs found (%0.2f mill reads processed)' % (count_output, float(count_seqs/1000000.))) + sys.stdout.flush() + for record in SeqIO.parse(s_file2, filetype): + count_seqs += 1 + #Print update + if (count_seqs % 1000 == 0): + sys.stdout.write('\r\t%i read IDs found (%0.2f mill reads processed)' % (count_output, float(count_seqs/1000000.))) + sys.stdout.flush() + test_id = str(record.id) + if ("/1" in test_id) or ("/2" in test_id): + test_id = test_id[:-2] + #Sequence found + if test_id in save_readids: + count_output += 1 + sys.stdout.write('\r\t%i read IDs found (%0.2f mill reads processed)' % (count_output, float(count_seqs/1000000.))) + sys.stdout.flush() + #Save to file + if args.fastq_out: + SeqIO.write(record, o_file2, "fastq") + else: + SeqIO.write(record, o_file2, "fasta") + #If no more reads to find + if len(save_readids) == count_output: + break + s_file2.close() + o_file2.close() + #End Program + sys.stdout.write('\r\t%i read IDs found (%0.2f mill reads processed)\n' % (count_output, float(count_seqs/1000000.))) + + #End Program + sys.stdout.write('\t' + str(count_output) + ' reads printed to file\n') + sys.stdout.write('\tGenerated file: %s\n' % args.output_file) + if args.output_file2 != '': + sys.stdout.write('\tGenerated file: %s\n' % args.output_file2) + + #End of program + time = strftime("%m-%d-%Y %H:%M:%S", gmtime()) + sys.stdout.write("PROGRAM END TIME: " + time + '\n') + exit(0) + +################################################################################# + +if __name__ == "__main__": + main() + +################################################################################# +#################################END OF PROGRAM################################## +################################################################################# diff --git a/script/otutab_freq2count.R b/script/otutab_freq2count.R old mode 100644 new mode 100755 index 54d7364..17cc9a6 --- a/script/otutab_freq2count.R +++ b/script/otutab_freq2count.R @@ -1,100 +1,100 @@ -#!/usr/bin/env Rscript - -# Copyright 2016-2021 Yong-Xin Liu - -# If used this script, please cited: -# Yong-Xin Liu, Yuan Qin, Tong Chen, Meiping Lu, Xubo Qian, Xiaoxuan Guo & Yang Bai. -# A practical guide to amplicon and metagenomic analysis of microbiome data. -# Protein Cell 41, 1-16, doi:10.1007/s13238-020-00724-8 (2020). -# Jingying Zhang, Yong-Xin Liu, Na Zhang, Bin Hu, Tao Jin, Haoran Xu, Yuan Qin, Pengxu Yan, Xiaoning Zhang, Xiaoxuan Guo, Jing Hui, Shouyun Cao, Xin Wang, Chao Wang, Hui Wang, Baoyuan Qu, Guangyi Fan, Lixing Yuan, Ruben Garrido-Oter, Chengcai Chu & Yang Bai. -# NRT1.1B is associated with root microbiota composition and nitrogen use in field-grown rice. -# Nature Biotechnology 37, 676-684, doi:10.1038/s41587-019-0104-4 (2019). - -# 1. 分析前准备:帮助、参数、依赖包和读取文件 - -# 命令行运行为当前目录;Rstudio手动运行脚本前需要设置工作目录,使用 Ctrl+Shift+H 或 Session - Set Work Directory - Choose Directory / To Source File Location 设置工作目录 - -# 1.1 程序功能描述和主要步骤 - -# 程序功能:OTU表抽平,计算Alpha多样性 -# otutab_rare Script functions: Rarefaction and alpha diversity -# Main steps: -# - Read data table taxonomy_count.txt -# - Select lowest taxonomy -# - Rarefaction to same depth -# - Alpha diversity calculation -# - Save rare table and alpha diversity - -# 程序使用示例 -# USAGE -# Default -# # 显示脚本帮助 -# Rscript ./script/otutab_freq2count.R -h -# # 默认读取result/otutab.txt,按最小值抽平,输出输入文件前缀的标准化表和alpha多样性 -# Rscript ./script/otutab_freq2count.R -# # 完整参数,输出文件名默认为alpha指数类型 -# Rscript ./script/otutab_freq2count.R -i result/otutab.txt \ -# -d 10000 \ -# -n result/otutab_rare.txt \ -# -o alpha/vegan_diversity.txt -# options(warn = -1) # Turn off warning - - - -# 1.2 解析命令行 -# 设置清华源加速下载 -site="https://mirrors.tuna.tsinghua.edu.cn/CRAN" -# 判断命令行解析是否安装,安装并加载 -if (!suppressWarnings(suppressMessages(require("optparse", character.only = TRUE, quietly = TRUE, warn.conflicts = FALSE)))) { - install.packages("optparse", repos=site) - require("optparse",character.only=T) -} -# 解析参数-h显示帮助信息 -option_list <- list( - make_option(c("-i", "--input"), type="character", default="metaphlan2/sp_table.txt", - help="Input reads count file; such as OTU table, kraken2 taxonomy counts table [default %default]"), - make_option(c("-n", "--normalize"), type="numeric", default=1000000, - help="Total counts; default 1M [default %default]"), - make_option(c("-o", "--output"), type="character", default="metaphlan2/sp_table.count", - help="Output alpha diversity filename [default %default]") -) -opts <- parse_args(OptionParser(option_list=option_list)) - -# 显示输入输出确认是否正确 -print(paste("The input feature table is ", opts$input, sep = "")) -print(paste("Normalized depth: ", opts$normalize, sep = "")) -print(paste("Output feature table: ", opts$output, sep = "")) - -# suppressWarnings(dir.create("metaphlan2/")) - -# 1.3 安装CRAN来源常用包 -# 依赖包列表:参数解析、数据变换、绘图和开发包安装、安装依赖、ggplot主题 -package_list <- c("vegan") -# 判断R包加载是否成功来决定是否安装后再加载 -for(p in package_list){ - if(!suppressWarnings(suppressMessages(require(p, character.only = TRUE, quietly = TRUE, warn.conflicts = FALSE)))){ - install.packages(p, repos=site) - suppressWarnings(suppressMessages(library(p, character.only = TRUE, quietly = TRUE, warn.conflicts = FALSE))) - } -} - - -# 1.4 读取输入文件 - -# 默认的quote会跳过2/3的数据行减少,产生NA,改为空 -species = read.table(opts$input, header=T, sep="\t", quote = "", row.names=1, comment.char="") - -# 2. 计算过程 - -## 2.1 乘系数标准化并取整 -species = species * opts$normalize -species = round(species) - -# 3. 结果输出 -# 3.1 保存抽平的物种表 -# 保存一个制表符,解决存在行名时,列名无法对齐的问题 -write.table("#OTUID\t", file=paste(opts$output,sep=""),append = F, quote = F, eol = "", row.names = F, col.names = F) -# 保存统计结果,有waring正常 -suppressWarnings(write.table(species, file=paste(opts$output,sep=""), append = T, quote = F, sep="\t", eol = "\n", na = "NA", dec = ".", row.names = T, col.names = T)) - -print(paste("Output count table ", opts$output, sep = "")) +#!/usr/bin/env Rscript + +# Copyright 2016-2021 Yong-Xin Liu + +# If used this script, please cited: +# Yong-Xin Liu, Yuan Qin, Tong Chen, Meiping Lu, Xubo Qian, Xiaoxuan Guo & Yang Bai. +# A practical guide to amplicon and metagenomic analysis of microbiome data. +# Protein Cell 41, 1-16, doi:10.1007/s13238-020-00724-8 (2020). +# Jingying Zhang, Yong-Xin Liu, Na Zhang, Bin Hu, Tao Jin, Haoran Xu, Yuan Qin, Pengxu Yan, Xiaoning Zhang, Xiaoxuan Guo, Jing Hui, Shouyun Cao, Xin Wang, Chao Wang, Hui Wang, Baoyuan Qu, Guangyi Fan, Lixing Yuan, Ruben Garrido-Oter, Chengcai Chu & Yang Bai. +# NRT1.1B is associated with root microbiota composition and nitrogen use in field-grown rice. +# Nature Biotechnology 37, 676-684, doi:10.1038/s41587-019-0104-4 (2019). + +# 1. 分析前准备:帮助、参数、依赖包和读取文件 + +# 命令行运行为当前目录;Rstudio手动运行脚本前需要设置工作目录,使用 Ctrl+Shift+H 或 Session - Set Work Directory - Choose Directory / To Source File Location 设置工作目录 + +# 1.1 程序功能描述和主要步骤 + +# 程序功能:OTU表抽平,计算Alpha多样性 +# otutab_rare Script functions: Rarefaction and alpha diversity +# Main steps: +# - Read data table taxonomy_count.txt +# - Select lowest taxonomy +# - Rarefaction to same depth +# - Alpha diversity calculation +# - Save rare table and alpha diversity + +# 程序使用示例 +# USAGE +# Default +# # 显示脚本帮助 +# Rscript ./script/otutab_freq2count.R -h +# # 默认读取result/otutab.txt,按最小值抽平,输出输入文件前缀的标准化表和alpha多样性 +# Rscript ./script/otutab_freq2count.R +# # 完整参数,输出文件名默认为alpha指数类型 +# Rscript ./script/otutab_freq2count.R -i result/otutab.txt \ +# -d 10000 \ +# -n result/otutab_rare.txt \ +# -o alpha/vegan_diversity.txt +# options(warn = -1) # Turn off warning + + + +# 1.2 解析命令行 +# 设置清华源加速下载 +site="https://mirrors.tuna.tsinghua.edu.cn/CRAN" +# 判断命令行解析是否安装,安装并加载 +if (!suppressWarnings(suppressMessages(require("optparse", character.only = TRUE, quietly = TRUE, warn.conflicts = FALSE)))) { + install.packages("optparse", repos=site) + require("optparse",character.only=T) +} +# 解析参数-h显示帮助信息 +option_list <- list( + make_option(c("-i", "--input"), type="character", default="metaphlan2/sp_table.txt", + help="Input reads count file; such as OTU table, kraken2 taxonomy counts table [default %default]"), + make_option(c("-n", "--normalize"), type="numeric", default=1000000, + help="Total counts; default 1M [default %default]"), + make_option(c("-o", "--output"), type="character", default="metaphlan2/sp_table.count", + help="Output alpha diversity filename [default %default]") +) +opts <- parse_args(OptionParser(option_list=option_list)) + +# 显示输入输出确认是否正确 +print(paste("The input feature table is ", opts$input, sep = "")) +print(paste("Normalized depth: ", opts$normalize, sep = "")) +print(paste("Output feature table: ", opts$output, sep = "")) + +# suppressWarnings(dir.create("metaphlan2/")) + +# 1.3 安装CRAN来源常用包 +# 依赖包列表:参数解析、数据变换、绘图和开发包安装、安装依赖、ggplot主题 +package_list <- c("vegan") +# 判断R包加载是否成功来决定是否安装后再加载 +for(p in package_list){ + if(!suppressWarnings(suppressMessages(require(p, character.only = TRUE, quietly = TRUE, warn.conflicts = FALSE)))){ + install.packages(p, repos=site) + suppressWarnings(suppressMessages(library(p, character.only = TRUE, quietly = TRUE, warn.conflicts = FALSE))) + } +} + + +# 1.4 读取输入文件 + +# 默认的quote会跳过2/3的数据行减少,产生NA,改为空 +species = read.table(opts$input, header=T, sep="\t", quote = "", row.names=1, comment.char="") + +# 2. 计算过程 + +## 2.1 乘系数标准化并取整 +species = species * opts$normalize +species = round(species) + +# 3. 结果输出 +# 3.1 保存抽平的物种表 +# 保存一个制表符,解决存在行名时,列名无法对齐的问题 +write.table("#OTUID\t", file=paste(opts$output,sep=""),append = F, quote = F, eol = "", row.names = F, col.names = F) +# 保存统计结果,有waring正常 +suppressWarnings(write.table(species, file=paste(opts$output,sep=""), append = T, quote = F, sep="\t", eol = "\n", na = "NA", dec = ".", row.names = T, col.names = T)) + +print(paste("Output count table ", opts$output, sep = "")) diff --git a/seq/C1_1.fq.gz b/seq/C1_1.fq.gz new file mode 100644 index 0000000..3614282 Binary files /dev/null and b/seq/C1_1.fq.gz differ diff --git a/seq/C1_2.fq.gz b/seq/C1_2.fq.gz new file mode 100644 index 0000000..2c6ade8 Binary files /dev/null and b/seq/C1_2.fq.gz differ diff --git a/seq/C2_1.fq.gz b/seq/C2_1.fq.gz new file mode 100644 index 0000000..0b19e29 Binary files /dev/null and b/seq/C2_1.fq.gz differ diff --git a/seq/C2_2.fq.gz b/seq/C2_2.fq.gz new file mode 100644 index 0000000..bceee88 Binary files /dev/null and b/seq/C2_2.fq.gz differ