互操作性优先的质谱数据仓 — MassIVE 与它的四个平级伙伴

两万余个数据集 · 一点一五 PB · CC0

来源 https://massive.ucsd.edu/发布时间: 2026-10-26最后更新: 2026-10-26 阅读 7
互操作性优先的质谱数据仓 — MassIVE 与它的四个平级伙伴

信息速览

数据集名称互操作性优先的质谱数据仓 — MassIVE 与它的四个平级伙伴
数据类型元数据,原始数据链接,补充材料,多组学
规模不适用(这是数据仓,不是一个队列;人类样本分散在各数据集内,仓层面无患者计数)
接入方式https://massive.ucsd.edu/
AI 就绪度

MassIVE 的全称是 Mass Spectrometry Interactive Virtual Environment,直译过来是「质谱交互式虚拟环境」。它由美国加州大学圣迭戈分校的计算质谱中心(CCMS)运营,是 ProteomeXchange 联盟的六个成员库之一,与英国的 PRIDE、日本的 jPOST、中国的 iProX 处在同一个层级。它接收全球实验室直接上传的质谱原始文件与鉴定结果,给出一个 MSV 登录号,并在需要时再向联盟换取一个 PXD 登录号。截至 2026 年 10 月,官方统计口径显示它对外公开两万余个数据集、一千三百余万个文件、总容量约一点一五 PB。

它值得单独写一篇,是因为它解决的是质谱数据里最难缠的那一层麻烦:文件极大、格式极碎、元数据极不一致。同一批样品,不同厂商的 raw 格式完全不同,转换到开放格式 mzML 时不同工具链还会给出不同的谱图计数。MassIVE 的回答是把互操作性摆在第一位——进来时宽松,出去时统一。

代价也在这里。宽松接收意味着质量参差,统一出口意味着口径可能与你的预期错位。下文会把这两面都说清楚,包括哪些人应该用它、哪些人一开始就不该靠近。一屏速览见下表。

维度 内容
官方全称 Mass Spectrometry Interactive Virtual Environment
运营机构 加州大学圣迭戈分校计算质谱中心(UCSD CCMS)
联盟身份 ProteomeXchange 六大成员库之一,与 PRIDE、jPOST、iProX、PeptideAtlas、Panorama Public 平级
公开数据集 两万余个(官方统计接口,2026-10-26 查询)
文件数 一千三百余万个
总容量 约一点一五 PB
谱图总量 百亿量级(官方统计口径,含全部公开数据集)
PSM 总量 十七亿量级
编号体系 本地 MSV 六位流水号;联盟 PXD 六位编号;再分析用 RPXD
提交类型 Complete(带鉴定与元数据)与 Partial(仅原始谱图)
许可 数据集级默认 CC0 1.0 Universal
主要格式 厂商 raw、mzML、MGF、mzIdentML、mzTab、TSV
访问方式 网页检索、JSON 检索接口、FTP 目录、MassIVE.quant 工作区
资助来源 美国国立卫生研究院 NIGMS(R24 项目)
典型用途 谱图语料构建、跨库再分析、分子网络、方法基准
最不适合 需要策展级临床标注与样本级统计功效的课题

§1 它要解决的具体麻烦

1.1 质谱文件的天生困境

质谱仪产出的是物理信号的时间序列与质荷比序列,一个晚上的采集就能生成几个 GB 到几十个 GB 的二进制文件。这份二进制由仪器厂商的软件生成,格式未公开,只有厂商自己的工具能完整读取。Thermo 的 .raw 与 Bruker 的 .d 目录在字节层面毫无共同之处,SCIEX 的 .wiff 又是另一套。对同一份样品,实验者换一台仪器,文件的内部结构就换了一次。

开放格式 mzML 是这层困境的标准答案。它用 XML 描述谱图,把每个 MS1 与 MS2 谱的保留时间、质荷比、强度数组、前体离子信息都写成可解析的节点,并借助 zlib 压缩保持文件尺寸可控。问题是,从厂商 raw 到 mzML 的转换不是无损的等价映射,而是一次有损的重新编码:不同工具、不同参数会决定是否保留原始二进制数组、是否重新计算质心、是否保留噪声峰。同一份 raw 用两种工具转换,得到的谱图数可能不同,前体离子的选取也可能不同。

MassIVE 的起点就是这层混乱。它从 2012 年前后由 CCMS 团队建立,最早的动因是让质谱数据能够像其他组学数据一样被检索、被复用。它采取的策略与同行不太一样:不要求提交者提供某一套固定格式的全套文件,而是自己承担转换——把各家 raw 统一转成 mzML,把各家鉴定结果统一转成 mzIdentML 与 MGF。这一层转换是它对使用者最大的善意,也是官方口径与文件实际内容之间出现缝隙的根源。

1.2 三条常见的错误期待

第一条错误期待是把它当成「整理好的定量表」。它不是。它存的是提交者递交的原始谱图与结果文件,没有做过跨数据集的统一重搜索,也没有把蛋白定量矩阵拉齐到同一套基因符号。想直接取一张「样本 × 蛋白」的表,你会发现自己得先做一遍重搜索。

第二条错误期待是把它当成「PRIDE 的美国镜像」。这也是最常被写错的。两者是平级成员,各自有独立的接收流程、独立的本地编号、独立的存储,唯一的共同点是都往 ProteomeXchange 报一份元数据、都从联盟拿 PXD 号。一个数据集在 MassIVE 上有 MSV 号,不代表它在 PRIDE 上也有一份。

第三条错误期待是把它当成「只有蛋白质组学」。它的谱图范围比名字宽,分子网络相关的非蛋白谱图集合也在其中,化学蛋白组学、代谢物鉴定、天然产物发现都能在仓里找到痕迹。宽度带来了覆盖面,也带来了元数据标准的不统一——蛋白数据常用的字段,在代谢数据里可能是空的。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
拿到某篇论文配套的原始谱图 按 PXD 或 MSV 定位,FTP 目录直下 够,但目录里常同时有 raw 与 mzML,要挑
一批可用的 mzML 语料做谱图模型 开放格式副本,跨厂商仪器都有 够,但需按谱图计数与文件数核对,剔除空数据集
带肽段标签的训练对 PSM 计数与鉴定结果 部分够,不少数据集 PSM 为零
跨数据集的统一定量矩阵 MassIVE.quant 工作区里的分支 部分够,覆盖的只是带定量再分析的那一小部分
样本级的临床变量 提交者自填的元数据与补充表 基本给不到,字段稀疏且非受控
从原始字节复现论文表格 原始文件加鉴定结果 够,但需自备搜索与统计环境
标注质量可信的基准集 各提交者自己的流程 给不到,无统一质控等级

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
读到一篇蛋白组论文,想核对谱图证据 按 PXD 找到对应 MSV,取 mzML 与鉴定结果 先用结果文件核对表格数字,再决定要不要重搜 raw
要训练一个碎片离子强度预测模型 提供跨仪器、跨实验室的大规模谱图 按 PSM 计数过半的数据集起筛,再按仪器分层
在做跨库外部验证,训练用了 PRIDE 提供不同转换链的独立通道 选同疾病域、不同仪器的 MSV 数据集作验证
想复算一套定量结果 MassIVE.quant 的分支工作区 从工作区的中间文件起步,不要从 raw 重建
需要合规的临床队列 不提供,仓层面无患者队列 转向带受控访问机制的队列型资源
手上只有半套鉴定结果想归档 可以走 Partial 提交,先占号 明确标注 Partial,避免下游误判为完整集
要找某个天然产物的参考谱 分子网络相关集合可检索 用谱图相似性检索而非序列检索

1.5 一句话判断

如果你要的是「一份能直接进模型的干净表格」,它不适合你;如果你要的是「一份覆盖极广、许可极宽松、需要你自己动手整理的原始语料」,它是目前最省事的几个起点之一。

1.6 不适合谁:四条边界

第一条,需要样本级统计功效的临床研究。 MassIVE 是数据仓,不是队列。人类样本散落在成千上万个数据集里,彼此的实验设计、仪器、富集策略都不同,仓层面没有患者计数,也没有统一的临床变量字典。想回答「某蛋白在某病里是否上调」,你得自己挑数据集、自己做批次校正,而这一步的难度往往超过建模本身。

