UniProt

UniProt — Universal Protein Resource 通用蛋白质资源 | 千方病案医数集

来源 EMBL-EBI (英国) + SIB (瑞士) + PIR (美国) 三方联盟发布时间: 2026-08-04最后更新: 2026-08-04 阅读 1

信息速览

数据集名称UniProt
数据类型FASTA/XML/RDF, UniRef50/90/100
规模蛋白质序列与功能数据库
接入方式EMBL-EBI (英国) + SIB (瑞士) + PIR (美国) 三方联盟
AI 就绪度

UniProt — 蛋白质知识的全球中央枢纽 AI-Ready Wikipedia

千方病案医数集 · AI Ready 数据集 | 状态:published

UniProt(Universal Protein Resource)是全蛋白质科学的"中央枢纽"。自 2002 年由 Swiss-Prot + TrEMBL + PIR 合并成立以来,其 Swiss-Prot 部分 574,627 条经专业策展人逐篇文献审核的蛋白质条目成为生物学的"金标准"知识图谱。TrEMBL 的 2.03 亿条自动注释条目则覆盖了已知蛋白质序列空间的绝大部分。没有 UniProt 就没有 AlphaFold DB(2.62 亿+ 结构预测覆盖 UniProt 序列)、没有 ESM-2(UniRef50 6,500 万序列预训练 15B 参数蛋白质语言模型)、没有 AlphaMissense(UniProt 序列 + gnomAD 频率训练全蛋白质组错义变异效应预测)——UniProt 是所有蛋白质 AI 的底层数据燃料。

§0 出版与审核声明page_status: published核心论文:UniProt Consortium, Nucleic Acids Res. 53:D609–D617 (2025),NAR 影响因子 16.7;Suzek et al., Bioinformatics 23(10):1282–1288 (2007)(UniRef);Lin et al., Science 379(6637):1123–1130 (2023)(ESM-2)。千方病案医学编辑部交叉审核:审核范围包括蛋白质科学背景、AI 模型训练数据链路、数据库技术规格、已知坑点。点击导航§1 概览 | §2 背景 | §3 规格 | §4 数据结构 | §5 下载 | §6 AI 指南 | §7 坑点 | §8 生态 | §9 资源 | §10 声明卡 | §C 校验

§0 E-E-A-T 信任声明

维度 声明
经验性 (Experience) UniProt Consortium 由 EMBL-EBI(欧洲分子生物学实验室-欧洲生物信息学研究所)、SIB(瑞士生物信息学研究所)、PIR(蛋白质信息资源,乔治城大学)三方组成,拥有 20+ 年蛋白质数据库策展经验
专业性 (Expertise) 策展团队全部为受过专业训练的生物学家/生信学家,遵循标准化操作流程 (SOP) 进行手工注释;自动注释系统 UniRule/ARBA/ProtNLM 均经同行评审发表
权威性 (Authoritativeness) 被授予 Global Core Biodata Resource 地位(2024);NAR 论文被引用 6,475+ 次(Google Scholar,截至 2026-07);AlphaFold DB / ESM-2 / AlphaMissense 等里程碑 AI 模型均以 UniProt 为底层数据源
可信性 (Trustworthiness) 每条注释附带 ECO 证据代码,区分实验证据、计算预测和自动注释;Swiss-Prot 条目引用 306,849 篇独特文献;数据 CC BY 4.0 开放获取
免责声明 本页面对 UniProt 进行学术性整理与 AI 就绪分析,不替代原始数据库查询。蛋白质功能注释可能随新文献发表而更新,请以 UniProt 官网最新版本为准。TrEMBL 自动注释可能包含预测性信息,使用前请核实证据代码。

INFOBOX

字段
全称 Universal Protein Resource
成立年份 2002
维护机构 EMBL-EBI (英国 Hinxton) + SIB (瑞士日内瓦) + PIR (美国华盛顿)
核心论文 UniProt Consortium, Nucleic Acids Res. 53:D609–D617 (2025)
DOI 10.1093/nar/gkae1010
许可证 CC BY 4.0
更新频率 每 4 周(双周发布新版本)
当前版本 2026_02
Swiss-Prot (审核) 574,627 条目(截至 2026_01)
TrEMBL (自动) ~202,556,313 条目
UniRef50 ~38,794,121 簇
UniRef90 ~121,389,642 簇
UniRef100 ~220,919,788 簇
UniParc 非冗余序列档案(含历史序列)
覆盖物种 14,803+ 物种 (Swiss-Prot)
引用文献 306,849 篇独特文献 (Swiss-Prot)
数据格式 FASTA / XML / RDF / Flat file / GFF / TSV
访问方式 网页 / FTP / REST API / SPARQL / Python (BioPython)
AI 就绪度 ★★★★★ (AlphaFold/ESM-2/AlphaMissense 的预训练基础)
DAIMS 评分 22/24
ICD-11 映射 不适用(蛋白质序列数据库,非临床数据库)
SNOMED CT 映射 不适用

§1 数据集概览

§1.0 30 秒速览

UniProt 是全球最大、最权威的蛋白质序列与功能信息数据库,由 EMBL-EBI、SIB、PIR 三方联盟维护。它由四大组件构成:UniProtKB(知识库,含 Swiss-Prot 手工审核 + TrEMBL 自动注释)、UniRef(序列聚类)、UniParc(序列档案)、Proteomes(蛋白质组)。所有主要蛋白质 AI 模型——AlphaFold(2.62 亿+ 结构预测)、ESM-2(15B 参数蛋白质语言模型)、AlphaMissense(7,100 万错义变异效应预测)——都以 UniProt 数据为预训练基础。数据以 CC BY 4.0 开放获取,每 4 周更新一次。

§1.1 四组件架构

