基于 Swiss-Prot 数据库的同源基因注释全流程实操
diamond安装与使用-diamond-2.1.8(bioinfomatics tools-010)_diamond makedb-CSDN博客
01 背景介绍
Swiss-Prot(隶属于 UniProt 知识库)是经过人工审核、注释信息高度可靠的蛋白质序列数据库,包含了基因本体(GO)、代谢通路(KEGG)、物种同源性等核心注释信息。基于 Swiss-Prot 的同源基因注释,是基因组功能注释中最常用且高效的方法之一 ------ 通过将待注释的蛋白质序列与 Swiss-Prot 中已注释的同源序列比对,可快速推导目标基因的功能、所属通路及物种同源关系,广泛应用于植物、动物、微生物等各类基因组研究。
相较于从头注释,同源注释依托 Swiss-Prot 的高质量注释数据,能大幅降低注释假阳性率,且结合 DIAMOND/BLAST + 的快速比对能力,可高效处理大规模基因组数据(大数据场景),是生物信息学中 "从序列到功能" 的核心环节。
02 完整操作流程
第一步:下载并合并 UniProt 植物注释文件
首先从 UniProt 官方 FTP 服务器下载植物分类下的 Swiss-Prot(人工注释)和 TrEMBL(自动注释)dat 格式文件,合并为统一的注释库,为后续注释提供基础数据。
# 下载Swiss-Prot植物注释文件
wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_sprot_plants.dat.gz
# 下载TrEMBL植物注释文件
wget ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/taxonomic_divisions/uniprot_trembl_plants.dat.gz
# 解压并合并两个dat文件
zcat uniprot_sprot_plants.dat.gz uniprot_trembl_plants.dat.gz > uniprot_plants.dat
第二步:从 dat 文件中提取 FASTA 序列
dat 文件包含注释文本和序列信息,需通过 awk 脚本提取出以 UniProt 登录号(AC)为标识的 FASTA 序列,用于后续建立比对索引。
dat=uniprot_plants.dat
awk '{if (/^ /) {gsub(/ /, ""); print} else if (/^AC/) print ">" $2}' $1 > ${1%%.dat}_AC.fasta
第三步:建立 DIAMOND 比对索引
diamond安装与使用-diamond-2.1.8(bioinfomatics tools-010)_diamond makedb-CSDN博客
DIAMOND 是比 NCBI BLAST + 更快的序列比对工具,适合大数据量的蛋白质序列比对,先基于提取的 FASTA 序列构建索引库。
diamond makedb --in uniprot_plants_AC.fasta -d uniprot_plants_AC
若使用 NCBI BLAST+,可替换为:
makeblastdb -in uniprot_plants_AC.fasta -dbtype prot -out uniprot_plants_AC
第四步:执行序列比对
将待注释的蛋白质序列(proteins.fasta)与构建好的索引库进行 blastp 比对,设置 e 值阈值(1e-5)过滤低可信度比对结果。
diamond blastp -d /data/database/UniProt-Plant/uniprot_plants_AC.dmnd -q proteins.fasta --evalue 1e-5 > blastp.outfmt6
若使用 NCBI BLAST+,可替换为:
blastp -db uniprot_plants_AC -query proteins.fasta -evalue 1e-5 -out blastp.outfmt6 -outfmt 6
第五步:筛选每个 Query 的最佳比对结果
每个待注释基因(Query)可能匹配多个同源序列(Subject),需筛选出相似度最高的 1 条结果,保证注释的唯一性和可靠性。
python -m jcvi.formats.blast best -n 1 blastp.outfmt6
第六步:提取 GO/KEGG/ 同源基因注释信息
使用自定义脚本add_annotation_from_dat.py(GitHub 开源),结合比对结果和原始 dat 注释文件,提取核心注释信息,需提前安装 BioPython 库(兼容 Python2/3)。
python
#!/user/bin/env python
import re
import sys
from Bio import SeqIO
if len(sys.argv) < 2:
print("usage: add_annotation_from_dat.py blastp dat")
sys.exit(1)
blastp_file = sys.argv[1]
dat = sys.argv[2]
uniprot = SeqIO.index(dat, "swiss")
out_file = open("swiss_annotation.tsv", "w")
for line in open(blastp_file, "r"):
gene,acc,ident = line.strip().split()[0:3]
if not uniprot.get(acc.strip(";")):
continue
record = uniprot.get_raw(acc.strip(";"))
GO_RECORD = re.findall(r"GO; (GO:\d+); ([F|P|C]):.*?; (.*):",record.decode('utf-8'))
SPECIES = re.findall(r"OS .*.", record.decode('utf-8'))
if len(SPECIES) == 0:
SPECIES = [""]
else:
SPECIES = [ SPECIES[0].replace("\t"," ") ]
ENSEMBLE_Plant = re.findall(r"EnsemblPlants; (.*?);", record.decode('utf-8'))
if len(ENSEMBLE_Plant) == 0:
ENSEMBLE_Plant = [""]
else:
ENSEMBLE_Plant = [ENSEMBLE_Plant[0].replace("\t"," ")]
for GO in GO_RECORD:
outline = "\t".join([gene, acc,ident] + SPECIES + ENSEMBLE_Plant + list(GO))
out_file.writelines(outline + "\n")
out_file.close()
python ~/myscripts/add_annotation_from_dat.py blastp.outfmt6.best /data/database/UniProt-Plant/uniprot_plants.dat
执行完成后会生成swiss_annotation.tsv文件,包含以下核心列:
- gene id:待注释的基因 ID
- uniprot accession:匹配的 UniProt 登录号
- identity:序列相似度
- homology species:同源物种
- EnsemblPlants:Ensembl 植物数据库对应 ID
- GO ID:基因本体 ID
- GO component, CC/MF/BP:GO 分类(细胞组分 / 分子功能 / 生物过程)
- evidence:GO 注释证据类型
03 关键注意事项
- 数据量适配:植物 TrEMBL 文件体积较大(数十 GB),建议在 Linux 服务器(≥16G 内存)上操作,避免内存不足;
- 工具依赖 :DIAMOND/NCBI BLAST + 需提前安装并配置环境变量,
jcvi库可通过pip install jcvi安装; - 注释可靠性:Swiss-Prot(uniprot_sprot)为人工审核数据,注释可信度高于 TrEMBL,若追求高精度可仅使用 Swiss-Prot 文件;
- BioPython 安装 :执行
pip install biopython即可完成依赖安装,Python2 环境需注意版本兼容性。
小结
- 基于 Swiss-Prot 的同源基因注释核心是 "序列比对 + 注释提取",DIAMOND 的引入大幅提升了大数据量下的比对效率;
- 关键步骤为 "下载合并注释文件→提取序列建索引→比对→筛选最佳结果→提取功能注释",流程标准化且可批量处理;
- 最终输出的
swiss_annotation.tsv包含 GO、KEGG、同源物种等核心信息,可直接用于后续的功能富集、机器学习建模等分析。