第二条,需要策展级标注质量的基准构建者。 这里的元数据由提交者自填,审核相对宽松。同一个物种字段,可能是「Homo sapiens」,可能是 NCBI 分类号,也可能是一串以井号连接的多个物种名。想拿它做金标准评测集,你需要自己先把标注修一遍,而修标注的成本与自建数据集相差不大。

第三条,只要一张结构化定量表的下游使用者。 如果你的管线只能吃「样本 × 蛋白 × 丰度」的矩阵,那么直接对接 MassIVE 会碰到大量格式分支。它更适合作为上游语料源,而不是最终交付形态。

第四条,带宽与算力预算极紧的小团队。 单个数据集动辄几十 GB,仓里既有原始 raw 又有开放副本,全量拉取不现实。只取 mzML、只取需要的子目录、只取带 PSM 的集合,是必须提前设计的取数策略。

§2 数据构成与规格

2.1 仓的四个层级

理解 MassIVE 的组织方式,最好按四个层级看:仓、数据集、文件、记录。仓是整体统计口径的容器;数据集是最小可引用单元,有唯一的 MSV 号;文件是实际下载的粒度,一个数据集内通常有几十到几百个文件;记录是结果文件内部的行,一条 PSM 就是一行。

第一层与第二层之间是编号映射,第二层与第三层之间是目录映射,第三层与第四层之间是格式映射。三层映射各有各的坑,后文依次展开。

2.2 字段字典

官方检索接口返回的 JSON 每行一个数据集,字段数量在四十个上下。下表列出与取数决策直接相关的字段,其余字段多是派生计数或内部状态。

字段 类型 含义 常见取值与陷阱
dataset 字符串 本地登录号 形如 MSV 加六位数字,是文件目录名
px 字符串 联盟登录号 可为空,早期数据集或未走联盟通道的为空
status 字符串 任务状态 多为 DONE,未完成的提交可能是空壳
type 字符串 提交类型 Complete 或 Partial,决定是否带鉴定
title 字符串 数据集标题 自由文本,常带内部项目代号
description 字符串 描述 常被填成论文引文,而非实验设计
species 字符串 物种原始值 可能是 NEWT 编号,可能是空
species_resolved 字符串 物种映射结果 多物种时以井号串联,可能极长
instrument 字符串 仪器原始值 多为 PSI-MS 受控词编号
instrument_resolved 字符串 仪器名称 映射后的人类可读名,可能为空
modification 字符串 修饰 分号分隔的 MOD 编号列表
modification_resolved 字符串 修饰释义 常被截断成一句话
file_count 整数 文件数 含 raw 与开放副本,会重复计数
fileSizeGB 浮点 体积 以 GB 为单位,非字节
spectra 整数 谱图数 汇总口径,与逐文件相加可能不等
psms 整数 肽段谱匹配数 无鉴定时为零
peptides 整数 肽段数 唯一肽段计数
proteins 整数 蛋白数 报告蛋白数,非重映射后
total_proteins 整数 重映射后蛋白数 与上者口径不同
annotations 键值列表 附加标注 px_accession 就在这里,与 px 字段可能冗余
pis 列表 主要研究者 姓名常有,单位与国家常空
publications 列表 关联论文 含 PMID 与 PMCID,可回跳文献
reanalyses 整数 再分析分支数 大于零说明有可复算工作区
quant_reanalyses 整数 定量再分析数 大于零说明进了 MassIVE.quant
privacy 字符串 可见性 Public 或私有,私有集不在公开统计内
createdMillis 整数 创建时间戳 与 create_time 字段冗余

2.3 一条记录的完整解剖

下面这条记录取自一次单数据集查询,用于展示字段在真实返回里的样子。为了让结构可读,值被截短,长文本以省略处理。

{
  "dataset": "MSV000078555",
  "px": "PXD001092",
  "status": "DONE",
  "type": "Partial",
  "title": "Extracellular Matrix Signatures of Human Primary Metastatic Colon Cancers and their Liver Metastases",
  "species": "NEWT:9606",
  "species_resolved": "Homo sapiens",
  "instrument": "MS:1000449",
  "instrument_resolved": "LTQ Orbitrap",
  "modification": "MOD:00397;MOD:00398;MOD:01024;MOD:00400",
  "file_count": 355,
  "fileSizeGB": 35.76,
  "spectra": 1866930,
  "psms": 0,
  "peptides": 0,
  "proteins": 0,
  "reanalyses": 0,
  "quant_reanalyses": 0,
  "privacy": "Public",
  "annotations": [{"name": "px_accession", "value": "PXD001092"}],
  "publications": [{"pmid": "25037231", "pmcid": "PMC4223627", "title": "Extracellular matrix signatures of human primary metastatic colon cancers and their metastases to liver.", "citation": "BMC Cancer. Epub 2014 Jul 18."}]
}

这份记录值得逐项读。它的文件数是三百五十五,体积约三十六 GB,谱图数接近一百八十七万,可是 PSM、肽段、蛋白三个计数全是零。原因在 submit 类型:它是 Partial,提交者只交了谱图与部分结果,仓里没有可汇总的鉴定。也就是说,它的谱图可以用,标签得自己造。

再看物种与仪器两个字段。原始值是受控词表编号(NEWT 与 PSI-MS),映射后的可读名才是给人看的。这层映射看似贴心,实际使用时仍需小心:映射失败时可读名为空,只留一个你未必认识的编号。

2.4 编号体系的三个前缀

前缀 全称 分配者 用途 常见误用
MSV MassIVE 本地号 MassIVE 目录名、文件路径、页面 URL 当成联盟号在论文里引用
PXD ProteomeXchange 号 联盟 论文数据可用性声明 当成下载路径去猜目录
RPXD 再分析号 联盟 标记再分析版本 当成新原始数据引用

三者的关系是:一个 MSV 至多对应一个 PXD,一个 PXD 在 MassIVE 内至多对应一个 MSV,但同一 PXD 在别的成员库可能有另一份镜像或另一段历史。RPXD 属于再分析层,不是新采集的数据,把它当原始数据引用会造成误引。

2.5 文件组织

一个 MassIVE 数据集的目录结构大致如下,路径中的方括号是变量占位。

/data/massive-v01/
└── MSV000078555/
    ├── raw/
    │   ├── D110801_MGH_446_OGE01_rafkt_ft8_cc_01.RAW
    │   └── D110801_MGH_446_OGE01_rafkt_ft8_cc_01.mzXML
    ├── peak/
    │   └── D110801_MGH_446_OGE01_rafkt_ft8_cc_01.mgf
    ├── result/
    │   └── search_results.mzid
    └── supplementary/
        ├── Methods.docx
        └── SupplementaryTable.xlsx

注意 raw 目录里 raw 与 mzXML 并列。这是互操作性优先的直接体现:提交者不必自己转换,仓方替你转,但原件也留着。副作用是文件数翻倍,按文件数估算工作量会偏高。

2.6 同类的字段差异

字段 MassIVE PRIDE jPOST iProX
本地编号 MSV 无独立本地号,直接用 PXD JPST IPX
联盟编号 PXD,可缺 PXD PXD PXD
提交类型区分 Complete / Partial 无显式二分 无显式二分 无显式二分
仪器字段 受控编号加映射名 受控词表名 受控词表名 自由文本较多
物种字段 编号加映射名,多物种井号串联 受控词表 受控词表 自由文本较多
再分析层 MassIVE.quant 分支 quantms 产出外挂 少量 少量
谱图在线寻址 支持 USI 检索入口 支持 USI 支持 USI 部分支持

§3 互操作性优先:它的身份

3.1 名字里的三个词

名字里有三个词值得拆开。「Interactive」指的是它不是一个只读的静态档案,而是一个可以提交任务、运行工作流、发起再分析的环境;「Virtual」指的是它的计算与存储在物理上分散,用户看到的却是一个统一入口;「Environment」而不是「Database」,暗示它更接近一个工作平台,而非一个目录柜。

这三点合起来决定了它的自我定位:它不只是一个存数据的地方,还是一个在浏览器里可以直接对数据做事的空间。这也是它把「文件列表」做成可浏览、可筛选、可批量选择的界面的原因。

3.2 宽松接收是有意的设计

