alitrack

MIMIC-IV:30 万患者的 ICU 数据,从申请到跑起来

复现 MotherDuck:Qwen3.8 27B 在 MIMIC 上做到 96.8%

做医学 AI 的人,绕不开一个数据:MIMIC。

它是美国贝斯以色列女执事医疗中心(BIDMC)2008 到 2019 年的电子病历脱敏数据,全球研究者免费申请使用。30 万患者、43 万次住院、7.3 万次 ICU 入住,从化验单到医嘱到生命体征到影像报告,一套完整的重症监护记录。

过去十年,基于 MIMIC 的研究横跨重症医学、临床预测、医学 NLP、文本转 SQL,几乎所有医疗数据方向都用它做过基准。MIMIC-III 的原始论文发表在 Scientific Data(2016),是重症医学数据领域被引用最多的论文之一,MIMIC-IV 是它的继任者。

但拿到它的过程,说实话比想象中曲折。这篇把从申请到本地跑起来的路走一遍。

● ● ●

申请三步:凭据、培训、协议

MIMIC 走 PhysioNet 的 Credentialed Access 流程,三步缺一不可:

MIMIC 获取流程:认证 → 培训 → 协议 → 下载 → Parquet → DuckDB

MIMIC 获取流程:认证 → 培训 → 协议 → 下载 → Parquet → DuckDB

第一步,注册 PhysioNet 账号并完成身份认证。 需要姓名、邮箱、机构信息,上传证件(护照或身份证)。审核一般几个工作日,通过后账号变成 credentialed user。

第二步,完成 CITI 培训。 PhysioNet 要求完成「Data or Specimens Only Research」课程(约 1 小时,全是选择题),这是美国研究伦理培训体系的标准模块,全球通用。完成后在 PhysioNet 设置页提交培训证书。

第三步,签署数据使用协议(DUA)。 承诺不重新识别患者、不传播原始数据、引用规范。签完立即生效,不需要等审核。

三步走完,就能在 MIMIC-IV 页面看到下载按钮了。总耗时取决于第二步的培训速度,快的话一天搞定。

● ● ●

数据长什么样

MIMIC-IV 按数据来源分成模块,核心是两个:

hosp 模块:医院级 EHR 数据。患者人口学(patients)、住院记录(admissions)、转科记录(transfers)、化验(labevents)、微生物(microbiologyevents)、用药(prescriptions、emar)、诊断(diagnoses_icd)、手术(procedures_icd)、医嘱(poe)。

icu 模块:ICU 临床信息系统(MetaVision)数据。ICU 入住(icustays)、生命体征与图表(chartevents)、液体出入量(inputevents、outputevents)、操作(procedureevents)、事件时间(datetimeevents)。所有事件表通过 stay_id 关联到 icustays,通过 itemid 关联到 d_items 字典表。

两个模块加起来 50 多张核心表。最常用的组合是:patients + admissions 拿人群,diagnoses_icd 拿诊断,prescriptions 拿用药,chartevents 拿监护数据。

另外还有 ED(急诊)、CXR(胸片影像)、Note(临床笔记)三个可选模块,按研究需要单独申请。

● ● ●

原始 CSV 的坑

PhysioNet 默认给的是 CSV 压缩包,直接拿来用有几个问题:

第一,表很大。 chartevents 解压后几十 GB,普通电脑的 pandas 直接内存爆炸。

第二,列类型混乱。 时间列有 string 有 timestamp,数值列混着文本(比如大于 200 这种临床标记),不同版本的 schema 还有差异。

第三,没有主外键约束。 官方文档说所有表都有 subject_id/hadm_id/stay_id 关联,但 CSV 文件本身不强制,查错关联是常态。

所以正经用法不是直接读 CSV,而是先转成分析友好的格式。

● ● ●

DuckDB + Parquet:我的本地化方案

我们团队的做法:CSV 转 Parquet,用 DuckDB 做查询引擎。

Parquet 是列式存储,压缩率惊人。 同样数据比 CSV 小一个数量级(30 万患者的住院记录,CSV 几个 GB,Parquet 几百 MB),而且列式格式让聚合查询只扫需要的列。

DuckDB 是嵌入式分析数据库,零部署。 单文件、无服务、Python 一行 import duckdb 就能用。它原生支持直接读 Parquet,不需要导入步骤:

import duckdb
con = duckdb.connect("catalog.duckdb")
con.execute("CREATE VIEW admissions AS SELECT * FROM read_parquet('hosp/admissions/*.parquet')")

我们最终把 MIMIC-IV 全部表转成 Parquet,挂在 DuckDB 的 catalog 里,schema 命名 catalog.hosp.admissions 这种三段式。日常查询秒级返回,一个 300 MB 的 catalog.duckdb 文件随身带。

这也是后续几篇的基础:31 个 SQL 模板、LLM 路由评测、OMOP 本体查询,全都跑在这个 catalog 上。

● ● ●

常见问题

Q:申请真的免费吗? 免费。MIMIC 的获取和学术使用都不收费,但要在论文里引用(DOI 和原文都有规范格式)。

Q:数据是脱敏的吗? 是。患者标识符替换成随机整数,日期整体随机平移(同一患者内部时间间隔保持不变),年龄超过 89 岁统一记为 91,死亡日期只保留出院后一年内的。

Q:能商用吗? DUA 限制原始数据的再分发,派生数据集必须在 PhysioNet 上以同样协议发布。商用场景建议先咨询法务,或者用合成数据验证流程。

Q:除了 MIMIC-IV 还有什么? MIMIC-III(40 万 ICU 患者的旧版)、eICU(美国 200 多家医院的 ICU 数据)、INSPIRE(韩国围手术期数据)。我们做本体交叉验证时用过 eICU,两个独立 ICU 库互相印证,结论更可信。

● ● ●

下一步

数据到手只是开始。下一篇讲怎么把 MIMIC 变成「AI 能安全查询的资产」——31 个工程验证过的 SQL 模板,让 LLM 只做选择题,不做自由发挥。

你申请过 MIMIC 吗?当时卡在哪一步,留言说说,没准能帮到后面的人。

● ● ●

参考来源

  1. 01
    MIMIC-IV v2.2 官方页面(PhysioNet,含申请要求与数据规模):https://physionet.org/content/mimiciv/2.2/
  2. 02
    MIMIC-IV 原始论文《MIMIC-IV, a freely accessible electronic health record dataset》(Sci Data 2023):https://doi.org/10.1038/s41597-022-01899-x
  3. 03
    MIMIC 官方文档与代码仓库:https://mimic.mit.edu
  4. 04
    DuckDB read_parquet 文档:https://duckdb.org/docs/data/parquet/overview