组件 全称 内容 条目数 (2026_01) 角色
UniProtKB/Swiss-Prot Reviewed, manually annotated 专业策展人逐条文献审核的蛋白质功能注释 574,627 金标准知识库
UniProtKB/TrEMBL Unreviewed, automatically annotated 自动注释、未经人工审核的蛋白质序列 ~202,556,313 全覆盖序列空间
UniRef100 UniProt Reference Clusters 100% 100% 序列一致性 + 子片段聚类 ~220,919,788 簇 去冗余基础
UniRef90 UniProt Reference Clusters 90% ≥90% 一致性聚类 ~121,389,642 簇 快速搜索
UniRef50 UniProt Reference Clusters 50% ≥50% 一致性聚类(ESM-2 预训练源 ~38,794,121 簇 蛋白质 AI 训练
UniParc UniProt Archive 非冗余序列档案(含历史序列、已删除序列) 序列完整性追溯
Proteomes Reference Proteomes 物种全蛋白质组(1 基因 1 蛋白) ~100 万物种 比较蛋白质组学

§1.2 版本演进时间线

年份 里程碑 条目规模
1971 Dayhoff “Atlas of Protein Sequence and Structure” → PIR 前身 ~100
1986 Amos Bairoch 创建 Swiss-Prot(瑞士日内瓦大学) ~1,000
1996 TrEMBL 创建(自动翻译 EMBL CDS) ~50,000
2002 UniProt Consortium 成立(Swiss-Prot + TrEMBL + PIR 合并) ~100 万
2004 UniRef 聚类数据库首次发布 ~400 万
2008 UniProtKB 突破 500 万条目 ~500 万
2012 CCLE 发表,UniProtKB 突破 2,000 万 ~2,000 万
2015 UniProt 被重新组织为参考蛋白质组策略 ~5,500 万
2020 COVID-19 疾病门户上线;SARS-CoV-2 优先策展 ~1.8 亿
2021 AlphaFold DB 发布,覆盖 UniProtKB Swiss-Prot 36.5 万结构
2022 AlphaFold DB 覆盖全部 UniProtKB(2 亿+ 结构);ESM-2 发表 ~2.0 亿
2023 AlphaMissense 发表(7,100 万错义变异预测);ProtNLM 注释 2,800 万条目 ~2.3 亿
2024 获 Global Core Biodata Resource 地位;UniProtKB 限制为参考蛋白质组 ~2.4 亿
2025 与 AlphaFold DB 同步 UniProt 2025_03;新增 PAN-GO 交叉引用;ProtNLM2 注释 26,000+ 条目 ~2.5 亿
2026 Release 2026_02:继续蛋白质空间重组;参考蛋白质组策略全面实施 ~2.5 亿

§1.3 Swiss-Prot 策展统计

Swiss-Prot 的人工策展是 UniProt 的核心价值所在:

  • 306,849 篇独特引用文献 / 3,129 种引用期刊
  • Journal of Biological Chemistry 最常引用 (27,021 次)
  • 人类: 20,420 条目 | 小鼠: 17,240 | 拟南芥: 16,397 | 大鼠: 8,352 | 酿酒酵母: 6,054
  • 覆盖 14,803 物种,其中 6,016 物种仅有 1 条目
  • 每条目平均引用 4.2 篇文献
  • 每个策展人每月平均完成 15-20 条目的新注释或更新

§1.4 数据来源

95%+ 的 UniProtKB 蛋白质序列来源于 INSDC(EMBL-Bank/GenBank/DDBJ)编码序列 (CDS) 的翻译。其余来源包括:

  • 参考蛋白质组序列(Ensembl / RefSeq)
  • PDB 结构序列
  • 直接提交的氨基酸序列
  • 文献扫描的序列

不包含在 UniProtKB 但存于 UniParc 的序列类型

  • 非参考蛋白质组序列

  • 小片段(<10 残基)

  • 合成序列

  • 非胚系免疫球蛋白和 T 细胞受体

  • 专利序列

  • 假基因翻译产物

§2 蛋白质科学背景

§2.1 蛋白质功能注释的挑战

蛋白质是生命活动的核心执行者。人类基因组编码约 20,000 个蛋白质编码基因,但通过可变剪接、翻译后修饰 (PTM) 和蛋白水解切割,实际产生的蛋白质形态远超基因数量。理解每个蛋白质的功能——它在细胞中做什么、与谁互作、参与哪些通路、突变会导致什么疾病——是现代生物学的核心任务。

功能注释的金字塔结构

                    ┌─────────────┐
                    │  实验验证    │  ← Swiss-Prot 手工策展 (574K)
                    │  (Gold Std)  │     文献提取 + 策展人审核
                    ├─────────────┤
                    │ 计算预测     │  ← UniRule / ARBA 规则传播
                    │ (Silver)     │     基于同源/结构域/家族
                    ├─────────────┤
                    │ 自动注释     │  ← ProtNLM (Google DeepMind)
                    │ (Bronze)     │     序列→功能描述 LLM
                    ├─────────────┤
                    │ 未注释       │  ← TrEMBL "uncharacterized"
                    │ (Unknown)    │     ~2 亿条目中的未知蛋白
                    └─────────────┘

Swiss-Prot 的 574K 条目是金字塔顶端——每条功能注释都可追溯到具体的实验文献,并附有 ECO 证据代码区分实验证据 (ECO:0000269)、序列相似性推断 (ECO:0000250)、策展人推断 (ECO:0000305) 等。而 TrEMBL 的 2.03 亿条目主要依赖自动注释系统。

§2.2 从序列到功能:同源转移原理

UniProt 自动注释的核心原理是同源转移 (homology transfer):如果蛋白质 A 与已实验表征的蛋白质 B 具有高度的序列相似性,且共享关键的功能残基(活性位点、结合位点等),则可将 B 的功能注释"转移"到 A。这一原理基于进化保守性——序列相似性暗示共同的进化祖先和保守的功能。

同源转移的层次

层次 方法 UniProt 实现 精度
直系同源 OrthoDB / eggNOG 跨物种同源基因
结构域匹配 InterPro (Pfam/SMART/PROSITE/CDD) 结构域架构 → 功能推断 中-高
家族分类 PANTHER / PIRSF 蛋白质家族成员
序列相似性 BLAST / HHsearch 全局/局部比对 低-中
语言模型 ProtNLM (T5-based) 序列→功能描述 新兴

关键限制:同源转移假设"序列相似 → 功能相似",但这一假设在以下情况失效:(1) 远缘同源(<30% 一致性)可能发生功能分化;(2) 相同结构域组合但不同排列(domain architecture)可能导致不同功能;(3) 旁系同源(paralog)在复制后可能获得新功能 (neofunctionalization)。

§2.3 蛋白质语言模型:UniProt 作为 AI 预训练数据

蛋白质语言模型 (Protein Language Model, PLM) 是将自然语言处理技术应用于蛋白质序列的核心范式。蛋白质序列被视为一种"生物语言"——氨基酸残基类比单词,序列类比句子,进化压力类比语法规则。PLM 通过在数千万至数亿蛋白质序列上进行自监督预训练,学习编码进化、结构和功能信息的分布式表示。

UniProt 在 PLM 训练链路中的角色

AI 模型 开发者 训练数据 UniProt 组件 参数量 发表年份
ESM-1b Meta AI UniRef50 (~30M 序列) UniRef50 650M 2019
ESM-1v Meta AI UniRef90 (~60M 序列) UniRef90 650M 2021
ESM-2 Meta AI UniRef50 2021_04 (~65M 序列) UniRef50 8M-15B 2023
ESMFold Meta AI ESM-2 嵌入 → 结构预测 UniRef50 (间接) 15B 2023
ProtBERT SAIC/RESearch UniRef100 (~2.16 亿序列) UniRef100 420M 2021
ProtT5 SAIC/RESearch UniRef50 (~2.16 亿序列) UniRef50 3B 2021
AlphaFold DB DeepMind/EMBL-EBI UniProtKB 全序列 UniProtKB 2021
AlphaMissense DeepMind UniProt 序列 + gnomAD 频率 UniProtKB + 外部 2023
ProtNLM Google DeepMind UniRef50 2018_03 (~30M 序列) UniRef50 T5-based 2022
ProtNLM2 Google DeepMind 多模型集成 UniRef50 2024

设计意图:UniProt 选择 UniRef50 作为 PLM 预训练数据源,是因为 50% 一致性聚类在去除冗余(避免模型记忆近重复序列)和保留进化多样性之间取得最佳平衡。UniRef50 将 ~2.2 亿序列压缩到 ~3,900 万簇,减少 ~70% 数据量,同时 >97% 的簇内成员具有相同功能注释——这保证了预训练信号的生物有效性。

§2.4 AlphaFold DB 与 UniProt 的共生关系

AlphaFold Protein Structure Database (AFDB) 是 EMBL-EBI 与 Google DeepMind 的合作项目,为 UniProtKB 中的每个蛋白质序列提供 AlphaFold 预测的 3D 结构。AFDB 与 UniProt 形成了紧密的共生关系:

  • 数据源:AFDB 直接使用 UniProt 的"1 基因 1 蛋白"参考蛋白质组 FASTA 文件作为输入序列
  • 同步更新:2025 年 AFDB 与 UniProt 2025_03 同步,恢复了对新发现蛋白质的覆盖
  • 结构覆盖:2.62 亿+ 预测模型覆盖 UniProtKB 绝大多数序列
  • 集成显示:UniProt 条目页面直接嵌入 AlphaFold 结构查看器
  • MSA 可下载:2025 年起,AlphaFold 预测使用的多重序列比对 (MSA) 可从 AFDB 下载
  • 异构体覆盖:2025 年起 AFDB 包含蛋白质异构体 (isoform) 的结构预测
  • TED 域注释:2025 年 3 月,AFDB 集成 TED 域分配,链接到 CATH 分类

§2.5 PAN-GO:UniProt 在人类基因功能图谱中的角色

2025 年,SIB Swiss-Prot 团队参与发表了 PAN-GO(Nature, 2025),利用进化模型构建了最完整、最准确的人类基因功能图谱。PAN-GO 通过系统发生重建推断基因功能,其功能注释导入回 UniProt,并由策展人通过文献检索验证这些进化推断的功能。这一互补关系体现了 UniProt 作为"中央枢纽"的角色——整合来自进化生物学、实验文献、计算预测的多源信息。

§2.5.1 UniProt 在药物发现中的角色

UniProt 在药物发现链路中扮演多重角色:

药物发现阶段 UniProt 角色 示例
靶点识别 疾病关联注释 (CC Involvement in disease) BRCA1 (P38398) → 乳腺癌/卵巢癌
靶点验证 基因敲除表型注释 (CC Disruption phenotype) PCSK9 敲除 → 低 LDL → 药物靶点
选择性评估 组织特异性注释 (CC Tissue specificity) 确认靶点在关键器官的表达模式
脱靶预测 结构域注释 + InterPro 交叉引用 识别激酶家族中的潜在脱靶
变异注释 自然变异 (FT VARIANT) + ClinVar 交叉引用 药物基因组学变异分析
药物-靶点互作 ChEMBL / DrugBank 交叉引用 已知药物-靶点结合数据

§2.5.2 蛋白质变体与精准医学

UniProt 的 Swiss-Prot 条目中包含丰富的自然变异 (FT VARIANT) 注释,每条变异记录包含位置、野生型/突变型氨基酸、注释来源(dbSNP/ClinVar/文献)和疾病关联。这些变异注释与 gnomAD 群体频率数据和 ClinVar 临床分类交叉引用,构成精准医学的蛋白质层面知识基础。AlphaMissense 正是利用 UniProt 序列坐标系统和 gnomAD 频率数据,实现了全蛋白质组 7,100 万错义变异的致病性预测。

§2.6 COVID-19 应急策展

UniProt 的策展团队能够快速响应新出现的生物学问题。2020 年 1 月 10 日 SARS-CoV-2 基因组序列公开发布后,UniProt 病毒蛋白质策展专家迅速注释了病毒基因组编码的所有蛋白质——首先通过与近缘冠状病毒的相似性推断,随后在实验数据发表后持续更新。2020 年 3 月推出 COVID-19 疾病门户,以高于标准 8 周周期的频率更新。这一模式后来被阿尔茨海默病相关蛋白质的集中策展所延续。

§3 完整技术规格

§3.1 Swiss-Prot 手工策展标准操作流程 (SOP)

Swiss-Prot 的手工策展是 UniProt 的核心质量保障。每个条目的策展遵循标准化操作流程:

步骤 内容 质量控制
1. 序列验证 检查编码序列翻译正确性、剪接位点、翻译后切割位点 与基因组序列比对确认
2. 文献检索 系统检索 PubMed/Google Scholar 中与该蛋白质相关的所有文献 覆盖度检查
3. 信息提取 从文献中提取功能、催化活性、辅因子、亚细胞定位、互作、PTM、疾病关联 证据代码标注
4. 计算分析验证 人工验证 InterPro 结构域预测、信号肽、跨膜区等计算结果 与实验数据交叉验证
5. 大规模数据整合 整合 IMEx 互作数据、Reactome 通路、ChEMBL 药物数据 源数据库交叉引用
6. 去冗余合并 同一基因的所有蛋白质序列(含可变剪接异构体)合并为一条目 序列冲突分析
7. 交叉引用建立 链接到 170+ 外部数据库 (PDB, Pfam, GO, Reactome, ChEMBL 等) 双向链接验证
8. 持续更新 新文献发表后及时更新注释 版本控制 (UniSave)

§3.2 TrEMBL 自动注释流水线

TrEMBL 的自动注释系统由三层互补的预测系统组成:

§3.2.1 UniRule——规则驱动注释

UniRule 是一套手工策划的注释规则集,定义了从已审核条目向未审核条目传播注释的具体条件。每条规则包含:

  • 通用条件 (Common conditions):所有满足条件的条目获得的注释(如:InterPro 结构域命中 + 分类群 + 序列长度范围 → 蛋白质名称 + 亚细胞定位)
  • 特殊条件 (Special conditions):满足额外条件的子集获得的注释(如:分类群 = Fungi → 额外功能注释;活性位点残基匹配 → 催化活性注释)

UniRule 使用 ECO:0000256(序列模型匹配证据)作为证据代码。规则集持续扩展,已纳入 HAMAP、PIRSR、NCBIfam 等成员数据库的规则。

§3.2.2 ARBA——关联规则学习注释

ARBA (Association-Rule-Based Annotator) 是一个多类别自训练注释系统,使用关联规则挖掘技术从 Swiss-Prot 专家注释条目中学习注释模型。ARBA 基于 InterPro 组成员资格和分类属性生成简洁的注释模型。

2025 年更新中,ARBA 纳入了新的 PANTHER 签名,立即生成了 9,141 条新规则和 119,579,654 条新预测,覆盖超过 2,000 万条新蛋白质序列。

§3.2.3 ProtNLM——蛋白质自然语言模型

ProtNLM 是 Google DeepMind 开发的蛋白质自然语言模型,直接从氨基酸序列预测蛋白质功能描述。架构基于 T5 框架:

  1. 预训练:在 UniRef50 2018_03 数据集(~3,000 万多样化无标签蛋白质序列)上使用 T5 框架预训练
  2. 微调:使用 Pfam 标记的蛋白质域序列进行微调
  3. 扩展:多模型集成 (ProtNLM2)

截至 2024_04 版本,ProtNLM 已为超过 2,800 万 条此前标记为"uncharacterized"(未表征)的 TrEMBL 条目提供了功能相关的名称和注释,包括功能评论、亚细胞定位、关键词和 GO 术语。2026 年 ProtNLM2 扩展至 26,000+ 条 UniProtKB 条目。

§3.3 UniRef 聚类——CD-HIT 算法详解

UniRef 数据库使用 CD-HIT (Cluster Database at High Identity with Tolerance) 算法对蛋白质序列进行层级聚类:

§3.3.1 聚类流程
UniProtKB + UniParc (选定)
         │
         ▼
    CD-HIT (100% identity)
         │
         ▼
    UniRef100  ← 合并完全相同序列 + ≥11 残基子片段
         │
         ▼
    CD-HIT (90% identity, 80% overlap)
         │
         ▼
    UniRef90  ← 每簇成员与代表序列 ≥90% 一致性 + ≥80% 长度重叠
         │
         ▼
    CD-HIT (50% identity, 80% overlap) [并行计算]
         │
         ▼
    UniRef50  ← 每簇成员与代表序列 ≥50% 一致性 + ≥80% 长度重叠
§3.3.2 代表序列选择规则

每簇选择一个代表序列 (representative sequence),优先级从高到低:

  1. 质量:Swiss-Prot(审核)条目优先于 TrEMBL(未审核)条目
  2. 名称:有意义的蛋白质名称(不含 “hypothetical”、“putative” 等非描述性词)优先
  3. 物种:模式生物来源优先
  4. 长度:最长序列优先(信息最完整)
§3.3.3 数据压缩效果
数据库 源序列数 簇数 压缩率 BLASTP 加速 功能一致性
原始序列 ~2.2 亿
UniRef100 ~2.2 亿 ~2.2 亿 ~10% ~1.1×
UniRef90 ~1.21 亿 ~40% ~2× >97% 簇内功能一致
UniRef50 ~3,879 万 ~70% ~6× >96% 簇内功能一致

80% 长度重叠阈值(2013 年引入):UniRef90 和 UniRef50 要求每个簇成员与最长(种子)序列至少有 80% 的长度重叠。这一阈值防止仅共享部分序列的蛋白质被聚类在一起(如多聚蛋白与其组成蛋白、部分共享结构域的蛋白质),提高了簇内分子功能一致性。

§3.4 ECO 证据代码体系

UniProt 使用 Evidence and Conclusion Ontology (ECO) 的子集来标注每条注释的证据来源:

证据类型 ECO 代码 来源 适用 网页标签颜色
实验证据 ECO:0000269 文献中的实验结果 Swiss-Prot 手工 金色
不可追溯作者声明 ECO:0000303 文献中的作者声明 Swiss-Prot 手工 金色
策展人推断 ECO:0000305 策展人基于多源信息推断 Swiss-Prot 手工 金色
序列相似性 ECO:0000250 与另一 Swiss-Prot 条目的相似性 Swiss-Prot 手工 金色
序列模型 ECO:0000255 规则/ProSite ProRule/ARBA Swiss-Prot 手工 金色
组合来源 ECO:0007744 PDB + 文献/大规模蛋白质组学 Swiss-Prot 手工 金色
导入信息 ECO:0000312 核酸数据库/PDB/模式生物数据库 Swiss-Prot 手工 金色
序列模型(自动) ECO:0000256 序列分析程序/UniRule/ARBA TrEMBL 自动 银色
序列基序匹配 ECO:0000259 InterPro 成员数据库 TrEMBL 自动 银色
组合来源(自动) ECO:0007829 PDB 条目 TrEMBL 自动 银色
导入信息(自动) ECO:0000313 核酸数据库/Ensembl/PDB TrEMBL 自动 银色

金色 vs 银色:金色证据表示该注释经过策展人审核(含实验证据和策展人验证的计算预测),银色证据表示该注释为全自动生成未经人工审核。在使用 UniProt 数据进行下游分析时,强烈建议区分金色和银色证据——银色证据的可靠性取决于自动注释系统的精度,可能包含假阳性。

§3.5 数据格式

格式 用途 特点
FASTA 序列存储与 BLAST 搜索 最通用,仅含序列+简单描述
Flat file (txt) 人类可读的完整条目 传统 Swiss-Prot 格式,含所有注释行
XML 程序化解析 结构化,字段完整,适合 BioPython
RDF 语义网查询 支持 SPARQL,链接开放数据
GFF3 基因组浏览器 序列特征坐标化
TSV/Excel 表格分析 可选字段,适合批量统计
JSON REST API 返回 轻量级,Web 友好

§3.6 交叉引用网络

UniProtKB 与 170+ 外部数据库建立交叉引用,形成蛋白质知识的"超链接网络":

类别 主要数据库 功能
结构 PDB / AlphaFold DB / EMDB / SMR 实验结构 / 预测结构
结构域 InterPro / Pfam / SMART / PROSITE / CDD 结构域识别
通路 Reactome / KEGG / WikiPathways / BioCyc 代谢/信号通路
互作 BioGRID / IntAct / STRING / DIP 蛋白质互作
GO Gene Ontology (BP/MF/CC) 功能本体
疾病 MIM / Orphanet / HGNC 疾病关联
药物 ChEMBL / DrugBank / GuidetoPHARMACOLOGY 药物靶点
修饰 PhosphoSitePlus / dbPTM / HPRD PTM 位点
变体 ClinVar / dbSNP / gnomAD 序列变异
质谱 PRIDE / PeptideAtlas / MassIVE 质谱证据
分类 NCBI Taxonomy / ITIS 物种分类

§4 数据结构详解

§4.1 Swiss-Prot 条目字段结构

每个 Swiss-Prot 条目包含以下核心字段(以人胰岛素受体 P06213 为例):

字段代码 字段名 内容 示例
AC Accession number 稳定唯一标识符 P06213
ID Entry name 可读名称 INSR_HUMAN
DE Description 蛋白质名称与功能描述 Insulin receptor
GN Gene name 基因名称与同义词 INSR
OS Organism 物学名 Homo sapiens (Human)
OX Taxonomy NCBI 分类 ID 9606
PE Protein existence 蛋白质存在证据级别 1: Evidence at protein level
SQ Sequence 氨基酸序列与长度 1,382 aa
CC Comments 功能/定位/PTM/疾病等注释 多个子主题
FT Features 序列特征(位点、区域) 活性位点、跨膜区等
KW Keywords 关键词标签 Kinase, Receptor, Transmembrane
GO Gene Ontology GO 术语 (BP/MF/CC) GO:0004714; GO:0007165
DR Cross-references 外部数据库链接 PDB; Pfam; Reactome; ChEMBL
RP Reference position 引用涉及的序列位置
RC Reference comment 引用的实验条件
RX Reference cross-ref PubMed ID / DOI PMID:12345678
RG Reference group 作者团队
RA Reference author 作者姓名
RT Reference title 论文标题
RL Reference location 期刊/年份/页码 J. Biol. Chem. 270:1234-1245(1995)

§4.2 蛋白质存在证据 (PE) 级别

PE 级别 含义 条目数 (约)
1 Evidence at protein level 有实验证据(质谱/Western/纯化等)
2 Evidence at transcript level 有转录本证据(RNA-seq/EST)
3 Inferred from homology 基于同源推断
4 Predicted 仅基于预测(ORF 翻译)
5 Uncertain 存在不确定性

§4.3 CC 注释子主题

Swiss-Prot 条目的 CC (Comments) 行包含以下子主题:

  • Function — 蛋白质功能描述
  • Catalytic activity — 催化反应(含 EC 编号)
  • Cofactor — 辅因子
  • Activity regulation — 活性调节
  • Subcellular location — 亚细胞定位
  • Pathway — 参与的代谢/信号通路
  • PTM — 翻译后修饰
  • Protein-protein interaction — 蛋白质互作
  • Subunit — 亚基组成
  • Tissue specificity — 组织特异性
  • Developmental stage — 发育阶段表达
  • Induction — 诱导表达条件
  • Involvement in disease — 疾病关联
  • Allergenic properties — 过敏原性
  • Toxic dose — 毒性剂量
  • Biotechnological use — 生物技术用途
  • Pharmaceutical use — 药学用途
  • Disruption phenotype — 基因敲除表型
  • Miscellaneous — 其他信息
  • Similarity — 与其他蛋白质的相似性
  • Caution — 注释中存在的争议或不确定性
  • Sequence caution — 序列冲突说明

§4.4 FT 序列特征类型

特征类型 代码 含义
Active site ACT 催化活性位点残基
Binding site BINDING 配体/辅因子结合位点
Site SITE 其他功能位点
Transmembrane TRANSMEM 跨膜区段
Intracellular INTRAMEM 膜内区段
Topological domain TOPO_DOM 拓扑结构域(胞内/胞外)
Signal peptide SIGNAL 信号肽
Propeptide PROPEP 前肽
Chain CHAIN 成熟链
Peptide PEPTIDE 活性肽段
Modified residue MOD_RES 翻译后修饰残基
Lipidation LIPID 脂质修饰
Glycosylation CARBOHYD 糖基化位点
Disulfide bond DISULFID 二硫键
Cross-link CROSSLNK 交联
Region REGION 功能区域
Coiled coil COILED 卷曲螺旋
Domain DOMAIN 结构域
Repeat REPEAT 重复序列
Zinc finger ZN_FING 锌指结构
DNA-binding DNA_BIND DNA 结合区
Nucleotide binding NP_BIND 核苷酸结合区
Secondary structure HELIX/STRAND/TURN 二级结构
Mutagenesis MUTAGEN 定点诱变实验
Natural variant VARIANT 自然变异
Alternative sequence VAR_SEQ 可变序列(剪接/编辑)
Sequence conflict CONFLICT 序列冲突
Non-adjacent residues NON_CONS 非连续残基
Non-terminal residue NON_TER 非末端残基
Non-standard residue NON_STD 非标准氨基酸
Unsure residue UNSURE 不确定残基
Initiator methionine INIT_MET 起始甲硫氨酸

§5 下载与访问

§5.1 FTP 下载

UniProt FTP 站点提供所有数据集的批量下载:

数据集 FTP 路径 格式 大小 (约)
Swiss-Prot 完整 /pub/databases/uniprot/knowledgebase/uniport_sprot.dat.gz Flat file ~500 MB
TrEMBL 完整 /pub/databases/uniprot/knowledgebase/uniprot_trembl.dat.gz Flat file ~100 GB
Swiss-Prot FASTA /pub/databases/uniprot/knowledgebase/uniport_sprot.fasta.gz FASTA ~80 MB
TrEMBL FASTA /pub/databases/uniprot/knowledgebase/uniprot_trembl.fasta.gz FASTA ~20 GB
UniRef50 FASTA /pub/databases/uniprot/uniref/uniref50/uniref50.fasta.gz FASTA ~9 GB
UniRef90 FASTA /pub/databases/uniprot/uniref/uniref90/uniref90.fasta.gz FASTA ~30 GB
UniRef100 FASTA /pub/databases/uniprot/uniref/uniref100/uniref100.fasta.gz FASTA ~50 GB
UniParc FASTA /pub/databases/uniprot/uniparc/uniparc_active.fasta.gz FASTA ~60 GB
参考蛋白质组 /pub/databases/uniprot/current_release/knowledgebase/reference_proteomes/ FASTA ~15 GB

§5.2 REST API

UniProt REST API 提供灵活的查询与数据获取接口:

import requests
import json

# 1. 基本查询:获取人类审核蛋白质
url = "https://rest.uniprot.org/uniprotkb/search"
params = {
    "query": "organism_id:9606 AND reviewed:true",
    "format": "json",
    "size": 25,
    "fields": "accession,id,gene_names,protein_name,cc_function,go_id,length"
}
responevent-blocked= requests.get(url, params=params)
data = response.json()
print(f"总条目数: {data[''''''''''''''''totalResults'''''''''''''''']}")
for entry in data[''''''''''''''''results''''''''''''''''][:3]:
    print(f"  {entry[''''''''''''''''primaryAccession'''''''''''''''']} - {entry.get(''''''''''''''''proteinDescription'''''''''''''''', {}).get(''''''''''''''''recommendedName'''''''''''''''', {}).get(''''''''''''''''fullName'''''''''''''''', {}).get(''''''''''''''''value'''''''''''''''', ''''''''''''''''N/A'''''''''''''''')}")

# 2. 流式下载(大批量数据)
stream_url = "https://rest.uniprot.org/uniprotkb/stream"
stream_params = {
    "query": "organism_id:9606 AND reviewed:true",
    "format": "fasta"
}
responevent-blocked= requests.get(stream_url, params=stream_params)
with open("human_swissprot.fasta", "w") as f:
    f.write(response.text)
print(f"下载完成: {len(response.text)} 字符")

# 3. 通过 Accession 获取单条目
acc_url = "https://rest.uniprot.org/uniprotkb/P06213"
acc_params = {"format": "json"}
responevent-blocked= requests.get(acc_url, params=acc_params)
entry = response.json()
print(f"蛋白质: {entry[''''''''''''''''proteinDescription''''''''''''''''][''''''''''''''''recommendedName''''''''''''''''][''''''''''''''''fullName''''''''''''''''][''''''''''''''''value'''''''''''''''']}")
print(f"物种: {entry[''''''''''''''''organism''''''''''''''''][''''''''''''''''scientificName'''''''''''''''']}")
print(f"序列长度: {len(entry[''''''''''''''''sequence''''''''''''''''][''''''''''''''''value''''''''''''''''])} aa")

# 4. ID 映射(跨数据库 ID 转换)
idmapping_url = "https://rest.uniprot.org/idmapping/run"
idmapping_data = {
    "ids": "ENSG00000171105,ENSG00000139618",  # Ensembl Gene ID
    "from": "Ensembl",
    "to": "UniProtKB"
}
responevent-blocked= requests.post(idmapping_url, data=idmapping_data)
job_id = response.json()["jobId"]
print(f"ID 映射任务 ID: {job_id}")

§5.3 SPARQL 端点

UniProt 提供 SPARQL 端点用于语义网查询:

PREFIX up: <http://purl.uniprot.org/core/>
PREFIX taxon: <http://purl.uniprot.org/taxonomy/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

# 查询人类所有激酶及其参与的通路
SELECT ?protein ?name ?pathway WHERE {
    ?protein a up:Protein .
    ?protein up:organism taxon:9606 .
    ?protein up:reviewed true .
    ?protein up:recommendedName ?rec .
    ?rec up:fullName ?name .
    ?protein up:classifiedWith ?kw .
    ?kw rdfs:label "Kinase" .
    OPTIONAL {
        ?protein up:annotation ?annotation .
        ?annotation a up:Pathway_Annotation .
        ?annotation rdfs:comment ?pathway .
    }
}
ORDER BY ?name
LIMIT 100

§5.4 BioPython 集成

from Bio import UniProt
from Bio import SeqIO

# 方法 1: BioPython 内置 UniProt 搜索 (>= 1.84)
results = UniProt.search(
    "(organism_id:2697049) AND (reviewed:true)",  # SARS-CoV-2 审核条目
    fields=["accession", "id", "protein_name", "cc_function", "length"]
)
for entry in results[:10]:
    print(f"  {entry[''''''''''''''''primaryAccession'''''''''''''''']} - {entry.get(''''''''''''''''uniProtkbId'''''''''''''''', ''''''''''''''''N/A'''''''''''''''')}")

# 方法 2: 下载并解析 Swiss-Prot Flat file
# 从 FTP 下载 uniprot_sprot.dat.gz 后解压
records = SeqIO.parse("uniprot_sprot.dat", "swiss")
for record in records:
    if record.annotations.get("organism") == "Homo sapiens (Human)":
        print(f"  {record.id} - {record.description[:60]}...")
        break

§5.5 版本抉择矩阵

使用场景 推荐数据 理由
蛋白质功能查询 Swiss-Prot (网页/API) 人工审核,证据可靠
全基因组注释 Swiss-Prot + 参考蛋白质组 去冗余 + 质量保障
BLAST 同源搜索 UniRef90 去冗余加速,保留近缘
PLM 预训练 UniRef50 去冗余 + 进化多样性平衡
序列空间分析 UniRef100 + UniParc 全覆盖,含历史序列
变异注释 Swiss-Prot + ClinVar/gnomAD 交叉引用 实验验证 + 变异频率
结构预测 UniProtKB + AlphaFold DB 序列 + 预测结构
大规模蛋白质组学 TrEMBL + Proteomes 全覆盖 + 物种完整性

§6 AI 就绪指南

§6.1 从 UniProt 提取 ESM-2 预训练数据

import gzip
import os
from collections import Counter

def prepare_esm2_training_data(uniref50_fasta_gz, output_file, max_seq_length=1022):
    """
    从 UniRef50 FASTA 文件准备 ESM-2 预训练数据。
    ESM-2 最大序列长度为 1022 残基。
    """
    stats = {"total": 0, "kept": 0, "too_long": 0, "too_short": 0}
    species_count = Counter()

    with gzip.open(uniref50_fasta_gz, ''''''''''''''''rt'''''''''''''''') as f, open(output_file, ''''''''''''''''w'''''''''''''''') as out:
        current_header = None
        current_seq = []

        for line in f:
            if line.startswith(''''''''''''''''>''''''''''''''''):
                # 处理上一条序列
                if current_header and current_seq:
                    seq = ''''''''''''''''''''''''''''''''.join(current_seq)
                    stats["total"] += 1
                    if len(seq) > max_seq_length:
                        stats["too_long"] += 1
                    elif len(seq) < 10:
                        stats["too_short"] += 1
                    else:
                        out.write(f">{current_header}\n{seq}\n")
                        stats["kept"] += 1
                        # 提取物种信息(UniRef 标头格式: >UniRef50_A0A009 >蛋白名 n=数字 Tax=物种名 TaxID=数字)
                        if "Tax=" in current_header:
                            taxon = current_header.split("Tax=")[1].split(" TaxID=")[0]
                            species_count[taxon] += 1

                current_header = line[1:].strip()
                current_seq = []
            else:
                current_seq.append(line.strip())

        # 处理最后一条
        if current_header and current_seq:
            seq = ''''''''''''''''''''''''''''''''.join(current_seq)
            stats["total"] += 1
            if len(seq) <= max_seq_length and len(seq) >= 10:
                out.write(f">{current_header}\n{seq}\n")
                stats["kept"] += 1

    print(f"总序列数: {stats[''''''''''''''''total'''''''''''''''']:,}")
    print(f"保留序列: {stats[''''''''''''''''kept'''''''''''''''']:,} ({stats[''''''''''''''''kept'''''''''''''''']/stats[''''''''''''''''total'''''''''''''''']*100:.1f}%)")
    print(f"过长丢弃: {stats[''''''''''''''''too_long'''''''''''''''']:,}")
    print(f"过短丢弃: {stats[''''''''''''''''too_short'''''''''''''''']:,}")
    print(f"\nTop 10 物种:")
    for taxon, count in species_count.most_common(10):
        print(f"  {taxon}: {count:,}")

    return stats

# 使用示例
prepare_esm2_training_data(
    "uniref50.fasta.gz",
    "esm2_training_set.fasta"
)

§6.2 ESM-2 嵌入提取与下游任务

import torch
import esm  # pip install fair-esm2 或从 https://github.com/facebookresearch/esm 安装

def extract_esm2_embeddings(fasta_file, model_name="esm2_t33_650M_UR50D", output_dir="embeddings"):
    """
    使用 ESM-2 (650M, UniRef50 训练) 提取蛋白质嵌入。
    每个残基生成 1280 维向量,蛋白质级别嵌入通过平均池化获得。
    """
    os.makedirs(output_dir, exist_ok=True)

    # 加载模型
    model, alphabet = esm.pretrained.load_model_and_alphabet(model_name)
    batch_conevent-blocked= alphabet.get_batch_converter()
    model.eval()

    # 读取 FASTA
    sequences = []
    with open(fasta_file) as f:
        current_id, current_seq = None, []
        for line in f:
            if line.startswith(''''''''''''''''>''''''''''''''''):
                if current_id:
                    sequences.append((current_id, ''''''''''''''''''''''''''''''''.join(current_seq)))
                current_id = line[1:].strip().split()[0]
                current_seq = []
            else:
                current_seq.append(line.strip())
        if current_id:
            sequences.append((current_id, ''''''''''''''''''''''''''''''''.join(current_seq)))

    print(f"加载 {len(sequences)} 条序列")

    # 批量推理
    batch_size = 4
    for i in range(0, len(sequences), batch_size):
        batch = sequences[i:i+batch_size]
        data = [(id_, seq[:1022]) for id_, seq in batch]  # 截断至 1022
        batch_labels, batch_strs, batch_tokens = batch_converter(data)

        with torch.no_grad():
            results = model(batch_tokens, repr_layers=[33], return_conevent-blocked=True)

        # 提取嵌入
        token_representationevent-blocked= results["representations"][33]

        for j, (label, seq) in enumerate(data):
            # 残基级别嵌入 (L, 1280) - 排除 [CLS] 和 [EOS]
            residue_embeddings = token_representations[j, 1:len(seq)+1].numpy()
            # 蛋白质级别嵌入 (1280,) - 平均池化
            protein_embedding = residue_embeddings.mean(axis=0)

            # 保存
            torch.save({
                ''''''''''''''''protein_id'''''''''''''''': label,
                ''''''''''''''''sequence_length'''''''''''''''': len(seq),
                ''''''''''''''''residue_embeddings'''''''''''''''': residue_embeddings,
                ''''''''''''''''protein_embedding'''''''''''''''': protein_embedding,
                ''''''''''''''''contacts'''''''''''''''': results["contacts"][j, :len(seq), :len(seq)].numpy()
            }, f"{output_dir}/{label}.pt")

    print(f"嵌入提取完成,保存到 {output_dir}/")

# 使用示例
extract_esm2_embeddings("human_kinases.fasta")

§6.3 零样本变异效应预测

import torch
import esm
import numpy as np
from typing import List, Tuple

def zero_shot_variant_effect(
    model,
    batch_converter,
    wild_type_seq: str,
    variants: List[Tuple[int, str]],  # [(position, mutant_aa), ...]
    position_offset: int = 1  # UniProt 位置从 1 开始
) -> List[float]:
    """
    使用 ESM-2 零样本预测变异效应。
    原理:比较野生型与突变型在掩码语言模型下的对数似然比 (log-likelihood ratio)。
    负值表示突变可能有害。
    """
    scores = []

    for pos, mutant_aa in variants:
        idx = pos - position_offset  # 转为 0-indexed
        if idx < 0 or idx >= len(wild_type_seq):
            scores.append(float(''''''''''''''''nan''''''''''''''''))
            continue

        wt_aa = wild_type_seq[idx]
        if wt_aa == mutant_aa:
            scores.append(0.0)
            continue

        # 构建突变序列
        mutant_seq = wild_type_seq[:idx] + mutant_aa + wild_type_seq[idx+1:]

        # 计算野生型和突变型在该位置的对数似然
        for label, seq in [("wt", wild_type_seq), ("mut", mutant_seq)]:
            data = [(label, seq[:1022])]
            _, _, tokens = batch_converter(data)
            with torch.no_grad():
                logits = model(tokens)[''''''''''''''''logits'''''''''''''''']

            # 该位置的氨基酸概率分布
            pos_logits = logits[0, idx + 1]  # +1 因为 [CLS] token
            log_probs = torch.log_softmax(pos_logits, dim=0)

            aa_idx = alphabet.tok_to_idx[mutant_aa if label == "mut" else wt_aa]
            if label == "wt":
                wt_ll = log_probs[aa_idx].item()
            else:
                mut_ll = log_probs[aa_idx].item()

        # 对数似然比:mut - wt
        # 负值 = 突变型概率低于野生型 = 可能有害
        score = mut_ll - wt_ll
        scores.append(score)

    return scores

# 使用示例:预测 BRCA1 (P38398) 关键残基突变的效应
model, alphabet = esm.pretrained.load_model_and_alphabet("esm2_t33_650M_UR50D")
batch_conevent-blocked= alphabet.get_batch_converter()
model.eval()

# BRCA1 序列片段(示例)
brca1_fragment = "MDLSALRVEEVQNVINAMQKILECPICLEKEVQERPSLKTFNQTKEYCLLPRVAEL"  # 简化

variants = [
    (10, ''''''''''''''''A''''''''''''''''),  # 位置 10 突变为 Ala
    (10, ''''''''''''''''P''''''''''''''''),  # 位置 10 突变为 Pro
    (15, ''''''''''''''''G''''''''''''''''),  # 位置 15 突变为 Gly
]

scores = zero_shot_variant_effect(model, batch_converter, brca1_fragment, variants)
for (pos, mut), score in zip(variants, scores):
    impact = "可能有害" if score < -2 else "可能中性" if score > -1 else "不确定"
    print(f"  位置 {pos} {brca1_fragment[pos-1]}→{mut}: log-LR = {score:.3f} ({impact})")

§6.4 AlphaFold DB 结构批量获取

import requests
import os
from typing import List

def batch_download_alphafold_structures(
    uniprot_ids: List[str],
    output_dir: "alphafold_structures",
    format: str = "pdb"
):
    """
    从 AlphaFold DB 批量下载蛋白质预测结构。
    AFDB 与 UniProt 同步,每个 UniProtKB 条目对应一个 AFDB 结构。
    """
    os.makedirs(output_dir, exist_ok=True)
    base_url = "https://alphafold.ebi.ac.uk/api/prediction"

    success = 0
    for uid in uniprot_ids:
        # API 获取元数据
        responevent-blocked= requests.get(f"{base_url}/{uid}")
        if response.status_code != 200:
            print(f"  {uid}: 未找到 (HTTP {response.status_code})")
            continue

        metadata = response.json()
        pdb_url = metadata.get("pdbUrl")
        if not pdb_url:
            print(f"  {uid}: 无 PDB URL")
            continue

        # 下载结构文件
        pdb_responevent-blocked= requests.get(pdb_url)
        output_file = os.path.join(output_dir, f"AF-{uid}-F1-model_v4.{format}")
        with open(output_file, ''''''''''''''''wb'''''''''''''''') as f:
            f.write(pdb_response.content)

        # 提取质量信息
        mean_plddt = metadata.get("meanDomainConfidence", "N/A")
        uniprot_end = metadata.get("uniprotEnd", "N/A")
        print(f"  {uid}: 已下载 (pLDDT={mean_plddt}, 长度={uniprot_end})")
        success += 1

    print(f"\n完成: {success}/{len(uniprot_ids)} 结构已下载")

# 使用示例:下载人类激酶的 AlphaFold 结构
human_kinase_ids = ["P06213", "P04629", "P07333", "P08581", "P11362"]
batch_download_alphafold_structures(human_kinase_ids)

§6.5 AlphaMissense 变异注释

import pandas as pd
import gzip

def load_alphamissense_for_protein(uniprot_id: str, am_file: str) -> pd.DataFrame:
    """
    加载 AlphaMissense 对特定 UniProt 蛋白质的变异预测。
    AlphaMissense 使用 UniProt 序列 + gnomAD 频率训练,
    预测全蛋白质组错义变异的致病性 (0=neutral, 1=pathogenic)。

    数据下载: https://alphafold.ebi.ac.uk/download
    文件格式: TSV (uniprot_id, protein_variant, am_pathogenicity, am_class)
    """
    # AlphaMissense 文件可能很大,逐行过滤
    results = []
    with gzip.open(am_file, ''''''''''''''''rt'''''''''''''''') as f:
        header = f.readline().strip().split(''''''''''''''''\t'''''''''''''''')
        for line in f:
            fields = line.strip().split(''''''''''''''''\t'''''''''''''''')
            if fields[0] == uniprot_id:
                results.append(dict(zip(header, fields)))

    df = pd.DataFrame(results)
    if not df.empty:
        df[''''''''''''''''am_pathogenicity''''''''''''''''] = pd.to_numeric(df[''''''''''''''''am_pathogenicity''''''''''''''''], errors=''''''''''''''''coerce'''''''''''''''')
        # 提取位置和氨基酸变化
        df[''''''''''''''''position''''''''''''''''] = df[''''''''''''''''protein_variant''''''''''''''''].str.extract(r''''''''''''''''(\d+)'''''''''''''''').astype(int)
        df[''''''''''''''''wt_aa''''''''''''''''] = df[''''''''''''''''protein_variant''''''''''''''''].str[0]
        df[''''''''''''''''mut_aa''''''''''''''''] = df[''''''''''''''''protein_variant''''''''''''''''].str[-1]

    return df

# 使用示例
# am_df = load_alphamissense_for_protein("P38398", "alphamissense_aa_subs.tsv.gz")
# if not am_df.empty:
#     print(f"BRCA1 变异预测: {len(am_df)} 个错义变异")
#     print(f"  likely_pathogenic: {(am_df[''''''''''''''''am_class''''''''''''''''] == ''''''''''''''''likely_pathogenic'''''''''''''''').sum()}")
#     print(f"  likely_benign: {(am_df[''''''''''''''''am_class''''''''''''''''] == ''''''''''''''''likely_benign'''''''''''''''').sum()}")
#     print(f"  ambiguous: {(am_df[''''''''''''''''am_class''''''''''''''''] == ''''''''''''''''ambiguous'''''''''''''''').sum()}")
#     print(f"\n  Top 5 最可能致病变异:")
#     print(am_df.nlargest(5, ''''''''''''''''am_pathogenicity'''''''''''''''')[[''''''''''''''''protein_variant'''''''''''''''', ''''''''''''''''am_pathogenicity'''''''''''''''', ''''''''''''''''am_class'''''''''''''''']])

§6.6 构建蛋白质功能注释知识图谱

import requests
import networkx as nx
from collections import defaultdict

def build_protein_knowledge_graph(uniprot_ids: list, max_interactors: int = 20) -> nx.DiGraph:
    """
    从 UniProt + 交叉引用构建蛋白质功能知识图谱。
    节点: 蛋白质、GO 术语、通路、疾病、药物
    边: has_function, in_pathway, causes_disease, drug_target
    """
    G = nx.DiGraph()

    for uid in uniprot_ids:
        # 从 UniProt REST API 获取条目
        responevent-blocked= requests.get(
            f"https://rest.uniprot.org/uniprotkb/{uid}",
            params={"format": "json"}
        )
        if response.status_code != 200:
            continue
        entry = response.json()

        # 添加蛋白质节点
        protein_name = entry.get(''''''''''''''''proteinDescription'''''''''''''''', {}).get(''''''''''''''''recommendedName'''''''''''''''', {}).get(''''''''''''''''fullName'''''''''''''''', {}).get(''''''''''''''''value'''''''''''''''', uid)
        G.add_node(uid, type=''''''''''''''''protein'''''''''''''''', name=protein_name, organism=entry.get(''''''''''''''''organism'''''''''''''''', {}).get(''''''''''''''''scientificName'''''''''''''''', ''''''''''''''''''''''''''''''''))

        # GO 术语
        for go_ref in entry.get(''''''''''''''''uniProtKBCrossReferences'''''''''''''''', []):
            if go_ref.get(''''''''''''''''database'''''''''''''''') == ''''''''''''''''GO'''''''''''''''':
                go_id = go_ref[''''''''''''''''id'''''''''''''''']
                go_name = next((p.get(''''''''''''''''value'''''''''''''''', go_id) for p in go_ref.get(''''''''''''''''properties'''''''''''''''', []) if p.get(''''''''''''''''key'''''''''''''''') == ''''''''''''''''Term''''''''''''''''), go_id)
                G.add_node(go_id, type=''''''''''''''''go_term'''''''''''''''', name=go_name)
                G.add_edge(uid, go_id, relation=''''''''''''''''has_function'''''''''''''''')

        # 疾病关联 (从 CC comments)
        for comment in entry.get(''''''''''''''''comments'''''''''''''''', []):
            if comment.get(''''''''''''''''commentType'''''''''''''''') == ''''''''''''''''DISEASE'''''''''''''''':
                disease_name = comment.get(''''''''''''''''disease'''''''''''''''', {}).get(''''''''''''''''description'''''''''''''''', ''''''''''''''''Unknown'''''''''''''''')
                disease_id = comment.get(''''''''''''''''disease'''''''''''''''', {}).get(''''''''''''''''id'''''''''''''''', disease_name[:20])
                G.add_node(disease_id, type=''''''''''''''''disease'''''''''''''''', name=disease_name)
                G.add_edge(uid, disease_id, relation=''''''''''''''''causes_disease'''''''''''''''')

    # 统计
    node_types = defaultdict(int)
    for n, data in G.nodes(data=True):
        node_types[data.get(''''''''''''''''type'''''''''''''''', ''''''''''''''''unknown'''''''''''''''')] += 1

    print(f"知识图谱统计:")
    print(f"  总节点: {G.number_of_nodes()}")
    print(f"  总边: {G.number_of_edges()}")
    for ntype, count in sorted(node_types.items()):
        print(f"  {ntype}: {count}")

    return G

# 使用示例
graph = build_protein_knowledge_graph(["P06213", "P04629", "P01308"])  # INSR, NTRK1, INS

§6.7 UniProt 嵌入下载(官方)

UniProt 官方已提供预计算的蛋白质嵌入,可直接下载使用:

"""
UniProt 官方嵌入使用 bio_embeddings 工具 + prottrans_t5_xl_u5 模型生成。
嵌入维度: 1024 (per-protein) / L×1024 (per-residue)

下载地址: UniProt Downloads 页面 → "Protein embeddings"
覆盖范围: Swiss-Prot 全部 + 部分参考蛋白质组模式生物
格式: H5 (HDF5)
"""
import h5py
import numpy as np

def load_uniprot_embeddings(h5_file: str, protein_ids: list = None) -> dict:
    """
    加载 UniProt 官方预计算嵌入。
    """
    embeddings = {}
    with h5py.File(h5_file, ''''''''''''''''r'''''''''''''''') as f:
        if protein_ids is None:
            protein_ids = list(f.keys())

        for pid in protein_ids:
            if pid in f:
                embeddings[pid] = np.array(f[pid])

    return embeddings

# 示例: 计算蛋白质相似度
from scipy.spatial.distance import cosine

def protein_similarity(emb1: np.ndarray, emb2: np.ndarray) -> float:
    """余弦相似度 (1 - cosine distance)"""
    return 1 - cosine(emb1, emb2)

# embeddings = load_uniprot_embeddings("uniprot_sprot_embeddings.h5")
# sim = protein_similarity(embeddings["P06213"], embeddings["P04629"])  # INSR vs NTRK1
# print(f"INSR-NTRK1 嵌入相似度: {sim:.4f}")

§6.8 ProtNLM 预测注释获取

def get_protNlm_annotations(uniprot_id: str) -> dict:
    """
    获取 ProtNLM 对未表征蛋白质的功能预测注释。
    ProtNLM 由 Google DeepMind 开发,直接从氨基酸序列预测功能描述。
    """
    responevent-blocked= requests.get(
        f"https://rest.uniprot.org/uniprotkb/{uniprot_id}",
        params={"format": "json"}
    )
    entry = response.json()

    annotationevent-blocked= {"uniprot_id": uniprot_id}

    # 检查是否有 ProtNLM 预测的蛋白质名称
    for name_info in entry.get(''''''''''''''''proteinDescription'''''''''''''''', {}).get(''''''''''''''''submittedNames'''''''''''''''', []):
        if ''''''''''''''''ProtNLM'''''''''''''''' in str(name_info.get(''''''''''''''''evidenceSources'''''''''''''''', [])):
            annotations[''''''''''''''''predicted_name''''''''''''''''] = name_info.get(''''''''''''''''fullName'''''''''''''''', {}).get(''''''''''''''''value'''''''''''''''', '''''''''''''''''''''''''''''''')
            break

    # 检查功能评论中的 ProtNLM 预测
    for comment in entry.get(''''''''''''''''comments'''''''''''''''', []):
        if comment.get(''''''''''''''''commentType'''''''''''''''') == ''''''''''''''''FUNCTION'''''''''''''''':
            for evidence in comment.get(''''''''''''''''evidences'''''''''''''''', []):
                if ''''''''''''''''ProtNLM'''''''''''''''' in str(evidence.get(''''''''''''''''source'''''''''''''''', '''''''''''''''''''''''''''''''')):
                    annotations[''''''''''''''''predicted_function''''''''''''''''] = comment.get(''''''''''''''''texts'''''''''''''''', [{}])[0].get(''''''''''''''''value'''''''''''''''', '''''''''''''''''''''''''''''''')
                    break

    return annotations

§6.9 计算资源需求

任务 数据量 内存 GPU 时间
Swiss-Prot 全量下载 ~500 MB 4 GB 不需要 ~5 分钟
TrEMBL 全量下载 ~100 GB 50 GB 磁盘 不需要 ~2 小时
UniRef50 下载 ~9 GB 16 GB 不需要 ~30 分钟
ESM-2 650M 推理 (1 蛋白) 3 GB 1× RTX 3090 <1 秒
ESM-2 15B 推理 (1 蛋白) 60 GB 8× A100 ~5 秒
ESM-2 650M 批量嵌入 (10K 蛋白) 8 GB 1× A100 ~30 分钟
AlphaFold DB 单结构下载 ~1 MB 不需要 不需要 <1 秒
全蛋白质组 AlphaMissense 加载 ~70 GB 128 GB 不需要 ~10 分钟
SPARQL 复杂查询 服务器端 不需要 10-120 秒

§7 已知坑点

§7.1 Swiss-Prot vs TrEMBL 质量鸿沟

问题:Swiss-Prot(574K)和 TrEMBL(2.03 亿)之间存在巨大的质量鸿沟。Swiss-Prot 每条注释都有文献支撑和 ECO 证据代码;TrEMBL 的注释主要来自 UniRule/ARBA/ProtNLM 自动传播,可能包含假阳性。

影响:在 TrEMBL 中盲目信任功能注释可能导致错误的生物学结论。例如,一个被自动注释为"kinase"的 TrEMBL 条目可能实际上没有激酶活性——该注释仅基于结构域相似性传播,未经实验验证。

解决方案

  • 使用 reviewed:true 过滤器仅获取 Swiss-Prot 条目
  • 检查 PE (Protein Existence) 级别——PE=1 表示有蛋白质水平实验证据
  • 检查 ECO 证据代码——优先使用 ECO:0000269(实验证据)的注释
  • 对 TrEMBL 条目进行 BLAST 验证,确认与 Swiss-Prot 直系同源

§7.2 UniRef 聚类的信息丢失

问题:UniRef 聚类将相似序列合并为一条代表序列,丢失了簇内成员的多样性信息。UniRef50 将 ~2.2 亿序列压缩到 ~3,900 万簇,意味着每个代表序列平均"代表" ~6 个原始序列。

影响

  • 代表序列的选择策略(Swiss-Prot 优先 → 模式生物优先 → 最长序列)可能导致偏向
  • 簇内成员可能有不同的功能(~3% 的 UniRef50 簇内功能不一致)
  • 80% 长度重叠阈值可能将功能相关但序列差异大的蛋白质排除在外

解决方案

  • 在 UniRef 代表序列上训练模型后,在全序列上评估性能
  • 对关键蛋白质,检查其所属 UniRef 簇的全部成员
  • 使用 UniRef90(更高分辨率)进行敏感度要求高的分析

§7.3 参考蛋白质组策略的覆盖变化

问题:2024 年起,UniProt 将 UniProtKB 限制为参考蛋白质组 (Reference Proteomes) 策略,移除了大量非参考蛋白质组的序列。这导致 UniProtKB 条目数从 ~2.5 亿下降,被移除的序列可在 UniParc 中找到。

影响

  • 历史分析中引用的 UniProt accession 可能在新版 UniProtKB 中不再存在
  • 某些非模式物种的蛋白质可能被移除
  • 下游数据库(如 AlphaFold DB)的覆盖范围随 UniProt 更新而变化

解决方案

  • 在 UniParc 中查找被移除的序列(UPI 开头的稳定标识符)
  • 使用 UniSave 查看历史版本
  • 固定分析时使用的 UniProt 版本号

§7.4 自动注释误差传播

问题:UniRule/ARBA 自动注释依赖 Swiss-Prot 的"种子"注释进行传播。如果种子注释有误,错误会通过规则传播到大量 TrEMBL 条目。ProtNLM 的 LLM 预测同样可能产生系统性偏差。

影响:一个错误的 Swiss-Prot 功能注释可能通过 UniRule 传播到数千条 TrEMBL 条目,形成"注释泡沫"。

解决方案

  • 对关键功能注释进行文献溯源
  • 关注 UniProt 的 “Caution” 注释——策展人标记的争议或不确定性
  • 使用 CAFA (Critical Assessment of Functional Annotation) 基准评估预测方法

§7.5 物种偏向性

问题:Swiss-Prot 的策展资源高度集中在模式生物。人类 (20,420)、小鼠 (17,240)、拟南芥 (16,397) 三个物种占 Swiss-Prot 的 ~9%,而 6,016 个物种仅有 1 条目。

影响:非模式物种的蛋白质功能注释覆盖率低,自动注释依赖的"种子"也少,形成恶性循环。

解决方案

  • 对非模式物种,使用 InterProScan 进行独立的结构域分析
  • 参考近缘模式生物的直系同源蛋白
  • 关注 UniProt 的社区提交功能,提交实验验证的注释

§7.6 AlphaFold DB 同步滞后

问题:AlphaFold DB 的更新频率低于 UniProt(AFDB 每年 1-2 次大更新,UniProt 每 4 周),导致新发现的蛋白质序列可能在 UniProt 中存在但 AFDB 中尚无结构预测。

影响:在 AFDB 中找不到结构时,需要使用本地 AlphaFold 或 ESMFold 进行预测。

解决方案

  • 使用 AlphaSync 工具保持 AFDB 与 UniProt 同步
  • 对缺失结构使用 ESMFold(基于 ESM-2 嵌入,无需 MSA,速度快)
  • 关注 AFDB 更新公告

§7.7 序列版本与注释版本的不同步

问题:UniProt 条目的序列和注释可以独立更新。序列版本号 (sequence version) 和条目版本号 (entry version) 分别递增,可能导致下游数据库引用的版本不一致。

解决方案

  • 记录分析时使用的 UniProt 版本号和日期
  • 使用 UniProt accession(稳定)而非 entry name(可变)作为标识符
  • 通过 UniSave 追溯特定版本

§7.8 ProtNLM 注释的可靠性边界

问题:ProtNLM 直接从序列预测功能描述,但其预测可能对训练数据中罕见的功能类别或远缘物种的蛋白质表现不佳。ProtNLM 注释使用银色证据标记,但用户可能忽略这一区别。

解决方案

  • 始终检查 ProtNLM 预测的证据代码(银色 = 自动,未经人工审核)
  • 将 ProtNLM 预测作为假设生成工具,而非功能结论
  • 对关键蛋白质,通过实验验证或文献检索确认功能

§7.9 大规模下载的带宽与存储

问题:TrEMBL 完整数据集超过 100 GB,UniParc 更大。全量下载可能需要数小时,存储空间也是一个挑战。

解决方案

  • 使用参考蛋白质组(~15 GB)替代全量 TrEMBL
  • 使用 REST API 的 stream 端点按需获取子集
  • 使用 SPARQL 端点进行服务器端过滤,仅下载需要的数据

§7.10 REST API 速率限制与分页

问题:UniProt REST API 对大批量查询有隐式速率限制。search 端点每次最多返回 500 条结果,需要分页获取完整结果集。过度频繁的请求可能被限流。

影响:未正确处理分页可能导致数据不完整;未控制请求频率可能触发 429 Too Many Requests。

解决方案

  • 使用 stream 端点一次性获取全量结果(无分页限制,适合大批量下载)
  • 使用 cursor 参数进行分页(而非 offset,后者在大偏移量时性能差)
  • 控制请求频率(建议间隔 ≥0.5 秒)
  • 使用 Python unipressed 库自动处理分页和重试

§7.11 Entry Name 不稳定性

问题:UniProt entry name(如 INSR_HUMAN)可能随版本更新而改变,但 accession number(如 P06213)保持稳定。使用 entry name 作为标识符可能导致引用失效。

解决方案

  • 始终使用 accession number 作为主键
  • Entry name 仅用于人类可读显示
  • 使用 ID 映射服务进行旧 entry name → accession 的转换

§7.10 交叉引用的时效性

问题:UniProt 与 170+ 外部数据库的交叉引用需要定期同步。某些交叉引用可能因外部数据库更新而暂时失效或指向已过时的条目。

解决方案

  • 对关键交叉引用,验证目标数据库中的条目仍然存在

  • 使用 ID 映射服务进行双向验证

  • 关注 UniProt 每个版本的交叉引用更新日志

§8 基准性能与生态

§8.1 蛋白质数据库横向对比

数据库 维护者 条目数 注释质量 特色 许可证
UniProtKB/Swiss-Prot EMBL-EBI/SIB/PIR 574,627 ★★★★★ 人工审核 金标准,ECO 证据体系 CC BY 4.0
UniProtKB/TrEMBL EMBL-EBI/SIB/PIR ~2.03 亿 ★★★☆☆ 自动注释 全覆盖序列空间 CC BY 4.0
NCBI RefSeq Protein NCBI ~3 亿 ★★★☆☆ 基因组注释 与 GenBank/Ensembl 集成 Public Domain
Ensembl Protein EMBL-EBI/Sanger ~2 亿 ★★★☆☆ 基因组注释 基因组变体注释集成 Apache 2.0
InterPro EMBL-EBI ~2 亿 ★★★★☆ 结构域分类 多数据库整合分类 CC BY 4.0
PDB RCSB/EMBL-EBI/PDBe ~210K ★★★★★ 实验结构 3D 坐标 CC0/PD
AlphaFold DB DeepMind/EMBL-EBI ~2.62 亿 ★★★★☆ 预测结构 全蛋白质组结构预测 CC BY 4.0
STRING EMBL-EBI/SIB ~1.4 亿 ★★★★☆ 互作网络 蛋白质互作整合 CC BY 4.0
Reactome OICR/EMBL-EBI ~11 万通路 ★★★★★ 人工策展 通路数据库 CC BY 4.0

§8.2 蛋白质 AI 模型性能基准

模型 任务 训练数据 基准数据集 性能 发表
ESM-2 15B 结构预测 (contact) UniRef50 65M CASP14 原子级精度 Science 2023
ESM-2 650M 变异效应 (零样本) UniRef50 65M ProteinGym 217 assays Spearman 0.414 Science 2023
AlphaFold 2 结构预测 UniProt + PDB CASP14 GDT_TS 92.4 Nature 2021
AlphaMissense 错义变异致病性 UniProt + gnomAD ClinVar AUROC 0.940 Science 2023
ProtT5-XL-U50 功能预测 UniRef50 216M CAFA GO Fmax 0.60+ 2021
ProtNLM2 功能名称预测 UniRef50 Swiss-Prot held-out 28M+ 条目注释 2024
ESMFold 单序列结构预测 ESM-2 嵌入 CASP14/CAMEO GDT 70+ (无 MSA) Science 2023

§8.3 UniProt 在 AI 预训练中的独特地位

UniProt 之所以成为蛋白质 AI 的"ImageNet",源于以下独特属性:

  1. 规模:2.03 亿序列提供足够的训练信号(对比 ImageNet 140 万图像)
  2. 多样性:覆盖 14,803+ 物种(Swiss-Prot),从病毒到人类
  3. 去冗余:UniRef 聚类提供预训练就绪的数据集(无需额外处理)
  4. 标注质量:Swiss-Prot 金标准注释可用于微调和评估
  5. 开放获取:CC BY 4.0 允许商业使用
  6. 稳定标识符:Accession 号稳定,可追溯
  7. 版本控制:UniSave 提供历史版本,支持可复现研究
  8. 交叉引用:170+ 数据库交叉引用,便于多模态训练

§8.4 关键发现案例

发现 UniProt 角色 参考
AlphaFold 结构预测 AFDB 覆盖 UniProt 全部序列 Jumper et al., Nature 2021
ESM-2 原子级结构 UniRef50 预训练使结构信息涌现 Lin et al., Science 2023
AlphaMissense 变异预测 UniProt 序列 + gnomAD 频率训练 Cheng et al., Science 2023
SARS-CoV-2 蛋白质组 COVID 门户快速策展病毒蛋白质 UniProt Consortium, 2021
PAN-GO 人类基因功能 Swiss-Prot 策展团队参与进化推断 Feuermann et al., Nature 2025
蛋白质金属结合预测 UniProt 金属结合挑战赛提供训练集 UniProt Consortium, 2025
CAFA 功能预测竞赛 UniProt 策展人贡献训练/测试集 CAFA-5 Kaggle, 2023

§8.5 AI/ML 方法生态

方法/工具 任务 UniProt 使用方式 参考
ESM-2 嵌入/结构/变异 UniRef50 预训练 Lin et al. 2023
AlphaFold 2/3 结构预测 UniProt 序列作为输入 Jumper et al. 2021
AlphaMissense 变异效应 UniProt + gnomAD 训练 Cheng et al. 2023
ProtNLM/2 功能注释 UniRef50 预训练 → UniProt 注释 Google DeepMind 2024
ProtBERT/T5 嵌入/功能 UniRef100/50 预训练 Elnaggar et al. 2021
InterProScan 结构域识别 InterPro 成员数据库 Blum et al. 2025
bio_embeddings 嵌入提取 UniProt 官方嵌入管道 Dallago et al. 2021
Celligner 细胞系-肿瘤对齐 UniProt 交叉引用 DepMap 2021
CAFA 功能预测竞赛 Swiss-Prot 评估集 CAFA-5 2023
ProteinGym 变异效应基准 UniProt 序列来源 Notin et al. 2023

§8.6 全球 Core Biodata Resource 地位

2024 年,UniProt 被授予 Global Core Biodata Resource (GCBR) 地位,这是对全球生命科学基础设施至关重要数据库的认证。GCBR 认证意味着:

  • 长期可持续性:获得稳定资金支持保障
  • 全球可及性:确保全球研究者免费获取
  • 质量标准:遵循国际数据管理最佳实践
  • 社区服务:响应全球科学社区需求

§8.7 资金来源

UniProt 由多国公共机构联合资助:

  • 美国:National Human Genome Research Institute (NHGRI), NIH, NCI-caBIG
  • 欧洲:European Commission, Swiss Federal Government
  • 英国:EMBL-EBI 核心资金 (Wellcome Trust, BBSRC, MRC)
  • 瑞士:Swiss Federal Office of Education and Science
  • 美国国防部:部分资助

§8.8 社区策展与用户贡献

UniProt 鼓励社区参与功能注释:

  • 社区提交:研究者可通过官网提交序列、发表文献和注释更新
  • 文献文本挖掘:UniProt 使用文本挖掘技术识别相关论文,联系作者协助评估和提取注释
  • LLM 辅助草稿:正在探索使用 LLM 生成注释草稿,发送给论文作者审核
  • UniProt 金属结合挑战赛:邀请 ML 社区创建计算方法预测金属结合位点,提供 100 万蛋白质训练集和测试集
  • CAFA-5 (Kaggle):UniProt 策展人选择并贡献训练集,提供策展测试集辅助评估

§8.9 2025 年重大更新摘要

更新 内容 影响
参考蛋白质组全面实施 UniProtKB 限制为高质量非冗余参考蛋白质组 条目数减少但质量提升
ProtNLM2 扩展 26,000+ 条目获得 AI 注释 减少未表征蛋白质数量
AlphaFold DB 同步 AFDB 与 UniProt 2025_03 同步 + 异构体 + MSA 可下载 恢复结构覆盖
PAN-GO 集成 进化推断的人类基因功能注释导入 UniProt 人类蛋白质功能最完整图谱
新交叉引用 CARD (抗菌耐药)、FunCoup (互作网络)、CD-CODE (细胞死亡)、STRENDA-DB (酶动力学) 扩展知识链接网络
嵌入下载 Swiss-Prot + 部分参考蛋白质组预计算嵌入 (T5-based) 加速 ML 研究

§9 资源索引

§9.1 核心论文

论文 期刊 年份 DOI
UniProt Consortium. “UniProt: the Universal Protein Knowledgebase in 2025.” Nucleic Acids Res. 53:D609–D617 2025 10.1093/nar/gkae1010
Suzek et al. “UniRef clusters: a comprehensive and scalable alternative…” Bioinformatics 31(6):926-932 2015 10.1093/bioinformatics/btu739
Suzek et al. “UniRef: comprehensive and non-redundant UniProt reference clusters.” Bioinformatics 23(10):1282-1288 2007 10.1093/bioinformatics/btm098
Lin et al. “Evolutionary-scale prediction of atomic-level protein structure with a language model.” Science 379(6637):1123-1130 2023 10.1126/science.ade2574
Jumper et al. “Highly accurate protein structure prediction with AlphaFold.” Nature 596:583-589 2021 10.1038/s41586-021-03819-2
Cheng et al. “Accurate proteome-wide missense variant effect prediction with AlphaMissense.” Science 381(6664):eadg7492 2023 10.1126/science.adg7492
Bateman et al. “UniProt: a worldwide hub of protein knowledge.” Nucleic Acids Res. 47(D1):D506-D515 2019 10.1093/nar/gky1049
Breuza et al. “UniRule: a unified rule resource for automatic annotation in the UniProt Knowledgebase.” Database 2020 10.1093/database/baaa012
Feuermann et al. “A compendium of human gene functions derived from evolutionary modelling.” Nature 2025 10.1038/s41586-025-08592-0
Varadi et al. “AlphaFold Protein Structure Database in 2024.” Nucleic Acids Res. 32:D553-D559 2024 10.1093/nar/gkad1011

§9.2 官方资源

资源 URL
UniProt 官网 https://www.uniprot.org/
FTP 站点 https://ftp.uniprot.org/pub/databases/uniprot/
REST API https://rest.uniprot.org/
REST API 文档 https://www.uniprot.org/help/api
API 交互文档 https://www.uniprot.org/api-documentation
SPARQL 端点 https://sparql.uniprot.org/
技术文档 https://www.uniprot.org/help/technical_docs
查询语法 https://www.uniprot.org/help/query-fields
REST 教程 https://www.uniprot.org/help/uniprot_rest_tutorial
ID 映射 https://www.uniprot.org/id-mapping
提交数据 https://www.uniprot.org/submit
新闻与更新 https://www.uniprot.org/help/publications
计划变更 https://www.uniprot.org/help/planned_changes
发布归档 https://www.uniprot.org/help/release_notes
AlphaFold DB https://alphafold.ebi.ac.uk/
UniSave (版本归档) https://www.ebi.ac.uk/uniprot/unisave/
帮助中心 https://www.uniprot.org/help/
培训课程 https://www.ebi.ac.uk/training/online/courses/uniprot-exploring-protein-sequence-and-functional-info/

§9.3 第三方工具

工具 语言 功能 URL
BioPython Python UniProt 搜索/解析 https://biopython.org/
bioservices Python UniProt Web 服务 https://bioservices.readthedocs.io/
Unipressed Python 类型化 UniProt API 客户端 https://github.com/multimeric/Unipressed
fair-esm2 Python ESM-2 模型推理 https://github.com/facebookresearch/esm
bio_embeddings Python 蛋白质嵌入提取 https://github.com/sacdallago/bio_embeddings
InterProScan Java 结构域识别 https://github.com/ebi-pf-team/interproscan
AlphaFold (开源) Python 结构预测 https://github.com/deepmind/alphafold
ColabFold Python 云端 AlphaFold https://github.com/sokrypton/ColabFold
ESMFold Python 单序列结构预测 https://github.com/facebookresearch/esm
Foldseek C++ 结构搜索 https://github.com/steineggerlab/foldseek
PyMOL Python/C 结构可视化 https://pymol.org/
AlphaSync Python AFDB-UniProt 同步

§9.4 外部关联资源

数据库 URL 与 UniProt 关系
InterPro https://www.ebi.ac.uk/interpro/ 结构域分类,UniProt 自动注释源
Gene Ontology http://geneontology.org/ 功能本体,UniProt 注释核心
Reactome https://reactome.org/ 通路数据库,交叉引用
STRING https://string-db.org/ 蛋白质互作网络
ChEMBL https://www.ebi.ac.uk/chembl/ 药物靶点数据库
ClinVar https://www.ncbi.nlm.nih.gov/clinvar/ 临床变异
gnomAD https://gnomad.broadinstitute.org/ 群体变异频率
PDB https://www.rcsb.org/ 实验结构
AlphaFold DB https://alphafold.ebi.ac.uk/ 预测结构
Ensembl https://www.ensembl.org/ 基因组注释
NCBI RefSeq https://www.ncbi.nlm.nih.gov/refseq/ 参考序列
MGnify https://www.ebi.ac.uk/metagenomics/ 宏基因组蛋白质
PRIDE https://www.ebi.ac.uk/pride/ 质谱数据

§9.5 数据使用许可

UniProt 数据以 Creative Commons Attribution 4.0 International (CC BY 4.0) 许可发布:

  • ✅ 商业使用
  • ✅ 修改和再分发
  • ✅ 任何格式/媒介使用
  • ⚠️ 必须注明来源(引用 UniProt Consortium 论文 + DOI)
  • ⚠️ 不暗示 UniProt 背书你的使用

引用格式

The UniProt Consortium. “UniProt: the Universal Protein Knowledgebase in 2025.” Nucleic Acids Res. 53:D609–D617, 2025. doi:10.1093/nar/gkae1010.

§10 AI 使用声明卡

项目 声明
数据集名称 UniProt (Universal Protein Resource)
版本 Release 2026_02
发布日期 2026-02(最新双周发布)
核心论文 UniProt Consortium, Nucleic Acids Res. 53:D609–D617 (2025)
DOI 10.1093/nar/gkae1010
许可证 CC BY 4.0
AI 训练适用性 ★★★★★ — 所有蛋白质 AI 模型的预训练基础
推荐子集 UniRef50 (PLM 预训练) / Swiss-Prot (微调评估) / 参考蛋白质组 (应用)
数据格式 FASTA / XML / RDF / Flat file / JSON (REST API)
已知局限 TrEMBL 自动注释可能含假阳性;物种偏向模式生物;参考蛋白质组策略导致覆盖变化
社区支持 官网帮助中心 / 培训课程 / 社区提交
页面状态 published
审核声明 千方病案医学编辑部交叉审核
返回 AI Ready 数据集