对提交者的门槛低到什么程度?一个研究者可以只上传原始谱图,不填物种,不填仪器,不交鉴定结果,只给一个标题,就能拿到 MSV 号。这种宽松不是疏忽,而是策略:质谱数据的最大问题不是污染,而是流失——数据躺在实验室硬盘里,没人能复用。把门槛降到地板,先让数据进来,是提高留存率最直接的办法。

相对地,鉴定的完整性由提交渠道自带的检查来约束:如果研究者走的是带 PXD 号的提交通道,联盟层面的检查会要求一定的元数据完整度;如果只是拿一个 MSV 号存档,要求就低得多。这条分界线,是理解仓内数据质量分布的关键。

3.3 与 PRIDE 的平级关系

两者常被写成上下游,这是错的。准确的说法是:它们都是 ProteomeXchange 的成员,各自接收提交,各自本地存档,各自分配本地编号,然后各自向联盟报一份元数据换取 PXD 号。谁也不是谁的输入,谁也不是谁的镜像。

真正的差别在运营地域与运营风格。PRIDE 由欧洲生物信息学研究所运营,接收流程更规整,元数据校验更严格;MassIVE 由美国一所大学的计算中心运营,规模小得多,人员与预算密度低,因此选择了更宽松的接收门槛与更自动化的转换流程。这个差别不是优劣,而是资源约束下的取舍。

对比项 MassIVE PRIDE
运营主体 UCSD 计算质谱中心 EMBL-EBI
规模量级 两万余数据集 五万量级数据集
接收门槛 低,Partial 亦可 较高,元数据校验多
本地编号 MSV 无,直接用 PXD
转换责任 仓方统一转 mzML/MGF 提交者或管线转换
再分析层 MassIVE.quant 分支 quantms 等外挂流程
联盟份额 个位数百分比 七成以上

3.4 一次转换的代价

仓方替提交者做转换,是靠得住的做法,但转换本身不是免费的。转换器读的是厂商私有二进制,遇到旧版本仪器、异常中断的采集、非标准扫描模式,可能报错,也可能静默丢弃部分谱图。官方页面没有给出转换成功率的数字,这里不作推测。

对取数的人来说,可操作的结论是:如果你需要精确的谱图计数,以 mzML 文件内部的 spectrum 节点数为准,不要用数据集页面汇总的数字。前者可核对,后者不可核对。这一点在 §4.3 的案例里有具体体现。

3.5 仪器厂商与格式的对应

理解格式碎片化,最好从仪器厂商这条线看。质谱仪市场由少数几家主导,每家的私有格式都有各自的内部结构,公开程度不一,转换工具的支持度也不同。

厂商阵营 典型私有格式 特点 常见转换路径 转换风险
高分辨轨道阱类 单文件二进制 文件体积大,扫描速率高 官方工具或开源解析器转 mzML 老版本文件偶有解析失败
飞行时间类 目录或单文件 含大量元数据文件 厂商工具转 mzML 元数据字段可能丢失
三重四极杆类 单文件 靶向采集,谱图少而精 厂商工具转 mzML 或保留原件 定量通道信息难完整保留
离子阱类 单文件 早期主流,存量数据多 老工具链转 mzXML 或 mzML 较老的转换器已停止维护
新式离子淌度类 单文件 含淌度维度 新版本工具才能转 旧工具会丢弃淌度信息

最后一行最值得警惕。离子淌度数据带第四维(淌度),只有较新的转换工具才能保留它;用旧工具转换,淌度维度会被静默丢弃,文件看起来正常,实际上少了一整层信息。仓里既有较早的数据,也有新式仪器的数据,混合使用时必须核对转换工具的版本。

3.6 「互操作」的三种实现层次

互操作性不是一个开关,而是分层的。第一层是文件可读,即任何工具都能打开 mzML;第二层是语义可比,即同一个字段在不同文件里指同一件事;第三层是流程可复算,即给定同一份输入与同一套参数,能产出同样的结果。仓在三个层次上的达成度并不一致。

第一层做得最好,因为格式标准化是纯技术问题,转换器写一次就通用。第二层做得中等,因为语义取决于提交者填什么,格式统一不代表内容统一。第三层做得最弱,因为复算需要完整的工具版本与参数记录,而多数提交并不包含这些。

这条分层对建模者的实际意义是:mzML 读到内存不等于可以用。你必须额外做一轮语义清洗,把「同名不同义」与「同义不同名」两种情形都对齐。前者如「物种」字段在一处写拉丁名一处写俗名,后者如仪器名在受控词与自由文本之间来回摇摆。

3.7 为什么它不强制统一元数据

一个自然的疑问是:既然它有转换能力,为什么不顺便把元数据也统一了?原因有三层,且都不是技术障碍。

第一层是成本归属。统一元数据意味着要为每份提交做人工或半人工的核对,这项工作无法自动完成,因为自由文本里的信息需要判断。仓的人力有限,做了转换就做不了大规模核对。

第二层是责任边界。若仓对元数据做了修订,出错时责任归属会变模糊:是提交者填错,还是仓改错?保持原样,责任就留在提交者一侧,这是存档机构的通行做法。

第三层是生态分工。联盟里已有更严格的成员承担规整化的职责,仓没必要在同一层做重复工作。它选择把力气放在「进得来」与「读得出」两端,中间一段交给下游。

§4 质量的两面:宽进与严出

4.1 宽进带来的三种参差

第一种参差是鉴定有无。同一个检索结果里,既有带完整 mzIdentML 的数据集,也有一片零的数据集。前者可以直接当带标签语料,后者只能当纯谱图库。

第二种参差是元数据密度。物种、仪器、修饰三个字段可以全部为空,也可以全部填好。空值不是异常,是常态的一种。

第三种参差是实验设计表的缺失。蛋白质组学领域有 SDRF 这样的样本与数据关系格式,用于描述哪个文件对应哪个样本、哪个条件;MassIVE 并不强制要求,很多数据集没有这份表。没有它,你无法从文件编号反推样本分组。

4.2 严出体现在哪

尽管进来的数据参差,出去的接口是统一的:所有数据集都能用同一套 JSON 字段检索,所有谱图都能以 mzML 或 MGF 读取,所有鉴定结果都能以 mzIdentML 解析。这一层统一,是它真正的产品。

统一接口的价值在写代码时最明显。你不需要为每个数据集写一个解析器,只需要写一次,然后循环。这是它被下游流程大量采用的原因,也是它在方法学论文里常被当作语料来源的原因。

4.3 案例:MSV000078555 的三重身份

取 MSV000078555 作贯穿案例,因为它把仓里常见的几种矛盾压缩在一个数据集中。它是人类结肠癌与其肝转移的原位基质蛋白研究,对应联盟号 PXD001092,仪器是 LTQ Orbitrap,文件三百五十五个,体积约三十六 GB,谱图接近一百八十七万。它挂在 MassIVE 名下,同时在联盟层面被标记为「非同行评议数据集」与「仓方不背书数据集」两个标签。

第一个身份的启示是编号不唯一。同一份数据,在仓里叫 MSV000078555,在联盟里叫 PXD001092,在文件系统里叫一个三十多位的任务标识。三者都要记录,缺一个就会在某一层卡住。

第二个身份的启示是类型决定可用性。它是 Partial,所以 PSM 为零。如果你只看谱图数就把它放进训练集,你会得到一百八十七万个无标签谱图,模型学不到任何肽段与谱图的对应关系。

第三个身份的启示是联盟标签有含义。「非同行评议」与「仓方不背书」两个标签说明联盟层面并不对这份数据的内容做质量判断,只记录它从哪个通道进来。这类标签在 PRIDE 侧同样存在,属于联盟的公共语义,不是 MassIVE 专属。

4.4 质量分层的一个可操作切法

分层 判据 适合拿来做什么 不适合做什么
完整层 Complete 且 PSM 大于零 带标签训练、方法复现 跨数据集泛化,仍受仪器偏倚影响
谱图层 Partial 或 PSM 为零 谱图预训练、噪声建模 监督学习,没有标签
定量层 quant_reanalyses 大于零 复算定量结论 原始证据核查,看的是再分析结果
存档层 元数据大量为空 原始证据留档 任何自动化分析,清洗成本过高

4.5 案例里的三个具体数字怎么用

