跳转至

617_基因组注释Prokka_Bakta

一句话概述: Prokka和Bakta是细菌基因组快速注释的两大工具——Prokka是经典老将(已停止维护),Bakta是推荐继任者(更准确、更多交叉引用),能在几分钟内完成从序列到基因功能的全自动注释。

核心知识点速查表

概念白话解释
Genome annotation找出基因组上所有基因的位置和功能
CDS编码序列——能翻译成蛋白质的基因
tRNA/rRNA转运RNA和核糖体RNA的位置
Hypothetical protein假定蛋白——预测到了基因但不知道功能
GFF3基因注释的标准格式文件
GenBank (.gbk)包含序列+注释的综合格式
Prodigal原核基因预测工具(Prokka和Bakta都用)
sORF小开放阅读框——短于100个氨基酸的小蛋白

一、Prokka——经典注释工具

1.1 安装

conda create -n annotation python=3.8  # 创建环境
conda activate annotation
conda install -c bioconda prokka  # 安装Prokka
prokka --version  # 查看版本

1.2 基本用法

# === 最简单用法 ===
prokka genome.fasta  # 默认参数注释

# === 标准用法 ===
prokka \
    --kingdom Bacteria \       # 原核生物(Bacteria/Archaea)
    --genus Escherichia \      # 属名
    --species coli \           # 种名
    --strain K12 \             # 菌株名
    --outdir prokka_output \   # 输出目录
    --prefix ecoli_K12 \       # 输出文件前缀
    --locustag ECOLI \         # 基因座位标签
    --cpus 8 \                 # CPU数
    --rfam \                   # 启用Rfam搜索ncRNA(较慢但更全)
    --addgenes \               # 在GFF中添加基因特征
    --compliant \              # 生成GenBank兼容的输出
    genome.fasta               # 输入文件

# === 使用自定义蛋白数据库 ===
prokka \
    --proteins custom_db.fasta \  # 优先用这个数据库注释
    --outdir prokka_custom \
    --cpus 8 \
    genome.fasta

1.3 Prokka输出文件

ls prokka_output/
# .gff   — GFF3格式注释文件(最常用,Roary等需要)
# .gbk   — GenBank格式(含序列+注释)
# .fna   — 核苷酸序列(与输入相同,但重命名了)
# .faa   — 蛋白序列
# .ffn   — 基因核苷酸序列
# .fsa   — GenBank提交格式的序列
# .tbl   — GenBank提交格式的特征表
# .sqn   — GenBank提交用的ASN.1格式
# .log   — 日志文件
# .txt   — 统计摘要
# .tsv   — 基因信息表格

# 查看统计摘要
cat prokka_output/ecoli_K12.txt
# 输出类似:
# organism: Escherichia coli K12
# contigs: 1
# bases: 4641652
# CDS: 4319
# rRNA: 22
# tRNA: 86
# tmRNA: 1

二、Bakta——推荐的新一代工具

2.1 安装

# === conda安装 ===
conda install -c bioconda bakta  # 安装Bakta

# === 下载数据库(必须!约53GB)===
bakta_db download --output /path/to/bakta_db  # 下载完整数据库

# 或下载轻量版数据库(约1.6GB,功能注释较少)
bakta_db download --output /path/to/bakta_db --type light

# 验证
bakta --version  # 查看版本
bakta_db info --db /path/to/bakta_db  # 查看数据库信息

2.2 基本用法

# === 标准注释 ===
bakta \
    --db /path/to/bakta_db \   # 数据库路径
    --output bakta_output \    # 输出目录
    --prefix ecoli \           # 输出文件前缀
    --genus Escherichia \      # 属名
    --species coli \           # 种名
    --strain K12 \             # 菌株名
    --threads 8 \              # 线程数
    --locus-tag ECOLI \        # 基因座位标签
    --compliant \              # GenBank兼容输出
    genome.fasta               # 输入文件

# === 注释MAG(宏基因组组装基因组)===
bakta \
    --db /path/to/bakta_db \
    --output bakta_mag \
    --prefix mag_bin1 \
    --threads 8 \
    --meta \                   # MAG/宏基因组模式
    bin1.fasta

# === 使用Bakta Web(在线版,无需安装数据库)===
# 访问 https://bakta.computational.bio
# 上传FASTA文件即可

2.3 Bakta输出文件

ls bakta_output/
# .gff3     — GFF3注释文件
# .gbff     — GenBank格式
# .fna      — 核苷酸序列
# .faa      — 蛋白序列
# .ffn      — 基因核苷酸序列
# .tsv      — 基因信息表格
# .json     — 机器可读的JSON格式(Bakta独有)
# .embl     — EMBL格式
# .txt      — 统计摘要
# .hypotheticals.tsv — 假定蛋白信息
# .hypotheticals.faa — 假定蛋白序列

三、Prokka vs Bakta详细对比

特性ProkkaBakta
状态已停止维护活跃开发中
数据库大小0.6 GB53 GB
运行时间~4分钟~7-10分钟
假定蛋白比例~41%~11%(大大优于Prokka)
sORF检测不支持支持
GO注释不支持支持
EC号注释数~1,042~1,562
JSON输出不支持支持
Web界面有(bakta.computational.bio)
FAIR引用有限丰富(UniRef/RefSeq/UniParc)
推荐场景老流程兼容新项目首选

