注释对比:Prokka/Bakta/DRAM
一句话概述:Prokka是原核基因组注释的经典快速工具,Bakta是Prokka的现代替代品(数据库更新、标准化更好),DRAM专注宏基因组功能注释(代谢通路可视化)——新项目推荐Bakta替代Prokka,功能注释用DRAM。
核心知识点速查表
| 概念 | 说明 |
|---|
| Prokka | 经典原核基因组注释工具(白话:给细菌基因"贴标签") |
| Bakta | 新一代原核注释工具(Prokka升级版,2021年发布) |
| DRAM | 宏基因组功能注释(白话:看微生物群落能做什么代谢) |
| CDS | 编码序列(蛋白质编码基因) |
| tRNA/rRNA | 转运RNA和核糖体RNA |
| COG/KEGG/Pfam | 常见的功能注释数据库 |
一、三大工具对比
| 特性 | Prokka | Bakta | DRAM |
|---|
| 定位 | 基因组注释 | 基因组注释 | 功能注释 |
| 适用对象 | 单个原核基因组 | 单个原核基因组 | 宏基因组MAG/基因 |
| 速度 | ★最快(~5min) | 中等(~10min) | 慢(~1h) |
| 数据库更新 | 停止更新 | ★持续更新 | 持续更新 |
| 注释标准化 | 一般 | ★符合INSDC标准 | 好 |
| 输出格式 | GFF3/GBK/等 | GFF3/GBK/等 | 表格+★蒸馏图 |
| 基因预测 | Prodigal | Prodigal/Pyrodigal | Prodigal |
| 功能数据库 | UniProt/HAMAP | ★UniRef/AMRFinder+ | KEGG/dbCAN/MEROPS |
| 代谢可视化 | 无 | 无 | ★蒸馏图(distillate) |
| 推荐度(2025) | 旧项目兼容 | ★新项目首选 | 功能注释首选 |
二、安装
# === 安装 ===
conda install -c bioconda prokka # Prokka
conda install -c bioconda bakta # Bakta
conda install -c bioconda dram # DRAM(需要数据库配置)
# === 数据库 ===
# Bakta数据库下载(~30GB完整版,~2GB精简版)
bakta_db download --output bakta_db --type full # 完整版
bakta_db download --output bakta_db --type light # 精简版(推荐开始用)
# DRAM数据库配置(需要KEGG许可或使用免费替代)
DRAM-setup.py prepare_databases \
--output_dir dram_db \
--skip_uniref # 跳过UniRef(太大)
三、注释实操
3.1 Prokka(快速基因组注释)
# === Prokka 注释 ===
prokka \
genome.fa \ # 输入基因组fasta
--outdir prokka_output \ # 输出目录
--prefix my_genome \ # 输出文件前缀
--kingdom Bacteria \ # 界: Bacteria/Archaea/Viruses
--genus Escherichia \ # 属名(可选,提高准确度)
--species coli \ # 种名(可选)
--cpus 8 \ # 线程数
--mincontiglen 200 \ # 最短contig
--evalue 1e-06 \ # E值阈值
--rfam # 使用Rfam注释ncRNA
# 输出文件:
# my_genome.gff - GFF3格式注释(★最重要)
# my_genome.gbk - GenBank格式
# my_genome.faa - 蛋白质序列
# my_genome.ffn - 核酸序列
# my_genome.fna - 基因组序列(输入副本)
# my_genome.txt - 注释统计摘要
# my_genome.tsv - 基因信息表格
3.2 Bakta(★推荐替代Prokka)
# === Bakta 注释(新项目首选) ===
bakta \
genome.fa \ # 输入基因组
--db bakta_db/db \ # 数据库路径
--output bakta_output \ # 输出目录
--prefix my_genome \ # 文件前缀
--genus Escherichia \ # 属名(可选)
--species coli \ # 种名(可选)
--threads 8 \ # 线程数
--min-contig-length 200 \ # 最短contig
--locus-tag ECOL # 基因位点标签前缀
# Bakta额外功能:
# --skip-trna/--skip-rrna # 跳过tRNA/rRNA预测
# --gram +/-/? # 革兰氏阳性/阴性/未知
# --keep-contig-headers # 保留原始contig名
# 输出文件(与Prokka类似):
# my_genome.gff3 - GFF3格式注释
# my_genome.gbff - GenBank格式
# my_genome.faa - 蛋白质序列
# my_genome.json - JSON格式结果
# my_genome.tsv - 表格格式
# === Bakta vs Prokka 主要优势 ===
# 1. 数据库持续更新(Prokka依赖的数据库已老旧)
# 2. 符合INSDC提交标准(直接用于GenBank/ENA提交)
# 3. 包含AMR(抗性基因)和毒力因子注释
# 4. 蛋白质命名更规范(避免"hypothetical protein"过多)
3.3 DRAM(宏基因组功能注释)
# === DRAM 注释(宏基因组MAG功能分析) ===
# 第1步:注释
DRAM.py annotate \
-i mags/*.fa \ # 输入多个MAG基因组
-o dram_output \ # 输出目录
--threads 8 \ # 线程数
--min_contig_size 2500 # 最短contig
# 第2步:蒸馏(★DRAM特色功能)
DRAM.py distill \
-i dram_output/annotations.tsv \ # 注释结果
-o dram_distillate \ # 蒸馏输出
--trna_path dram_output/trnas.tsv \ # tRNA结果
--rrna_path dram_output/rrnas.tsv # rRNA结果
# 蒸馏输出(★面试重点):
# product.html - 代谢概览图(交互式网页)
# genome_stats.tsv - 基因组统计
# metabolism_summary.xlsx - 代谢通路汇总表
# 功能模块覆盖度: 看每个MAG的代谢能力
四、结果解读与下游分析
# === 在R中分析注释结果 ===
# 读取Prokka/Bakta的TSV输出
genes <- read.table("my_genome.tsv", header=TRUE, sep="\t")
# 统计各类特征
table(genes$ftype) # CDS/tRNA/rRNA/等
cat("CDS总数:", sum(genes$ftype=="CDS"), "\n")
cat("假定蛋白:", sum(grepl("hypothetical", genes$product)), "\n")
# 计算注释率
annotated <- sum(!grepl("hypothetical", genes$product))
total_cds <- sum(genes$ftype=="CDS")
cat("注释率:", round(annotated/total_cds*100, 1), "%\n")
# 好的注释率: >60% | 一般: 40-60% | 差: <40%
# === 读取DRAM蒸馏结果 ===
library(readxl)
metabolism <- read_excel("metabolism_summary.xlsx")
# 看碳代谢、氮代谢、硫代谢等模块的覆盖度
五、面试高频考点
Q1: 为什么推荐Bakta替代Prokka?
- 数据库更新:Prokka的核心数据库(UniProt/HAMAP)版本已固定不再更新
- 命名标准化:Bakta按INSDC标准命名基因,可直接用于GenBank提交
- 功能更全:Bakta包含AMR和毒力因子注释(Prokka需要额外工具)
- 减少假定蛋白:Bakta的注释率通常比Prokka高10-20%
Q2: DRAM的"蒸馏"(distill)是什么?
- DRAM把复杂的基因注释浓缩成功能模块概览
- 产出一个直观的代谢概览图(product.html)
- 显示每个MAG的代谢能力:碳代谢、氮循环、硫循环等
- 白话:像把一本厚书的内容做成一页思维导图
Q3: 怎么评判注释质量?
| 指标 | 好 | 一般 | 差 |
|---|
| CDS注释率 | >70% | 50-70% | <50% |
| 假定蛋白占比 | <30% | 30-50% | >50% |
| tRNA数 | ~20(细菌) | 10-20 | <10 |
| rRNA操纵子 | ≥1完整 | 部分 | 无 |
六、常见报错
| 报错 | 原因 | 解决 |
|---|
Prokka: tbl2asn failed | tbl2asn版本老旧 | 更新tbl2asn |
Bakta: database not found | 数据库路径错误 | 用--db指定正确路径 |
DRAM: database not set up | 未配置数据库 | 运行DRAM-setup.py |
DRAM: KEGG not available | 缺少KEGG许可 | 用--skip_uniref或获取许可 |
| 注释结果空 | 输入不是原核基因组 | 检查输入文件和kingdom参数 |
速查表
# === 注释速查 ===
# Prokka(快速经典)
prokka genome.fa --outdir out --prefix name --kingdom Bacteria --cpus 8
# Bakta(★推荐新项目)
bakta genome.fa --db bakta_db/db --output out --prefix name --threads 8
# DRAM(宏基因组功能)
DRAM.py annotate -i mags/*.fa -o out --threads 8
DRAM.py distill -i out/annotations.tsv -o distillate
# 选择: 快速→Prokka | 新项目→Bakta | 功能/代谢→DRAM
# 评估: 注释率>60%好 | 假定蛋白<30%好 | tRNA≈20正常