基于qiime2的16S数据分析全流程:从导入数据到下游分析一条龙

news2025/3/11 15:47:26

目录

创建metadata

把数据导入qiime2

去除引物序列

双端合并 (dada2不需要)

质控 (dada2不需要)

使用deblur获得特征序列

使用dada2生成代表序列与特征表

物种鉴定

可视化物种鉴定结果

构建进化树(ITS一般不构建进化树)

生成多样性分析所需数据

α多样性分析

beta多样性分析

绘制稀释曲线

差异物种分析

如何把.qza格式文件导出?比如把特征表导出

演示单端数据导入qiime2


基于qiime2的16s测序数据分析分析
本文演示的是目前最长用的双端测序数据
激活qiime环境
alias activate_qiime='conda activate qiime2-amplicon-2024.2'
我已经把上面这句代码放在了.bashrc里面,因此激活qiime2环境只需要运行activate_qiime即可
按照下图策略分析
演示Illumina公司的16S rRNA基因区的V3到V4区
数据导入,需要首先准备好一个manifest.tsv文件,这个文件有三列,分别是 sample-id forward-absolute-filepath reverse-absolute-filepath,如图所示
生成manifest.tsv可以使用下面的代码,这个代码是my_script文件夹里面的create_manifest.sh
#!/bin/bash
# 设置目录路径
dir="/data3/sunjs/chenlina/69contorl47PDAC"
# 输出表头 echo -e "sample-id\tforward-absolute-filepath\treverse-absolute-filepath"
# 遍历_R1和_R2文件
for r1 in ${dir}/*_R1.fastq.gz; do # 检查R1文件是否存在
if [[ -f $r1 ]]; then
# 获取样本ID(去掉_R1.fastq.gz)
sample_id=$(basename "$r1" _R1.fastq.gz)
# 构建R2文件路径 r2="${dir}/${sample_id}_R2.fastq.gz"
# 检查R2文件是否存在 if [[ -f $r2 ]]; then
# 输出结果 echo -e "${sample_id}\t${r1}\t${r2}" fi fi done
这个脚本会在终端直接显示生成的内容,我们一般会把这些内容重定向到另一个文件去,所以通常运行代码
bash create_manifest.sh>manifest.tsv
这样就会在当前工作目录下生成一个manifest.tsv文件

创建metadata

还需要创建一个metadata,比如有这些列
不过我创建的meta.tsv如图所示,只有样本名和分组两列

把数据导入qiime2

export TMPDIR=/data3/sunjs/ cd ~/test/qiime2/
input_path=~/test/qiime2/manifest.tsv
qiime tools import \
--type 'SampleData[PairedEndSequencesWithQuality]' \
--input-path "${input_path}" \
--output-path "PDAC.qza" \
--input-format PairedEndFastqManifestPhred33V2

去除引物序列

v3到v4区域的引物序列是固定的,就是这两个参数指定的序列
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
qiime cutadapt trim-paired \
--i-demultiplexed-sequences 69contorl_47PDAC.qza \
--p-cores 10 \
--p-no-indels \
--p-front-f ACTCCTACGGGAGGCAGCAG \
--p-front-r GGACTACHVGGGTWTCTAAT \
--o-trimmed-sequences primer-trimmed-demux.qza
双端的数据不需要拆分barcode,直接往下进行即可

双端合并 (dada2不需要)

如果接下来打算 使用deblur或OTU聚类方法,现在就合并序列。如果计划使用 dada2对序列进行去噪,则不要合并——dada2会在对每个序列进行去噪之后自动执行序列合并。
qiime vsearch merge-pairs \
--i-demultiplexed-seqs primer-trimmed-demux.qza \
--o-unmerged-sequences unmerged_demux-joined.qza \
--p-threads 16 \
--o-merged-sequences demux-joined.qza

质控 (dada2不需要

cd /data3/sunjs/chenlina/test qiime quality-filter q-score \
--p-min-quality 20 \ --i-demux demux-joined.qza \
--o-filtered-sequences demux-joined-filtered.qza \
--o-filter-stats demux-joined-filter-stats.qza

使用deblur获得特征序列

qiime deblur denoise-16S \
--i-demultiplexed-seqs demux-joined-filtered.qza \
--p-trim-length 400 \ --p-sample-stats \
--p-jobs-to-start 2 \ --p-min-reads 1 \
--o-representative-sequences repset-seqs.qza \
--o-table feature-table.qza \
--o-stats deblur-stats.qza
或者使用data2得到特征表和代表序列,可以直接替换掉质控+使用 deblur获得特征序列两步,但是不管用deblur还是dada2都要完成导入数据,去引物
使用dada2之前需要先获得 --p-trim四个参数,把下面这段代码生成的数据拖到qiime2的可视化网站里面可以看到两张图
qiime demux summarize \
--i-data primer-trimmed-demux.qza \
--o-visualization demux-summary.qzv

使用dada2生成代表序列与特征表

#p-trim-left-f正向序列左边
#p-trim-left-r 反向去列左边
#p-trunc-len-f正向序列x轴的值
#p-trunc-len-r反向序列x轴的值
# --p-retain-all-samples True保留所有样本
qiime dada2 denoise-paired \
--i-demultiplexed-seqs primer-trimmed-demux.qza \
--p-n-threads 20 \
--p-trim-left-f 0 --p-trim-left-r 0 \
--p-trunc-len-f 270 --p-trunc-len-r 187 \
--p-retain-all-samples True \
-o-table dada2-table.qza \
--o-representative-sequences dada2-rep-seqs.qza \
--o-denoising-stats denoising-stats.qza
其中
#p-trim-left-f正向序列左边
#p-trim-left-r 反向去列左边
#p-trunc-len-f正向序列x轴的值
#p-trunc-len-r反向序列x轴的值
这四个参数的取值要通过看上面那两张图来得到
一般来讲会去掉质量中位数小于20的位点。
上面两种方法选一个就行,推荐dada2

物种鉴定

生成代表序列之后可以进行物种鉴定了
export TMPDIR=/data3/sunjs/
input_path=/data3/sunjs/chenlina/qiime2/PDAC
output_path=/data3/sunjs/chenlina/qiime2/PDAC
db_path=~/Metagenome/database/silva-138-99-nb-classifier.qza
cd "${input_path}"
#全长引物注释,使用的数据库日期是2024.2
#要求输入代表序列,也就是dada2结果生成的那个
#--p-n-jobs如果设置为 -1,那么程序会尝试使用所有可用的 CPU 核心来执行任务
#--p-n-jobs指定的是进程而非线程,和threads不是一回事
qiime feature-classifier classify-sklearn \
--i-classifier "${db_path}" \
--i-reads dada2-rep-seqs.qza \
--p-n-jobs 20 \
--o-classification "${output_path}/taxonomy.qza" #过滤污染 叶绿体 线粒体 qiime taxa filter-table \ --i-table dada2-table.qza \
--i-taxonomy taxonomy.qza \
--p-exclude mitochondria,chloroplast \
--p-include p__ \
--o-filtered-table "${output_path}/feature-table-filt-contam.qza"
#过滤稀有ASV qiime feature-table filter-features \
--i-table feature-table-filt-contam.qza \
--p-min-frequency 50 \ --p-min-samples 1 \
--o-filtered-table "${output_path}/feature-table-final.qza"
#过滤掉ASV对应的序列 qiime feature-table filter-seqs \
--i-data dada2-rep-seqs.qza \
--i-table feature-table-final.qza \
--o-filtered-data "${output_path}/repset-seqs-final.qza"
这里需要提前下载好对应的数据库,下载的数据库理论上来讲是越新越好,但是需要和你用的qiime2软件版本一致,比如qiime2是2024.2的,那数据库也要下载2024.2的,下载数据库可以从这个网址下载 QIIME 2 Resources ,运行这段代码之后就得到了物种鉴定表也就是 taxonomy.qza,同时上面的代码还进行了一些过滤,然后我们可以使用下面的代码来对物种鉴定的结果进行可视化

可视化物种鉴定结果

qiime metadata tabulate \
--m-input-file taxonomy.qza \
--o-visualization taxonomy.qzv
#绘制柱状图
qiime taxa barplot \
--i-table feature-table-final.qza \
--i-taxonomy taxonomy.qza \
--m-metadata-file meta.tsv \
--o-visualization taxa-bar-plots.qzv
其中taxonomy.qzv文件拖到网站里面长这样子
taxa-bar-plots.qzv长这样子,网站允许把柱状图的数据导出成csv格式,推荐导出之后用R来绘制

构建进化树(ITS一般不构建进化树)

#构建进化树,ITS一般不构建进化树
export TMPDIR=/data3/sunjs/ input_path=/data3/sunjs/chenlina/qiime2/PDAC output_path=/data3/sunjs/chenlina/qiime2/PDAC
cd "${input_path}"
qiime phylogeny align-to-tree-mafft-fasttree \
--i-sequences repset-seqs-final.qza \
--o-alignment aligned-repset-seqs.qza \
--p-n-threads 40 \
--o-masked-alignment masked-aligned-repset-seqs.qza \
--o-tree ${output_path}/unrooted-tree.qza \
--o-rooted-tree "${output_path}/rooted-tree.qza"
下面这段代码用于生成代表序列和特征表的qzv格式文件,在网址 view.qiime2.org可以可视化,需要先导出然后拖进去
cd /data3/sunjs/chenlina/84contorl_50PDAC_res
# 特征表和特征序列汇总
qiime feature-table summarize \
--i-table feature-table-final.qza \
--m-sample-metadata-file meta.tsv \
--o-visualization table.qzv qiime feature-table tabulate-seqs \
--i-data repset-seqs-final.qza \
--o-visualization rep-seqs.qzv
把table.qzv拖到网站里面是这样的
点击detail这个,拖到最下边,出现这样的界面
后续将选择53这个数量进行抽平,当然51也可以

生成多样性分析所需数据

#53是把上一步生成的table.qzv文件拖到qimme2网站查看来确定的
qiime diversity core-metrics-phylogenetic \
--i-phylogeny rooted-tree.qza \
--i-table feature-table-final.qza \
--p-sampling-depth 53 \
--m-metadata-file meta.tsv \
--output-dir ./diversity
生成一个名为diversity的目录,里面有一堆文件,其中有四个是qzv格式的,这四个qzv格式的可以直接拖到网站进行可视化,都是beta多样性的比如PCA图,PCoA图这种的
比如下面这样子

α多样性分析

cd /data3/sunjs/chenlina/84contorl_50PDAC_res/
#α多样性分析
qiime diversity alpha-group-significance \
--i-alpha-diversity diversity/faith_pd_vector.qza \
--m-metadata-file meta.tsv \
--o-visualization faith-group-significance.qzv
输入是上一步生成的faith_pd_vector.qza,生成文件如图所示

beta多样性分析

#beta多样性分析
cd /data3/sunjs/chenlina/67contorl_50PDAC_res
qiime diversity beta-group-significance \
--i-distance-matrix diversity/unweighted_unifrac_distance_matrix.qza \
--m-metadata-file meta.tsv \
--m-metadata-column group \
--p-pairwise \
--o-visualization unweighted-unifrac-group-significance.qzv
生成了一个文件,拖到网页里面是这样的,代表了其中某个分组与其他分组有没有差别,使用的方法是置换多因素方差分析
画图,实际上前面已经有过这个图了
#qiime diversity core-metrics-phylogenetic这一步已经生成的结果
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
qiime emperor plot \
--i-pcoa diversity/unweighted_unifrac_pcoa_results.qza \
--m-metadata-file meta.tsv \ --p-custom-axes days-since-experiment-start \
--o-visualization unweighted-unifrac-emperor-group.qzv
这里--i输入的是前面
qiime diversity core-metrics-phylogenetic
这一步已经生成的结果,最后得到的结果也是跟前面
qiime diversity core-metrics-phylogenetic运行得到的那个结果是一样的,尚不清楚这个有啥用处。

绘制稀释曲线

#稀释曲线
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
qiime diversity alpha-rarefaction \
--i-table feature-table-final.qza \
--i-phylogeny rooted-tree.qza \
--p-max-depth 9000 \
--m-metadata-file meta.tsv \
--o-visualization alpha-rarefaction.qzv
我这里选择了取样是9000条,结果如图所示
可以看到后面基本平了,说明测序饱和了,如果发现后面还在往上升,说明测序没饱和,很多东西测不到,这种数据发出去会被拒稿,因为说不定再多测点就结果不一样了。

差异物种分析

有时候可能会先过滤部分数据,比如我先按照频率和特征数过滤 掉一些低质量数据
#过滤部分特征表的数据
cd /data3/sunjs/chenlina/69contorl_47PDAC_res
#--p-min-frequency:样本必须具有的最小总频率,才能被保留
#--p-min-features:样本必须具有的最小特征数,才能被保留
qiime feature-table filter-samples \
--i-table feature-table-final.qza \
--m-metadata-file meta.tsv \
--p-min-features 10 \
--p-min-frequency 1500 \
--o-filtered-table filter-table.qza
可以查看qiime feature-table filter-samples的帮助文档来查看其他过滤参数,比如我可以使用参数--p-where只保留meta.tsv中的某一个分组。
接下来使用 ANCOM-BC方法来进行差异物种分析
#差异分析 cd /data3/sunjs/chenlina/69contorl_47PDAC_res
#--p-formula描述了微生物的绝对丰度是如何依赖于元数据中的变量的
#使用ANCOM-BC方法来进行差异物种分析
qiime composition ancombc \
--i-table filter-table.qza \
--m-metadata-file meta.tsv \
--p-formula group \
--o-differentials ancombc-group.qza
#生成差异丰富度分析结果的条形图可视化
qiime composition da-barplot \
--i-data ancombc-group.qza \
--p-significance-threshold 0.001 \
--o-visualization da-barplot-group.qzv

如何把.qza格式文件导出?比如把特征表导出

cd /data3/sunjs/chenlina/84contorl_50PDAC_res
qiime tools export \
--input-path feature-table-final.qza \
--output-path exported-feature-table biom convert \
-i exported-feature-table/feature-table.biom \
-o feature-table.tsv \
--to-tsv
这就把特征表导出成了tsv这种表格形式的文件

演示单端数据导入qiime2

先使用fastp对下载的数据进行质控
input_path=/data3/sunjs/chenlina/contorl_data output_path=/data3/sunjs/chenlina/contorl_clean_data
cd "$input_path" #SRR15884889.fastq for file in *.fastq; do
sample_id=$(echo "$file" | cut -d'.' -f1)
echo "sample_id是$sample_id
输入文件是$file"
echo "输出文件为${sample_id}.fastp.json和${sample_id}.fastp.html"
fastp -i "${file}" -o "${output_path}/${file}" \ -
-qualified_quality_phred 20 \
--length_required 50 \
--cut_front \
--cut_tail \
--trim_poly_g \
--html "${output_path}/${sample_id}.html" \
--json "${output_path}/${sample_id}.json" done
然后运行代码自动构建一个manifest.tsv文件
cd /data3/sunjs/chenlina/contorl_data
echo -e "sample-id\tabsolute-filepath" > contorl_manifest.tsv for file in *.fastq; do
echo -e "${file%.fastq}\t$(pwd)/$file" >> contorl_manifest.tsv done
解释下上面这段代码
上面的命令是用来生成一个清单文件(manifest file),这个文件将每个样本的ID和对应的绝对文件路径关联起来。这个文件随后可以被用来将单端FASTQ文件导入到QIIME 2中。
数据来源于文章 Dysbiosis of human gut microbiome in young onset colorectal cancer,他的数据中扩增子测序文件里面是单端测序文件,所以构建的manifest长这样子
然后把健康人的feces数据导入qiime2,由于是单端的所以
--type 参数是'SampleData[SequencesWithQuality]'
export TMPDIR=/data3/sunjs/
input_path=/data3/sunjs/chenlina/contorl_data/contorl_manifest.tsv
qiime tools import \
--type 'SampleData[SequencesWithQuality]' \
--input-path "${input_path}" \
--output-path contorl_demux-single-end.qza \
--input-format SingleEndFastqManifestPhred33V2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux系统编程】基本IO函数

目录 1、open 函数2、create 函数3、write 函数4、read 函数5、lseek 函数6、access 函数7、unlink 函数8、remove 函数9、fcntl 函数写锁互斥锁示例读锁共享锁示例 1、open 函数 头文件 #include<sys/types.h> #include<sys/stat.h>#include<fcntl.h>…

Deepseek应用技巧-chatbox搭建前端问答

目标&#xff1a;书接上回&#xff0c;由于本地私有化部署了deepseek的大模型&#xff0c;那怎么能够投入生产呢&#xff0c;那就必须有一个前端的应用界面&#xff0c;好在已经有很多的前人已经帮我们把前段应用给搭建好了&#xff0c;我们使用就可以啦&#xff0c;今天我们就…

OpenAI API模型ChatGPT各模型功能对比,o1、o1Pro、GPT-4o、GPT-4.5调用次数限制附ChatGPT订阅教程

本文包含OpenAI API模型对比页面以及ChatGPT各模型功能对比表 - 截至2025最新整理数据&#xff1a;包含模型分类及描述&#xff1b;调用次数限制&#xff1b; 包含模型的类型有&#xff1a; Chat 模型&#xff08;如 GPT-4o、GPT-4.5、GPT-4&#xff09;专注于对话&#xff0c…

Fast DDS Security--秘钥交换

Fast DDS Security模块中默认使用Diffie-Hellman算法进行秘钥交换。Diffie-Hellman 算法&#xff08;简称 DH 算法&#xff09;是一个非常重要的加密协议&#xff0c;用于在不安全的通信通道中安全地交换密钥。该算法通过利用数学中的离散对数问题来生成共享密钥&#xff0c;使…

从0开始的操作系统手搓教程33:挂载我们的文件系统

目录 代码实现 添加到初始化上 上电看现象 挂载分区可能是一些朋友不理解的——实际上挂载就是将我们的文件系统封装好了的设备&#xff08;硬盘啊&#xff0c;SD卡啊&#xff0c;U盘啊等等&#xff09;&#xff0c;挂到我们的默认分区路径下。这样我们就能访问到了&#xff…

基于muduo+mysql+jsoncpp的简易HTTPWebServer

一、项目介绍 本项目基于C语言、陈硕老师的muduo网络库、mysql数据库以及jsoncpp&#xff0c;服务器监听两个端口&#xff0c;一个端口用于处理http请求&#xff0c;另一个端口用于处理发送来的json数据。 此项目在实现时&#xff0c;识别出车牌后打包为json数据发送给后端服务…

【Go学习实战】03-2-博客查询及登录

【Go学习实战】03-2-博客查询及登录 读取数据库数据初始化数据库首页真实数据分类查询分类查询测试 文章查询文章查询测试 分类文章列表测试 登录功能登录页面登录接口获取json参数登录失败测试 md5加密jwt工具 登录成功测试 文章详情测试 读取数据库数据 因为我们之前的数据都…

《Python实战进阶》No20: 网络爬虫开发:Scrapy框架详解

No20: 网络爬虫开发&#xff1a;Scrapy框架详解 摘要 本文深入解析Scrapy核心架构&#xff0c;通过中间件链式处理、布隆过滤器增量爬取、Splash动态渲染、分布式指纹策略四大核心技术&#xff0c;结合政府数据爬取与动态API逆向工程实战案例&#xff0c;构建企业级爬虫系统。…

Linux:多线程(单例模式,其他常见的锁,读者写者问题)

目录 单例模式 什么是设计模式 单例模式介绍 饿汉实现方式和懒汉实现方式 其他常见的各种锁 自旋锁 读者写者问题 逻辑过程 接口介绍 单例模式 什么是设计模式 设计模式就是一些大佬在编写代码的过程中&#xff0c;针对一些经典常见场景&#xff0c;给定对应解决方案&…

【氮化镓】高输入功率应力诱导的GaN 在下的退化LNA退化

2019年,中国工程物理研究院电子工程研究所的Tong等人基于实验与第一性原理计算方法,研究了Ka波段GaN低噪声放大器(LNA)在高输入功率应力下的退化机制。实验结果表明,在27 GHz下施加1 W连续波(CW)输入功率应力后,LNA的增益下降约1 dB,噪声系数(NF)增加约0.7 dB。进一…

Javaweb后端文件上传@value注解

文件本地存储磁盘 阿里云oss准备工作 阿里云oss入门程序 要重启一下idea&#xff0c;上面有cmd 阿里云oss案例集成 优化 用spring中的value注解

git规范提交之commitizen conventional-changelog-cli 安装

一、引言 使用规范的提交信息可以让项目更加模块化、易于维护和理解&#xff0c;同时也便于自动化工具&#xff08;如发布工具或 Changelog 生成器&#xff09;解析和处理提交记录。 通过编写符合规范的提交消息&#xff0c;可以让团队和协作者更好地理解项目的变更历史和版本…

Java/Kotlin逆向基础与Smali语法精解

1. 法律警示与道德边界 1.1 司法判例深度剖析 案例一&#xff1a;2021年某游戏外挂团伙刑事案 犯罪手法&#xff1a;逆向《王者荣耀》通信协议&#xff0c;修改战斗数据包 技术细节&#xff1a;Hook libil2cpp.so的SendPacket函数 量刑依据&#xff1a;非法经营罪&#xff…

非软件开发项目快速上手:14款管理软件精选

文章介绍了以下14款项目管理系统&#xff1a;1.Worktile&#xff1b;2.Teambition&#xff1b;3.Microsoft Project&#xff1b;4.Forbes&#xff1b;5.WorkOtter&#xff1b;6.Trello&#xff1b;7.Smartsheet&#xff1b;8.Taiga&#xff1b;9.ClickUp&#xff1b;10.Monday.…

夸父工具箱(安卓版) 手机超强工具箱

如今&#xff0c;人们的互联网活动日益频繁&#xff0c;导致手机内存即便频繁清理&#xff0c;也会莫名其妙地迅速填满&#xff0c;许多无用的垃圾信息悄然占据空间。那么&#xff0c;如何有效应对这一难题呢&#xff1f;答案就是今天新推出的这款工具软件&#xff0c;它能从根…

混元图生视频-腾讯混元开源的图生视频模型

混元图生视频是什么 混元图生视频是腾讯混元推出的开源图生视频模型&#xff0c;用户可以通过上传一张图片进行简短描述&#xff0c;让图片动起来生成5秒的短视频。模型支持对口型、动作驱动和背景音效自动生成等功能。模型适用于写实、动漫和CGI等多种角色和场景&#xff0c;…

Debian系统grub新增启动项

参考链接 给grub添加自定义启动项_linux grub定制 启动项名称自定义-CSDN博客 www.cnblogs.com 1. boot里面的grub.cfg 使用vim打开boot里面的grub.cfg sudo vim /boot/grub/grub.cfg 这时候会看到文件最上方的提示 2. 真正配置grub的文件 从刚才看到的文件提示中&#x…

VSCode快捷键整理

VSCode快捷键整理 文章目录 VSCode快捷键整理1-VSCode 常用快捷键1-界面操作2-单词移动3-删除操作4-编程相关5-多光标操作6-文件、符号、函数跳转7-鼠标操作8-自动补全操作9-代码折叠操作 1-VSCode 常用快捷键 1-界面操作 文件资源管理器&#xff1a;Ctrl Shift E 跨文件搜…

刘火良 FreeRTOS内核实现与应用之1——列表学习

重要数据 节点的命名都以_ITEM后缀进行&#xff0c;链表取消了后缀&#xff0c;直接LIST 普通的节点数据类型 /* 节点结构体定义 */ struct xLIST_ITEM { TickType_t xItemValue; /* 辅助值&#xff0c;用于帮助节点做顺序排列 */ struct xLIST_I…

本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件

文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome&#xff01;它不仅让你随时随地畅享本地音乐…