四、批量注释流程

#!/bin/bash
# 批量注释多个细菌基因组

GENOMES_DIR="genomes"    # 基因组文件目录
OUTPUT_DIR="annotations" # 输出目录
DB="/path/to/bakta_db"   # Bakta数据库路径
THREADS=8                # 线程数

mkdir -p ${OUTPUT_DIR}

# === 用Bakta批量注释 ===
for genome in ${GENOMES_DIR}/*.fasta; do
    name=$(basename "$genome" .fasta)  # 提取文件名
    echo "正在注释: ${name}"

    bakta \
        --db ${DB} \
        --output ${OUTPUT_DIR}/${name} \
        --prefix ${name} \
        --threads ${THREADS} \
        --locus-tag ${name} \
        ${genome}

    # 打印统计
    echo "--- ${name} 统计 ---"
    grep -E "CDS|tRNA|rRNA|sORF" ${OUTPUT_DIR}/${name}/${name}.txt
    echo ""
done

# === 汇总统计 ===
echo "========== 注释统计汇总 =========="
for dir in ${OUTPUT_DIR}/*/; do
    name=$(basename "$dir")
    cds=$(grep "CDS" ${dir}/${name}.txt | awk '{print $2}')
    hypo=$(grep -c "hypothetical" ${dir}/${name}.tsv 2>/dev/null || echo 0)
    echo "${name}: CDS=${cds}, 假定蛋白=${hypo}"
done

五、注释结果的下游使用

# === Python解析Bakta的JSON输出 ===
import json  # 导入json模块

# 读取JSON结果
with open("bakta_output/ecoli.json", 'r') as f:
    data = json.load(f)

# 统计基因类型
feature_types = {}
for feature in data.get("features", []):
    ftype = feature.get("type", "unknown")
    feature_types[ftype] = feature_types.get(ftype, 0) + 1

print("基因类型统计:")
for ftype, count in sorted(feature_types.items(), key=lambda x: -x[1]):
    print(f"  {ftype}: {count}")

# 提取所有有功能注释的基因
annotated = [f for f in data["features"] 
             if f.get("type") == "cds" and "hypothetical" not in f.get("product", "").lower()]
print(f"\n有功能注释的CDS: {len(annotated)}/{len([f for f in data['features'] if f.get('type')=='cds'])}")

六、常见报错与解决

报错信息原因解决方案
Database not found (Bakta)数据库路径错误或未下载bakta_db download下载数据库
tbl2asn not found (Prokka)GenBank工具缺失conda install -c bioconda tbl2asn
Disk space insufficient (Bakta)磁盘空间不足Bakta需要53GB,用light数据库
Prodigal error输入序列太短过滤掉<200bp的contig
Encoding error序列包含非法字符检查FASTA文件格式
Prokka GFF缺少序列版本问题确认GFF末尾有##FASTA段

七、面试高频题

Q1:细菌基因组注释的主要步骤是什么?

答: 分四步:(1) 基因预测——用Prodigal找CDS(编码序列),用Aragorn/tRNAscan-SE找tRNA,用Barrnap找rRNA;(2) 功能注释——把预测的蛋白与数据库(UniProt/COG/Pfam)比对确定功能;(3) 信号序列预测——SignalP检测分泌信号肽;(4) 其他特征——CRISPR阵列、ncRNA等。Prokka和Bakta都把这些步骤自动化了。

Q2:Prokka已经停止维护了,现在推荐什么工具?

答: 推荐Bakta。Prokka的作者Torsten Seemann已正式推荐Bakta作为继任者。Bakta的优势:(1) 假定蛋白比例从41%降到11%,功能注释更全;(2) 支持GO注释和小蛋白(sORF)检测;(3) 输出JSON格式方便程序化处理;(4) 有Web版可在线使用。缺点是数据库较大(53GB)且运行稍慢。

Q3:为什么有些基因被注释为"hypothetical protein"?

答: Prodigal能预测到一段序列是基因(有合理的起始密码子、终止密码子、长度等特征),但在蛋白数据库中找不到相似的已知蛋白,所以只能标记为"假定蛋白"。这可能是因为:(1) 这个基因确实是新发现的、功能未知的基因;(2) 数据库不够大(Prokka的数据库比Bakta小80倍,所以假定蛋白更多);(3) 可能是假阳性基因预测。

Q4:基因组注释中GFF和GenBank格式有什么区别?

答: GFF3是通用的基因注释格式,9列制表符分隔,简洁高效,适合计算分析(如Roary泛基因组分析需要GFF)。GenBank格式(.gbk)更详细,包含序列+注释+参考文献,适合数据库提交和手动查看。实际项目中两种格式都要生成:GFF用于下游分析,GenBank用于数据提交和存档。


参考资料:Prokka: Seemann, Bioinformatics 2014 | Bakta: Schwengers et al., Microbial Genomics 2021 | Bakta Web: Schwengers et al., NAR 2025 | bakta.computational.bio