目录

pro_imput

基于 UK Biobank 蛋白质组学数据的缺失蛋白插补项目。

目录结构

pro_imput/
├── data/                        # 数据集(按 8:1:1 随机拆分)
│   ├── train.csv                # 训练集 (42,411 × 2,924)
│   ├── val.csv                  # 验证集 (5,301 × 2,924)
│   └── test.csv                 # 测试集 (5,302 × 2,924)
├── test_scenarios/              # 测试场景(基于 test.csv 生成)
│   ├── random_missing_25pct.csv # 随机缺失 25%
│   ├── random_missing_50pct.csv # 随机缺失 50%
│   ├── random_missing_75pct.csv # 随机缺失 75%
│   └── panel_missing_{1-7}panels.csv  # 缺失 1-7 个 panel
└── evaluation_system/           # 评估系统
    ├── evaluate/                # 评估模块
    ├── records/                 # 记录模块
    ├── display/                 # 展示模块
    ├── submit.py                # 命令行提交工具
    ├── build_records.py         # 记录聚合工具
    ├── server.py                # Web 服务
    ├── 启动Web服务.bat          # Web 服务启动快捷方式
    └── README.md                # 评估系统使用说明

数据说明

源数据

来源于 UK Biobank Pharma Proteomics Project (UKB-PPP),使用 Olink Explore 3072 平台测量 53,014 名参与者的血浆蛋白组学数据。

  • 样本规模:53,014 名参与者
  • 蛋白特征:2,923 种蛋白(标准化表达值)
  • 数据列:EID(参与者 ID)+ 2,923 个蛋白列(基因符号命名)

数据拆分

按 8:1:1 比例随机拆分为训练集、验证集、测试集(random_state=42)。

数据集 行数 比例
train.csv 42,411 80%
val.csv 5,301 10%
test.csv 5,302 10%

Panel 划分

2,923 种蛋白按 Olink 平台划分为 8 个主 panel(按生物学含义分组)+ 2 个跨 panel 特殊类别。I 期与 II 期视为不同 panel(蛋白身份 0 重叠,功能主题存在差异)。

Panel 生物学含义 蛋白数
ONC 肿瘤 366
INF 炎症 364
NEU 神经 364
CAR 心血管代谢 367
ONC II 肿瘤(扩展) 365
INF II 炎症(扩展) 363
NEU II 神经(扩展) 362
CAR II 心血管代谢(扩展) 366
CAR, INF, NEU, ONC 跨 I 期 4 panel 3
CAR II, INF II, NEU II, ONC II 跨 II 期 4 panel 3

跨 panel 的 6 个特殊蛋白(IL-8、TNF、IL-6、Leiomodin-1、Scribble、IDO1)同时归属多个 panel,仅当其所有相关主 panel 均缺失时才视为缺失。

测试场景

基于测试集(5,302 个样本)生成两类缺失场景,用于评估插补方法性能。

文件格式

每个场景文件 shape = (5,302, 5,847):

  • 第 1 列:EID(样本 ID)
  • 第 2-2,924 列:V_{蛋白名}(蛋白表达值,缺失位置置 0)
  • 第 2,925-5,847 列:M_{蛋白名}(mask 编码)

Mask 编码

采用 0/1 编码:

  • M = 1:该位置为人为缺失(蛋白值已置 0)
  • M = 0:该位置保留真实值

场景 1:随机缺失

按指定概率随机掩码蛋白值,模拟蛋白检测中的随机缺失。

文件 缺失率
random_missing_25pct.csv 25%
random_missing_50pct.csv 50%
random_missing_75pct.csv 75%

场景 2:panel 缺失

对每个样本随机选择 k 个主 panel 整体缺失,模拟整个 panel 测量失败的场景。

文件 缺失 panel 数 实际缺失率
panel_missing_1panels.csv 1 12.47%
panel_missing_2panels.csv 2 24.95%
panel_missing_3panels.csv 3 37.42%
panel_missing_4panels.csv 4 49.90%
panel_missing_5panels.csv 5 62.39%
panel_missing_6panels.csv 6 74.89%
panel_missing_7panels.csv 7 87.42%

实际缺失率 ≈ k/8(8 个主 panel 等概率被选)。

评估系统

用于评估成员提交的插补结果,计算三项指标并记录展示。详细说明见 evaluation_system/README.md。

评估指标

在 mask=1 位置(人为缺失位置)计算:

  1. IQR-NMSE:IQR 归一化均方误差(按列 IQR 归一化,越低越好)
  2. R2:决定系数(越高越好)
  3. Spearman:秩相关系数(越高越好)

提交方式

方式 1:Web 界面

双击 evaluation_system/启动Web服务.bat,浏览器自动打开提交页面。

方式 2:命令行

cd evaluation_system
python submit.py submit \
    --member <姓名> --model-name <模型名称> \
    --scenario <random|panel> --file <提交zip路径> \
    --desc <模型描述> --params <参数量> --flops <浮点运算量>

提交文件格式

提交一个 zip 包,内含还原结果 CSV(格式与 data/test.csv 一致,缺失位置填插补值):

  • 场景 1(random):3 个文件,random_missing_{25,50,75}pct_restored.csv
  • 场景 2(panel):7 个文件,panel_missing_{1-7}panels_restored.csv

多人协作流程

git pull                              # 拉取最新
python build_records.py               # 聚合所有提交记录
python submit.py submit ...           # 提交评估
git add records/submissions/          # 添加记录
git commit -m "add submission: ..."
git push                             # 推送结果

每次提交生成独立 JSON 文件,几乎不会产生合并冲突。

依赖

pip install flask scipy numpy pandas

复现性

所有随机操作使用 random_state=42(numpy 全局种子),保证结果可复现。

关于

本项目旨在解决两个应用场景下的蛋白质缺失值插补问题,一是部分随机值缺失,二是若干panel缺失。

75.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号