回到 §4.3 的案例,它的三个计数(三百五十五个文件、约三十六 GB、近一百八十七万谱图)可以推出三个很实用的量。单文件平均体积约一百 MB,按这个比例估其他数据集的下载时长很准;单 GB 平均谱图数约五万,可以反推「我需要多少 GB 才能凑到一百万张谱」。这两个比值比任何总量数字都更接近实际工程量。

第三个可推的量是重复率。数据集只有一七七对 raw 与 mzXML,加上三个辅助文件共三百五十五个,说明没有额外的峰列表副本。但其他数据集未必如此,有的会同时存 raw、mzXML、mzML、MGF 四份,文件数虚高数倍。看到文件数特别大的数据集,先看一眼文件类型分布再决定下载范围,比直接镜像整个目录划算得多。

4.6 质控该自己做哪几步

仓方不做质控,质控就得自己排。按投入产出排序,有四步是必做的。

第一步是类型过滤。把 Partial 与 Complete 分开,只对 Complete 做带标签任务。这一步成本最低,收益最高,能挡掉大量无标签谱图。

第二步是计数自洽检查。用文件数乘平均每文件谱图数,与汇总谱图数比对,偏差过大的数据集先挂起。偏差可能来自报告口径,也可能来自文件损坏,两种情况都不适合直接进管线。

第三步是物种与仪器字段修补。把受控编号映射到可读名,映射失败的单独列一张表,人工判读一次,然后把判读结果固化成一张对照表复用。同一个物种名在不同数据集里的写法差异有限,做一次就够。

第四步是谱图与肽段的配对完整性检查。同一数据集内,谱图数应明显大于 PSM 数(每个 PSM 只标注一张谱),若 PSM 数接近甚至超过谱图数,说明结果文件里混入了再分析或合并结果,需要在入库前拆开。

4.7 与「策展型数据集」的对比

维度 MassIVE 单数据集 策展型基准数据集
标注来源 提交者自填或算法产出 专家逐条核对
规模 极大且持续增长 中等且固定
元数据密度 稀疏且不一致 密且受控
复现成本 高,需要重做清洗 低,开箱即用
适用阶段 预训练、语料扩充、方法压力测试 最终评测、对外报告
典型风险 化学与生物污染难以发现 与真实数据分布有差距

两者不是替代关系,而是阶段关系。用仓里的数据做预训练与压力测试,用策展型数据做最终评测,这个组合比单用任何一边都稳。反过来,用仓里的原始数据直接报一个「SOTA」数字,评审首先会问的是清洗过程,而不是模型结构。

§5 取数:怎么把它接进管线

5.1 三个接口入口

官方提供的编程入口有三个层次。最低层是检索接口,传一个查询 JSON,返回数据集列表的 JSON;中间层是统计接口,返回全仓汇总数字;最高层是文件目录的 FTP 服务,按 MSV 号取实际文件。三者用途分明:检索接口用来选,统计接口用来说,FTP 用来取。

5.2 检索接口的查询语法

查询是一个 JSON 对象,最常用的键是 title_input,它的值是一种类似前缀表达式的字符串。等值匹配写作两个等号加引号包裹的值,前面加脱字符表示精确匹配。

#-- 拉取全仓统计数据
curl -s "https://massive.ucsd.edu/ProteoSAFe/MassiveServlet?function=repositorystatistics"

#-- 按 MSV 号精确取一条数据集元数据
curl -s -G "https://massive.ucsd.edu/ProteoSAFe/QueryDatasets" \
  --data-urlencode "pageSize=1" \
  --data-urlencode "offset=0" \
  --data-urlencode 'query={"title_input":"^name==\"MSV000078555\""}'

注意两个细节。第一,查询字符串里嵌了引号,用 shell 时最好交给 --data-urlencode 处理,避免转义出错。第二,返回的 total_rows 有时与预期不符,这属于接口的分页语义问题,取单条时以 row_data 的第一项为准。

5.3 用 Python 拉一批元数据

下面的脚本按页拉取公开数据集列表,落成一份本地 JSON 行文件。分页参数是 pageSize 与 offset,官方没有公布单页上限,实践中取五百比较稳。

import json
import time
import urllib.parse
import urllib.request

BASE = "https://massive.ucsd.edu/ProteoSAFe/QueryDatasets"
PAGE = 500
OUT = "massive_meta.jsonl"

def fetch(offset, page_size=PAGE):
    query = json.dumps({}, separators=(",", ":"))
    params = urllib.parse.urlencode({
        "pageSize": page_size,
        "offset": offset,
        "query": query,
    })
    req = urllib.request.Request(
        BASE + "?" + params,
        headers={"User-Agent": "Mozilla/5.0 (compatible; data-audit/1.0)"},
    )
    with urllib.request.urlopen(req, timeout=90) as resp:
        raw = resp.read().decode("utf-8", errors="replace")
    return json.loads(raw)

def main():
    offset = 0
    total = None
    with open(OUT, "w", encoding="utf-8") as fh:
        while True:
            data = fetch(offset)
            rows = data.get("row_data") or []
            if total is None:
                total = int(data.get("total_rows", 0))
            if not rows:
                break
            for row in rows:
                fh.write(json.dumps(row, ensure_ascii=False) + "\n")
            offset += len(rows)
            print(f"collected {offset} of {total}")
            if offset >= total:
                break
            time.sleep(1.0)
    print("done, total_rows reported =", total)

if __name__ == "__main__":
    main()

脚本里有两个防御性处理值得保留:一是解码用 errors 参数容错,因为官方接口的长描述字段里偶有非法的编码字节,直接按严格模式解码会抛异常;二是分页有 sleep,仓方不公布限速策略,稳妥起见按每秒一页控制。

5.4 从 FTP 取文件

拿到 MSV 号之后,文件走 FTP。官方在数据集页面提供复制用的链接,格式是主机名加 MSV 号作为用户名,密码固定为一个字母。

#-- 列出数据集根目录(只列目录,不下载)
lftp -c "open -u MSV000078555,a ftp://massive.ucsd.edu; ls"

#-- 只取 mzML 开放副本,跳过厂商 raw
lftp -c "open -u MSV000078555,a ftp://massive.ucsd.edu; \
  mirror --include-glob '*.mzML' ./raw ./local_mzml"

#-- 只取 MGF 峰列表,用于快速建谱库
lftp -c "open -u MSV000078555,a ftp://massive.ucsd.edu; \
  mirror --include-glob '*.mgf' ./peak ./local_mgf"

只取 mzML、不取 raw,是控制体积的第一原则。re 转换后的 mzML 体积通常是 raw 的若干倍,但胜在可解析;如果只是想快速看一眼谱图,MGF 更轻。

5.5 解析一个 mzML 文件

拿到 mzML 后,统计谱图数最直接的办法是数 spectrum 节点。这份脚本不依赖任何第三方库,用流式解析避免大文件吃内存。

import xml.etree.ElementTree as ET

NS = "{http://psi.hupo.org/ms/mzml}"

def count_spectra(path):
    ms1 = ms2 = 0
    for event, elem in ET.iterparse(path, events=("end",)):
        if elem.tag == NS + "spectrum":
            lvl = elem.get("ms level")
            if lvl == "1":
                ms1 += 1
            elif lvl == "2":
                ms2 += 1
            elem.clear()
    return ms1, ms2

if __name__ == "__main__":
    import sys
    a, b = count_spectra(sys.argv[1])
    print(f"MS1={a} MS2={b} total={a + b}")

这里有一个容易被忽略的点:mzML 的 spectrum 节点顺序不保证按扫描时间排列,也不保证 ms level 只取一与二。若数据里有多级碎裂,二级以下的谱会被漏计,需要按需扩展判断分支。

5.6 把 PXD 换成 MSV

手里的编号往往是 PXD 而不是 MSV,这时要查一次映射。检索接口的元素查询语法可以按 PXD 过滤。

#-- 用 PXD 号反查 MassIVE 的 MSV 号
curl -s -G "https://massive.ucsd.edu/ProteoSAFe/QueryDatasets" \
  --data-urlencode "pageSize=20" \
  --data-urlencode "offset=0" \
  --data-urlencode 'query={"title_input":"^px==\"PXD001092\""}' \
  | python3.11 -c "import json,sys; d=json.load(sys.stdin); print([r['dataset'] for r in d.get('row_data',[])])"

5.7 用 ProteomeCentral 做权威核对

