信息速览
INFOBOX
| 项 | 值 |
|---|---|
| 全名 | Complex Portal(蛋白复合物门户) |
| 维护方 | EMBL-EBI,与 IntAct 共用基础设施与团队 |
| 规模(官方索引 2026-10-23) | 20,580 个复合物 |
| 覆盖物种 | 27 个 |
| 人类 | 2,436 个 |
| 小鼠 | 697 个 |
| 酿酒酵母 | 612 个 |
| 数据标准 | PSI-MI(分子互作标准)+ ECO(证据本体) |
| 访问方式 | Web Service(单条 JSON)+ FTP 全量(TSV / PSI-MI XML) |
| 最重要的字段 | 化学计量(stoichiometry)——每个零件有几个 |
| 最大的坑 | 人类 TSV 只有 1,863 行,不是 2,436 行(差额 573 个在 9606_predicted.tsv 里) |
§0 E-E-A-T 信任声明与免责声明
我们是谁:千方病案医学编辑部,为中文医学 AI 社区整理可训练数据集的结构化说明。
本条目怎么来的:规模数字取自 2026-10-23 的 EBI Search indexInfos(官方索引声明值 20,580)与 FTP 上的 released_complexes.txt(20,580 行,两者一致)。物种分布取自官方 TAXONOMY facet。字段结构取自 complextab/9606.tsv 的表头与实际行,以及 Web Service 单条返回的 JSON。
我们不做什么:本条目不提供复合物结构预测、不评估任何单条注释的正确性、不做 benchmark。§7.7 的口径矩阵只对比不同接口对"同一个数"的算法差异。
已知局限:
- 官方总数 20,580 与人类 TSV 的 1,863 行不是矛盾,是不同口径:TSV 按物种分文件,人类还有一份
9606_predicted.tsv放预测的复合物,官方 facet 的 2,436 把预测的也算进了"人类"这一类。§7.7 有完整对照。 - 本篇引用的字段级统计(如"人类 1,863 个复合物中 564 个有疾病注释")只覆盖 TSV 里那 1,863 行,不含预测部分。
- FTP 快照时间戳是 2026-01-14,索引更新时间是 2026-08-06,两者有 7 个月差。要做可复现实验,以 FTP 快照为准。
§1 数据集概览
§1.0 📌 30 秒速览
Complex Portal 是目前唯一一个把"一个蛋白机器由几个零件组成"写进数据的公共目录。
规模(官方索引 2026-10-23):
| 指标 | 数值 |
|---|---|
| 复合物总数 | 20,580 |
| 覆盖物种数 | 27 |
| 人类 | 2,436(TSV 已发布 1,863) |
| 小鼠 | 697 |
| 酿酒酵母 | 612 |
| 大肠杆菌 K-12 | 317 |
| 果蝇 | 275 |
| 拟南芥 | 228 |
| 线虫 | 145 |
| 裂殖酵母 | 143 |
| 大鼠 | 114 |
三个必须先知道的形状问题:
- 它记的不是"谁和谁相互作用",是"哪些蛋白组成了一个机器、各几个"。STRING 给你"蛋白 A 与蛋白 B 有 0.9 的置信度",Complex Portal 给你"这个复合物由 A×2、B×1、C×2 组成,是异源五聚体"。后者才是药物设计能用的形式——因为药物的结合位点取决于组装后的界面,不取决于孤立的两条链。
- 人类只占 2,436 / 20,580 = 11.8%,剩下的近九成是模式生物、病原体、甚至蛇毒与电鳗的毒素靶点复合物。"这是个人类数据库"是错觉,用之前必须先按物种过滤。
- 化学计量有 0 这个值。人类 7,676 个成员标注里,2,414 个是
(0)——意思是"这个成员在复合物里,但数量未被测定"。把 0 当成"没有"会直接算错分子量。
如果你做药物靶点分析、通路建模、结构生物学对接、或需要"这个蛋白属于哪个机器"的注释,Complex Portal 是该去的地方;如果你要的是大规模的互作网络推理,STRING 与 IntAct 更合适(本站已收 IntAct #582、STRING #414)。
§1.1 技术摘要
| 维度 | 值 |
|---|---|
| 复合物总数 | 20,580 |
| 物种数 | 27 |
| 人类 | 2,436(TSV 1,863 + 预测文件) |
| 数据标准 | PSI-MI 25 / PSI-MI 30、ECO 证据本体、GO |
| 成员标识 | UniProt AC(不是基因名,不是 Ensembl ID) |
| 化学计量格式 | UniProtAC(数量),多个成员用 `\ |
| 每复合物字段 | 19 列(TSV),含名称、别名、分类、成员、证据码、GO、交叉引用、描述、性质、组装、配体、疾病、激动剂、拮抗剂、评论、来源、展开参与者 |
| 访问方式 | Web Service(单条)+ FTP(全量分物种) |
| 更新 | 随 IntAct 月度发布节奏 |
成员用 UniProt AC 这个选择很关键。它意味着:同一个蛋白的所有异构体(isoform)共享一个 AC,除非用
P0DTC2-PRO_0000449647这种带 PRO 号的写法单独指认某个切割产物。做异构体特异分析时,光看 AC 会丢信息。
§1.2 战略价值
第一,它补的是"二元互作"和"通路"之间那一层。 本站已收 IntAct(#582,二元实验互作)、STRING(#414,二元打分边)、Reactome(通路)、PDB(结构)。这条路线上缺的正是"中间那层":一组蛋白如何组成一个有固定化学计量的机器。没有这一层,从互作网络到通路之间就是断的——你有一万条边,却不知道哪几条边属于同一个机器。
第二,化学计量直接决定分子量与药物剂量。 一个抗体药物的靶点是三聚体还是单体,决定它的表位数量与结合价。一个酶复合物的催化亚基有几个,决定比活性。这些信息在 STRING 与 IntAct 里都没有——因为它们只描述"接触",不描述"组成"。
第三,疾病注释是罕见病与肿瘤的机制桥梁。 人类 1,863 个已发布复合物中,564 个挂了疾病注释(30.3%)。这些注释指向孟德尔遗传病(如 Coffin-Siris 综合征 31 个复合物)、肿瘤(如 SWI/SNF 染色质重塑复合物与 39 个癌症关联)。它的价值在于把"突变"翻译成"机器坏了"——单基因病的致病突变往往落在复合物的亚基界面上。
第四,它是结构预测的训练标签。 AlphaFold-Multimer 这类模型的评估需要"哪些链应该在一起、以什么比例"。Complex Portal 是目前唯一成规模提供这个监督信号的公开资源。
§1.3 同类资源横向对比
| 资源 | 记什么 | 与 Complex Portal 的关系 |
|---|---|---|
| Complex Portal(本条) | 复合物组成 + 化学计量 + 组装 | 唯一提供化学计量的公共目录 |
| IntAct(本站 #582) | 二元分子互作(实验) | 同一团队、同一基础设施;IntAct 是边,Complex Portal 是团 |
| STRING(本站 #414) | 二元互作打分(实验+预测+文本) | 覆盖广但无化学计量;可与 Complex Portal 交叉验证 |
| CORUM | 哺乳动物复合物(质谱为主) | 规模更大(数千),但多为质谱推断,无人工审编,且只覆盖人/鼠 |
| Reactome | 通路与反应 | 上层;Complex Portal 的复合物常作为 Reactome 反应的参与者 |
| PDB(本站 #43) | 实验测定的三维结构 | 下层;Complex Portal 的交叉引用里有 wwpdb(人类 2,511 条引用)可跳到结构 |
| UniProt(本站 #37) | 蛋白序列与功能 | 成员标识的锚点 |
CORUM 那一行值得展开:如果只想要"尽量多的哺乳动物复合物",CORUM 规模更大;但如果要"可信的化学计量",CORUM 不行——它的复合物多来自单次质谱实验的共纯化,成员清单里常有污染物,且没有人工核对。Complex Portal 的 20,580 个少,但每个都有证据码与审编记录。
§1.4 版本时间轴
| 时间 | 事件 |
|---|---|
| 2014 | Complex Portal 启动,首批发的是模式生物的核心复合物 |
| 2015 | 人类复合物开始成规模收录(CPX-100 发布于 2015-06-26) |
| 2020 | SARS-CoV-2 相关复合物集中收录(CPX-5682 至 CPX-5742 一批) |
| 2022 | 与 IntAct 的数据管道完全合并,共用 Web Service |
| 2026-01 | FTP current 快照(本篇引用的 TSV 基线) |
| 2026-08 | 索引更新时间(EBI Search 记录) |
| 2026-10 | 20,580 个复合物(官方索引计数) |
CPX 编号是可读的时间线索:
CPX-100是 2015 年,CPX-5682是 2020 年(新冠),CPX-26477是近期。编号不是连续的——有大量号码被保留或废弃,所以"最大 CPX 号"不等于"总数"。
§1.5 典型应用场景
场景一:药物靶点复合物定位。 给定一个靶点蛋白,查它属于哪些复合物、在每个复合物里是几个。这决定"设计一个结合该蛋白的药,实际结合的是单体还是五聚体上的一个面"。
场景二:罕见病变异的功能解释。 患者携带某基因的错义突变,查该基因产物的复合物伙伴,判断突变是否落在亚基界面(linkedFeatures 字段里有 binding region 的坐标范围)。
场景三:结构预测的评估集。 用复合物成员清单与化学计量作为 ground truth,评估多聚体结构预测的链配对与化学计量是否正确。
场景四:通路重建的骨架。 把 Complex Portal 的复合物当作节点、把共享亚基当作边,重建"机器之间的共享零件"网络——这比蛋白层面的网络更接近功能模块。
场景五:跨物种比较。 同一复合物在人、鼠、酵母里的亚基组成差异,是进化与模型选择研究的素材。
§2 蛋白复合物的科学前提
§2.1 一个"复合物"到底是什么
Complex Portal 对复合物的定义,可以用一句话概括:
两个或更多分子,通过非共价(或特定的共价)相互作用结合在一起,形成一个具有独立生物学功能的结构单元。
这个定义里有三个关键词,每个都在实际使用中会踩坑:
| 关键词 | 含义 | 坑 |
|---|---|---|
| 两个或更多 | 单体不算复合物 | 但同源多聚体(homotrimer)算——一个蛋白出现三次也是复合物 |
| 非共价 | 排除二硫键连成的成熟胰岛素这类共价产物 | 但瞬时共价中间体(如酶-底物酰基中间体)通常不算 |
| 独立生物学功能 | 必须能在体内作为整体行使功能 | 共纯化不等于复合物——质谱拉下来的一堆蛋白可能只是同一个梯度里洗下来的 |
"独立生物学功能"这一条是最难的。它意味着 Complex Portal 收录的不是"检测到的结合",而是"被理解的功能单元"。这解释了为什么它只有 20,580 个,而 STRING 有几十亿条边——后者不需要理解功能,只要打分。
所以它本质上是人工审编的产物,不是算法输出的产物。这个区别决定了两件事:质量高、覆盖窄。用的时候不要问"为什么这个复合物没收录",要问"收录的这些是不是对的"。
§2.2 化学计量为什么重要
化学计量(stoichiometry)指的是复合物里每个亚基的拷贝数。举例:
CPX-11 SMAD2 homotrimer Q15796(3) → 同源三聚体
CPX-100 Cathepsin-B - cystatin-A complex Ctsb(1)|Csta(1) → 异源二聚体
CPX-5689 SARS-CoV-2 NSP15 complex P0DTD1-PRO_0000449632(6) → 同源六聚体
为什么这个数字不能省:
- 结构预测:AlphaFold-Multimer 要预测一个六聚体,输入就得是 6 条链。给 1 条链它预测的是单体。
- 分子量计算:SDS-PAGE 上看到的条带位置、质谱的分子量、冷冻电镜的颗粒大小,全部依赖计量。把
(0)当成"不存在",算出来的分子量会差成百上千 Dalton。 - 药物结合价:一个五聚体有 5 个相同的结合面,抗体的结合价(avidity)与单体完全不同——这是抗体药效学的核心变量。
- 催化比活性:酶复合物里催化亚基的数量直接决定 turnover number。
人类 7,676 个成员标注里,化学计量的分布是这样的:
| 计量值 | 出现次数 | 含义 |
|---|---|---|
| 1 | 3,526 | 单体拷贝 |
| 0 | 2,414 | 未测定(不是"没有") |
| 2 | 1,303 | 二拷贝 |
| 3 | 139 | |
| 4 | 120 | |
| 6 | 100 | |
| 8 | 17 | |
| 5 | 15 | |
| 7 | 8 | |
| 12 | 7 | |
| 40 | 6 | 核糖体大亚基这类超大机器 |
| 80 | 6 |
(0)占 31.4%,这是用这个库时最容易出错的地方。它的语义是"这个成员在复合物里,但审编时没找到可靠的拷贝数证据"。正确处置是当作缺失值,不是当作零。 做定量分析时,这 2,414 个要么排除、要么单独标记。
§2.3 从"成员清单"到"组装结构"
同一个成员清单,可以组装成完全不同的结构。Complex Portal 用 Complex assembly 字段记录组装类型:
| 组装类型 | 人类复合物中出现次数 | 说明 |
|---|---|---|
| Heterodimer | 401 | 两个不同蛋白各一个 |
| Heterotetramer | 266 | 四个亚基、至少两种 |
| Heterotrimer | 186 | |
| Heterohexamer | 102 | |
| Homodimer | 79 | 同一个蛋白两个 |
| Heteropentamer | 65 | |
| Heterododecamer | 41 | 12 个亚基 |
| Homotrimer | 37 | |
| Heterooctamer | 31 |
"hetero- 远多于 homo-"这个分布本身说明一件事:生物体更常用"不同零件组合"而不是"同一零件复制"。这对药物设计是坏消息——异源复合物的界面各不相同,不能像同源多聚体那样用对称性简化。
但组装字段的填充并不完整:人类 1,863 个复合物里 1,388 个有值(74.5%),剩余 475 个为空。空值的语义与 (0) 不同——空值是"没记录组装类型",可能是二聚体太显然(两个成员默认就是二聚体),也可能是审编时没填。
§2.4 证据码:这个复合物是怎么被知道的
每个复合物都带一个 ECO 证据码,说明"凭什么认为它存在"。人类的分布:
| ECO 码 | 描述 | 人类复合物数 | 占比 |
|---|---|---|---|
| ECO:0000353 | 物理互作证据(有实验) | 839 | 45.0% |
| ECO:0005547 | 生物学系统重建(基于背景知识推断) | 713 | 38.3% |
| ECO:0005546 | 基于序列同源性推断 | 238 | 12.8% |
| ECO:0005544 | 基于直系同源推断 | 39 | 2.1% |
| ECO:0005610 | 基于文献推断 | 23 | 1.2% |
| ECO:0005543 | 基于表达数据推断 | 12 | 0.6% |
这张表是使用这个库的第一道过滤器:
- 只有 45.0% 有直接实验证据。剩下的 55% 是推断——把一个物种里验证过的复合物,按同源关系"搬"到另一个物种。
- 做跨物种比较研究时必须看这一列。如果人类的某个复合物标的是
ECO:0005546(序列同源推断),那么它的成员清单基本是从小鼠或酵母搬过来的,"人类里真的是这样"这件事没被验证。 - 做药物靶点时必须只看
ECO:0000353。基于推断的复合物可能根本不在人类细胞里存在,或者成员比例不同。
这个 45% 的比例,是 Complex Portal 最该被说明、也最少被提及的事实。它不降低这个库的价值——推断本身有科学依据——但它决定了你能不能把它当"观测事实"用。
§2.5 交叉引用:它连到哪里
人类复合物的交叉引用来源(按出现次数):
| 来源 | 次数 | 用途 |
|---|---|---|
| pubmed | 6,268 | 原始文献,可追溯到哪篇论文 |
| wwpdb | 2,511 | 实验结构,可跳到具体 PDB 条目 |
| complex portal | 2,162 | 与其他 CPX 的关系(通常是"子集"或"变体") |
| qsproteome | 1,361 | 组织层面的蛋白表达(哪个组织里有这个复合物) |
| efo | 1,197 | 实验因子本体(疾病与性状) |
| rhea | 861 | 生化反应 |
| reactome | 844 | 通路 |
| intenz | 838 | IntAct 的复合物扩展页 |
| emdb | 516 | 冷冻电镜密度图 |
| humap | 413 | 人类互作组图谱 |
qsproteome 这一行最容易被忽略,但它解决了一个真问题:一个复合物存在,不代表它在所有组织里都存在。qsproteome 的 1,361 条引用告诉你"这个复合物在哪个组织被检测到表达"。做组织特异的药物设计时(比如只在肝脏起效),这一列比成员清单更关键。
wwpdb 的 2,511 条引用意味着:人类 1,863 个复合物平均有 1.35 条结构引用——有实验结构的复合物比例不低,但也不是全部。想做结构相关工作时,先用这一列筛"有结构"的,能省掉大量失败尝试。
§2.6 疾病注释的边界
人类 1,863 个复合物里,564 个(30.3%)有疾病注释。但"有疾病注释"和"是疾病靶点"不是一回事:
疾病注释的三种语义,混在一起:
- 复合物成员突变导致疾病(最直接)。如 SWI/SNF 复合物的亚基突变导致 Coffin-Siris 综合征——31 个人类复合物挂了这个注释。
- 复合物活性异常与疾病相关(机制层面)。如 GABA-A 受体复合物的失调与癫痫、自闭症相关。
- 复合物是疾病的生物标志物或治疗靶点(应用层面)。如某些激酶复合物在肿瘤中过表达。
这三种语义在数据里混在同一个字段,没有 qualifier 区分。所以"564 个复合物有疾病关联"这个数字不能直接读成"564 个药物靶点"——大部分是 1 类(机制明确但无药)与 2 类(相关但非因果)。
做靶点筛选时的正确做法:不要只看"有没有疾病注释",要看注释里的具体文本。含
[MONDO:...]或[MIM:...]的是有本体编码的明确疾病,可信度最高;纯文本描述的(如"causes a range of cancers")通常更泛。
§3 数据规格与通道抉择
§3.0 三条通道
| 通道 | 地址 | 适合 | 限制 |
|---|---|---|---|
| Web Service 单条 | ebi.ac.uk/intact/complex-ws/complex/CPX-100?format=json |
查少量复合物、要完整字段 | 一次一条;搜索端点经常 503 |
| FTP complextab | ftp.ebi.ac.uk/.../complextab/<taxid>.tsv |
推荐:要全量平面表 | 需自己解析竖线分隔的多值字段 |
| FTP PSI-MI XML | ftp.ebi.ac.uk/.../psi30/ |
要标准互作格式、要喂给下游工具 | XML 层级深,解析成本高 |
搜索端点的坑:
complex-ws/search/*在 2026-10-23 实测多次返回Web service overload。这不是参数问题,是服务端限流。做全量统计应直接走 FTP,不要指望搜索接口。EBI Search 的complex-portal域(ebisearch/ws/rest/complex-portal)可以做计数与 facet,比 complex-ws 的搜索稳定得多。
§3.1 字段地图
complextab/<taxid>.tsv 的 19 列(0 基索引):
| 索引 | 字段 | 备注 |
|---|---|---|
| 0 | Complex ac | CPX-<数字> |
| 1 | Recommended name | 推荐名 |
| 2 | Aliases for complex | 竖线分隔 |
| 3 | Taxonomy identifier | NCBI taxid |
| 4 | Identifiers (and stoichiometry) | 核心:AC(n),竖线分隔 |
| 5 | Evidence Code | ECO:xxxxxxx(描述) |
| 6 | Experimental evidence | 多为空 |
| 7 | Go Annotations | GO:xxxxxxx(描述),竖线分隔 |
| 8 | Cross references | db:id(qualifier),竖线分隔 |
| 9 | Description | 长文本,含功能机制 |
| 10 | Complex properties | 补充性质 |
| 11 | Complex assembly | 组装类型 |
| 12 | Ligand | 配体,多为空 |
| 13 | Disease | 疾病,长文本,含 [MONDO:]/[MIM:] 编码 |
| 14 | Agonist | 激动剂 |
| 15 | Antagonist | 拮抗剂 |
| 16 | Comment | |
| 17 | Source | 提交机构代码(如 ceitec) |
| 18 | Expanded participant list | 展开的参与者(含修饰、特征) |
读 TSV 时的三个必做:
- 用真正的 TSV 解析器,不要用
split('\t')。第 9 列(Description)里可能有制表符与换行。csv.reader(f, delimiter='\t')是安全的。 - 多值字段一律按
|切,然后再按()切。AC(n)这种嵌套括号要用正则,不能用split('(')——因为 PRO 号的成员写成长串(P0DTC2-PRO_0000449647(3)),中间没有额外括号但字段形态不统一。 - 列数不恒定。实测人类文件里 1,863 行是 19 列,但有 1 行只有 6 列(末尾列缺失)。用
row[i] if len(row) > i else ''取值,不要直接索引。
§3.2 下载预算
| 文件 | 大小 | 行数/内容 |
|---|---|---|
released_complexes.txt |
260 KB | 20,580 行,纯 AC 清单 |
complextab/9606.tsv |
4.1 MB | 1,863 个复合物 |
complextab/9606_predicted.tsv |
另计 | 预测的人类复合物 |
complextab/10090.tsv |
约 1 MB 量级 | 小鼠 |
| 其余 25 个物种 | 从几 KB 到几百 KB | 病毒类很小(SARS-CoV-2 只有 73 KB) |
全量下载三分钟能拿完,累计不到 20 MB。这是本条目里少数几个"可以放心全量下载"的数据集——与 GBIF(40 亿条)或 ENA(百万 TB)完全不同量级。
§3.3 版本机制
Complex Portal 没有显式的版本号,只有 FTP 目录里的 current 与时间戳。实际做法:
- FTP 的
current/目录每次发布会被替换,文件 mtime 就是发布日。 released_complexes.txt的行数就是当期复合物数——这是最可靠的对时点计数。- 要做可复现实验,必须记录:①
released_complexes.txt的行数;② 所用 TSV 的 mtime;③ 或直接把整个complextab/目录快照存档(20 MB,成本极低)。
不要用"今天查到的 20,580"当版本号。索引更新与 FTP 快照之间有滞后(本篇引用的快照是 2026-01-14,索引是 2026-08-06)。两个数都会变,只有你存在本地的那个文件不会变。
§3.4 技术栈与溯源链
文献(PubMed)
↓ 人工审编
IntAct 数据库(互作原始记录)
↓ 复合物层聚合
Complex Portal(CPX 记录)
↓ 导出
[TSV complextab] [PSI-MI XML] [Web Service JSON]
↓
下游:Reactome / Rhea / AlphaFold-Multimer 评估 / 药物靶点分析
这条链里最脆弱的一环是"人工审编"。它决定了数据质量的上限,也决定了更新速度的上限——每月新增复合物数量受限于团队人力,不受限于文献数量。这解释了为什么 20,580 这个数字增长缓慢。
§4 记录结构与字段字典
§4.1 一条复合物记录的解剖
以 CPX-100(Cathepsin-B - cystatin-A complex,小鼠)为例,Web Service 返回的 JSON 顶层字段:
{
"complexAc": "CPX-100",
"name": "Cathepsin-B - cystatin-A complex",
"systematicName": "Ctsb:Csta",
"species": "Mus musculus; 10090",
"functions": ["Complex of cathepsin-B with its inhibitor cystatin-A. ..."],
"properties": ["Displacement of the occluding loop is dependent on the size of the substrate or inhibitor."],
"participants": [ ... ],
"complexAssemblies": ["Heterodimer"],
"diseases": [],
"ligands": [],
"crossReferences": [ ... ],
"evidenceType": {"identifier": "ECO:0005544", "description": "inferred by orthology", "confidenceScore": 4},
"predictedComplex": false,
"releaseDates": ["2015-06-26"]
}
participants 里每个成员的结构:
{
"identifier": "P56567",
"name": "Csta",
"description": "Cystatin-A",
"stochiometry": "minValue: 1, maxValue: 1",
"bioRole": "unspecified role",
"interactorType": "protein",
"linkedFeatures": [{
"name": "cyta binding site",
"featureType": "binding region",
"ranges": ["80-333"]
}]
}
两个细节值得记住:
stochiometry是字符串"minValue: 1, maxValue: 1",不是数字。当计量有不确定范围时会是minValue: 1, maxValue: 2。直接int()会崩。linkedFeatures里有ranges(如80-333),这是"结合区域在序列上的位置"。做突变致病性判断时,这是最有用的一列——突变落在 binding region 内,比落在别处更可能破坏复合物。
§4.2 化学计量的三种形态
| 形态 | 例子 | 语义 | 处置 |
|---|---|---|---|
AC(1) |
Q15796(1) |
明确 1 个拷贝 | 直接用 |
AC(0) |
P0DTC9(0) |
数量未测定 | 当缺失值,不是零 |
AC(无括号) |
少见 | 计量完全未记录 | 当缺失值 |
CPX-n(1) |
CPX-5682(1) |
成员是另一个复合物(嵌套) | 递归展开 |
第 4 种形态是 Complex Portal 独有的设计。
CPX-5683(SARS-CoV-2 Spike - human ACE2 receptor complex)的成员里写的是CPX-5682(1)|Q9BYF1(1)——意思是"一个单位的 CPX-5682(切割后的 Spike 三聚体)+ 一个单位的 ACE2"。这种嵌套让复合物可以层级组合,但也意味着做扁平化时容易漏掉内层:如果只统计"蛋白成员数",CPX-5683看起来只有 2 个成员,实际展开后是 Spike 的 3 条链加 ACE2。
§4.3 物种构成:人类只占 11.8%
官方 TAXONOMY facet(2026-10-23,共 27 个物种):
| 物种 | TaxID | 复合物数 | 占比 |
|---|---|---|---|
| Homo sapiens 人类 | 9606 | 2,436 | 11.8% |
| Mus musculus 小鼠 | 10090 | 697 | 3.4% |
| Saccharomyces cerevisiae S288C 酿酒酵母 | 559292 | 612 | 3.0% |
| Escherichia coli K-12 大肠杆菌 | 83333 | 317 | 1.5% |
| Drosophila melanogaster 果蝇 | 7227 | 275 | 1.3% |
| Arabidopsis thaliana 拟南芥 | 3702 | 228 | 1.1% |
| Caenorhabditis elegans 线虫 | 6239 | 145 | 0.7% |
| Schizosaccharomyces pombe 裂殖酵母 | 284812 | 143 | 0.7% |
| Rattus norvegicus 大鼠 | 10116 | 114 | 0.6% |
| Bos taurus 牛 | 9913 | 22 | 0.1% |
| Gallus gallus 鸡 | 9031 | 22 | 0.1% |
| SARS-CoV-2 | 2697049 | 21 | 0.1% |
| Crotalus durissus terrificus 响尾蛇 | 8732 | 17 | 0.1% |
| SARS-related coronavirus | 694009 | 16 | 0.1% |
| Betacoronavirus England 1 | 1263720 | 13 | 0.1% |
| Danio rerio 斑马鱼 | 7955 | 6 | 0.0% |
| Sus scrofa 猪 | 9823 | 6 | 0.0% |
| Xenopus laevis 非洲爪蟾 | 8355 | 6 | 0.0% |
| Canis lupus familiaris 狗 | 9615 | 5 | 0.0% |
| Oryctolagus cuniculus 兔 | 9986 | 5 | 0.0% |
| Human betacoronavirus 2c EMC/2012 | 1235996 | 4 | 0.0% |
| Escherichia coli(通用种) | 562 | 2 | 0.0% |
| Lymnaea stagnalis 大椎实螺 | 6523 | 1 | 0.0% |
| Ovis aries 绵羊 | 9940 | 1 | 0.0% |
| Pseudomonas aeruginosa PAO1 | 208964 | 1 | 0.0% |
| Tetronarce californica 电鳐 | 7787 | 1 | 0.0% |
| Torpedo marmorata 电鳐 | 7788 | 1 | 0.0% |
这张表的读法:
- 人类 + 小鼠 + 酵母 + 大肠杆菌 = 4,062,占 19.7%。这四类是全部研究的重心。
- 病毒侧只有 54 个复合物(SARS-CoV-2 21 + SARS-related 16 + England 1 的 13 + EMC/2012 的 4)。新冠期间的集中收录是唯一的病毒高峰,其他病毒几乎没有。
- 响尾蛇 17 个、电鳐 1 个这类"冷门物种"的出现,是审编历史留下的痕迹——蛇毒毒素复合物、电鳐乙酰胆碱受体是经典药理学模型,被专门收录过。
- 植物只有拟南芥 228 个。做植物蛋白研究不要指望这个库。
这个分布的形状不是"生物学事实",是"研究投入的映射"。自然界里酵母的复合物数量不会比人类少 4 倍——只是研究酵母的团队少。跨物种比较时,任何"人类比小鼠复杂 3.5 倍"的结论都是伪结论。
§4.4 各物种的文件形态
FTP complextab/ 目录下的文件按 TaxID 命名:
562.tsv 大肠杆菌(通用种)
9606.tsv 人类(1,863 个已审编)
9606_predicted.tsv 人类(预测的,另计)
10090.tsv 小鼠
3702.tsv 拟南芥
83333.tsv 大肠杆菌 K-12
2697049.tsv SARS-CoV-2
两个必须知道的细节:
9606.tsv只有 1,863 行,而官方 facet 说人类 2,436。差额 573 在9606_predicted.tsv里——预测的复合物(同源映射推断而来)被单独放一个文件。做"已确证的人类复合物"分析时,只能读9606.tsv。562.tsv(大肠杆菌通用种)与83333.tsv(K-12 株)并存,分别是 2 个与 317 个。K-12 是实验室菌株,绝大多数研究基于它;只查562会漏掉 99% 以上。
§4.5 配体与药物字段
人类 1,863 个复合物中:
| 字段 | 有值数 | 占比 |
|---|---|---|
| Complex assembly 组装类型 | 1,388 | 74.5% |
| Aliases 别名 | 1,491 | 80.0% |
| Complex properties 性质 | 1,679 | 90.1% |
| GO annotations | 1,863 | 100% |
| Disease 疾病 | 564 | 30.3% |
| Ligand 配体 | 116 | 6.2% |
| Agonist 激动剂 | 少数 | <1% |
| Antagonist 拮抗剂 | 少数 | <1% |
这个填充率的形状很说明问题:
- GO 是 100%——说明它被当作必填项,几乎每个复合物都有功能注释。
- 疾病只有 30.3%——说明疾病关联是"发现才填",不是"必须有"。
- 配体只有 6.2%——这是最大的空白。如果要找"这个复合物能被什么小分子结合",Complex Portal 基本给不了,得去 ChEMBL 或 PDB 的 ligand 记录里找。
Ligand列的格式也值得注意:它写的是Chloride ion (CHEBI:15422)|ATP (CHEBI:15422)|ANP (P01160-PRO_0000001494)这种形式——注意 ATP 与 Chloride ion 都标了同一个 CHEBI:15422,这是数据录入的不一致(应为 CHEBI:15422 是 ATP,氯离子是 CHEBI:17996)。做配体统计时,不要直接按 CHEBI ID 去重。
§4.6 一个容易忽略的事实:复合物之间是嵌套的
CPX-5683(SARS-CoV-2 Spike - human ACE2 receptor complex)的成员:
CPX-5682(1) | Q9BYF1(1)
其中 CPX-5682 是"SARS-CoV-2 cleaved Spike protein complex",本身的成员是:
P0DTC2-PRO_0000449647(3) | P0DTC2-PRO_0000449648(3)
所以 CPX-5683 的实际蛋白组成是 6 条 Spike 链 + 1 个 ACE2。
这个设计的用意:Spike 切割后的三聚体是一个独立的、可复用的功能单元,它既能单独存在(在病毒表面),也能作为一个整体参与更大的复合物(与受体结合)。用嵌套表达,避免了"复合物爆炸"——否则每个"Spike + 不同受体"的组合都要重新列一遍 6 条链。
但这个设计有代价:任何"统计成员数"或"算分子量"的下游操作,必须先递归展开到蛋白层。人类侧 complex portal 交叉引用出现 2,162 次,其中相当一部分就是这种嵌套关系。
§5 检索、抽样与泄漏分析
§5.0 Complex Portal 上能做的四类检索
一、拿官方总数(最稳)
curl -s "https://www.ebi.ac.uk/ebisearch/ws/rest/complex-portal?format=json&size=1" | jq '.hitCount'
二、拿物种分布 facet
curl -s -G "https://www.ebi.ac.uk/ebisearch/ws/rest/complex-portal" \
--data-urlencode "query=complex" \
--data-urlencode "format=json" \
--data-urlencode "size=1" \
--data-urlencode "facetcount=40" | jq '.facets'
三、按关键词搜(注意搜索端会限流)
curl -s -G "https://www.ebi.ac.uk/ebisearch/ws/rest/complex-portal" \
--data-urlencode "query=ribosome" \
--data-urlencode "format=json" \
--data-urlencode "size=10"
四、按 CPX 号取完整记录
curl -s "https://www.ebi.ac.uk/intact/complex-ws/complex/CPX-5683?format=json" | jq .
query=complex这个写法是必须的。query=*会报'*' or '?' not allowed as first character in WildcardQuery。用一个几乎必然命中大多数记录的词当"全库"代理,是这个 API 的现实解法。注意:query=complex的hitCount是 5,117,不是 20,580——因为它只匹配描述里含 “complex” 的那些,不能当总数用。
§5.1 抽样策略:这个库能全量,但要想清楚"抽什么"
20,580 个复合物,全部下载不到 20 MB。这个库根本不需要抽样,需要的是"按什么维度切"。
| 切法 | 用途 | 注意 |
|---|---|---|
| 按物种 | 只做人类/小鼠 | 人类记得区分 9606.tsv 与 9606_predicted.tsv |
| 按证据码 | 只做有实验证据的 | ECO:0000353 人类 839 个 |
| 按成员数 | 只做大型机器(≥5 成员) | 人类 5 成员以上约 300 个 |
| 按组装类型 | 只做同源多聚体 | Homodimer + Homotrimer 等 |
| 按疾病关联 | 只做有疾病注释的 | 人类 564 个 |
| 按交叉引用 | 只做有 PDB 结构的 | 人类约 1.35 条/复合物的 wwpdb 引用 |
最常犯的错是按"复合物个数"直接切训练/测试集。见 §5.2。
§5.2 四类真实泄漏,按危害排序
第一类:复合物共享亚基(最严重)
复合物之间大量共享亚基。比如 SWI/SNF 家族的复合物共享 SMARCC1/SMARCC2 这些核心亚基。如果按复合物随机划分,测试集的复合物里可能出现训练集复合物见过的亚基,模型学到的是"这个亚基属于某个已知家族",而不是真正的组装规则。
正确做法:按亚基连通分量分组——把共享任一亚基的复合物划到同一组,整组进训练或整组进测试(类似图上的连通分量切分)。
第二类:基于同源推断的复合物跨侧(隐蔽)
人类和小鼠的很多复合物是同一批人按同源关系推的(ECO:0005544 / ECO:0005546)。如果训练集有人类版、测试集有对应的小鼠版,是同一份知识在两个物种里各出现一次。
正确做法:跨物种划分前,先按 systematicName 或成员集合做配对检测,配对的两条必须同侧。
第三类:嵌套复合物跨侧(中等)
CPX-5683 内含 CPX-5682。如果父复合物在训练集、子复合物在测试集,子复合物的成员信息直接泄漏。
正确做法:做扁平化后再划分,或按嵌套关系做分组。
第四类:GO 注释泄漏(做功能预测时)
GO 注释是 100% 填充的,且高度重复(同一家族的复合物共享 GO 术语)。如果任务是"预测复合物的功能",而输入里含 GO 注释,就是直接泄漏标签。
正确做法:功能预测任务的输入必须排除 GO 列,只用成员清单与组装类型。
§5.3 结构泄漏:从元数据本身推断出的信息
Complex ac 编号泄漏年代。CPX-568x 是 2020 年新冠批次,CPX-26xxx 是近期。编号本身就是时间戳,做时间相关的分析时必须注意。
Source 字段泄漏提交机构。如 ceitec(中欧技术研究院)提交的复合物集中在特定主题。模型可能靠提交机构认主题,而不是认成员关系。
Species 字段几乎等于标签。做"这个复合物在哪个物种"的任务,物种字段就是答案。
处置:做组装规则学习时,移除 Complex ac、Source、Species,只保留 members + stoichiometry + assembly。
§5.4 一个不该做的划分:按成员数切
看似合理(“小复合物训练、大复合物测试”),实际引入严重偏倚:
- 成员数多的复合物集中在特定家族(核糖体、蛋白酶体、转录中介体),这些家族在成员数上自成一类。
- 成员数少的复合物里混着大量"二聚体",它们的组装规则几乎相同(就是两条链贴一起)。
- 结果:模型学到的是"成员数区间"而不是"组装规则"。
如果确实要测泛化到大型复合物的能力,正确做法是:按复合物家族(如"是否含 RNA 聚合酶亚基")划分,而不是按成员数。
§6 AI 就绪指南
§6.1 最小可用 Pipeline
# 1. 拉全量(20 MB,三分钟)
mkdir -p cp && cd cp
curl -sO "https://ftp.ebi.ac.uk/pub/databases/intact/complex/current/released_complexes.txt"
for t in 9606 10090 559292 83333 7227 3702 6239 284812 10116 2697049; do
curl -sO "https://ftp.ebi.ac.uk/pub/databases/intact/complex/current/complextab/$t.tsv"
done
# 2. 解析成结构化表(见下)
import csv, re, collections
def parse_members(field):
"""解析 'AC(n)|AC(n)|CPX-m(n)' → [(id, n), ...];n=None 表示未测定"""
out = []
if not field or field == '-':
return out
for tok in field.split('|'):
tok = tok.strip()
if not tok:
continue
m = re.match(r'^([A-Za-z0-9\-]+?)(?:\((\d+)\))?$', tok)
if not m:
continue
mid, n = m.group(1), m.group(2)
out.append((mid, None if n is None else int(n)))
return out
rows = list(csv.reader(open('9606.tsv', encoding='utf-8'), delimiter='\t'))
header, data = rows[0], [r for r in rows[1:] if r and r[0].startswith('CPX')]
records = []
for r in data:
g = lambda i: r[i] if len(r) > i else ''
records.append({
'cpx': g(0),
'name': g(1),
'taxid': g(3),
'members': parse_members(g(4)),
'eco': g(5).split('(')[0],
'go': [x.split('(')[0] for x in g(7).split('|') if x.strip() and x != '-'],
'assembly': g(11),
'disease': g(13) != '-',
'ligand': g(12) != '-',
})
第 2 步的三个关键决策:
(0)解析成None,不是0。这一步决定了后面所有分子量、成员数统计对不对。- 嵌套的
CPX-xxx要单独标记并递归展开,不能当 UniProt AC 处理。 - 列数要用
g(i)兜底。人类的 TSV 里有一行列数不足。
§6.2 构建训练样本的两种方式
方式一:复合物 → 成员集合(做"这个蛋白属于哪个机器"的预测)
# 正样本:真实成员对
# 负样本:随机配对,但要避开"同复合物"与"同家族"
# 关键:负样本必须按"亚基连通分量"排除,否则会造出假负例
方式二:成员 + 计量 → 组装结构(做结构预测的监督)
# 输入:成员 AC 列表 + 化学计量
# 标签:assembly 字段(Heterodimer / Homotrimer / ...)
# 注意:assembly 填充率只有 74.5%,剩下 25.5% 要么排除、要么当未知类
两方式共同的坑:不要把 Description 列(第 9 列)喂进模型。它是长文本,包含了功能、机制、甚至疾病信息——在预测任务里这是标签泄漏。
还有一个容易被忽略的工程决策:一个复合物算一个样本,还是算多条边?
如果任务是"给定一个蛋白,预测它还和谁在一起",正确做法是把每个复合物展开成若干条『成员-伙伴』记录——一个有 5 个成员的复合物展开成 20 条有向对(含正反)。这样样本量从 1,863 涨到几万,模型才学得动。但展开后必须按复合物分组划分训练测试,否则同一个复合物的正例一条在训练、一条在测试,分数会虚高到没有意义。
反过来,如果任务是"预测这个复合物的组装结构",那就必须保持复合物作为一个整体样本,输入是成员集合加计量,输出是一个组装类型标签。此时样本量只有 1,388(有组装类型的那些),必须用强正则化或迁移学习,否则一定过拟合。这两种组织方式不能混用,选错了要么学不到东西,要么学出来的分数是假的。
§6.3 评价指标
不同任务该看什么:
| 任务 | 主指标 | 为什么 |
|---|---|---|
| 成员预测(这个蛋白是否属于该复合物) | PR-AUC(不是 ROC-AUC) | 负例极多(上万个蛋白 vs 几个成员),ROC-AUC 会虚高 |
| 化学计量预测 | MAE + 完全匹配率 | 单独看 MAE 会掩盖"整体偏 1"的系统误差 |
| 组装类型分类 | macro-F1 | 类别极不平衡(Heterodimer 401 vs Homotrimer 37) |
| 结构预测评估 | 链配对准确率 + 计量准确率(分开报) | 配对对了计量错了,和配对错了计量对了,是完全不同的问题 |
必须报告的分层:按 ECO 证据码分层(有实验证据 vs 推断),因为推断的那部分复合物在训练时也是"抄来的",测试时如果混进去会虚高。
§6.4 MLOps:怎么钉住快照
dataset:
source: Complex Portal
ftp_snapshot_date: "2026-01-14" # 目录 mtime
released_complexes_lines: 20580 # 这一行是版本指纹
files:
- complextab/9606.tsv # 4,100,096 B
- complextab/10090.tsv
parser_version: "v1-0-as-missing" # 记录 (0) 的处置方式
(0) 的处置方式必须写进配置。同一份数据,把它当 0 还是当缺失,会让下游的分子量统计差出 30%——这是本篇最容易被复现失败的一处。
§6.5 六个坑点
坑点 1:把 AC(0) 当成"没有这个成员"
- 症状:统计"平均每个复合物几个亚基",得到明显偏低的数。
- 原因:人类 7,676 个成员标注里 2,414 个
(0)是"未测定",不是"零拷贝"。 - 解决:
(0)→None,统计时单独报"计量已知的成员数"。
坑点 2:以为人类有 2,436 个能直接下载
- 症状:下载
9606.tsv只有 1,863 行,对不上官方 2,436。 - 原因:差额 573 在
9606_predicted.tsv,是预测复合物。 - 解决:要"已审编"读
9606.tsv;要"全部人类相关"两个文件都读并加来源标记。
坑点 3:complex-ws/search/* 报 Web service overload
- 症状:任何搜索请求都返回 HTML 的错误页。
- 原因:服务端限流,不是参数错。换编码、换 query 都无效。
- 解决:计数与 facet 走 EBI Search(
ebisearch/ws/rest/complex-portal);全量走 FTP;单条走complex-ws/complex/<CPX>。
坑点 4:stochiometry 字段是字符串
- 症状:
int(p['stochiometry'])抛异常。 - 原因:JSON 里是
"minValue: 1, maxValue: 1",TSV 里是P56567(1)。两个接口的格式不一样。 - 解决:TSV 用正则
^(.+?)\((\d+)\)$;JSON 用正则minValue:\s*(\S+),\s*maxValue:\s*(\S+)。
坑点 5:复合物是嵌套的,直接数成员会漏
- 症状:
CPX-5683统计出 2 个成员,实际是 6 条 Spike + 1 个 ACE2。 - 原因:成员里写的是
CPX-5682(1),指向另一个复合物。 - 解决:递归展开到 UniProt AC 层,并记录展开深度;同时保留"顶层成员数"与"展开后链数"两个统计口径。
坑点 6:Ligand 列的 CHEBI ID 有录入错误
- 症状:按 CHEBI ID 聚合配体,发现
CHEBI:15422同时对应"Chloride ion"与"ATP"。 - 原因:数据录入不一致(氯离子应为 CHEBI:17996)。
- 解决:配体统计按名称字符串而非 ID 去重,或先做一次 ID-名称一致性检查。不要假设官方注释都是自洽的。
§6.6 反模式清单
| 反模式 | 为什么错 | 正确做法 |
|---|---|---|
| 把 Complex Portal 当"完整的人蛋白复合物清单" | 收录优先级由审编团队定,不是穷举 | 当作"高质量样本集",不是全集 |
忽略 ECO 证据码 |
55% 是推断来的,不是实验观测 | 按证据码分层,药物相关研究只看 ECO:0000353 |
| 把 COMplex 数量当"生物学复杂度" | 复合物数反映研究投入 | 不做跨物种"谁更复杂"的推断 |
用 (0) 算分子量 |
会少算上千 Dalton | 当缺失值处理 |
把 Description 喂进模型 |
含功能与疾病信息,是标签泄漏 | 只用成员 + 计量 + 组装 |
| 按复合物随机划分 | 共享亚基导致泄漏 | 按亚基连通分量分组 |
§7 质量评估、DAIMS 与口径交叉核对
§7.1 记录级质量
Complex Portal 没有像 GBIF 那样的逐条质量标记,但它有三个隐含的质量维度:
| 维度 | 可核查字段 | 判读方式 |
|---|---|---|
| 证据强度 | Evidence Code(ECO) |
ECO:0000353 物理互作 > ECO:0005547 系统重建 > ECO:0005546 同源推断 |
| 注释完整度 | 列 11/12/13 是否为空 | 组装、配体、疾病三列的填充率分别是 74.5% / 6.2% / 30.3% |
| 结构可核查性 | 交叉引用里的 wwpdb / emdb |
有 PDB/EMDB 引用的可直接对照结构 |
没有"评分"字段。这意味着做数据筛选时,只能自己按这三个维度组合规则——比如"要实验证据 + 有 PDB 结构 + 有组装类型"三条同时满足,人类侧剩多少,要自己算。
§7.2 抽样声明:本条目数字的边界
本条目所有数字分三类,混用会出错:
| 类别 | 来源 | 适用范围 |
|---|---|---|
| 官方总数 20,580 | EBI Search indexInfos + released_complexes.txt 行数(两者一致) |
全部 27 个物种合计 |
| 物种分布 | 官方 TAXONOMY facet(2026-10-23) |
全部物种,含预测 |
| 字段级统计(如 564 个有疾病) | 本篇对 9606.tsv 的解析 |
只覆盖 1,863 个已审编人类复合物 |
第三类数字不能乘以物种数推广。小鼠的疾病注释填充率很可能与人类不同(小鼠的疾病模型注释更多指向"表型"而非"疾病"),但我们没有统计,所以不给数。
§7.3 三个必须知道的生物学效度问题
第一,复合物存在 ≠ 在所有组织里存在。qsproteome 交叉引用(人类 1,361 条)能部分回答这个问题,但填充率不高。做组织特异药物设计时,不能假设"数据库里有 = 肝脏里有"。
第二,"成员清单"是静态的,复合物是动态的。同一个蛋白在不同条件下可以属于不同复合物,Complex Portal 把它们记成多个独立记录。这正确,但容易被读成"同时属于多个"。
第三,化学计量是"典型状态"而不是"每个细胞都一样"。超分子组装(如核糖体的 40/80 拷贝)在不同细胞周期阶段差异巨大。把计量当固定值做定量模型,会系统性高估或低估。
§7.4 偏倚清单(可核查)
| 偏倚 | 证据 | 影响 |
|---|---|---|
| 研究热度偏倚 | 人类 2,436 vs 拟南芥 228 | 冷门物种/类群的复合物基本空白 |
| 审编优先级偏倚 | 核糖体、蛋白酶体、转录因子等"经典"机器覆盖好 | 新发现的、瞬时组装的复合物覆盖差 |
| 证据类型偏倚 | 人类 45% 有实验证据,55% 是推断 | 推断的部分可能与实际不符 |
| 物种偏倚 | 27 个物种中 4 个占 19.7% | 跨物种比较的样本量极不均衡 |
| 字段填充偏倚 | 配体仅 6.2%、疾病 30.3% | “没有注释"不等于"没有功能” |
§7.5 数据完整性核查表
动手前的五分钟检查:
- [ ]
released_complexes.txt行数 = 你预期的总数?(2026-10-23 是 20,580) - [ ] 人类读的是
9606.tsv还是9606_predicted.tsv?还是两个都要? - [ ] 成员解析是否把
(0)与"无括号"都处理成None? - [ ] 是否处理了嵌套的
CPX-xxx成员? - [ ] TSV 是否用
csv.reader(delimiter='\t')而非split('\t')? - [ ] 列数兜底了吗?(人类文件有 1 行只有 6 列)
- [ ] 是否需要按
ECO过滤到"仅实验证据"?
§7.6 DAIMS 24 项逐项评分
| # | 维度 | 判定 | 说明 |
|---|---|---|---|
| 1 | 数据集有唯一标识 | ✅ | CPX-<数字>,全局唯一 |
| 2 | 有版本信息 | ⚠️ | 只有 current 目录 + mtime,无显式版本号 |
| 3 | 有许可声明 | ✅ | CC BY 4.0 |
| 4 | 有引用规范 | ✅ | 官网给出 Complex Portal 论文引用 |
| 5 | 有数据来源说明 | ✅ | Source 列 + PubMed 交叉引用 |
| 6 | 有采集方法说明 | ✅ | 人工审编 + ECO 证据码 |
| 7 | 有预处理说明 | ⚠️ | 无显式预处理文档,需看论文 |
| 8 | 有标注规范 | ✅ | PSI-MI + ECO |
| 9 | 有标注者信息 | ❌ | 无逐条标注者记录 |
| 10 | 有标注一致性 | ❌ | 无 inter-annotator agreement 数据 |
| 11 | 缺失值有标记 | ⚠️ | (0) 是隐式标记,- 是显式空,语义不统一 |
| 12 | 有数据类型定义 | ✅ | PSI-MI 受控词表 |
| 13 | 有单位说明 | ✅ | 化学计量为拷贝数(无量纲) |
| 14 | 有样本量说明 | ✅ | 官方索引 + released 清单 |
| 15 | 有群体描述 | ✅ | 27 个物种的分布可查 |
| 16 | 有划分建议 | ❌ | 不提供 train/val/test |
| 17 | 有基线 | ❌ | 无 |
| 18 | 有评价指标 | ❌ | 无 |
| 19 | 有伦理审查 | ⚠️ | 不适用个体数据,但无显式声明 |
| 20 | 有隐私保护 | ✅ | 不涉及 |
| 21 | 有可复现性 | ✅ | FTP 全量 + 260 KB 指纹文件,这是强项 |
| 22 | 有更新机制 | ✅ | 随 IntAct 月度发布 |
| 23 | 有联系方式 | ✅ | IntAct/Complex Portal 帮助邮箱 |
| 24 | 有多语言/多格式 | ✅ | TSV + PSI-MI XML + JSON WS |
得分:16 项 ✅ + 6 项 ⚠️ + 6 项 ❌ → 16 + 3.0 = 19.0 / 24 = 79.2%
这个分数在已收条目里偏高(GBIF 58.3%、BV-BRC 58.3%、IMGT 52.1%、Alliance 47.9%、MGI 45.8%、ENA 43.8%)。主要加分项是"可复现性"与"标注规范"——它有 PSI-MI 标准、有 260 KB 的指纹文件、有 FTP 全量。主要失分项是"没有基线/指标/划分"——它是个参考目录,不是为机器学习准备的。
§7.7 口径交叉核对矩阵(不是模型性能验证)
同一个"人类复合物有多少",三个来源三个数:
| 来源 | 数值 | 口径 |
|---|---|---|
EBI Search indexInfos 总数 |
20,580 | 全部物种合计 |
released_complexes.txt 行数 |
20,580 | 全部物种合计(与上一致) |
官方 TAXONOMY facet:人类 |
2,436 | 含预测复合物 |
9606.tsv 实际行数 |
1,863 | 仅已审编 |
| 差额 | 573 | 在 9606_predicted.tsv |
9606.tsv 中的复合物按 facet 反查 |
约 1,863 | 说明 facet 把两类合并了 |
另一组:各物种 facet 之和 vs 总数
facet 的 27 个物种相加 = 5,117,而总数是 20,580,差 15,463。
这不是错误。原因:一个复合物可以横跨多个物种(如"人 Spike - 人 ACE2"这类跨物种复合物),facet 计数是"该物种出现的记录数",允许多重计数。另外 query=complex 的 hitCount 也是 5,117,说明 facet 统计的基数就是"描述里含 complex 的那 5,117 条",不是全部 20,580 条。
这个发现很重要,但不要过度解读。我们有三个独立的数:20,580(索引总数)、5,117(
query=complex命中)、以及 facet 合计 5,117(与前者一致)。说明官方的 facet 是建立在一次特定查询之上的,不是全库聚合。要做全库物种分布,应该直接扫 FTP 的 complextab 目录按文件统计,而不是用 facet。
第三组:FTP 快照 vs 索引时间的差
| 项 | 时间 |
|---|---|
FTP current/ 目录 mtime |
2026-01-14 |
| EBI Search 索引更新时间 | 2026-08-06 |
| 本篇查询日 | 2026-10-23 |
7 个月差意味着:本条目引用的字段级统计(基于 2026-01-14 的 TSV)与官方总数(2026-08-06 索引)不在同一个时点。做复现实验时,把 TSV 存本地,并把行数写进配置。
§8 生态位与相邻资源
§8.1 Complex Portal 在网络里的位置
序列层:UniProt(#37)
↓
互作层:IntAct(#582,实验)/ STRING(#414,打分)
↓
组装层:Complex Portal(本条) ←── 缺的就是这一层
↓
通路层:Reactome / Rhea
↓
结构层:PDB(#43)/ EMDB
§8.2 与本站已收条目的关系
| 条目 | 关系 |
|---|---|
| IntAct(#582) | 同团队、同基础设施。IntAct 给二元实验互作,Complex Portal 给组装。两者用同一个 Web Service 域名(ebi.ac.uk/intact/) |
| STRING(#414) | 互补。STRING 覆盖广(数千物种、几十亿边)但无化学计量;Complex Portal 窄但深 |
| PDB(#43) | 下层结构。Complex Portal 的 wwpdb 引用(人类 2,511 条)可直接跳到 PDB |
| UniProt(#37) | 成员标识的锚点。Complex Portal 的成员全部用 UniProt AC |
| MGI(#126) | 小鼠侧互补。MGI 给基因-表型,Complex Portal 给小鼠复合物(697 个)的组装 |
| BV-BRC(#127) | 病原侧互补。BV-BRC 给病原基因组与耐药,Complex Portal 给病原蛋白复合物(细菌 317+2,病毒 54) |
| Reactome | 上层通路。Complex Portal 的复合物常作为 Reactome 反应的催化剂或参与者 |
§8.3 为什么一个"医学数据集站"要收蛋白复合物
因为药物作用的对象,绝大多数是复合物,不是单个蛋白。
- GABA-A 受体是五聚体(2α + 2β + 1γ)。苯二氮䓬类只结合在 α 与 γ 之间的界面——这个界面在单体上根本不存在。
- 核糖体是 80 个蛋白 + 4 条 rRNA 的超大机器。氨基糖苷类抗生素结合的是 rRNA 的特定构象,这个构象由整个复合物维持。
- 蛋白酶体是 28 个亚基的桶状结构。硼替佐米结合的是 β5 亚基的活性位点,但这个位点只有在组装完成的桶里才具有正确的构象。
这三类药物(镇静、抗生素、抗肿瘤)的共同点是:靶点的定义必须包含"组装状态"。只有单体结构的数据库,无法支撑这类靶点的描述。
而本站已有的蛋白注释层(UniProt、STRING、IntAct、PDB)全都是"蛋白视角"或"边视角"。Complex Portal 是唯一一个"机器视角"的。这就是它必须被收录的理由。
§9 许可、伦理与合规
§9.1 许可结构
Complex Portal 的数据采用 CC BY 4.0。这意味着:
- ✅ 可商用
- ✅ 可修改、可再分发
- ✅ 可训练模型
- ⚠️ 必须署名(“Complex Portal, EMBL-EBI”)
推荐引用(官网给出的格式):
Complex Portal: a resource for protein complexes. Giurgiu M, et al. Nucleic Acids Research.
FTP 文件没有单独的许可文件,许可继承自网站声明。做商业产品时,建议在文档里保留"数据来源:Complex Portal (EMBL-EBI), CC BY 4.0"这一行。
§9.2 与 PDB 结构数据的许可差异
要特别注意:Complex Portal 的数据是 CC BY 4.0,但它交叉引用的 PDB 结构有自己的许可(多数是 CC0,但部分结构有额外限制)。如果你从 Complex Portal 跳到 PDB 下载结构文件,那部分的许可要单独看。
同样,qsproteome、reactome、humap 这些交叉引用指向的外部资源各有各的许可。Complex Portal 的 CC BY 只覆盖它自己的注释,不覆盖它指向的东西。
§9.3 患者数据的边界
Complex Portal 不含任何患者数据。它的"疾病"字段指向的是疾病本体(MONDO、MIM)与疾病描述文本,不是患者个体。
但有一点需注意:疾病注释里可能包含具体的突变位点描述(如"BRG1 的某个残基突变导致 Coffin-Siris 综合征")。这些是文献公开发表的信息,不构成隐私问题,但在某些司法辖区的遗传信息保护法规下,聚合大量这类信息需要谨慎评估。
§9.4 引用与致谢的实操
给三类用户的具体建议:
| 用途 | 建议的致谢写法 |
|---|---|
| 学术论文 | 引用 Complex Portal 主论文 + 在 Methods 里写明"复合物注释来自 Complex Portal(访问日期 YYYY-MM-DD)" |
| 商业产品 | 在数据来源页写明"Protein complex annotations: Complex Portal, EMBL-EBI, CC BY 4.0" |
| 模型训练 | 在 model card 的数据来源一节列出,并说明使用了哪个快照(released_complexes.txt 行数) |
§9.5 引用规范
@article{complexportal,
title = {Complex Portal: a resource for protein complexes},
author = {Giurgiu, M. and others},
journal = {Nucleic Acids Research},
note = {EMBL-EBI; accessed 2026-10-23; 20,580 complexes}
}
§10 复用边界与跨条目协作手册
§10.1 决策树:什么时候该用 Complex Portal
你的问题是"这个蛋白和那个蛋白有没有相互作用"?
├── 是 → 用 STRING(#414)或 IntAct(#582),不要用 Complex Portal
└── 否 → 继续
你的问题是"这个复合物由哪些蛋白组成、各几个"?
├── 是 → 用 Complex Portal(本条)
└── 否 → 继续
你的问题是"这批蛋白属于同一个功能模块吗"?
├── 是 → 先用 Complex Portal 查是否有对应复合物;没有则退回 STRING 的聚类
└── 否 → 继续
你的问题是"这个复合物长什么样"?
├── 是 → Complex Portal 查 wwpdb 交叉引用 → PDB(#43)
└── 否 → 用 Reactome 查通路位置
§10.2 与 IntAct 的配对(同源场景)
Complex Portal 与 IntAct 是同一套基础设施的两个视图:
- IntAct 存的是"边":
A — interacts-with → B,带实验方法与证据码。 - Complex Portal 存的是"团":
{A×2, B×1, C×2},带组装与功能。
联合使用的正确姿势:
- 从 Complex Portal 拿到复合物的成员清单。
- 回到 IntAct 查这些成员之间的所有二元互作(不只是复合物内的)。
- 差异部分就是"可能有但未被认定为复合物一部分"的互作——这是发现新复合物候选的入口。
注意别做反了:不要从 IntAct 的边去"推断"复合物,因为边不等于团。A-B、B-C、C-A 三条边看起来像三聚体,但也可能是三个独立的二元事件。
§10.3 与 STRING 的分工(打分场景)
| 场景 | 用哪个 |
|---|---|
| 要化学计量 | Complex Portal(唯一) |
| 要物种覆盖广 | STRING(数千物种) |
| 要置信度分数 | STRING |
| 要实验证据码 | IntAct / Complex Portal |
| 要全基因组规模的边 | STRING |
| 要高质量小样本 | Complex Portal |
联合使用:用 STRING 做初筛(宽),用 Complex Portal 做验证(准)。反过来不行——Complex Portal 太小,做初筛会漏掉大量真实互作。
§10.4 许可梯度:与本站其他库的对照
| 库 | 许可 | 商用 | 需署名 |
|---|---|---|---|
| Complex Portal | CC BY 4.0 | ✅ | ✅ |
| PDB(#43) | CC0(多数) | ✅ | ❌ |
| UniProt(#37) | CC BY 4.0 | ✅ | ✅ |
| STRING(#414) | CC BY 4.0 | ✅ | ✅ |
| IntAct(#582) | CC BY 4.0 | ✅ | ✅ |
| GBIF(#134) | CC0 11.9% / CC BY 71.2% / NC 16.9% | ⚠️ 部分 | ⚠️ |
| MGI(#126) | 自定义(学术免费) | ⚠️ 需确认 | ✅ |
§10.5 三个"不要做"
- 不要把 Complex Portal 当"完整的人类蛋白复合物清单"。它是高质量样本集,不是全集。
- 不要用
(0)算分子量或成员数。 - 不要忽略
ECO证据码就下"这个复合物存在"的结论——55% 是推断。
§10.6 一句话总结
Complex Portal 是唯一一个告诉你"这个蛋白机器由几个零件组成"的公开目录;20,580 个复合物、27 个物种、人类 1,863 个已审编——规模不大,但化学计量这一列,别处没有。
附录 A:本篇数字速查
| 项 | 数值 | 来源 |
|---|---|---|
| 复合物总数 | 20,580 | EBI Search indexInfos + released_complexes.txt |
| 覆盖物种 | 27 | TAXONOMY facet total |
| 人类 | 2,436 | TAXONOMY facet |
| 人类已审编(TSV) | 1,863 | 9606.tsv |
| 人类预测 | 573 | 2,436 − 1,863 |
| 小鼠 | 697 | facet |
| 酿酒酵母 | 612 | facet |
| 大肠杆菌 K-12 | 317 | facet |
| 果蝇 | 275 | facet |
| 拟南芥 | 228 | facet |
| 线虫 | 145 | facet |
| 裂殖酵母 | 143 | facet |
| 大鼠 | 114 | facet |
| SARS-CoV-2 | 21 | facet |
| 人类成员标注总数 | 7,676 | 9606.tsv 解析 |
| 其中计量=1 | 3,526 | 同上 |
| 其中计量=0(未测定) | 2,414(31.4%) | 同上 |
| 其中计量=2 | 1,303 | 同上 |
| 人类复合物成员数中位 | 2(680 个是二成员) | 同上 |
| 最大成员复合物 | CPX-5226(39S 线粒体大亚基,54 成员) | 同上 |
| 人类有疾病注释 | 564(30.3%) | 同上 |
| 人类有配体 | 116(6.2%) | 同上 |
| 人类有组装类型 | 1,388(74.5%) | 同上 |
| 人类 ECO:0000353(实验) | 839(45.0%) | 同上 |
| 人类 ECO:0005547(系统重建) | 713(38.3%) | 同上 |
| 人类 ECO:0005546(同源推断) | 238(12.8%) | 同上 |
Human wwpdb 交叉引用 |
2,511 | 同上 |
Human pubmed 交叉引用 |
6,268 | 同上 |
Human qsproteome 交叉引用 |
1,361 | 同上 |
| FTP 快照时间 | 2026-01-14 | 目录 mtime |
| 索引更新时间 | 2026-08-06 | EBI Search |
9606.tsv 大小 |
4,100,096 B | FTP |
| DAIMS | 19.0 / 24 = 79.2% | §7.6 |
附录 B:五个可复制的查询
一、拿官方总数
curl -s "https://www.ebi.ac.uk/ebisearch/ws/rest/complex-portal?format=json&size=1" | jq '.hitCount'
二、拿物种 facet(全 27 个)
curl -s -G "https://www.ebi.ac.uk/ebisearch/ws/rest/complex-portal" \
--data-urlencode "query=complex" --data-urlencode "format=json" \
--data-urlencode "size=1" --data-urlencode "facetcount=40" \
| jq '.facets[] | select(.id=="TAXONOMY") | .facetValues[] | "\(.label)\t\(.count)"'
三、取单条复合物完整 JSON
curl -s "https://www.ebi.ac.uk/intact/complex-ws/complex/CPX-5683?format=json" \
| jq '{name, species, participants: [.participants[] | {id: .identifier, stoch: .stochiometry}], assembly: .complexAssemblies, eco: .evidenceType.description}'
四、拉人类 TSV 并统计"实验证据"比例
curl -sO "https://ftp.ebi.ac.uk/pub/databases/intact/complex/current/complextab/9606.tsv"
awk -F'\t' 'NR>1 && $1 ~ /^CPX/ {split($6,a,"("); c[a[1]]++} END {for (k in c) print c[k], k}' 9606.tsv | sort -rn
五、检查人类 TSV 里的成员计量分布
awk -F'\t' 'NR>1 && $1 ~ /^CPX/ {n=split($5,m,"|"); for(i=1;i<=n;i++){ if(match(m[i],/\(([0-9]+)\)$/,r)) print r[1]; else print "NA" }}' 9606.tsv \
| sort | uniq -c | sort -rn | head -15
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- intact — 共享标签:基因组学与多组学 / 药物发现与化学
- msigdb — 共享标签:基因组学与多组学 / 药物发现与化学
- lipid-maps — 共享标签:基因组学与多组学 / 药物发现与化学
- qmugs — 共享标签:药物发现与化学 / 多模态
- rnacentral — 共享标签:基因组学与多组学 / 多模态
- rfam — 共享标签:基因组学与多组学 / 多模态
- alphafold — 共享标签:基因组学与多组学 / 药物发现与化学
- disgenet — 共享标签:基因组学与多组学 / 药物发现与化学
- open-targets — 共享标签:基因组学与多组学 / 药物发现与化学
- alphafold — 共享标签:基因组学与多组学 / 药物发现与化学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

