信息速览
中国的重症数据版图上,成人一侧早已被 MIMIC 与 eICU 占住,儿童一侧长期是空的。这不是因为儿童重症不重要,而是因为一家医院要同时具备三件事:足够大的儿科监护体量、十年以上的电子化记录、以及愿意把数据交出去的治理能力。浙江大学医学院附属儿童医院把这三件事凑齐了,于是有了 PIC:一家医院、五个监护单元、九年、一万二千余名患儿。
它的设计逻辑是「让会用 MIMIC 的人当天就能上手」。表名、主键、连接关系、甚至缺失值的写法都向 MIMIC-III 看齐,只在本地化上动刀:概念名多给一列中文,诊断编码保留本地的七位扩展,另加一张手术室生命体征表和一张从病程记录里抽出来的症状表。代价是它没有波形、没有自由文本、没有严重度评分——凡是要读原文或读监护仪屏幕才能拿到的东西,这里都没有。
所以它的正确定位不是「中国的 MIMIC」,而是「中国儿童重症唯一一份可以申请到的结构化病历底稿」:适合做队列构建、检验轨迹、用药模式、编码表型与院内结局,不适合做信号处理,也不适合代表全国。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 官方名称 | Paediatric Intensive Care database(PIC) |
| 建设机构 | 浙江大学医学院附属儿童医院 + 浙江大学生物医学工程与仪器科学学院 |
| 发布平台 | PhysioNet(MIT Laboratory for Computational Physiology),凭证访问档 |
| 版本与日期 | v1.0.0 于 2019-11-26 发布;v1.1.0 于 2020-11-12 发布(现行) |
| DOI | 版本 DOI 10.13026/32x9-wv38;最新版 DOI 10.13026/c9gh-n952;数据描述论文 10.1038/s41597-020-0355-4 |
| 地理范围 | 中国浙江省杭州市,单家儿童专科医院 |
| 监护单元 | 5 个:综合 ICU、儿科 ICU、外科 ICU、心脏 ICU、新生儿 ICU,合计 119 张监护床 |
| 时间跨度 | 2010–2018 年收治;发布时日期整体平移,显示为 2060–2120 |
| 患儿规模 | 12,881 名,13,941 次 ICU 住院,13,449 次院内住院 |
| 表结构 | 16 张表,沿用 MIMIC-III 骨架,另加 SURGERY_VITAL_SIGNS 与 EMR_SYMPTOMS |
| 记录量级 | 检验 10,094,117 行,护理记录 2,278,978 行,药嘱 1,256,591 行 |
| 语言 | 中英双语,每个概念列配一列 _cn 中文名 |
| 波形 | 无。仅术中每 5 分钟一条生命体征 |
| 自由文本 | 无原文。仅有 NLP 抽取的症状存在性标注 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0,凭证访问 |
| 访问门槛 | PhysioNet 账号 + 身份核验 + CITI 培训 + 数据使用协议,审核约 3 个工作日 |
§1 它要解决的具体麻烦
1.1 一句话:成人 ICU 的模型搬到儿童身上会错,而中国缺一份能验证这件事的数据
儿科重症的麻烦在于尺度。同样一支去甲肾上腺素,按体重算剂量对 3 公斤的新生儿和 60 公斤的青少年是两套完全不同的血流动力学后果;同样一个肌酐值,在出生三天的婴儿身上是正常,在十五岁少年身上是急性肾损伤。成人 ICU 数据库里那些被反复验证的评分、阈值、预警规则,直接搬到儿童身上不但可能失效,而且失效的方式往往是静默的——模型照样输出一个概率,只是这个概率不再对应任何真实的死亡风险。
这件事要验证,就需要儿童自己的数据。而儿童数据的公开程度远低于成人:美国有虚拟 PICU 登记系统,英国有国家审计登记,澳新有区域登记,但这些登记系统收的是质控字段,供审计与横向比较,不对研究界开放逐条记录。真正意义上的「开放儿科重症电子病历」,在 PIC 出现之前基本是空白。
PIC 填的就是这个空位,而且它选了一个聪明的入口:不去另造一套表结构,而是照抄一个已经被几千篇论文用过的结构。这让迁移成本从「重新学一套数据模型」降到「重新做一遍字段映射」。对大多数团队来说,后者是几天的事,前者是几个月的事。
1.2 三条常见的错误期待
期待一:以为它是英国的 PICANet 或者澳新的 ANZPIC。 三个名字里都有 PIC,含义完全不同。PICANet 是英国的国家儿科重症审计网络,ANZPIC 是澳新的儿科重症登记,二者都是持续运转的登记系统,收集的是少数质控变量,用途是国家级比较与质量改进。PIC database 是单家医院九年病历的结构化导出,收的是逐次检验、逐条医嘱、逐个护理观察。名字撞车带来的误会极多,检索文献时会同时命中三类结果。
期待二:以为它带床旁波形。 不带。它连「每分钟一条」的生命体征都没有,手术室外只有护士按护理常规间断抄录的数值。这意味着心率变异性、血压波形形态、机械通气波形一类的研究在这里做不了,得要 MIMIC 波形库或者 VitalDB 那一类资源。
期待三:以为它能当中国儿科重症的代表样本。 不能。它是一家省级儿童专科医院,同时是省里的儿科转诊中心,收治结构里难治与疑难病例的比重高于基层医院。用它的病死率、用药强度、住院日去推断全国水平,会系统性偏高。
1.3 它能给到的与给不到的
把需求摊开看会更清楚。下表左列是研究里最常见的八类诉求,中间是 PIC 实际给到的形态,右边是「够不够」的直白判断。判断标准不是「有没有这个字段」,而是「拿到这个字段之后能不能直接支撑一次分析」。
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 建一个儿童脓毒症队列 | ICD 编码 + 检验 + 生命体征 + 用药,可按时间窗组合 | 够,但脓毒症定义要自己实现,官方不给现成标签 |
| 做检验指标的轨迹分析 | 千万行级检验长表,带采样时刻与单位 | 够,是它最强的一层 |
| 做用药与预后关联 | 药嘱表一百余万行,含剂量、途径、起止 | 勉强够,缺给药执行记录,只有医嘱 |
| 做机械通气时长分析 | 护理记录里有呼吸机参数与气道相关项 | 不够稳,需自己按 ITEMID 拼,且缺起止事件表 |
| 做波形或信号质量研究 | 术中五分钟一条数值,无波形 | 不够,完全不可行 |
| 做文本挖掘或病历生成 | 只有症状存在性三元组,无原文 | 不够,只能做结构化症状的时间序列 |
| 做多中心外推验证 | 单中心,地理与机构都单一 | 不够,只能作为外部验证的一端 |
| 做儿童与成人的跨库比较 | 表结构与 MIMIC-III 对齐,可映射 | 够,但年龄分层与字段语义要逐项核对 |
这张表里最值得说的一句是「够,但定义要自己实现」。PIC 提供的是原料,不是结论:它不会告诉你谁是脓毒症,不会告诉你谁发生了急性肾损伤,也不会告诉你哪次插管是计划内的。所有表型都得自己写 SQL,而写出来的表型能不能与文献对比,取决于你有没有把儿科特有的判据(比如按年龄分层的肌酐基线、按胎龄校正的生理范围)实现进去。
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手上只有成人 ICU 模型,想验证它在儿童身上还剩多少 | 提供同结构、跨年龄的儿童队列,可做零样本外推 | 先按年龄分层跑一遍校准曲线,再决定是否重训 |
| 想做一个中国儿童的院内死亡预测模型,但没有数据 | 提供编码、检验、生命体征与结局标志 | 先做特征可得性盘点,再定特征集 |
| 手上有一篇用 MIMIC 做的研究,想复制到儿童人群 | 表结构可迁移,SQL 大部分能改写 | 逐条重写 itemid 常量,用字典表反查 |
| 做中文临床 NLP,需要中文概念词典 | 十六张表的概念列都配中文名,可当中文术语表 | 抽 _cn 列建词典,注意同义与缩写 |
| 需要给儿童用药剂量做参考区间 | 药嘱表含剂量、单位、途径与频次 | 先按体重与年龄归一,再剔除明显录入错误 |
| 想研究新生儿与年长儿的差异 | 含新生儿 ICU,年龄从 0 起 | 用矫正胎龄而非实足年龄分组 |
| 想找一个能长期做基准的公开集 | 版本稳定、引用量已过百、脚本齐全 | 固定版本号与 DOI,记录抽取 SQL |
| 需要多中心数据做泛化 | 只能提供一端 | 另找 eICU 或院内数据配成两中心设计 |
1.5 一句话判断
如果你要的是「中国儿童重症的结构化病历原料」,它是目前唯一可申请的选项;如果你要的是波形、原文或全国代表性,它一样都给不了。
1.6 不适合谁:四条边界
第一条,做信号处理的人。 库里没有任何波形,术中五分钟一条的数值也不足以重建呼吸或循环波形。任何以采样率为前提的方法,在这里没有落点。
第二条,需要自由文本的人。 官方明确说明,由于中文临床文书的自动去标识工具在当时不成熟,病历原文未获准发布。留给文本研究者的只有一张症状表,它记录的是「某个症状在某份文书的记录时刻被判定为存在或不存在」,没有句子、没有上下文、没有否定范围。
第三条,需要全国代表性的人。 单家医院、单一省份、且是省级转诊中心,三重叠加决定了它的人群偏向疑难重症。做患病率估计会失真,做机制探索与模型开发则不受影响。
第四条,需要即开即用的人。 从注册到拿到数据要经过身份核验、培训、协议与人工审核,官方给出的周期是约三个工作日,实际还要看培训课程的完成时间。急着当天出结果的场合,它不合适。
| 边界 | 具体表现 | 替代方案 |
|---|---|---|
| 无波形 | 仅术中五分钟数值 | MIMIC 波形库、VitalDB、巴塞罗那 SICU 波形库 |
| 无原文 | 仅症状存在性标注 | MIMIC-III 笔记、MIMIC-IV 出院小结 |
| 单中心 | 一家医院五个单元 | eICU-CRD 多中心、ANZICS APD 区域登记 |
| 门槛高 | 培训 + 协议 + 审核 | 完全开放许可的数据集 |
§2 数据构成与规格
2.1 十六张表,六个来源系统
全库十六张表,可以按功能分成四组:三张主表定义「谁、哪次住院、哪段监护」,三张字典表定义「编码是什么意思」,九张事件表承载「发生了什么」,还有一张症状表承载「文书写了什么」。这个分组不是官方分类,而是按连接关系自然形成的:主表提供键,字典表提供语义,事件表提供内容。
数据来自六套院内系统,这也是为什么表与表之间的时间粒度不一致。电子病历系统给护理观察,检验系统给结果,医嘱系统给药嘱,护理系统给液体出入量,麻醉系统给术中生命体征,各检查科室的报告系统给检查事件。整合时靠三个主键对齐,对不齐的记录被丢弃。
| 表名 | 功能 | 记录内容 | 时间粒度 |
|---|---|---|---|
| PATIENTS | 主表 | 患儿级身份与基本信息 | 每人一行 |
| ADMISSIONS | 主表 | 每次院内住院的起止与去向 | 每次住院一行 |
| ICUSTAYS | 主表 | 每段监护单元停留的起止 | 每段一行 |
| CHARTEVENTS | 事件 | 护理抄录的观察值 | 按护理常规,间断 |
| LABEVENTS | 事件 | 检验结果 | 按开单,间断 |
| PRESCRIPTIONS | 事件 | 药嘱 | 按医嘱,间断 |
| INPUTEVENTS | 事件 | 每日液体入量 | 每日一条 |
| OUTPUTEVENTS | 事件 | 液体出量 | 按记录,间断 |
| MICROBIOLOGYEVENTS | 事件 | 培养与药敏 | 按送检 |
| DIAGNOSES_ICD | 事件 | 出院诊断编码 | 每次住院若干条 |
| OR_EXAM_REPORTS | 事件 | 检查项目事件 | 按检查 |
| SURGERY_VITAL_SIGNS | 事件 | 术中生命体征 | 每 5 分钟 |
| EMR_SYMPTOMS | 事件 | 症状存在性 | 按文书记录时刻 |
| D_ITEMS | 字典 | 非检验类本地编码 | 静态 |
| D_LABITEMS | 字典 | 检验类本地编码 | 静态 |
| D_ICD_DIAGNOSES | 字典 | 诊断编码表 | 静态 |
| 来源系统 | 供给了哪些表 | 对分析的影响 |
|---|---|---|
| 医院电子病历系统 | CHARTEVENTS、EMR_SYMPTOMS | 观察值为护士抄录,非连续采样 |
| 实验室信息系统 | LABEVENTS、D_LABITEMS | 检验项目齐全,但只有开单时刻 |
| 计算机医嘱录入系统 | PRESCRIPTIONS | 有医嘱无执行,实际给药需推断 |
| 护理信息系统 | INPUTEVENTS、OUTPUTEVENTS | 出入量为班次汇总,非逐次 |
| 麻醉信息管理系统 | SURGERY_VITAL_SIGNS | 唯一的高频段,仅限手术期间 |
| 检查科室报告系统 | OR_EXAM_REPORTS、MICROBIOLOGYEVENTS | 只有事件与结论码,报告正文未发布 |
这张来源表解释了一个常被忽略的问题:同一个「血压」,在 CHARTEVENTS 里和无创袖带测的是同一个概念,在 SURGERY_VITAL_SIGNS 里可能来自有创动脉线。两处的记录频率、精度与误差结构都不同,混在一起求均值会把两种测量方式搅浑。做血流动力学分析时,必须先把这两张表分开看。
2.2 字段字典
核心三表
三张主表的主键关系是整库的骨架。SUBJECT_ID 是患儿级,一个患儿可以有多条 HADM_ID;HADM_ID 是住院级,一次住院可以有多条 ICUSTAY_ID。这三层键在所有事件表里都出现,是连接的唯一通道。
| 表 | 主键 | 关键字段 | 用途 |
|---|---|---|---|
| PATIENTS | SUBJECT_ID | GENDER、DOB、EXPIR_FLAG | 患儿级身份与结局 |
| ADMISSIONS | HADM_ID | ADMITTIME、DISCHTIME、ADMISSION_TYPE | 住院级时间窗 |
| ICUSTAYS | ICUSTAY_ID | FIRST_CAREUNIT、LAST_CAREUNIT、INTIME、OUTTIME、LOS | 监护停留与单元 |
观察与检验
CHARTEVENTS 是护理记录的主承载表,两百余万行,字段结构与 MIMIC 一致:一个 ITEMID 加一个值列,值可能是数值也可能是文本。它的稀疏性来自护理常规——稳定期每四小时一次,不稳定期加密,交接班时集中补录。
| 字段 | 类型 | 说明 | 注意点 |
|---|---|---|---|
| ROW_ID | 整数 | 行号 | 无业务含义 |
| SUBJECT_ID | 整数 | 患儿编号 | 连接键 |
| HADM_ID | 整数 | 住院编号 | 连接键 |
| ICUSTAY_ID | 整数 | 监护停留编号 | 可为空,门诊记录无此值 |
| ITEMID | 字符 | 观察项编码 | 字符型,需查字典表 |
| CHARTTIME | 时间 | 记录时刻 | 与真实采样时刻可能相差数分钟 |
| VALUE | 字符 | 观察值原文 | 数值与文本混存 |
| VALUENUM | 浮点 | 数值化后的值 | 文本型观察此处为空 |
| VALUEUOM | 字符 | 单位 | 同项可能有多单位混存 |
| ERROR | 整数 | 是否标记为错误 | 极少数记录带此标记 |
LABEVENTS 是最大的表,一千万行以上。它的价值在于密度:一个住院长达数十天的重症患儿,检验项可以有上千条,覆盖血气、生化、血常规、凝血、炎症标志物。它的坑在于单位与参考区间:同一项目在不同年份、不同仪器上可能用不同单位记录,直接合并会得到荒谬的分布。
| 字段 | 类型 | 说明 | 注意点 |
|---|---|---|---|
| SUBJECT_ID | 整数 | 患儿编号 | 连接键 |
| HADM_ID | 整数 | 住院编号 | 连接键 |
| ITEMID | 字符 | 检验项编码 | 查 D_LABITEMS |
| CHARTTIME | 时间 | 采样或报告时刻 | 与采血时刻可能不同 |
| VALUE | 字符 | 结果原文 | 含「<0.01」一类不等式 |
| VALUENUM | 浮点 | 数值化结果 | 不等式记录此处为空 |
| VALUEUOM | 字符 | 单位 | 必须逐项核对 |
| FLAG | 字符 | 异常标记 | 阈值依本地参考区间而定 |
药嘱、液体、微生物与症状
PRESCRIPTIONS 记录医嘱,不记录执行。这是一个必须记住的区别:医嘱开了但没给、给了但剂量调整、临时停药,这些在表中都表现为一条起止时间与一个剂量字段,真实给药需要从护理记录里反推。
| 表 | 关键字段 | 语义 | 注意 |
|---|---|---|---|
| PRESCRIPTIONS | DRUG_NAME、DOSE_VAL、ROUTE | 医嘱内容与剂量途径 | 无执行记录 |
| INPUTEVENTS | AMOUNT、ITEMID | 每日入量分类汇总 | 班次口径 |
| OUTPUTEVENTS | AMOUNT、ITEMID | 尿量、引流、透析分列 | 类别需归并 |
| MICROBIOLOGYEVENTS | SPEC_TYPE_DESC、ORG_NAME、AB_NAME | 标本、菌名与药敏 | 需表型化 |
| EMR_SYMPTOMS | SYMPTOM、NEGATION、CHARTTIME | 症状存在性与记录时刻 | 记录非发生时刻 |
字典表与双语列
字典表是全库最容易被低估的部分。十六张表里只有三张字典表,但它们决定了你能不能把本地编码翻译成可解释的概念。D_LABITEMS 收检验项,D_ITEMS 收非检验项,D_ICD_DIAGNOSES 收诊断码,三张表都以字符型编码为键。
| 字典表 | 行数量级 | 键 | 提供的语义 |
|---|---|---|---|
| D_LABITEMS | 八百余行 | ITEMID | 检验项名、单位、所属分类、LOINC 对照 |
| D_ITEMS | 四百余行 | ITEMID | 观察项名、单位、所属分类 |
| D_ICD_DIAGNOSES | 两万五千余行 | ICD10_CODE | 诊断名,含本地七位扩展码 |
双语是本库的独有设计。每一个概念列都配一列 _cn 中文名,命名规则是英文列名后加下划线加 cn。这条规则贯穿全库,使得同一行记录既有英文概念也有中文概念,可以直接用于中文术语抽取,也可以在中文语境下核对英文翻译是否有歧义。
| 英文列 | 中文列 | 设计意图 | 使用注意 |
|---|---|---|---|
| DRUG_NAME | DRUG_NAME_CN | 药名英译与原名对照 | 英译可能一对多 |
| SYMPTOM | SYMPTOM_CN | 症状英译与原名对照 | 缩写与俗称齐全 |
| LABEL | LABEL_CN | 观察项名对照 | 同项可能有多个别名 |
| AB_NAME | AB_NAME_CN | 抗菌药名对照 | 商品名与通用名并存 |
| ORG_NAME | ORG_NAME_CN | 菌名对照 | 拉丁名与中文名对照 |
2.3 一条记录的完整解剖
把一次 ICU 住院摊开,能看到一条典型的时间线:入院、进监护单元、反复检验、护理观察、用药调整、转出或死亡。下面这段是这条时间线在库里的形状,用文本块示意,字段名与真实表一致。
PATIENTS SUBJECT_ID=10006 GENDER=F DOB=2073-04-11 EXPIR_FLAG=0
ADMISSIONS HADM_ID=100001 ADMITTIME=2076-01-08 09:12 DISCHTIME=2076-02-19 15:40
ADMISSION_TYPE=EMERGENCY INSURANCE=自费 ETHNICITY=汉族
ICUSTAYS ICUSTAY_ID=100001 FIRST_CAREUNIT=NICU LAST_CAREUNIT=NICU
INTIME=2076-01-08 11:30 OUTTIME=2076-02-18 09:00 LOS=40.9
LABEVENTS ITEMID=LAB0012 CHARTTIME=2076-01-08 12:05 VALUE=7.31 VALUEUOM=无单位
ITEMID=LAB0034 CHARTTIME=2076-01-08 12:05 VALUE=132 VALUEUOM=mmol/L
CHARTEVENTS ITEMID=ITEM021 CHARTTIME=2076-01-08 14:00 VALUE=142 VALUEUOM=mmHg
PRESCRIPTIONS DRUG_NAME=Meropenem DOSE_VAL=20 DOSE_UNIT=mg/kg ROUTE=静滴
STARTDATE=2076-01-08 ENDDATE=2076-01-19
DIAGNOSES_ICD ICD10_CODE=P59.300 SEQ_NUM=1
EMR_SYMPTOMS SYMPTOM=fever NEGATION=+ CHARTTIME=2076-01-08 20:10
这段示意里的每一行都对应一张真实表,键值在表之间严格一致。注意三点:日期是平移后的,所以 2076 年对应真实的 2010 年代某年;症状表里的负号表示该文书判定症状不存在,而不是缺记录;药嘱的剂量单位是每公斤体重,跨患儿比较前必须乘以体重。
2.4 记录量分布表:按表看行数与连接键
下表的行数是官方数据描述论文给出的整库统计,用途是估算存储与查询代价,不是分析结果。行数差异跨越两个数量级,这决定了任何全表扫描都要挑表做。
| 表 | 行数 | 相对量级 | 建议索引 |
|---|---|---|---|
| LABEVENTS | 10,094,117 | 最大 | SUBJECT_ID + ITEMID + CHARTTIME |
| CHARTEVENTS | 2,278,978 | 次大 | ICUSTAY_ID + ITEMID |
| PRESCRIPTIONS | 1,256,591 | 大 | HADM_ID + DRUG_NAME |
| SURGERY_VITAL_SIGNS | 1,216,011 | 大 | ICUSTAY_ID + CHARTTIME |
| EMR_SYMPTOMS | 402,142 | 中 | HADM_ID + SYMPTOM |
| MICROBIOLOGYEVENTS | 183,869 | 中 | HADM_ID + SPEC_TYPE_DESC |
| OR_EXAM_REPORTS | 183,809 | 中 | HADM_ID |
| OUTPUTEVENTS | 39,891 | 小 | ICUSTAY_ID |
| INPUTEVENTS | 26,884 | 小 | ICUSTAY_ID |
| D_ICD_DIAGNOSES | 25,378 | 字典 | ICD10_CODE |
| DIAGNOSES_ICD | 13,365 | 小 | HADM_ID + SEQ_NUM |
| ADMISSIONS | 13,449 | 主表 | HADM_ID |
| ICUSTAYS | 13,941 | 主表 | ICUSTAY_ID |
| PATIENTS | 12,881 | 主表 | SUBJECT_ID |
| D_LABITEMS | 832 | 字典 | ITEMID |
| D_ITEMS | 466 | 字典 | ITEMID |
2.5 与同类资源的字段差异
与 MIMIC-III 比,PIC 的差异集中在三处:ITEMID 的类型、新增的两张表、以及缺失的几类内容。前两处是显式的,文档里有说明;第三处是隐式的,只有真正用过 MIMIC 的人才会发现少了什么。
| 维度 | MIMIC-III | PIC | 迁移影响 |
|---|---|---|---|
| ITEMID 类型 | 整型 | 字符型 | 所有写死 itemid 的查询失效 |
| 表数量 | 二十六张 | 十六张 | 需要重新盘点可用表 |
| 手术室生命体征 | 无独立表 | 有 SURGERY_VITAL_SIGNS | 多一个高频数据源 |
| 症状表 | 无 | 有 EMR_SYMPTOMS | 多一个结构化症状源 |
| 自由文本 | 有笔记表 | 无 | 文本研究不可行 |
| 波形 | 有配套波形库 | 无 | 信号研究不可行 |
| 严重度评分 | 有 SAPS、SOFA 派生 | 无预计算列 | 需自行实现 |
| 日期 | 平移至未来 | 平移至未来 | 处理方式相同 |
两张表合起来说明一件事:PIC 不是「中国版 MIMIC」,而是「儿童版、单中心版、结构化版」的 MIMIC。它牺牲了广度与粒度,换来了年龄覆盖与语言覆盖。做跨库研究时,把它放在「外部验证的一端」而不是「主训练集」,是更稳妥的用法。
§3 它是谁的样本:一家儿童医院的五个监护单元
3.1 五个监护单元装进同一个库
PIC 最容易被忽略的结构特征是「五个单元一个库」。综合 ICU、儿科 ICU、外科 ICU、心脏 ICU、新生儿 ICU 各自有自己的收治逻辑、护理常规与病种谱,但在库里它们共用一套表、一套编码、一套字典。唯一能区分单元的是 ICUSTAYS 表里的 FIRST_CAREUNIT 与 LAST_CAREUNIT 两个字段。
这种设计带来一个便利与一个陷阱。便利是跨单元比较变得容易:同一套 SQL 换个过滤条件就能分别跑五个单元。陷阱是单元标签的语义依赖人工维护,转科记录一旦错标,分组就失效。做单元间比较前,先看 FIRST_CAREUNIT 与 LAST_CAREUNIT 是否一致的记录占多大比例,不一致的就是转运病例。
| 监护单元 | 缩写 | 主要收治 | 对分析的影响 |
|---|---|---|---|
| 综合 ICU | GICU | 病情复杂、诊断未明的急危重症 | 病种最杂,适合做通用模型 |
| 儿科 ICU | PICU | 内科为主的儿童危重症 | 与成人 PICU 研究可比性最强 |
| 外科 ICU | SICU | 术后与创伤 | 手术相关字段更完整 |
| 心脏 ICU | CICU | 先天性心脏病围术期 | 血流动力学与体外循环相关 |
| 新生儿 ICU | NICU | 早产、低出生体重、新生儿黄疸与感染 | 需用矫正胎龄而非实足年龄 |
3.2 病例组合:从早产儿到青少年
官方的年龄范围写的是 0 至 18 岁。这五个字背后是差别极大的两类人:一端是出生即入 NICU 的早产儿,体重可能不足两公斤,生理参数以小时计变化;另一端是十七岁的创伤或血液肿瘤患者,生理上已接近成人。把两端放进同一个模型,本质上是在要求模型同时学会两套生理学。
| 人群段 | 约占收治的位置 | 生理特点 | 分析建议 |
|---|---|---|---|
| 早产与低出生体重 | NICU 主体 | 体温调节、呼吸、喂养均未成熟 | 用矫正胎龄,剔除出生当日极端值 |
| 足月新生儿 | NICU 一部分 | 黄疸、感染、窒息为主 | 与早产儿分开建模 |
| 婴幼儿 | PICU 与 GICU | 气道细小、代偿快、失代偿也快 | 呼吸相关特征权重要高 |
| 学龄儿童 | PICU 与 SICU | 创伤与感染并重 | 可与成人模型做迁移学习 |
| 青少年 | SICU、CICU | 生理接近成人 | 可作跨库桥接人群 |
3.3 双语与编码:为什么 ITEMID 是字符
PIC 把本地编码原样保留,再把英文概念挂上去,而不是先映射到国际标准再发布。这个选择带来两个后果。好的一面是信息不丢失:本地七位扩展的 ICD-10 码比标准五位码更细,中文诊断名比英文更具体,直接丢掉就浪费了。坏的一面是跨库对齐成本上升:别人用的是标准码,你要自己做一次映射。
ITEMID 用字符型也是同一个逻辑。本地编码里混着字母与数字,强行转成整型会丢信息或者产生碰撞。代价是所有按整型键写的查询都要改,而且改的时候不会报错,只会返回空集。
| 编码体系 | 覆盖范围 | 保真程度 | 对齐成本 |
|---|---|---|---|
| ICD-10 本地七位扩展 | 出院诊断 | 高于标准码 | 需截断到五位或做映射 |
| ICD-O-3 | 肿瘤形态学 | 标准 | 低 |
| LOINC | 检验项 | 部分项目已对照 | 中 |
| 本地 ITEMID | 观察项与检验项 | 原始 | 高,只能靠字典表 |
| 自定义症状表 | 症状 | 已归一为英文词 | 低 |
3.4 九年、一家医院、一个省的中心
时间跨度是 2010 到 2018 年,覆盖中国新一轮医改后电子病历快速普及的阶段。这个窗口有一个副作用:早年的记录质量与晚年不同。系统在演进,字段在增加,护理录入的规范程度在提高。做时间趋势分析时,2010 年与 2018 年的记录可比性需要单独检验。
机构背景同样重要。这家医院有一千九百张床,年门急诊量以百万计,是浙江省的儿童医疗中心,同时接收来自省内十一个城市的转诊危重患儿。这意味着它的病例组合天然偏向疑难与危重,常见病、轻症、以及基层医院能处理的情况在这里占比低。
| 时间维度 | 事实 | 对分析的影响 |
|---|---|---|
| 起止 | 2010–2018 | 跨越电子病历普及期,早期记录较薄 |
| 显示年份 | 平移后约 2060–2120 | 不能按真实年份做外部对齐 |
| 季节信息 | 保留 | 可做季节性分析 |
| 星期信息 | 保留 | 可做工作日效应分析 |
| 单日时刻 | 保留 | 可做昼夜节律分析 |
| 患者内间隔 | 保留 | 可做住院时长与事件间隔分析 |
3.5 伦理、去标识与治理
伦理审查由医院机构审查委员会批准,豁免了个体知情同意,理由是研究不影响诊疗且全部受保护健康信息已去除。去标识按 HIPAA 列举的标识符清单执行,姓名、住址、电话、证件号等全部清除,患儿、住院、监护三个编号重新随机分配且不保留映射表。
日期处理是这套治理里最值得单独说的一环。每名患者的所有日期整体平移 50 至 100 年,因此记录显示在 2060 至 2120 年之间。平移是患者级的,同一患者内部的所有间隔保持不变,一天中的时刻、星期几、以及按三个月划分的季节也刻意保留。这套设计的目标是:跨患者的时间关系被打散,患者内部的时间关系被保住。
| 治理项 | 做法 | 保留了什么 | 牺牲了什么 |
|---|---|---|---|
| 标识符清除 | 按 HIPAA 清单逐项删除 | 临床内容 | 任何直接身份线索 |
| 编号重分配 | 三个主键随机生成,不留映射 | 连接关系 | 与院内系统回连的可能 |
| 日期平移 | 患者级整体后移 50–100 年 | 患者内间隔、时刻、星期、季节 | 真实日历年、跨患者同期性 |
| 民族编码 | 极小样本合并为 Other | 主要类别 | 稀有民族的细分 |
| 文本处置 | 原文不发布,仅发布抽取结果 | 症状结构化信息 | 句子、上下文、否定范围 |
§4 质量与特色:它留下了哪一层,又抹掉了哪一层
4.1 症状层:一张从文书里抽出来的表
EMR_SYMPTOMS 是全库最有争议也最有特色的一张表。它的做法是:用自然语言处理从入院记录、出院小结、病程记录、转科记录中抽取症状词,判定其在文中是存在还是不存在,把结果与文书记录时刻一起发布。四十余万行的规模,说明抽取覆盖面不小。
官方给过一轮人工核对:随机抽一百份文书,抽出三千四百余条症状,两名作者独立核对,平均准确率九成一左右。官方同时列出了三类主要错误来源:中文长短语缺乏自然词边界导致分词错误、情感判定把存在判成不存在或反之、以及把描述家属症状的句子误判为患者本人。这三点值得每个使用者记住,因为它们决定了这张表能做什么、不能做什么。
| 质量维度 | 官方口径 | 对使用的含义 |
|---|---|---|
| 抽取方法 | 规则与模型结合的中文症状抽取 | 非人工标注 |
| 核对样本 | 随机一百份文书 | 样本量有限 |
| 抽取条数 | 三千四百余条症状 | 只看这一批 |
| 平均准确率 | 约九成一 | 单条不可全信,聚合可用 |
| 错误来源一 | 长短语分词错误 | 复合症状易出错 |
| 错误来源二 | 极性判定错误 | 阴性症状可能被记成阳性 |
| 错误来源三 | 家属症状误挂患者 | 儿科特有,需警惕 |
| 时间语义 | 记录时刻,非发生时刻 | 不能当发病时间 |
4.2 日期平移带来的连锁后果
第一个场景是与外部数据对齐。想把住院日与当年的流感季、空气质量、政策实施日对齐,做不到,因为年份已经不可信。第二个场景是跨患者的时间聚类。想研究「同一时期入院的患儿是否有共同暴露」,做不到,因为每名患者的平移量不同,同期入院的患者被拆散到几十年里。第三个场景是年龄计算。用出院日期减出生日期得到的月龄仍然正确,因为两者被同一个常数平移;但如果用某个固定参考日期去减,结果就完全错了。
4.3 与 MIMIC 脚本的兼容边界
「表结构沿用 MIMIC-III」这句话容易被读成「代码可以直接跑」。真实情况是:骨架能跑,血肉要换。连接逻辑、时间窗写法、缺失值处理这些结构性代码可以照搬;任何涉及具体 ITEMID、具体药名、具体诊断码的部分都必须重写。
| 代码类型 | 可迁移程度 | 需要改什么 | 风险 |
|---|---|---|---|
| 建库与索引脚本 | 高 | 仅需调整字段类型 | 低 |
| 时间窗与队列逻辑 | 高 | 一般无需改 | 低 |
| 生命体征提取 | 低 | ITEMID 全部重映射 | 高,易静默返回空 |
| 检验项提取 | 低 | ITEMID 与单位重映射 | 高,易混单位 |
| 用药提取 | 中 | 药名体系不同 | 中,需建别名表 |
| 合并症评分 | 中 | ICD 版本与位数不同 | 中,七位码需截断 |
| 严重度评分 | 不可迁移 | 本库无对应变量 | 高,可能算出全空列 |
最后一行值得展开。MIMIC 生态里有大量现成的严重度评分实现,跑之前会默认先算一组基础变量。PIC 没有这些变量,脚本不会报错,只会给出一列 NaN,然后在建模阶段被当成「该评分对结局无预测力」。这类静默失败是迁移过程中最常见的坑。
4.4 案例:一个 NICU 患儿的 41 天(构造示例)
为了让上面这些抽象描述落到地面,这里构造一个读法示例。它不是库里的真实患者,而是按表结构与字段语义拼出来的典型轨迹,用来演示一条记录该怎么被读。所有键值都是编造的,但字段之间的关系与真实记录一致。
设定:一名胎龄三十周早产儿,出生当日转入 NICU,住院四十一天,期间经历呼吸支持、感染治疗与喂养建立,最终好转出院。在库里,这会呈现为一条 PATIENTS、一条 ADMISSIONS、一条 ICUSTAYS、数百条 LABEVENTS、上千条 CHARTEVENTS、数十条 PRESCRIPTIONS、若干条 DIAGNOSES_ICD,以及散落在病程记录时刻上的症状标注。
| 层面 | 这条记录里的样子 | 读的时候要注意 |
|---|---|---|
| 身份 | 出生日期与入院日期相差不到一天 | 月龄接近零,矫正胎龄为负,需按胎龄处理 |
| 住院 | 入院类型为急诊,付费方式为医保 | 入院类型不能代表病情严重度 |
| 监护 | 首末单元都是 NICU,停留四十余天 | 长停留本身是结局的一部分 |
| 检验 | 血气、胆红素、血常规反复出现 | 早期血气密度高,后期稀疏 |
| 观察 | 体温、心率、呼吸、经皮血氧为主 | 护理抄录,间隔不均 |
| 用药 | 抗菌药疗程明显,另有静脉营养 | 医嘱起止不等于实际给药起止 |
| 诊断 | 早产、低出生体重、新生儿感染等编码 | 编码顺序不必然反映主次 |
| 症状 | 喂养困难、黄疸、呼吸急促等被标注存在 | 记录时刻滞后于症状出现 |
这个案例的价值在于示范三件事。第一,年龄字段不能直接用实足年龄,早产儿必须换算矫正胎龄,否则生长与发育相关指标全部失真。第二,长停留的患儿在检验密度上呈现「前密后疏」,任何把时间轴等距切分的特征工程都会在后期制造大量空窗。第三,症状表的记录时刻滞后于真实症状,用它做预警会高估提前量。后文 §7.3 讨论偏差时,还会回到 §4.4 的案例;§5.4 建队列时也会用到它;§9.2 的最短流程同样以它为模板。
§5 怎么把它拿到手并装进本地库
5.1 三道门槛与一条时间线
访问路径分三步,缺一步都拿不到文件。第一步是 PhysioNet 账号与身份核验,需要提供机构邮箱与身份证明,核验通过后账号才具备申请凭证数据的资格。第二步是完成 CITI 的 Data or Specimens Only Research 培训并通过考核,证书要上传。第三步是提交研究用途说明并签署凭证健康数据使用协议 1.5.0,说明里要写清研究目的、数据用途与保管措施。
| 步骤 | 要做的事 | 耗时 | 常见卡点 |
|---|---|---|---|
| 一 | 注册 PhysioNet 并完成身份核验 | 数小时到数日 | 机构邮箱不被识别 |
| 二 | 完成 CITI 培训并取得证书 | 数小时 | 选错课程模块 |
| 三 | 提交研究说明与签署协议 | 约三个工作日审核 | 用途描述过于笼统 |
| 四 | 获取下载指引并取数 | 视带宽 | 大文件断点续传 |
5.2 目录结构与装载
官方发布形态是一组 gzip 压缩的 CSV,加上两套建库脚本:MySQL 用 define.sql、index.sql、constraints.sql 三步,PostgreSQL 用分号的建表装载脚本加索引与约束脚本。目录结构扁平,表名即文件名,没有嵌套分区。
#-- 建库:MySQL 路线,先建 schema 再按序执行三个脚本
mysql -u root -p -e "CREATE DATABASE pic CHARACTER SET utf8mb4;"
for f in define.sql index.sql constraints.sql; do
mysql -u root -p pic < "$f"
done
#-- 建库:PostgreSQL 路线,可直接读 gzip,不必先解压
createdb pic
psql -d pic -c "CREATE SCHEMA pic;"
psql -d pic -c "SET search_path TO pic;"
psql -d pic -f 1-create-tables-load-data-gzip.sql
psql -d pic -f 2-index.sql
psql -d pic -f 3-constraints.sql
#-- 装载后核对行数,与官方论文的表 1 对照
psql -d pic -c "SELECT relname, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC;"
5.3 用 Python 读表并做第一轮体检
拿到数据后的第一件事不是建模,而是体检:确认行数、确认主键唯一、确认时间窗合法、确认单位分布。下面这段脚本做四件事,全部基于本地 PostgreSQL,不依赖任何私有接口。
import os
import pandas as pd
from sqlalchemy import create_engine
#-- 连接串从环境变量取,不把口令写进脚本
dsn = (
f"postgresql+psycopg2://{os.environ['PGUSER']}:{os.environ['PGPASSWORD']}"
f"@{os.environ.get('PGHOST', 'localhost')}:{os.environ.get('PGPORT', '5432')}/pic"
)
eng = create_engine(dsn, connect_args={"options": "-c search_path=pic"})
#-- 一、三张主表的规模与主键唯一性
for t, k in [("patients", "subject_id"), ("admissions", "hadm_id"), ("icustays", "icustay_id")]:
df = pd.read_sql(f"SELECT {k} FROM {t}", eng)
print(t, len(df), "unique:", df[k].nunique())
#-- 二、时间窗合法性:出单元必须晚于入单元
q = """
SELECT COUNT(*) AS bad
FROM icustays
WHERE outtime <= intime OR intime IS NULL OR outtime IS NULL
"""
print(pd.read_sql(q, eng))
#-- 三、检验单位分布,挑出同一项目多单位的行
q = """
SELECT itemid, valueuom, COUNT(*) AS n
FROM labevents
GROUP BY itemid, valueuom
HAVING COUNT(*) > 1000
ORDER BY n DESC
LIMIT 50
"""
units = pd.read_sql(q, eng)
multi = units.groupby("itemid").size()
print("多单位项目数:", int((multi > 1).sum()))
#-- 四、按年看记录密度,确认早期年份是否偏薄
q = """
SELECT DATE_PART('year', charttime) AS y, COUNT(*) AS n
FROM labevents GROUP BY 1 ORDER BY 1
"""
print(pd.read_sql(q, eng).head(20))
5.4 建一个可复现的队列
队列构建是这类数据最核心的一步。下面这段 SQL 以 §4.4 的案例为模板:取所有 NICU 停留、停留超过三天、且在停留期间做过血气检测的患儿,输出一人一行的人表。写法刻意保留了中间步骤,便于逐段核对。
-- 第一步:锁定监护停留,限定单元与最短停留时长
WITH stay AS (
SELECT i.subject_id, i.hadm_id, i.icustay_id, i.first_careunit,
i.intime, i.outtime, i.los
FROM icustays i
WHERE i.first_careunit = 'NICU'
AND i.los >= 3
),
-- 第二步:在停留时间窗内找血气类检验,先取项目清单再回挂
gas_items AS (
SELECT itemid FROM d_labitems
WHERE LOWER(label) LIKE '%blood gas%' OR LOWER(label) LIKE '%血气%'
),
gas AS (
SELECT s.icustay_id, COUNT(*) AS n_gas, MIN(l.charttime) AS first_gas
FROM stay s
JOIN labevents l
ON l.hadm_id = s.hadm_id
AND l.charttime BETWEEN s.intime AND s.outtime
WHERE l.itemid IN (SELECT itemid FROM gas_items)
GROUP BY s.icustay_id
),
-- 第三步:挂结局与人口学
final AS (
SELECT s.subject_id, s.hadm_id, s.icustay_id, s.los,
p.gender, p.dob, a.admittime, a.dischtime,
p.expir_flag AS died, g.n_gas, g.first_gas
FROM stay s
JOIN patients p ON p.subject_id = s.subject_id
JOIN admissions a ON a.hadm_id = s.hadm_id
LEFT JOIN gas g ON g.icustay_id = s.icustay_id
)
SELECT * FROM final ORDER BY subject_id, icustay_id;
这段 SQL 有三处需要按本库实际情况核对。第一,血气的项目名在字典表里用的是本地英译,LIKE 匹配只能召回一部分,正式使用前应先跑一条 SELECT itemid, label, label_cn FROM d_labitems WHERE label ILIKE '%gas%' 把清单打出来人工确认。第二,expir_flag 的取值口径要以字段说明为准,做完先 GROUP BY 看一眼分布是否只有零与一。第三,stay 只按首个单元过滤,同一患儿若在多个单元停留会被计入多条,若研究单位是「人」而非「段」,需要再按 subject_id 去重并规定取哪一段。写完务必先加 LIMIT 100 看一眼数据长什么样,再全量跑。
5.5 把症状表变成时间线
症状表的正确用法是当作一条稀疏的时间序列,而不是一张横断面标签表。下面这段代码把同一住院的症状按天聚合,得到「每天出现了哪些症状」的矩阵,可以直接喂给时序模型,也可以用来做症状轨迹聚类。
import pandas as pd
#-- 只取阳性症状,负号记录代表「明确不存在」,与缺失不是一回事
sym = pd.read_sql(
"SELECT subject_id, hadm_id, symptom, negation, charttime FROM emr_symptoms",
eng,
)
sym = sym[sym["negation"].astype(str).str.strip() == "+"].copy()
sym["charttime"] = pd.to_datetime(sym["charttime"])
#-- 以入院时刻为原点,把绝对时间换算成住院第几天
adm = pd.read_sql("SELECT hadm_id, admittime FROM admissions", eng)
adm["admittime"] = pd.to_datetime(adm["admittime"])
sym = sym.merge(adm, on="hadm_id", how="left")
sym["day"] = (sym["charttime"] - sym["admittime"]).dt.days
#-- 一人一天一症状只留一条,避免同一天多次文书重复计数
sym = sym.drop_duplicates(subset=["hadm_id", "day", "symptom"])
#-- 透视成 住院 × 天 的症状集合
panel = (
sym.groupby(["hadm_id", "day"])["symptom"]
.apply(lambda s: "|".join(sorted(set(s))))
.reset_index()
)
print(panel.head(10))
print("覆盖住院数:", panel["hadm_id"].nunique())
5.6 校验与常见报错
#-- 四类校验,输出应全为 0(行数校验除外)
psql -d pic <<'SQL'
SELECT 'orphan_lab' AS check_name, COUNT(*) AS n
FROM labevents l LEFT JOIN admissions a USING (hadm_id)
WHERE a.hadm_id IS NULL
UNION ALL
SELECT 'bad_time', COUNT(*) FROM icustays WHERE outtime <= intime
UNION ALL
SELECT 'dup_icustay', COUNT(*) FROM (
SELECT icustay_id FROM icustays GROUP BY icustay_id HAVING COUNT(*) > 1
) t
UNION ALL
SELECT 'future_chart', COUNT(*) FROM labevents
WHERE charttime > TIMESTAMP '2200-01-01';
SQL
#-- 与官方论文对照的三张主表行数
psql -d pic -c "SELECT COUNT(*) FROM patients;"
psql -d pic -c "SELECT COUNT(*) FROM admissions;"
psql -d pic -c "SELECT COUNT(*) FROM icustays;"
| 报错或异常 | 原因 | 处理 |
|---|---|---|
| 查询返回 0 行 | ITEMID 写成整型,字符型键不匹配 | 加引号,用字典表核对取值 |
| 数值列全为空 | 该观察项本身是文本型 | 改用 VALUE 列并做文本解析 |
| 行数比官方少一截 | 装载中断或编码错误 | 检查日志与字符集,重装单表 |
| 时间差为负 | 用了入院时刻当监护起点 | 改用 ICUSTAYS 的 INTIME |
| 单位五花八门 | 同一项目多单位并存 | 按单位分组,先归一 |
| 中文乱码 | 建库字符集非 utf8mb4 | 重建库并指定字符集 |
§6 与库内条目的关系
6.1 关系图谱:它站在哪一格
在本库的坐标系里,PIC 的位置可以由两个轴确定:横轴是「数据来源的广度」(单中心到多中心到全国登记),纵轴是「记录的结构化程度」(纯结构化到含文本到含波形)。PIC 落在「单中心 + 纯结构化」这一格,与它相邻的是 MIMIC-III 与 eICU-CRD,与它对角的是各类波形库。
| 库内词条 | 与 PIC 的关系 | 差在哪 | 什么时候选它 |
|---|---|---|---|
| MIMIC-III | 结构母本 | 成人、美国、含文本与波形配套 | 需要原文或波形 |
| MIMIC-IV | 结构升级版 | 成人、美国、时间更新 | 需要当代成人队列 |
| eICU-CRD | 多中心对照 | 成人为主、美国、分钟级数据 | 需要跨中心泛化 |
| ANZICS APD | 区域登记对照 | 成人、澳新、质控字段 | 需要区域基准 |
| Neurocritical-Pediatric | 儿科近邻 | 神经重症专项、体量小 | 只做颅内压与脑血流 |
| 巴塞罗那 SICU 波形库 | 波形对照 | 成人外科、无病历 | 需要原始波形 |
| VitalDB | 术中对照 | 韩国、术中、含波形 | 需要术中高频信号 |
| EchoNet-Pediatric | 影像近邻 | 超声视频、无病历 | 做心脏影像 |
| BraTS-Pediatric | 影像近邻 | 脑 MRI、肿瘤分割 | 做肿瘤影像 |
| Helsinki 新生儿 EEG | 信号近邻 | 脑电、例数少 | 做新生儿癫痫检测 |
| 儿童囊性纤维化多组学 | 专病近邻 | 单病种纵向多组学 | 做专病机制 |
| 对比项 | PIC | MIMIC-IV | eICU-CRD | ANZICS APD |
|---|---|---|---|---|
| 人群 | 0–18 岁 | 成人为主 | 成人为主 | 成人 |
| 中心数 | 1 | 1 | 多 | 多 |
| 国家 | 中国 | 美国 | 美国 | 澳大利亚与新西兰 |
| 含 NICU | 是 | 有限 | 否 | 否 |
| 含文本 | 否 | 是 | 有限 | 否 |
| 含波形 | 否 | 配套库有 | 否 | 否 |
| 访问 | 凭证 | 凭证 | 凭证 | 申请审核 |
6.2 检索路径:从需求反查词条
站内检索按需求词走比按库名走更有效。想要儿童重症病历,搜「儿童重症」会同时命中本篇、Neurocritical-Pediatric 与几个儿科影像词条;想要能替代的成人库,搜「重症监护」会落到 MIMIC 与 eICU 一系;想要信号,搜「波形」会绕开本篇。
| 你的检索意图 | 建议关键词 | 会命中的主要词条 | 备注 |
|---|---|---|---|
| 中国儿童重症结构化病历 | 儿童重症、PICU、NICU | 本篇 | 唯一直接命中 |
| 成人重症电子病历 | 重症监护、MIMIC、eICU | MIMIC-III、MIMIC-IV、eICU-CRD | 体量大得多 |
| 儿科神经重症 | 颅内压、神经重症 | Neurocritical-Pediatric | 专项、体量小 |
| 术中高频信号 | 术中、波形、VitalDB | VitalDB | 手术室场景 |
| ICU 床旁波形 | 波形、监护仪 | 巴塞罗那 SICU 波形库、MIMIC 波形库 | 无病历 |
| 儿科心脏影像 | 超声、先心 | EchoNet-Pediatric | 视频为主 |
| 新生儿脑电 | 新生儿、EEG | Helsinki 新生儿 EEG | 例数少、标注细 |
| 区域 ICU 质控基准 | 登记、质控 | ANZICS APD | 登记系统,非逐条病历 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
读到这里,一个自然的误判是把 PIC 当成「小一号的 MIMIC」,然后拿 MIMIC 的标准逐项打分,得出「字段少、粒度粗、覆盖窄」的结论。这个误判的根源在于把两类资源的任务混为一谈。MIMIC 的任务是「尽可能完整地保存一家医院重症监护的全部数字痕迹」,它的成功标准是保真度;PIC 的任务是「让全世界的研究者第一次能用上中国儿童重症的结构化病历」,它的成功标准是可用性与合规性。
这两个目标函数不一样,评价维度就必须换。前者该问「丢了多少」,后者该问「在不丢人的前提下能给出多少」。PIC 的每一处缺失几乎都能追到一条治理约束:没有波形,因为监护仪数据未接入研究库;没有原文,因为中文去标识工具不成熟;没有严重度评分,因为它不是采集项而是派生项,派生逻辑留给使用者。把这些缺失当成设计缺陷来扣分,会系统性地低估这份数据在其定位上的完成度。
7.1 五维评分
评分采用五维十分制,每维给出定档理由。分数不是横向排名,而是「相对它自己的定位」的完成度。
| 维度 | 分数 | 定档理由 | 拉低分数的因素 |
|---|---|---|---|
| 规模 | 7.5 | 一万二千余名患儿、近一万四千次监护停留、千万行级检验 | 单中心,绝对量仅为成人库的十分之一量级 |
| 结构 | 8.5 | 沿用成熟表结构,三主键清晰,脚本齐全 | 十六张表偏少,缺严重度与器官支持专项表 |
| 语义 | 8.0 | 双语列、LOINC 部分对照、字典表完整 | 观察项命名依赖本地习惯,需人工解释 |
| 治理 | 8.5 | HIPAA 清单执行、患者级日期平移、官方披露错误来源 | 编号不可回连,阻断与院内其他数据的联合 |
| 可用性 | 7.0 | 凭证访问、文档齐、社区活跃 | 门槛高、无波形无原文、单中心外推受限 |
| 综合 | 7.9 | 在其定位内属完成度较高的资源 | 不适合被当作通用重症库使用 |
7.2 DAIMS 二十四项就绪度评估
DAIMS 是面向医疗人工智能数据集的文档化与验证框架,二十四项检查覆盖动机、构成、采集、预处理、用途与维护六个方面。下表逐项对照,判断标准是「使用者能否在不联系作者的情况下自行确认这一项」。
| 编号 | 检查项 | 本库情况 | 结论 |
|---|---|---|---|
| 1 | 数据集动机与用途声明 | 论文与项目页均说明为儿科重症研究提供公开数据 | 达标 |
| 2 | 与既有资源的关系 | 明确说明以 MIMIC-III 为骨架、填补儿科空白 | 达标 |
| 3 | 建设与资助方 | 医院与高校联合,基金号在论文致谢中列出 | 达标 |
| 4 | 版本与更新记录 | 两个版本,发布日期与变更说明齐全 | 达标 |
| 5 | 样本纳入与排除标准 | 2010–2018 年入住五个监护单元的患儿 | 达标 |
| 6 | 样本规模与单位 | 患儿、住院、监护停留三级计数均给出 | 达标 |
| 7 | 数据模态清单 | 结构化表格,明示无波形无原文 | 达标 |
| 8 | 字段级数据字典 | 官方文档站逐表逐字段说明 | 达标 |
| 9 | 编码体系与映射 | ICD-10 本地扩展、ICD-O-3、LOINC 部分对照 | 部分达标 |
| 10 | 语言与术语处理 | 全库双语列,翻译规则有说明 | 达标 |
| 11 | 采集系统与流程 | 六类院内系统列出,整合键说明清楚 | 达标 |
| 12 | 采集时间与地理范围 | 起止年份与单家医院写明 | 达标 |
| 13 | 时间粒度说明 | 护理间断、术中五分钟、检验按开单 | 达标 |
| 14 | 缺失机制说明 | 部分说明,未做逐字段缺失率披露 | 部分达标 |
| 15 | 去标识方法与强度 | HIPAA 清单、编号重分配、日期平移 | 达标 |
| 16 | 伦理审查与同意豁免 | 机构审查委员会批准,豁免理由写明 | 达标 |
| 17 | 数据清洗与质控步骤 | 剔除不可能记录与异常值,方法概述 | 部分达标 |
| 18 | 派生数据与标注方法 | 症状表为 NLP 抽取,附抽样核对结果 | 达标 |
| 19 | 标注质量与误差披露 | 给出准确率区间与三类错误来源 | 达标 |
| 20 | 许可与使用协议 | 凭证健康数据许可 1.5.0,协议可公开查阅 | 达标 |
| 21 | 访问流程与门槛 | 培训、协议、审核三步,周期写明 | 达标 |
| 22 | 已知偏差与适用范围 | 单中心与转诊偏倚有提示,未系统量化 | 部分达标 |
| 23 | 基准任务与基线结果 | 无官方基准任务,基线由社区论文提供 | 缺失 |
| 24 | 维护与长期可用承诺 | 医院侧承诺持续供数,无固定更新节奏 | 部分达标 |
按「达标计一分、部分达标计半分、缺失计零分」汇总,本库得十七分左右,满分二十四。失分集中在四处:编码映射只覆盖一部分、缺失率未逐字段披露、偏差未量化、以及缺少官方基准任务。这四项恰好都是「需要额外投入人力做文档」的类型,而不是数据本身的问题。
7.3 已知的、可枚举的偏差
偏差分四类,每类都能说清来源与影响方向。这里的「偏差」不是缺陷的同义词,而是使用者必须写进局限性段落的既定事实。
第一类是选择偏倚。省级儿童医疗中心加转诊网络,决定了重症与疑难占比高,轻症与常见病占比低。影响方向是病死率、并发症率、以及高强度治疗的使用率全部偏高。第二类是时间偏倚。九年跨度里,诊疗规范在变,抗菌药物管理政策在变,电子病历系统本身也在升级。影响方向是早期与晚期的记录密度与项目集合不可直接比较。第三类是测量偏倚。护理抄录的生命体征存在抄写误差与补录,术中五分钟数据与病房数据来源不同。影响方向是生命体征类特征的噪声高于波形派生特征。第四类是标注偏倚。症状表来自 NLP,抽样准确率九成一,误差在三类情形上集中。影响方向是阳性症状的精确率尚可、召回不稳。
| 偏差类别 | 来源 | 影响方向 | 缓解办法 |
|---|---|---|---|
| 选择偏倚 | 单中心、转诊中心 | 重症比例与治疗强度偏高 | 明确写单中心,只做关联不做率 |
| 时间偏倚 | 九年跨度、系统演进 | 早晚记录不可直接比 | 按年分层或加年份固定效应 |
| 测量偏倚 | 护理抄录、来源不一 | 生命体征噪声偏大 | 用多源交叉与异常值剔除 |
| 标注偏倚 | NLP 抽取 | 症状召回不稳 | 聚合使用,不逐条采信 |
| 缺失偏倚 | 按病情决定是否开单 | 缺失本身携带信息 | 把「是否检验」当特征 |
| 版本偏倚 | 两版数据表结构有调整 | 跨版本复现需锁版本 | 论文中写明版本与 DOI |
关于「官方两个口径」这件事,需要单独说明。论文正文写的是近一万三千五百次院内住院,而同文表 1 的 ADMISSIONS 行数是一万三千四百四十九,两者相差五十次。官方没有解释差额构成,可能是表统计时点与正文统计口径不同,也可能是多段住院合并规则不同。使用时应以自己装载后的实际行数为准,并在方法学部分写明取的是哪一个数。
7.4 外部验证矩阵
一份数据能不能被信任,很大程度上取决于它是否被独立复现过。下表按「验证类型」列出本库已具备的外部证据,以及证据的强度。
| 验证类型 | 证据形态 | 强度 | 说明 |
|---|---|---|---|
| 官方自校验 | 与院内系统对账、异常值剔除记录 | 中 | 属内部质控,非独立验证 |
| 同行评议发表 | 数据描述论文经期刊评审 | 中高 | 只验证描述准确性 |
| 二次分析复现 | 多篇论文用同一队列做不同暴露 | 中 | 说明可重复取数 |
| 跨库一致性 | 与 MIMIC 做同结构比较 | 中 | 人群不同,结论不可互证 |
| 标注质量核对 | 抽样一百份文书人工核对 | 中 | 样本小,只覆盖症状表 |
| 前瞻性验证 | 未见公开报道 | 低 | 尚无外部前瞻队列验证 |
| 多中心复现 | 未见同结构中国儿科库 | 低 | 无法做跨中心复现 |
§4.4 的案例 在这里可以再被用一次:那个 NICU 患儿的轨迹如果换到另一家医院,检验项目集合、护理抄录频率、用药习惯都会不同,模型的输入分布随之漂移。这正是缺多中心复现的直接后果。
7.5 它为何能持续:因为它解决的是发布方的「合规成本」而不是「数据稀缺」
多数开放医疗数据集活不过三年,原因是维护成本无人承担:数据要更新、问题要回答、协议要续签,而学术考核体系不奖励这些。PIC 能持续,靠的是一条不太一样的激励链。
对建设方来说,把数据合规地发布出去,比让它躺在院内服务器里更有价值。医院承担国家临床研究中心的功能,需要国际可见度;研究团队需要可被引用的数据资产;两者结合,发布数据就从「额外负担」变成了「机构任务的一部分」。这就是为什么官方文档站会持续维护、为什么会有专门的 GitHub 代码仓库、为什么引用量被当作一项指标公开。
对使用方来说,凭证访问机制反而降低了风险:协议明确了义务边界,机构审查时有据可依,出现争议时责任清晰。这种「不自由但清楚」的授权形态,比模糊的开放许可更适合临床数据的长期流通。
| 维系要素 | 具体表现 | 若缺失会怎样 |
|---|---|---|
| 机构任务 | 国家临床研究中心的数据共享职责 | 无人负责更新与答疑 |
| 学术回报 | 数据描述论文可被引用 | 建设者缺乏动力 |
| 治理闭环 | 培训、协议、审核三步 | 法务风险不可控 |
| 技术底座 | 沿用成熟表结构,迁移成本低 | 使用门槛高,社区起不来 |
| 社区反馈 | 引用量公开、代码仓库开放 | 问题无人汇总 |
§8 生态位与历史
8.1 历史沿革:从院内系统到国际仓库
这条时间线不长,但每一步都能解释今天的一个特征。
| 时间 | 事件 | 留下的痕迹 |
|---|---|---|
| 2010 | 院内电子病历与监护系统进入稳定运行期 | 数据起点定在此年 |
| 2010–2018 | 五个监护单元持续产生结构化记录 | 覆盖全年龄段与四类单元 |
| 2019-11-26 | v1.0.0 在 PhysioNet 发布 | 首版表结构与双语设计定型 |
| 2019-12 | 数据描述论文投稿 | 官方口径的第一份成文说明 |
| 2020-01 | 论文正式发表 | 获得可引用的 DOI 与方法学描述 |
| 2020-11-12 | v1.1.0 发布 | 修正与补充,成为现行版本 |
| 2025-05 | 官方口径引用论文数超过一百 | 社区规模进入稳定期 |
8.2 三个都叫 PIC 的东西
这是检索时最容易踩的坑,必须单独列清楚。三个系统缩写相同或相近,性质完全不同。
| 名称 | 全称 | 国家 | 性质 | 是否给逐条记录 |
|---|---|---|---|---|
| PIC database | Paediatric Intensive Care database | 中国 | 单中心结构化病历库 | 给,凭证访问 |
| PICANet | Paediatric Intensive Care Audit Network | 英国 | 国家审计登记系统 | 不给,仅审计与统计 |
| ANZPIC Registry | Australian and New Zealand Paediatric Intensive Care Registry | 澳大利亚与新西兰 | 区域登记系统 | 不给,需专门申请 |
本篇讲的是三个里属于数据集的那一个,也就是中国的那一支。它之所以能给出逐条记录,是因为它从一开始就按「可发布」设计——去标识、双语、结构对齐、协议授权,四件事在建设期就做了,而不是发布前补的。
| 维度 | PIC database | PICANet | ANZPIC Registry |
|---|---|---|---|
| 覆盖范围 | 一家医院五个单元 | 英国全国 | 澳新两国 |
| 记录形态 | 逐条事件表 | 登记变量集 | 登记变量集 |
| 主要用途 | 二次研究、模型开发 | 国家审计与质控 | 区域规划与比较 |
| 获取方式 | 凭证下载 | 研究申请与提取 | 专门申请 |
| 时间连续性 | 2010–2018 固定窗口 | 持续上报 | 持续上报 |
| 对 AI 研究适配度 | 高 | 低 | 低 |
8.3 它的生态位:中国儿科重症的唯一格子
在一个理想的数据生态里,儿科重症至少需要四类资源:全国登记(看大盘)、多中心病历(看泛化)、单中心深挖(看机制)、专项信号(看波形)。中国目前在第一类上有区域性的质控上报,在第二类上基本空白,在第三类上有 PIC,在第四类上有零散的小样本信号库。
所以 PIC 的位置很特殊:它不是最理想的那一类,而是在第二类缺席的情况下,独自承担了「可计算的中国儿童重症病历」这个角色。这解释了为什么它的引用增长快于同类单中心库——不是因为它更大更好,而是因为替代品不存在。
8.4 它在光谱上的位置
把前面几条线索合起来,可以用两个坐标描述它的位置:横轴是记录粒度,从登记变量到逐条事件再到原始波形;纵轴是覆盖广度,从单中心到多中心再到全国。PIC 落在细粒度与窄覆盖的交点上,这个交点在国内目前只有它一个。
占住这个交点的代价与收益都很清楚。代价是它无法回答任何「全国儿科重症怎么样」的问题,样本一换结论就可能变。收益是它足够细,细到可以重建一次住院的检验轨迹、用药序列与症状演化,而这正是模型开发最需要的那一层。
| 位置 | 代表 | 粒度 | 广度 |
|---|---|---|---|
| 细粒度加窄覆盖 | 本篇、MIMIC-III | 逐条事件 | 单中心 |
| 细粒度加宽覆盖 | eICU-CRD | 分钟级记录 | 多中心 |
| 粗粒度加宽覆盖 | PICANet、ANZPIC Registry | 登记变量 | 全国或两国 |
| 纯信号加窄覆盖 | 巴塞罗那 SICU 波形库 | 原始波形 | 单中心 |
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一步 | 第二步 | 第三步 | 常见弯路 |
|---|---|---|---|---|
| 临床研究者 | 用 ICD 码圈病种 | 看该病种的检验与用药 | 定结局与时窗 | 一上来就建模型,忽略表型定义 |
| 算法工程师 | 盘点可用特征列 | 做缺失与分布体检 | 定切分策略 | 直接套成人特征集 |
| 数据工程师 | 建库与索引 | 跑行数与主键校验 | 建常用视图 | 全表扫描不看执行计划 |
| 中文 NLP 研究者 | 抽 _cn 列建词典 | 对齐英文概念 | 做同义词归并 | 直接拿翻译当标准术语 |
| 教学使用者 | 用症状表做小练习 | 用检验表做轨迹图 | 用编码表做分组 | 一上来就用千万行表 |
9.2 一条最短的可用流程
下面这段脚本是「从零到一张可建模的人表」的最短路径,涵盖连接、特征聚合与切分。它不追求完备,只保证每一步都能跑通并被核对。
import pandas as pd
from sqlalchemy import create_engine
import os
#-- 连接
eng = create_engine(
f"postgresql+psycopg2://{os.environ['PGUSER']}:{os.environ['PGPASSWORD']}"
f"@localhost:5432/pic",
connect_args={"options": "-c search_path=pic"},
)
#-- 一、人表:一次监护停留一行,带结局与单元
base = pd.read_sql("""
SELECT i.subject_id, i.hadm_id, i.icustay_id, i.first_careunit,
i.los, p.gender, p.dob, p.expir_flag AS died
FROM icustays i
JOIN patients p USING (subject_id)
""", eng)
#-- 二、检验特征:取首个 24 小时内的最值与计数,按项目透视
lab = pd.read_sql("""
SELECT l.icustay_id, l.itemid, l.valuenum, l.charttime
FROM labevents l
JOIN icustays i USING (hadm_id)
WHERE l.charttime >= i.intime
AND l.charttime < i.intime + INTERVAL '24 hour'
AND l.valuenum IS NOT NULL
""", eng)
agg = (lab.groupby(["icustay_id", "itemid"])["valuenum"]
.agg(["min", "max", "count"])
.reset_index())
wide = agg.pivot(index="icustay_id", columns="itemid")
wide.columns = [f"{stat}_{item}" for stat, item in wide.columns]
wide = wide.reset_index()
#-- 三、合并并按时间切分,避免同一患儿跨集
df = base.merge(wide, on="icustay_id", how="left")
ids = df["subject_id"].drop_duplicates().sample(frac=1.0, random_state=42)
cut = int(len(ids) * 0.8)
train_ids = set(ids.iloc[:cut])
df["split"] = df["subject_id"].map(lambda s: "train" if s in train_ids else "test")
print(df.shape, df["split"].value_counts().to_dict())
print("缺失率前五列:", df.isna().mean().sort_values(ascending=False).head(5).round(3).to_dict())
这段代码有四个刻意的设计。按患儿切分而不是按行切分,避免同一患儿的多次停留同时出现在训练与测试集。只取入单元后二十四小时,避免用未来信息预测当下。对检验只做最值与计数,不做插值,因为护理与检验的采样本身不规律。最后打印缺失率前五列,是为了在建模前就看见哪些特征其实大面积缺失。
| 步骤 | 输出物 | 检查点 | 常见错误 |
|---|---|---|---|
| 连接 | 数据库会话 | 字符集为 utf8mb4 | 中文列乱码 |
| 人表 | 一人一段一行 | 段数与 ICUSTAYS 一致 | 多表连接导致行膨胀 |
| 特征 | 宽表 | 每列缺失率可见 | 用均值填补掩盖缺失 |
| 切分 | 带 split 列 | 患儿不跨集 | 按行随机切分 |
9.3 引用方式
数据:Li H, Zeng X, Yu G. Paediatric Intensive Care database (version 1.1.0).
PhysioNet. 2020. DOI: 10.13026/32x9-wv38
论文:Zeng X, Yu G, Lu Y, Tan L, Wu X, Shi S, Duan H, Shu Q, Li H.
PIC, a paediatric-specific intensive care database.
Scientific Data. 2020;7:14. DOI: 10.1038/s41597-020-0355-4
平台:Pollard T, Moody BE, Lehman LH, et al. PhysioNet as a global platform
for biomedical research. Nature Health. 2026. DOI: 10.1038/s44360-026-00096-z
| 引用要素 | 必填内容 | 常见缺失 | 后果 |
|---|---|---|---|
| 版本号 | v1.1.0 或 v1.0.0 | 只写库名 | 复现时取错版本 |
| 版本 DOI | 10.13026/32x9-wv38 | 只给最新 DOI | 指向漂移 |
| 论文 DOI | 10.1038/s41597-020-0355-4 | 漏引 | 方法学无出处 |
| 平台引用 | PhysioNet 平台文献 | 常被忽略 | 平台贡献未被承认 |
| 访问日期 | 取数年月 | 常缺 | 无法确认取数时点 |
§10 AI 使用声明
| 项目 | 声明内容 |
|---|---|
| 内容生成方式 | 正文由人工智能辅助撰写,事实以官方项目页与同行评议论文为准 |
| 事实核验范围 | 规模、结构、访问政策、许可条款四项逐条对照官方来源 |
| 未核验内容 | 逐字段缺失率、单元级病例构成、逐年记录密度未做统计 |
| 数字口径 | 一律采用官方公布值;官方内部不一致处并列两个口径,不裁决 |
| 代码性质 | 示例代码为可运行骨架,字段名与取值需按实际装载结果核对 |
| 临床使用限制 | 不可用于个体诊疗决策;任何模型输出需经本地验证 |
| 隐私承诺 | 未接触任何可识别个体信息,示例中的键值均为构造 |
| 更新与纠错 | 发现与官方来源不符之处,以官方来源为准并修订本篇 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 这是英国的 PICANet | 是浙江大学医学院附属儿童医院建设的中国单中心库 | 项目页作者单位与论文机构署名 |
| 里面有监护波形 | 只有术中每五分钟一条数值 | 官方说明手术外高频数据不可得 |
| 能直接下载 | 需账号核验、培训、协议与人工审核 | 凭证访问政策与使用协议 1.5.0 |
| 是全国的儿科重症样本 | 一家省级医院的五个单元 | 空间范围仅杭州 |
| 日期是真实的 | 已按患者整体后移五十至一百年 | 官方去标识说明 |
| 有出院记录原文 | 只有 NLP 抽取的症状存在性 | 官方说明文本未发布 |
| 可以当 MIMIC 直接跑代码 | 表结构像,字段取值完全不同 | ITEMID 为字符型且体系独立 |
| 有严重度评分列 | 无 PRISM、无 PIM、无预计算 SOFA | 十六张表清单中无评分表 |
| 症状表是人工标注 | 是模型抽取加抽样核对 | 官方披露抽样一百份、准确率约九成一 |
| 病死率可以外推到全国 | 转诊中心偏倚使病死率偏高 | 机构定位与收治结构 |
FAQ
Q1:PIC 到底是英国的还是中国的?
中国的。全称 Paediatric Intensive Care database,由浙江大学医学院附属儿童医院与浙江大学生物医学工程与仪器科学学院建设,经 PhysioNet 发布。英国的 PICANet 与澳新的 ANZPIC 都是登记系统,与本库没有关系,只是缩写相近。
Q2:为什么搜 pic-database 打不开,搜 picdb 才行?
PhysioNet 的项目路径用的是 picdb,形如 /content/picdb/1.1.0/。用 pic-database 拼路径会返回 404,这不代表数据下线,只是别名不存在。稳妥做法是从 DOI 跳转,两个版本 DOI 都能落到正确页面。
Q3:一共多少患儿、多少家 ICU?
一万二千八百余名患儿,近一万四千次监护单元停留,来自一家医院的五个监护单元:综合、儿科、外科、心脏、新生儿。注意是「一家医院的五个单元」,不是五家医院。
Q4:时间跨度是 2010 到 2018 吗,为什么表里是 2070 年?
真实收治年份是 2010 至 2018。发布时对每名患者的所有日期做了整体平移,幅度五十到一百年,所以显示在 2060 至 2120 年之间。患者内部的间隔、时刻、星期与季节都保留。
Q5:有生理信号波形吗?
没有。唯一的高频段是手术室内的生命体征,每五分钟一条,单独存在 SURGERY_VITAL_SIGNS 表。病房里的监护仪数据没有进入这个库,所以心率变异性、波形形态一类研究在这里做不了。
Q6:申请要多久,卡在哪一步?
官方口径约三个工作日。实际最常见的卡点有两个:机构邮箱不被识别导致身份核验反复,以及 CITI 培训选错课程模块。材料准备齐全的话,三步可以在一周内走完。
Q7:能不能用 MIMIC 的现成 SQL?
结构性代码可以,字段级不行。ITEMID 在 PIC 是字符型,取值体系与 MIMIC 完全不同,写死整型 itemid 的查询不会报错,只会返回空集。这是迁移中最危险的静默失败。
Q8:症状表能当标注集训练模型吗?
可以当弱标签用,不能当金标准。官方抽样一百份文书核对的平均准确率约九成一,错误集中在分词、极性判定与家属症状误挂三类。用它训练再用它评估属于循环论证。
Q9:为什么有的住院有上万条检验,有的只有几十条?
检验是按临床需要开单的,病情越重、住院越长,开单越密。缺失本身携带信息,把「是否做了某项检验」当成特征,往往比填补缺失值更有效。
Q10:可以商用吗?
许可为凭证健康数据许可 1.5.0,属受限许可。协议禁止再识别与转发原始记录,商用前应逐条核对条款并取得发布方书面意见。把它当成 CC BY 那样的开放许可会踩线。
Q11:这个库和 ANZICS APD 有什么可比性?
几乎没有直接可比性。ANZICS APD 是澳新的成人 ICU 质控登记,收的是核心变量集,用于区域基准比较;PIC 是中国单中心儿科病历,收的是逐条事件。两者可以放在同一张生态图里,但不能放在同一张分析表里。
术语表
| 术语 | 英文或缩写 | 在本库语境下的含义 |
|---|---|---|
| 监护停留 | ICUSTAY | 一次进入监护单元到离开,由 ICUSTAY_ID 标识 |
| 住院 | HADM | 一次院内住院,可含多段监护停留 |
| 患儿编号 | SUBJECT_ID | 患者级唯一键,随机分配 |
| 项目编码 | ITEMID | 观察项或检验项的本地编码,字符型 |
| 字典表 | D_ 前缀表 | 把编码翻译成概念的对照表 |
| 双语列 | _cn 后缀列 | 每个概念列配套的中文名列 |
| 护理记录 | CHARTEVENTS | 护士按常规抄录的观察值 |
| 检验记录 | LABEVENTS | 实验室结果长表 |
| 药嘱 | PRESCRIPTIONS | 医嘱,不含执行记录 |
| 液体入量 | INPUTEVENTS | 每日汇总的入量 |
| 液体出量 | OUTPUTEVENTS | 按记录的出量 |
| 术中生命体征 | SURGERY_VITAL_SIGNS | 手术室内每五分钟一条 |
| 症状表 | EMR_SYMPTOMS | NLP 抽取的症状存在性标注 |
| 否定标记 | NEGATION | 加号表示存在,减号表示不存在 |
| 本地扩展码 | 七位 ICD-10 | 比标准五位码更细的本地诊断码 |
| 去标识 | De-identification | 按 HIPAA 清单清除标识符 |
| 日期平移 | Date shifting | 患者级整体后移五十到一百年 |
| 凭证访问 | Credentialed access | 需培训与协议的数据访问档 |
| 数据使用协议 | DUA | 规定用途、保管与禁止行为的协议 |
| 机构审查委员会 | IRB | 批准本项目并豁免知情同意的机构 |
| 表型 | Phenotype | 用编码与检验组合出的病例定义 |
| 矫正胎龄 | Corrected age | 早产儿按预产期校正后的年龄 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 患儿数 | 12,881 | 论文表 1 与正文 | 官方论文 |
| 院内住院次数 | 一万三千四百余(表 1) | 论文表 1 | 官方论文 |
| 院内住院次数(正文口径) | 近一万三千五百 | 论文技术验证段 | 官方论文 |
| 监护停留次数 | 13,941 | 论文表 1 | 官方论文 |
| 表数量 | 16 | 论文与项目页 | 官方论文 |
| 检验行数 | 10,094,117 | 论文表 1 | 官方论文 |
| 护理记录行数 | 2,278,978 | 论文表 1 | 官方论文 |
| 症状表行数 | 402,142 | 论文表 1 | 官方论文 |
| 监护床位数 | 119 | 论文方法段 | 官方论文 |
| 监护单元数 | 5 | 论文方法段 | 官方论文 |
| 时间跨度 | 2010–2018 | 论文与项目页 | 官方论文 |
| 日期平移幅度 | 50–100 年 | 论文去标识段 | 官方论文 |
| 症状抽取准确率 | 约 91.9% | 论文技术验证段 | 官方论文 |
| 审核周期 | 约 3 个工作日 | 论文使用说明段 | 官方论文 |
| 引用论文数 | 超过 100(2025 年 5 月口径) | 官方文档站首页 | 官方页面 |
| 版本数 | 2 | PhysioNet 版本列表 | 官方页面 |
附录 B:数字的来源分层
第一层,官方页面与官方论文直接给出,可直接引用。
| 数字 | 值 | 出处 |
|---|---|---|
| 表数量 | 16 | 论文数据描述段 |
| 版本日期 | 2019-11-26 与 2020-11-12 | PhysioNet 版本页 |
| 许可名称 | 凭证健康数据许可 1.5.0 | PhysioNet 访问政策栏 |
第二层,官方给出但存在两处口径,需并列标注。
| 数字 | 两个口径 | 处理方式 |
|---|---|---|
| 院内住院次数 | 表 1 为 13,449;正文为近一万三千五百 | 并列,注明差额未解释 |
| 引用论文数 | 官方文档站给「超过一百」,未给精确值 | 用不等式表述 |
| 床位规模 | 论文写一千九百张床;文档站写一百余张监护床 | 分别限定为总床位与监护床位 |
第三层,未核实或需使用者自行统计。
| 项目 | 状态 | 原因 |
|---|---|---|
| 逐字段缺失率 | 未核实 | 需装载全库统计,超出词条范围 |
| 各单元病例构成 | 未核实 | 官方未公布分单元统计 |
| 逐年记录密度 | 未核实 | 需全表按年聚合 |
| 症状表逐类准确率 | 未核实 | 官方只给总体均值 |
| 与 MIMIC 的字段级映射率 | 未核实 | 需逐项比对两张字典表 |
附录 C:完整参考文献
| 序号 | 文献 | 用途 |
|---|---|---|
| 1 | Zeng X, Yu G, Lu Y, et al. PIC, a paediatric-specific intensive care database. Scientific Data. 2020;7:14. | 主数据描述,全部规模与结构数字的来源 |
| 2 | Li H, Zeng X, Yu G. Paediatric Intensive Care database (version 1.1.0). PhysioNet. 2020. | 数据引用格式与版本 DOI |
| 3 | Li H, Zeng X, Yu G. Paediatric Intensive Care database (version 1.0.0). PhysioNet. 2019. | 首版引用与发布日期 |
| 4 | Johnson AEW, et al. MIMIC-III, a freely accessible critical care database. Scientific Data. 2016. | 表结构母本 |
| 5 | Pollard TJ, et al. The eICU Collaborative Research Database. Scientific Data. 2018. | 多中心对照 |
| 6 | Pollard T, Moody BE, Lehman LH, et al. PhysioNet as a global platform. Nature Health. 2026. | 平台引用 |
| 7 | 官方文档站 pic.nbscn.org | 字段说明、访问流程、引用量口径 |
| 8 | PhysioNet 项目页 /content/picdb/1.1.0/ | 版本、许可、访问政策 |
附录 D:任务代码
下面这段脚本把「按病种圈队列、取检验轨迹、画一张粗略的时序图」串成一条可执行的流水线,适合作为第一次上手后的练手任务。
import os
import pandas as pd
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from sqlalchemy import create_engine
eng = create_engine(
f"postgresql+psycopg2://{os.environ['PGUSER']}:{os.environ['PGPASSWORD']}"
f"@localhost:5432/pic",
connect_args={"options": "-c search_path=pic"},
)
#-- 一、按 ICD 前缀圈一个病种,这里以新生儿感染相关码为例
cohort = pd.read_sql("""
SELECT DISTINCT d.hadm_id, d.icd10_code, d.icd10_code_cn
FROM diagnoses_icd d
WHERE d.icd10_code LIKE 'P36%'
""", eng)
hadm = tuple(cohort["hadm_id"].unique().tolist())
#-- 二、取该队列某个检验项的全部时序值
q = f"""
SELECT l.hadm_id, l.charttime, l.valuenum
FROM labevents l
WHERE l.hadm_id IN {hadm}
AND l.itemid = 'LAB0034'
AND l.valuenum IS NOT NULL
ORDER BY l.hadm_id, l.charttime
"""
ts = pd.read_sql(q, eng)
ts["charttime"] = pd.to_datetime(ts["charttime"])
#-- 三、按住院分组画轨迹,横轴用相对小时,规避日期平移
fig, ax = plt.subplots(figsize=(8, 4.5))
for hid, g in ts.groupby("hadm_id"):
t0 = g["charttime"].min()
ax.plot((g["charttime"] - t0).dt.total_seconds() / 3600, g["valuenum"], lw=1, alpha=0.6)
ax.set_xlabel("hours from first measurement")
ax.set_ylabel("value")
ax.set_title("cohort lab trajectory")
fig.tight_layout()
fig.savefig("cohort_trajectory.png", dpi=150)
print("组数:", cohort["hadm_id"].nunique(), " 点数:", len(ts))
| 任务环节 | 输入 | 输出 | 注意 |
|---|---|---|---|
| 圈病种 | 诊断编码前缀 | 住院号集合 | 前缀要按本地扩展码试 |
| 取轨迹 | 检验项编码 | 时间序列 | 先确认单位单一 |
| 画图 | 相对小时 | PNG | 不用绝对日期作横轴 |
| 校验 | 组数与点数 | 打印值 | 与队列规模对照 |
附录 E:如果只记五件事
| 序 | 一句话 |
|---|---|
| 1 | 它是中国单中心、儿科专用、结构对齐 MIMIC-III 的结构化病历库,不是登记系统。 |
| 2 | 规模是一万二千余名患儿、五个监护单元、九年、十六张表,检验一千万行量级。 |
| 3 | 没有波形、没有病历原文、没有严重度评分,这三样决定了它的能力上限。 |
| 4 | 访问要 PhysioNet 账号、CITI 培训与数据使用协议,官方口径约三个工作日。 |
| 5 | 它最适合当队列构建与表型开发的底稿,最适合当外推验证的一端,最不适合当全国基准。 |
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。
前往商城查看可交易产品 →