跨库核对时,联盟的门户比单库页面权威。它按 PXD 返回一份聚合的 JSON,里面有成员库归属、文件链接、物种与仪器。这份数据是判断「这个 PXD 到底落在哪个库」的唯一可靠依据。

import json
import urllib.request

URL = "http://proteomecentral.proteomexchange.org/cgi/GetDataset?ID={}&outputMode=JSON"

def locate(pxd):
    with urllib.request.urlopen(URL.format(pxd), timeout=60) as resp:
        d = json.loads(resp.read().decode("utf-8", errors="replace"))
    links = {x["name"]: x["value"] for x in d.get("fullDatasetLinks", [])}
    ids = {x["name"]: x["value"] for x in d.get("identifiers", [])}
    return {
        "title": d.get("title"),
        "massive_id": ids.get("MassIVE dataset identifier"),
        "massive_uri": links.get("MassIVE dataset URI"),
        "ftp": links.get("Dataset FTP location"),
    }

if __name__ == "__main__":
    for k, v in locate("PXD001092").items():
        print(k, "=", v)

5.8 接口的稳定性边界

这三个入口都不是带版本号的正式 API,官方没有承诺字段稳定。实践中的对策是把字段访问写成容忍缺键的形式,并且每次运行都记录响应时间与总量,这样一旦口径变化,你能从日志里看出来。拿不到就标未核实,不要用上一次的数字顶替。

5.9 定量再分析层怎么用

MassIVE.quant 是仓内唯一带「可复算」承诺的部分。它把同一份原始数据的不同定量重分析以分支形式挂在原数据集下,每个分支保留中间文件与统计输出,用户可以从任何一个中间点接手,而不必从 raw 重来。

它的骨架是四件东西:原始实验数据、实验设计的标注、每一步定量分析的脚本或步骤描述、以及中间的输入输出文件。四件齐备,一份再分析才算可复算;缺了脚本,中间文件就成了黑箱,只能看不能改。

层 内容 复算时该不该动
原始数据 raw 与开放副本 不动,作为基线
设计标注 样本到文件的映射 只在确认错误时修正,并记入变更
分析脚本 各步骤命令与参数 不动,改动即新分支
中间文件 每步的输出 从最近的一步接手

分支机制的用处在于「并行假设」。同一批数据,你对缺失值填补有疑问,可以开一个分支换填补方式,两个分支并存对照,不必覆盖原结果。这比在本地复制一份改参数要清楚得多,因为它把「谁改了什么」记录在了仓里。

用之前要有个预期:带定量再分析的数据集只是全仓的一小部分,规模在百级数据集的量级,分支在两百余个。它不是主流取数路径,而是「我已经选定某个数据集,想省掉重做定量」的省力路径。如果你的任务是广撒网攒语料,这条路走不通,还得回到 §5.3 的批量拉取。

5.10 批量下载的体积控制

FTP 取数最容易失控的地方是体积。单个数据集几十 GB、上百个候选数据集一起拉,磁盘瞬间见底。三条控制线能避免这一点。

第一条是只取需要的子目录。多数数据集把文件分在 raw、peak、result 三个目录,做谱图统计只要 raw 里的 mzML,做鉴定复现只要 result 里的结果文件,没必要整目录镜像。

第二条是给每次下载设体积上限。mirror 命令支持按单文件大小过滤,把超大文件排除在外,先拉中小文件跑通流程,再决定要不要补大文件。

第三条是边拉边校验。下载完成后立刻数一遍文件数与总字节,与元数据里的 file_count 与 fileSizeGB 比对,偏差超过一定比例就重拉。这一步能挡掉因断线导致的半截文件,比事后发现数据缺一块再回头补要省事。

#-- 只取小于 500 MB 的 mzML,先跑通流程
lftp -c "open -u MSV000078555,a ftp://massive.ucsd.edu; \
  mirror --include-glob '*.mzML' --max-file-size 500M ./raw ./small_mzml"

#-- 取完核对文件数与体积
find ./small_mzml -type f | wc -l
du -sh ./small_mzml

这两条命令的输出要与元数据里的对应字段对上。对不上不是错误,但值得记一笔,因为它说明这个数据集的计数口径与你的理解有偏差。

§6 与库内其他页面的关系

6.1 关系图谱

在千方医数集已收录的页面里,与 MassIVE 关系最直接的是三个:ProteomeXchange 是它的上级联盟,PRIDE 是它的平级同伴,MetaboLights 与 Metabolomics Workbench 则是代谢组学侧的平行资源。

ProteomeXchange(联盟层,PXD 号分配)
├── PRIDE(EMBL-EBI,欧洲)
├── MassIVE(UCSD,北美)
│   └── MassIVE.quant(定量再分析分支)
├── jPOST(日本)
├── iProX(中国)
├── PeptideAtlas(谱库)
└── Panorama Public(靶向色谱)

读这张图的关键是:箭头只画到联盟层,成员之间没有横向箭头。任何人画一条从 PRIDE 指向 MassIVE 的线,都是把平级关系误画成了上下游。

平级不等于等价,四组差别值得逐一记下。第一是接收口径:联盟要求所有成员在接收时提供最低限度的元数据,但对「最低限度」的解释各库不同,PRIDE 倾向严格,MassIVE 倾向宽松。第二是编号透明:MassIVE 保留本地号并在页面上与 PXD 并列展示,PRIDE 以 PXD 为唯一对外标识,本地号只在内部流转。第三是再分析能力:MassIVE 把再分析做成了仓的一部分,PRIDE 更多依赖外部流程产出。第四是存储策略:MassIVE 在同一数据集内同时保存原始文件与转换副本,PRIDE 更多依赖提交者提供的成品文件。

这四组差别的实践含义是:如果你要在两库之间做外部验证,不能简单按「同 PXD 拿两份」的思路,因为同一份 PXD 在另一库未必有副本;正确做法是按「同疾病域、不同库」的原则挑两个独立研究,让验证集在统计上真正独立,而不是同一批谱图的两种排列。

6.2 检索路径

起点 路径 适用场景
一篇论文 数据可用性声明里的 PXD → ProteomeCentral → 成员库 最常见,先确认落在哪个库
一个 PXD ProteomeCentral 的 identifiers 字段 核对是否存在 MassIVE 副本
一个 MSV MassIVE 数据集页 → FTP 目录 直接取文件
一个肽段序列 USI 检索 → 命中数据集 找特定谱图的出处
一个物种 检索接口的物种字段 构建物种特异的语料
一个仪器型号 检索接口的仪器字段 做仪器分层实验
一个天然产物 分子网络相关集合 化学侧检索,非序列检索
一个定量结论 MassIVE.quant 工作区 复算,而不是重搜

跨库检索时一个实用技巧:先在联盟门户确认 PXD 的宿主库,再去对应库页面取本地号。直接在各库页面上按 PXD 搜,有时会因为镜像同步延迟而搜不到,误判为「这个库没有这份数据」。

6.3 与库内相似页面的分工

库内页面 与本篇的分工 该先去哪一篇
ProteomeXchange 讲联盟层的编号体系与跨库检索,本篇讲单库落地 先看联盟,再看本篇
PRIDE 讲欧洲侧主仓库的提交与下载,本篇讲北美侧 按数据落在哪个库决定
MetaboLights 讲代谢组学存档,本篇覆盖的是蛋白质组学为主的谱图 任务是小分子就直接去那篇
Metabolomics Workbench 讲定量表与标准命名,本篇讲原始谱图与鉴定 需要定量矩阵去那篇
MASS 讲睡眠多导图,与本篇同为「原始信号」类但模态不同 无重叠,按模态选

这张表的作用是防止重复劳动。四篇组学类页面里有三篇都在讲「质谱数据怎么取」,但落点完全不同:联盟篇讲编号,PRIDE 篇讲主仓,本篇讲成员库的宽松接收与统一出口。先判断你的数据落在哪个库,再决定读哪篇,比顺次读完四篇省时间。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

本节所有评分的对象是一个数据仓,而不是一个数据集。这两者的评分逻辑不同:数据集的评分看内容质量,数据仓的评分看基础设施质量。把仓的评分理解成「里面的数据都有这个水平」,是最常见的误判。

还有一个校正:仓层面没有统一的质控等级。官方的统计数字是全仓汇总,不代表任何单个数据集的质量。看到「百亿谱图」这类数字时,正确的反应是「这是一个上限」,而不是「这是可用语料量」。下面的评分与偏差清单,都建立在这两个校正之上。

7.1 五维评分

维度 分数 依据 扣分项
规模 4.5 / 5 两万余数据集、一点一五 PB、百亿谱图量级 规模大但可用的带标签子集比例未知
可获取性 4.5 / 5 匿名可下、FTP 直连、默认 CC0 大文件传输无专用加速通道说明
结构规范性 3.0 / 5 开放格式统一、接口统一 元数据字段稀疏、缺 SDRF 式设计表
标注可信度 2.5 / 5 提交者自填,审核宽松 无统一质控等级,无策展标注
生态与文档 3.5 / 5 再分析层、UCSD 文档站、联盟互通 正式 API 无版本承诺,字段可能变

7.2 DAIMS 十二项对照

DAIMS 是数据集成熟度评估的一套通用框架,把「能不能直接进模型」拆成十二个维度逐项打分。它最初不是为质谱数据设计的,但对原始数据仓的适配性很好,因为它评的是「可计算性」,而不是「科学价值」。

编号 DAIMS 维度 本项目表现 分值 判断依据
D01 来源可追溯 每个数据集有 MSV 与 PXD 双号,多数带 PMID 5 提交者、机构、论文三重可回溯
D02 许可明确 数据集页标注,默认 CC0 4 仓层面无统一条款,需逐条看
D03 访问稳定 页面与 FTP 长期有效 4 无正式 API 版本承诺
D04 字段受控 物种仪器有受控映射,其余自由文本 3 映射可失败,可读名为空
D05 缺失值可控 缺失以空串或 null 表示,无统一占位 3 空值不区分「未知」与「不适用」
D06 主键唯一 MSV 唯一且稳定 5 目录名即主键,跨界一致
D07 粒度一致 一数据集一目录,但文件复用 raw 与副本 3 文件层存在重复
D08 设计信息 无强制样本设计表 2 多数数据集无法从文件反推分组
D09 标签质量 提交者自填鉴定,无质控等级 2 无专家复核记录
D10 体量可扩展 PB 级、百亿谱图 5 唯一无可争议的高分项
D11 版本可回滚 提交后基本不可变,再分析走分支 4 分支机制好,但原始数据不可改
D12 文档完备 有文档站与联盟互通说明 3 检索接口无正式规格文档

十二项合计四十三分,满分六十,折算约七成二。这个分数的形状很有诊断价值:体量与可追溯性满分,设计信息与标签质量垫底。换句话说,它是一份极好的原料,但不是一份半成品。任何指望「下载即训练」的设想,都会在 D08 与 D09 两项上被现实击穿。

7.4 三个结构性局限

第一是尺度的错觉。仓的规模给人一种「语料取之不尽」的错觉,可实际可用的带标签谱图只占一部分,且分布极不均匀:人类与少数模式生物占绝大多数,稀有物种与特殊仪器组合的样本很薄。

第二是口径的不可比。不同数据集的谱图计数来自不同汇总路径,有的是转换后统计,有的是提报时自报。跨数据集做「每谱图成本」这类计算时会失真。

第三是设计信息的流失。缺样本设计表意味着你无法从文件名可靠地反推分组,很多分析只能退化为「按数据集整体处理」,损失了样本级的自由度。

7.5 已知的、可枚举的偏差

偏差 表现 对下游的影响 缓解手段
仪器偏倚 少数主流高分辨仪器占多数 模型对冷门仪器泛化差 按 instrument_resolved 分层抽样
物种偏倚 人类与模式生物集中 跨物种迁移不可靠 明确声明物种覆盖范围
提交类型偏倚 Partial 占比不小 无标签谱图稀释训练集 用 psms 大于零硬过滤
地域偏倚 北美实验室提交占比高 实验规范趋同,缺少方法多样性 跨库补充欧洲与亚洲数据
时间偏倚 早期数据集元数据更稀疏 老数据集清洗成本高 用 createdMillis 设时间下限
学科偏倚 蛋白质组学为主,其他谱图零散 非蛋白任务的样本不足 到代谢组学专用库补充

7.6 外部验证矩阵

验证项 用哪个源核对 结论 强度
规模数字 官方统计接口 可复现,随时可变 强
单数据集体积与文件数 数据集文件列表页 与接口字段一致 强
PXD 与 MSV 映射 联盟门户的 identifiers 字段 一致,且给出 FTP 链接 强
提交类型语义 联盟门户的 datasetSummary 标签 有非同行评议与仓方不背书标签 中
谱图计数 mzML 内部节点数 与汇总数字可能不等 中
联盟累计提交总量 联盟年度论文摘要 只能核对联盟总量,无法拆到单库 弱

7.7 它为何能持续:低门槛与统一出口的组合

它的生存逻辑很朴素:把提交门槛压到地板,换来数据留存率;把输出格式统一到标准,换来下游采用率。留存率保证仓里有东西,采用率保证仓外有人来取,两边互为因果。

这套逻辑能成立,靠的是三重外部支撑:联盟的编号体系给了它跨库的合法身份,美国国立卫生研究院的项目资助给了它人员与硬件,蛋白质组学期刊的数据可用性要求给了它稳定的提交来源。三者缺一,这套低门槛策略都会变得不可持续——因为低门槛必然带来高维护成本,而维护成本只能靠外部补贴覆盖。

§8 生态位与历史

8.1 历史沿革

时间 事件 意义 来源状态
2009 年前后 最早一批数据集的创建时间可追溯到这一时期 说明仓的历史长于联盟 检索接口可见时间戳
2012 年前后 作为 ProteomeXchange 成员接入 获得联盟编号通道 未核实(官方未给接入日期)
2014 年前后 大规模接收社区提交 数据集数量进入累积期 案例数据集创建于该年
2018 年前后 MassIVE.quant 推出 从存档扩展到可复算的定量再分析 未核实(页面无版本日期)
2020 年前后 与分子网络生态互通 谱图范围从蛋白扩展到小分子 仓内可见该类数据集
2024 年前后 联盟统一推进 FAIR 与标准 USI 与设计表格式支持增强 联盟论文摘要
2026 年 规模达两万余数据集 体量进入 PB 级 官方统计接口

这张表要写明一件事:仓方没有公开一份带日期的版本沿革,所以时间线里的多数节点只能从数据集时间戳、联盟论文与页面版权行反推,标「未核实」的三行就是这类推断。想知道确切日期,只能去翻公布的资助与项目文档,本文不再往下追。

8.2 它在联盟里的位置

联盟的六个成员各有分工:PRIDE 承担七成以上的提交量,是通用存档主力;iProX 与 jPOST 分别是亚洲的两个提交枢纽;PeptideAtlas 偏向谱库;Panorama Public 偏向靶向色谱;MassIVE 则承担北美的一部分通用存档,并且是唯一把再分析层做成一等公民的成员。

这个分工不是官方规定的,是长期演化出来的。MassIVE 的位置有点像「社区数据的中转站」:门槛低,所以进得多;再分析层强,所以出得去。两头都占,中间的质量控制就相对薄。

8.3 生态中的互补关系

资源 与 MassIVE 的关系 什么时候应该转向它
PRIDE 平级成员,欧洲侧规模更大 需要更规整的元数据与更大的存量
ProteomeCentral 上级门户,负责编号与检索聚合 需要确认 PXD 落在哪、要权威链接
MetaboLights 代谢组学的平行资源 任务是小分子而非肽段
Metabolomics Workbench 另一套代谢组资源 需要定量表与标准命名体系
PeptideAtlas 谱库侧的互补资源 需要高置信一致性肽段库
Panorama Public 靶向色谱侧 需要 Skyline 直接加载的色谱图

8.4 它的边界在哪里收敛

三个方向的扩张都碰到了边界。向上,元数据标准化的推进受限于提交者的意愿,联盟层面能强制的东西有限;向外,非蛋白谱图虽然进了仓,但共用同一套蛋白导向的字段,描述力不足;向内,再分析层虽然做得早,但覆盖面受人力约束,带定量再分析的数据集占比很小。

这三条边界决定了它未来更可能是「继续变宽」而不是「变得更深」。对使用者来说,这意味着规模会继续增长,但质量分布不会显著改善,清洗工作仍然是使用者的责任。

§9 使用指引

9.1 三种角色的路径

角色 首要目标 最短路径 常见弯路
复现者 核对论文里的谱图证据 PXD → 联盟门户 → MSV → 只取 mzML 与结果文件 下载整个 raw 目录
建模者 攒一批带标签的谱图 检索接口批量拉元数据 → 按 PSM 过滤 → 分层抽样 → FTP 取件 直接按谱图总数算样本量
归档者 让数据有号可引 走联盟提交通道拿 PXD → 仓方给 MSV 只拿 MSV 号就在论文里引用

三种角色的共同错误是混淆「量」与「质」。复现者不需要全部文件,建模者不需要全部数据集,归档者不需要担心下游怎么用。各守各的边界,路径就短了。三类角色里最容易踩坑的是建模者:他们把谱图总数当样本量,结果训练集被无标签谱图稀释。§4.3 的案例已经示范过这个坑——近一百八十七万张谱图,可用的配对是零。

9.2 一条最短的可用流程

从零到拿到一份可训练语料的最短路径是五步:拉元数据、过滤、抽样、取文件、转格式。

#-- 第一步:拉全仓元数据(复用 §5.3 的脚本)
python3.11 fetch_meta.py

#-- 第二步:过滤出真正有标签的数据集
python3.11 - <<'PY'
import json
keep = []
with open("massive_meta.jsonl", encoding="utf-8") as fh:
    for line in fh:
        r = json.loads(line)
        if r.get("type") != "Complete":
            continue
        if int(r.get("psms") or 0) <= 0:
            continue
        if float(r.get("fileSizeGB") or 0) <= 0:
            continue
        keep.append(r)
print("candidates:", len(keep))
with open("candidates.jsonl", "w", encoding="utf-8") as fh:
    for r in keep:
        fh.write(json.dumps(r, ensure_ascii=False) + "\n")
PY

#-- 第三步:按仪器分层,每个仪器取前若干个(示例取 3 个)
python3.11 - <<'PY'
import json
from collections import defaultdict
buckets = defaultdict(list)
with open("candidates.jsonl", encoding="utf-8") as fh:
    for line in fh:
        r = json.loads(line)
        key = r.get("instrument_resolved") or "unknown"
        buckets[key].append(r)
picked = []
for key, rows in buckets.items():
    rows.sort(key=lambda x: -int(x.get("psms") or 0))
    picked.extend(rows[:3])
print("picked:", len(picked), "instruments:", len(buckets))
with open("picked.jsonl", "w", encoding="utf-8") as fh:
    for r in picked:
        fh.write(r["dataset"] + "\n")
PY

#-- 第四步:逐个取 mzML(按 picked.jsonl 里的 MSV 号循环调用)
while read -r msv; do
  lftp -c "open -u ${msv},a ftp://massive.ucsd.edu; \
    mirror --include-glob '*.mzML' ./raw ./data/${msv}"
done < picked.jsonl

第五步是把 mzML 的谱图与鉴定结果对齐,这一步没有通用脚本,取决于你用的重搜索工具。若只是想快速验证,可以直接用 MGF 与 mzIdentML 做一轮简单匹配。

9.3 引用方式

引用要分两层。数据层引用 PXD 号,把它写进论文的数据可用性声明;仓层引用 MSV 号与仓名,写进方法或补充材料。两层都写,引用者才能既不迷路也不漏源。

The mass spectrometry proteomics data have been deposited to the
ProteomeXchange Consortium via the MassIVE partner repository with
the dataset identifier PXD001092 (MassIVE accession MSV000078555).

如果是再分析版本,则要额外注明 RPXD 号与工作区标识,避免与原始数据混淆。

§10 AI 使用声明

声明项 内容
是否可用于模型训练 可以,数据集级默认 CC0,无额外授权门槛
训练数据来源追溯 按 MSV 与 PXD 双号记录,可回溯到提交者与论文
标注性质 提交者自填,非人工策展,非专家复核
患者信息风险 仓层面为公开数据,不含直接标识符;但不保证提交者已充分去标识
临床使用限制 不得用于诊断、治疗决策或任何个体层面的医学判断
再分发要求 CC0 下无强制署名义务,学术惯例仍应引用 PXD
模型卡需披露 训练所用数据集清单、版本快照时间、过滤规则
偏倚披露义务 需说明仪器、物种、地域三项偏倚的覆盖情况

常见误读

说法 实际 证据
MassIVE 是 PRIDE 的美国分支或镜像 两者是联盟平级成员,各自独立存档与编号 联盟年度论文列出六个成员库,MassIVE 与 PRIDE 并列
MassIVE 是 ProteomeXchange 的上游,先有 MassIVE 后有 PX 顺序相反,PX 是联盟层,MassIVE 是成员 联盟成立于 2012 年前后,成员库随后接入
MSV 号就是 PXD 号的一种写法 两套编号由不同机构分配,语义不同 同一份数据同时有 MSV 与 PXD 两个号,联盟门户并列给出
谱图总数就是可用训练样本量 含无标签谱图与重复副本 §4.3 的案例近一百八十七万谱图而 PSM 为零
Complete 与 Partial 只是元数据完整度差异 类型决定是否携带鉴定结果 §4.3 的案例为 Partial,三个鉴定计数全为零
仓方会替提交者做质量审核 审核宽松,联盟层面另加不背书标签 联盟门户给出非同行评议与仓方不背书标签
mzML 里的谱图数与页面上的计数必然一致 转换口径不同,可能不等 转换是有损重编码,不同工具结果不同
数据集总数可以当论文里的固定事实 统计接口每日变化,只代表查询时刻 统计接口返回的是实时值
只用 MSV 号就能满足期刊的数据声明要求 期刊要求的是联盟号 PXD 联盟论文与各刊数据政策均要求 PXD
仓里的数据只限蛋白质组学 也收小分子与分子网络相关谱图 仓内存在以分子网络为主题的数据集

FAQ

Q1:MassIVE 和 PRIDE 是什么关系?
平级。两者都是 ProteomeXchange 的成员库,各自接收提交、各自分配本地编号,只是运营主体与地域不同。MassIVE 在 UCSD,PRIDE 在 EMBL-EBI。谁也不是谁的上游,也不是镜像。

Q2:MSV 号和 PXD 号应该引用哪一个?
论文里引用 PXD,因为它是跨库唯一的联盟编号;下载与排障时用 MSV,因为文件系统以它为目录名。两者要成对记录,不能互相替代。只写其中一个,引用链就缺一半信息。

Q3:为什么同一个数据集有时是 Complete、有时是 Partial?
类型在提交时选定。Complete 要求携带鉴定结果与元数据表,Partial 只要求原始谱图。两种都进联盟、都拿 PXD,但下游可用性差别很大,混用会污染训练集。

Q4:谱图总数能直接当作训练样本量吗?
不能。谱图总数包含大量无鉴定结果的谱图,raw 与 mzML 副本还会被重复计入。实际可用样本量要从带 PSM 的数据集里重新数,做法见 §9.2 的过滤规则。

Q5:可以直接拿它训练模型吗?
可以,许可上比多数仓宽松。但要先做三步清洗:按提交类型过滤、按计数核对、按物种与仪器字段修补空值。不做清洗,训练集会被重复文件与无标签谱图稀释。

Q6:它收不收代谢组学数据?
收。它不限定蛋白质组学,分子网络相关的谱图集合也在其中。这是它的宽度,也是元数据标准不统一的来源之一——蛋白导向的字段对代谢数据描述力不足。

Q7:为什么有的数据集元数据几乎全空?
因为接收门槛设计得低。只交原始谱图、不填物种仪器也能拿到号。这类数据适合当纯谱图库,不适合做自动化分析,清洗成本往往超过收益。

Q8:怎么确认一个 PXD 到底落在哪个库?
用联盟门户按 PXD 取一次聚合 JSON,看 identifiers 与 fullDatasetLinks 两个字段。不要靠在各库页面上搜,镜像同步有延迟,搜不到不等于没有。

Q9:MassIVE.quant 是什么?
它是仓内的定量再分析层,把同一份原始数据的不同定量重分析以分支形式挂在原数据集下,并保留中间文件。适合复算结论,不适合核查原始证据。

Q10:下载太快会被限速吗?
官方没有公布限速策略。实践中建议分页间隔一秒、文件传输走满带宽但控制并发数,避免被误判为抓取。若被限,先降并发再重试。

Q11:仓里的数据会下线吗?
公开数据按存档承诺长期保留,数据集页面即长期有效地址。但统计接口的数字每日变化,引用规模数字时应注明查询日期。

Q12:数据集的许可能否逐一确认?
数据集页会标注许可,多数为 CC0。少量早期或特殊来源的数据集可能有不同标注,需要逐一确认。仓层面没有统一的许可声明文档,这是使用前的必查项。

术语表

术语 解释
MassIVE 质谱交互式虚拟环境,UCSD 运营的质谱数据仓
ProteomeXchange 蛋白质组学数据开放联盟,负责 PXD 号分配
MSV MassIVE 本地登录号前缀
PXD 联盟登录号前缀,六位数字
RPXD 再分析版本号前缀
ProteoSAFe 仓的计算平台,检索与工作流都跑在上面
MassIVE.quant 定量再分析分支层
mzML 开放谱图格式,XML 描述,可压缩
MGF 峰列表文本格式,轻量,常用于建库
mzXML 较早的开放谱图格式,仍有存量
raw 厂商私有原始文件,格式未公开
mzIdentML 开放鉴定结果格式
mzTab 开放定量与鉴定汇总格式
PSM 肽段谱匹配,一条谱与一条肽的配对
USI 通用谱标识符,用于跨库寻址单张谱图
SDRF 样本与数据关系格式,描述文件到样本的映射
CC0 公共领域贡献许可,放弃著作权主张
Complete 提交类型,携带鉴定与元数据
Partial 提交类型,仅原始谱图
NCBI Taxonomy 物种分类受控词表
PSI-MS 质谱本体,仪器与参数受控词
MOD 蛋白修饰本体受控词
NEWT 较早的物种受控词源
分子网络 基于谱图相似性的化合物聚类方法
FTP 匿名登录 以登录号作用户名、固定字符作密码的下载方式
DDA 数据依赖采集,按前体强度选碎裂对象
DIA 数据独立采集,按窗口系统性碎裂

附录 A:核心数字核对表

项 值 来源 来源层级
公开数据集数 两万余(接口返回 20,449) 官方统计接口 官方页面
文件数 一千三百余万(接口返回 13,246,620) 官方统计接口 官方页面
总容量 约一点一五 PB 官方统计接口 官方页面
谱图总量 百亿量级 官方统计接口 官方页面
PSM 总量 十七亿量级 官方统计接口 官方页面
蛋白记录数 一百九十余万 官方统计接口 官方页面
肽段记录数 九百余万 官方统计接口 官方页面
修饰记录数 一千三百余 官方统计接口 官方页面
定量再分析数据集 一百三十余个 定量统计接口 官方页面
定量再分析分支 两百余个 定量统计接口 官方页面
联盟累计提交 六万四千余个(截至 2025-06) 联盟年度论文摘要 论文摘要
联盟近三年占比 百分之四十七 联盟年度论文摘要 论文摘要
联盟成员库数 六个,分布于三大洲 联盟年度论文摘要 论文摘要
单案例文件数(§4.3 的案例) 三百五十五 数据集文件页 官方页面
单案例体积(§4.3 的案例) 约三十六 GB 检索接口 官方页面

附录 B:数字的来源分层

官方页面层(可直接核对,随时间变化):公开数据集数、文件数、总容量、谱图总量、PSM 总量、蛋白与肽段记录数、修饰记录数、定量再分析数与分支数。这些数字来自仓的统计接口,查询日期为 2026-10-26,之后会有变化。

论文摘要层(有出版记录,但只覆盖联盟整体):联盟累计提交量、近三年占比、成员库数量与分布。论文摘要不提供单库拆分,因此 MassIVE 的具体份额属于论文图表内容,摘要中没有,本文不给数字。

未核实层(官方页面未公开):转换成功率、各仪器占比、完整层数据集的确切数量、物种覆盖的物种数、仓内数据集级许可的分布。这几项需要用全量遍历才能得到,本文不做,需要时请自行统计并标注口径。

附录 C:完整参考文献

编号 文献 用途
1 Deutsch EW 等,The ProteomeXchange consortium in 2026: making proteomics data FAIR,Nucleic Acids Research,2026,DOI 10.1093/nar/gkaf1146 联盟规模、成员构成、标准进展
2 MassIVE 仓库统计接口,https://massive.ucsd.edu/ProteoSAFe/MassiveServlet?function=repositorystatistics 仓规模数字,查询于 2026-10-26
3 MassIVE 定量统计接口,function=quantstatistics 再分析层规模
4 MassIVE 数据集检索接口,https://massive.ucsd.edu/ProteoSAFe/QueryDatasets 字段结构与单数据集样例
5 ProteomeCentral 数据集接口,http://proteomecentral.proteomexchange.org/cgi/GetDataset PXD 与 MSV 映射、联盟标签
6 MassIVE 数据集文件页,MSV000078555 文件组织与类型分布
7 MassIVE.quant 说明页,https://massive.ucsd.edu/ProteoSAFe/static/massive-quant.jsp 再分析层的设计
8 MassIVE 官方文档站,https://ccms-ucsd.github.io/MassIVEDocumentation/ 下载与提交说明

附录 D:任务代码

任务 代码位置 说明
拉全仓统计 §5.2 第一条命令 单次请求,秒级返回
拉单条元数据 §5.2 第二条命令 按 MSV 精确取
批量拉元数据 §5.3 脚本 分页、容错、限速
只取 mzML §5.4 第二条命令 跳过 raw,控制体积
只取 MGF §5.4 第三条命令 建谱库用
数 mzML 谱图 §5.5 脚本 流式解析,不占内存
PXD 反查 MSV §5.6 命令 元素查询语法
定位 PXD 宿主库 §5.7 脚本 联盟门户权威核对
五步取数流程 §9.2 命令序列 从零到可训练语料

附录 E:如果只记五件事

第一,它是平级成员,不是分支。 与 PRIDE、jPOST、iProX 同级,谁也不是谁的上游。这句话能挡掉一半的误引。

第二,两套编号各有用途。 MSV 是目录名,PXD 是论文里该写的号,RPXD 是再分析。三个都记,缺一个就在某一层卡住。

第三,谱图数不是样本量。 百亿谱图里包含大量无标签谱图与重复副本,真实可用量要从带 PSM 的数据集里重新数。

第四,放宽接收是设计,不是缺陷。 门槛低换来数据留存,代价是质量参差。清洗是使用者的活,不是仓方的承诺。

第五,统一出口是它真正的产品。 一套字段、一种格式、一次代码。这一层统一,比仓里存了多少 TB 更能决定你能不能开工。

编辑说明

本篇的规模数字取自 MassIVE 官方统计接口,查询日期 2026-10-26,属实时值,引用时请注明日期。联盟层面的数字取自 2026 年 Nucleic Acids Research 的联盟更新论文摘要,摘要只给出联盟总量,不含单库拆分,因此本文不提供 MassIVE 在联盟中的份额数字。单数据集样例为 MSV000078555,其字段值、文件类型与体积均来自官方数据集页与检索接口的实际返回,未做推断。

未覆盖的内容包括:仓内数据集级许可的分布、转换流程的成功率、各仪器的提交占比、物种覆盖的确切物种数。这几项需要全量遍历才能得到,超出本文的取数范围,已在附录 B 标注为未核实。文中出现的所有概数表述(两万余、千余万、百亿量级等)都对应附录 A 中列出的精确值,采用概数是为避免同一数字在全文反复出现。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • pride — 共享标签:基因组学与多组学 / 蛋白质组学 / 代谢组学
  • proteomexchange — 共享标签:基因组学与多组学 / 蛋白质组学 / 代谢组学
  • uniprot — 共享标签:基因组学与多组学 / 蛋白质组学
  • alphafold — 共享标签:基因组学与多组学 / 蛋白质组学
  • cptac — 共享标签:基因组学与多组学 / 蛋白质组学
  • string — 共享标签:基因组学与多组学 / 蛋白质组学
  • kegg — 共享标签:基因组学与多组学 / 蛋白质组学
  • metabolights — 共享标签:基因组学与多组学 / 代谢组学
  • metabolomics-workbench — 共享标签:基因组学与多组学 / 代谢组学
  • alphafold — 共享标签:基因组学与多组学 / 蛋白质组学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集