信息速览
引产与剖宫产子宫肌电数据集(Induced Cesarean EHG DataSet,ICEHG DS)是 PhysioNet 上的一份体表子宫肌电记录集,由卢布尔雅那大学计算机与信息科学学院的 Franc Jager 整理发布。它收录 126 条约 30 分钟的记录,来自 91 次妊娠,全部是足月分娩,但结局分成三类:临产始终没有自行发动、最终只能引产的,未经引产直接急诊剖宫产的,以及引产失败后转剖的。
它的价值不在体量,而在于它补的那块空。过去二十年,用子宫肌电做早产预测的研究几乎都只在「自发早产」与「自发足月」之间做二分类,把足月引产与足月剖宫产当作噪声排除在外。可真实产科里这两类合起来占足月分娩的相当一部分,模型一旦上线就会撞上它们。这批记录把这两类单独成组,还给出了孕 23 周与孕 31 周两个可以提前取数的时点。
全库未压缩 115.6 MB,压缩包 89.0 MB,按 ODC-ODbL 1.0 开放,下载不需要注册。下文先说清它能回答什么、不能回答什么,再逐层拆开文件结构、采集场景与取数路径。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Induced Cesarean EHG DataSet (ICEHG DS) |
| 中文名 | 引产与剖宫产子宫肌电数据集 |
| 托管平台 | PhysioNet(MIT 主导的生理信号数据平台) |
| 版本与日期 | 1.0.1,2023 年 10 月 8 日;1.0.0 为同年 9 月 22 日 |
| 作者 | Franc Jager(卢布尔雅那大学计算机与信息科学学院) |
| 采集机构 | 卢布尔雅那大学医学中心围产医学临床部 |
| 采集年份 | 1997–2006 年(自一个更大的记录池中选出) |
| 受试者 | 91 次妊娠 |
| 记录数 | 126 条(孕 23 周前后 62 条,孕 31 周前后 64 条) |
| 结局分组 | 引产 81 条 / 剖宫产 19 条 / 引产转剖 26 条 |
| 通道 | 每条 6 路:3 路差分原始 + 3 路滤波 |
| 采样与量化 | 20 Hz,16 位,±2.5 mV,13107 单位 = 1 mV |
| 单条时长 | 官方称约 30 分钟 |
| 标注 | 无波形标注,只有头文件里的临床字段 |
| 体积 | 未压缩 115.6 MB,压缩包 89.0 MB |
| 许可 | ODC-ODbL 1.0(署名 + 相同方式共享) |
| DOI | 10.13026/zw34-n382(1.0.1) |
| 官方入口 | https://physionet.org/content/icehg-ds/1.0.1/ |
§1 它要解决的具体麻烦
1.1 早产预测的对照组一直缺一块
用子宫肌电预测早产,标准的做法是把「最终早产」与「最终足月自然分娩」两组记录放在一起分类。这个设置干净、容易解释,也容易做出好看的曲线。问题在于它把「足月」当成了一个同质的类别。
真实的足月分娩至少有三条路。一条是自然发动、经阴道分娩;一条是临产迟迟不发动,用缩宫素或前列腺素引产;还有一条是没有经过引产就直接做了剖宫产,急诊居多。后两条路在孕 23 周与孕 31 周时,从腹部电信号上看不出任何异样——那时的子宫还没有开始为分娩做电学准备,记录本身是「正常孕期」的样子,结局却由几周之后的临床判断决定。
这带来两个后果。一是模型在真实人群里的表现会低于论文里的数字,因为它从未见过这些样本。二是研究结论容易被误读成「子宫肌电预测的是分娩方式」,而实际上它预测的是「会不会在足月之前发动」,两者不是一回事。ICEHG DS 的出现,是把这个缺口显式地摆出来:三类足月结局各有独立的分组,谁想合并谁自己合并,但至少不能再假装它们不存在。
1.2 三条常见的错误期待
期待一:把它当成早产数据集。 库里没有一条早产记录。三条结局的分娩孕周均值都在 39 周以上,官方给出的分组均值是引产 39.8 周、剖宫产 39.7 周、引产转剖 39.4 周。要做早产预测,正样本必须来自 TPEHG DB 或 TPEHGT DS。
期待二:以为记录时刻在分娩之前,就等于标签干净。 记录确实早于结局,孕 23 周采的信号不可能被分娩方式污染,这是它作为前瞻性任务素材的最大优点。但「引产」这个标签本身是临床决策的结果,取决于宫颈评分、胎位、胎心监护、产妇意愿与当班医生的判断,而这些信息一条都没有记录。标签干净,标签的含义却不干净。
期待三:以为 20 Hz 太粗糙,做不了什么。 20 Hz 对应 10 Hz 的奈奎斯特上限,而子宫肌电的有效成分集中在 0.08 至 5 Hz,抗混叠滤波器就切在 5 Hz。采样率是为这个频段量身定的,不是性能妥协。真正的代价在别处:没有高频成分,就看不了母体心电干扰的细节,也做不了肌电尖峰的形态学分析。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 给早产模型补上足月非自然分娩这一类 | 三类足月结局共 126 条,分组明确 | 够,作为负类补充 |
| 在孕 23 周就预测最终分娩方式 | 62 条早期记录,结局事后已知 | 够做可行性,样本偏少 |
| 比较同一次妊娠两个孕周的信号变化 | 35 次妊娠有早晚配对记录 | 够,是本库最独特的用法 |
| 分析子宫肌电的频谱与传播 | 三路差分、20 Hz、零相位滤波版本 | 够,频段上限 5 Hz |
| 把电活动与宫缩压力对齐 | 无压力通道 | 不够 |
| 定位子宫电活动的空间起源 | 四枚电极、7 厘米见方、无影像配准 | 不够 |
| 训练一个可上线的分娩方式分类器 | 91 次妊娠、单一中心、1997–2006 年人群 | 不够 |
| 做母胎心电分离或胎心提取 | 无母体心电参考通道 | 不够 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 手上有一个早产预测模型,上线前发现足月引产样本被误判 | 提供三类足月结局的真实波形,可直接当困难负例 | 按妊娠分组重训,报告加入这三类后的性能下降幅度 |
| 想验证「孕期子宫电活动随孕周如何变化」 | 同一批人有孕 23 周与孕 31 周两条配对记录 | 取 Pair_RecID 成对分析,避免跨人比较 |
| 在做引产成功率预测 | 引产与引产转剖两组可以对照 | 只能做机制层面的对照,指征信息缺失,不能做临床决策模型 |
| 需要一份小体量的产科电生理素材做教学 | 全库百兆出头,一次下载即可完整跑通 | 用 §9.2 的流程取一条配对记录,先看原始再看滤波 |
| 在评估不同滤波方案对子宫肌电的影响 | 原始与 0.08 至 5 Hz 零相位滤波成对存放 | 以滤波版为参照,比较自己的方案,注意首尾 150 秒的瞬态 |
| 要给一篇产科信号论文找可引用的公开数据 | 有 DOI、固定版本、单作者署名 | 引用时写清版本与记录名,见 §9.3 |
1.5 一句话判断
它不是一份能直接训练出产品的数据,而是一份把「足月分娩不止一条路」这件事变成可计算样本的对照集;用它的人多半不是要更多数据,而是要一个此前被系统性排除的类别。
1.6 不适合谁:四条边界
不适合拿它做早产检测。 全库没有早产样本,一条都没有。想验证早产模型,正样本必须另找,本库最多充当足月侧的一部分。
不适合拿它做单条记录的临床推断。 头文件里的临床字段只有八项:年龄、身高、两次记录的体重、记录孕周、分娩孕周、胎盘位置、新生儿体重。没有产次、没有既往剖宫产史、没有引产指征、没有 Bishop 评分、没有妊娠合并症。任何「哪类产妇更容易被引产」的问题,在这份数据上都答不了。
不适合拿它做跨中心泛化。 全部记录来自卢布尔雅那一家的围产医学临床部,采集年份是 1997 至 2006 年。那时的引产指征、缩宫素方案、剖宫产率与今天不同,换一个国家的产科,标签的生成机制就变了。
不适合拿它做波形级的分割或检测。 没有宫缩区间标注,没有肌电爆发标注,没有伪迹标记。滤波版本首尾各 150 秒还有滤波器瞬态,官方建议置零或弃用。要拿它做事件检测,得先自己标一遍。
§2 数据构成与规格
2.1 一条记录由三个文件、六路信号组成
数据沿用 WFDB 格式。一条记录由同名三个文件构成:.hea 是纯文本头文件,第一行写记录名、信号路数、采样率与样本数,随后每路信号一行;.dat 是二进制信号本体,六路按采样点交错存放;_fltrd.jpg 是一张对照图,把三路原始信号与三路滤波后的信号上下排在一起,给人眼看的。
六路信号的次序是固定的,原始与滤波交替:S1、S1 的滤波版、S2、S2 的滤波版、S3、S3 的滤波版。头文件里的信号名把这层关系直接写了出来,滤波通道叫 S1_DOCFILT-4-0.08-5,四个数字依次表示四极点、低端 0.08 Hz、高端 5 Hz。
| 文件 | 扩展名 | 内容 | 是否必需 |
|---|---|---|---|
| 头文件 | .hea |
记录参数、六路声明、十行临床字段 | 必需 |
| 信号本体 | .dat |
六路 16 位整数,按采样点交错 | 必需 |
| 波形对照图 | _fltrd.jpg |
三路原始与三路滤波的并排截图 | 可选 |
| 全局清单 | RECORDS |
126 行,每行「子目录/记录名」 | 强烈建议 |
| 分组清单 | RECORDS_induced 等三份 |
每行一次妊娠,两列分别为早期与晚期记录 | 强烈建议 |
| 临床表 | Table_1.txt 至 Table_3.txt |
三种结局各自的逐次妊娠明细表 | 可选 |
| 许可原文 | LICENSE.txt |
ODbL 1.0 全文 | 备查 |
| 校验和 | SHA256SUMS.txt |
逐文件 SHA256 | 可选 |
| MATLAB 版 | icehgdsmat/ |
同一批信号的 .mat 与 .hea |
可选 |
.dat 的体积可以直接算出来:六路各约三万五千个采样点、每点两字节,一条记录约四百多千字节。全库 126 条记录加上 126 张对照图,正好落在 115.6 MB 这个量级。
2.2 字段与记录的完整字典
| 位置 | 字段 | 含义 | 取值示例 |
|---|---|---|---|
.hea 第 1 行 |
记录名 | icehg 加原始记录池编号 |
icehg665 |
.hea 第 1 行 |
信号路数 | 固定为 6 | 6 |
.hea 第 1 行 |
采样率 | 每秒采样点数,全库一致 | 20 |
.hea 第 1 行 |
采样点数 | 每路信号的样本数,约三万五千 | 35340 |
.hea 信号行 |
存储格式 | 16 表示每样本两字节整数 | 16 |
.hea 信号行 |
增益 | 每毫伏对应的整数单位数 | 13107/mV |
.hea 信号行 |
位宽 | 量化位数 | 16 |
.hea 信号行 |
基线 | 零电平对应的整数值 | 0 |
.hea 信号行 |
初始值 | 第一个样本的整数值 | 2685 |
.hea 信号行 |
校验和 | 全段样本累加和 | 11166 |
.hea 信号行 |
信号名 | S1、S2、S3 或带滤波后缀 | S3_DOCFILT-4-0.08-5 |
.hea 注释行 |
RecID |
原始记录池编号 | 665 |
.hea 注释行 |
RecType |
分娩方式三选一 | Induced |
.hea 注释行 |
Gestation |
分娩时孕周,周为单位,一位小数 | 37.1 |
.hea 注释行 |
Rectime |
记录时孕周,周为单位,一位小数 | 23.1 |
.hea 注释行 |
Age |
母亲年龄,岁 | 26 |
.hea 注释行 |
Weight |
记录时体重,千克 | 83 |
.hea 注释行 |
Height |
身高,厘米 | 165 |
.hea 注释行 |
Placental_position |
胎盘位置,两值之一 | front |
.hea 注释行 |
Newborn_weight |
新生儿体重,克 | 2860 |
.hea 注释行 |
Pair_RecID |
同一次妊娠另一条记录的编号,无则为 0 | 664 |
字段表的长度说明了这份数据的性格:参数六行,临床十行,一篇头文件不到二十行就写完了。它把该交代的交代得很清楚——孕周精确到零点一周、体重精确到千克、新生儿体重精确到克——但没有一个字段能回答「为什么引产」。
2.3 一条记录的完整解剖
以孕 23 周的那条 icehg665 为例,头文件全文如下:
icehg665 6 20 35340
icehg665.dat 16 13107/mV 16 0 2685 11166 0 S1
icehg665.dat 16 13107/mV 16 0 22 -955 0 S1_DOCFILT-4-0.08-5
icehg665.dat 16 13107/mV 16 0 1883 18194 0 S2
icehg665.dat 16 13107/mV 16 0 16 -1492 0 S2_DOCFILT-4-0.08-5
icehg665.dat 16 13107/mV 16 0 2215 -12402 0 S3
icehg665.dat 16 13107/mV 16 0 18 1452 0 S3_DOCFILT-4-0.08-5
#Comments:
# RecID 665
# RecType Induced
# Gestation 37.1
# Rectime 23.1
# Age 26
# Weight 83
# Placental_position front
# Height 165
# Newborn_weight 2860
# Pair_RecID 664
第一行四个数:记录名、六路信号、20 Hz、35340 个采样点。35340 除以 20 得到 1767 秒,即 29 分 27 秒,与官方说的「约 30 分钟」对得上。十六行信号声明里,六路共用同一个 .dat,靠行序区分通道。
再看临床段。分娩孕周 37.1,记录孕周 23.1,两者相差整十四周——这条记录采集时,分娩还有三个多月。新生儿体重 2860 克,胎盘在前壁,母亲 26 岁、身高 165 厘米,两次记录之间体重从 83 千克变成 84 千克。Pair_RecID 664 指向同一次妊娠的另一条记录,那条在孕 30.4 周采集。
读进内存只要三行:
import wfdb
#-- 记录放在子目录里,pn_dir 必须指到子目录,否则会 404
rec = wfdb.rdrecord('icehg665', pn_dir='icehg-ds/1.0.1/early_induced')
print(rec.fs, rec.sig_len, rec.n_sig)
print(rec.sig_name)
print(rec.comments)
rec.p_signal 已经按增益换算成毫伏,rec.d_signal 是原始整数。两者相差 13107 倍,混用不会报错,只会让所有幅度结论失效。
2.4 六个子目录与三张组内清单
目录结构是两级:根目录下六个子目录,按「孕周 + 结局」命名,记录不重复。命名规则是 early_ 或 later_ 加上结局名,三个结局名分别是 induced、cesarean、induced-cesarean。
| 子目录 | 含义 | 记录数 | 对应妊娠数 |
|---|---|---|---|
early_induced |
孕 23 周前后,引产 | 38 | 59 次妊娠的早期部分 |
later_induced |
孕 31 周前后,引产 | 43 | 同上,晚期部分 |
early_cesarean |
孕 23 周前后,剖宫产 | 11 | 13 次妊娠的早期部分 |
later_cesarean |
孕 31 周前后,剖宫产 | 8 | 同上,晚期部分 |
early_induced-cesarean |
孕 23 周前后,引产转剖 | 13 | 19 次妊娠的早期部分 |
later_induced-cesarean |
孕 31 周前后,引产转剖 | 13 | 同上,晚期部分 |
icehgdsmat |
MATLAB 版信号与头文件 | 与上同 | 同 |
六组数字互相对得上:38 加 43 等于 81,11 加 8 等于 19,13 加 13 等于 26,三组相加正好 126;59 加 13 加 19 等于 91,也正好是妊娠数。62 条早期与 64 条晚期相加同样是 126。这套账目在官方页面、RECORDS 清单与头文件三处一致,没有对不上的地方。
核对这两件事不需要下载全库,两条命令就够:
#-- 清单应是 126 行
curl -s https://physionet.org/files/icehg-ds/1.0.1/RECORDS | wc -l
#-- 按子目录统计,六个组应当落在 38 / 43 / 11 / 8 / 13 / 13
curl -s https://physionet.org/files/icehg-ds/1.0.1/RECORDS | cut -d/ -f1 | sort | uniq -c
三份分组清单是理解配对关系的钥匙。每行一次妊娠,第一列是早期记录,第二列是晚期记录,缺哪一条就在那一列写 0。以引产组为例,59 行里有一部分行只有一列有值,说明那位孕妇只赶上了一个孕周。
early_induced/icehg665 later_induced/icehg664
early_induced/icehg757 later_induced/icehg756
0 later_induced/icehg1562
清单里有一个细节值得记下来:配对的两条记录编号常常只差一,665 与 664、757 与 756、774 与 775、805 与 806、907 与 908 都是如此。这不是巧合,而是原始记录池按妊娠连续编号的结果——同一次妊娠的两次检查被登记在相邻的号上。写配对逻辑时不能依赖这个规律,但可以用它做一次 sanity check。§4.3 的案例就是这种配对最典型的样子。
2.5 与同类资源的字段差异
| 字段 | ICEHG DS | TPEHGT DS | ehgdb(冰岛) |
|---|---|---|---|
| 电极数 | 4 枚,3 路差分 | 6 枚,3 路差分 | 16 枚,多路 |
| 采样率 | 20 Hz | 20 Hz | 更高,通道更多 |
| 压力通道 | 无 | 有,第 8 路 | 无 |
| 孕周窗口 | 23 周与 31 周 | 31 周前后单窗口 | 孕期与产程多窗口 |
| 结局标注 | 引产、剖宫产、引产转剖 | 早产、足月、未孕 | 早产与足月 |
| 配对记录 | 有,Pair_RecID | 无 | 视记录而定 |
| 许可 | ODC-ODbL 1.0 | ODC-By 1.0 | 见该库页面 |
三者的差别不在质量,而在各自回答的问题。TPEHGT DS 关心宫缩与机械压力的对应,所以有压力通道;ehgdb 关心空间传播,所以用十六枚电极;ICEHG DS 关心分娩方式的早期可预测性,所以要在孕 23 周就取数,并且必须把结局分细。选型时先问自己要哪一层信息,再挑库。
§3 它是谁的子宫肌电:一个人的池子里切出来的一块
3.1 贡献者与机构
数据集只有一个署名作者:Franc Jager,卢布尔雅那大学计算机与信息科学学院。他在同一所大学所属的生物医学计算机系统与成像实验室工作,PhysioNet 上与他名字相连的数据集不止这一份——TPEHG DB 与 TPEHGT DS 都出自同一个实验室、同一位作者之手。数据集页面上的联络网址指向该实验室,而不是医院。
临床一侧由卢布尔雅那大学医学中心围产医学临床部提供。官方致谢写明,该临床部在数据采集上给予了配合。伦理审批由斯洛文尼亚共和国国家医学伦理委员会出具,编号 32/01/97,所有参与者都签署了书面知情同意。
分工可以拆成五层:作者与整理者负责选样、格式化、写文档与发布;临床采集方负责 1997 至 2006 年间的实际记录;伦理审批由斯洛文尼亚共和国国家医学伦理委员会出具,批件编号 32/01/97;资助方是斯洛文尼亚研究署(ARRS),对应项目名为「生殖健康的代谢与先天因素,出生 III」;PhysioNet 负责托管、DOI 与版本管理。技术侧与临床侧分属两个机构,作者本人不在医院编制内,这一点决定了文档的写法——方法段落写的是协议,不是临床流程。
资助信息写在致谢段,作者同时声明无利益冲突,并注明资助方未参与设计、采集、写作与发表决定。这类声明在 PhysioNet 的项目页上并不常见,多数项目页只列机构不列基金号。
3.2 时间线
| 阶段 | 时间 | 状态 |
|---|---|---|
| 采集 | 1997–2006 | 在围产医学临床部积累记录池,共一千二百余条 |
| 第一次切分 | 2011 | TPEHG DB 上线,取走自发早产与自发足月 |
| 第二次切分 | 2018 | TPEHGT DS 上线,取走带宫缩标注的足月与早产 |
| 配对研究 | 2022 | Pirnar 等人用三个库合并分析,验证频谱峰值可分开早产组 |
| 上线 | 2023-09-22 | ICEHG DS 1.0.0 发布 |
| 修订 | 2023-10-08 | 1.0.1,十六天后更新,变更内容未在页面说明 |
| 现状 | 2026 | 仍为 1.0.1,项目页访问量三百余次 |
这条时间线有一个容易忽略的点:记录采集在 2006 年就结束了,公开却在十七年之后。中间那十七年,这批「结局是引产或剖宫产」的记录一直躺在池子里没被用过,因为 2011 年与 2018 年的两次切分都只关心自发分娩。
3.3 采集场景:一次产科门诊的常规检查
采集过程没有特殊之处,正因为没有特殊之处,它才可复制。四枚 Ag/AgCl 电极贴在腹部表面,以脐为中心上下对称,相邻电极间距 7 厘米。官方给的编号是 E1 到 E4,实际贴法见项目页的 Figure_1;文字部分只交代了间距与对称关系,没有逐枚说明方位。
| 环节 | 做法 | 后果 |
|---|---|---|
| 电极 | 四枚 Ag/AgCl,脐周对称,间距 7 厘米 | 覆盖范围约一个手掌,无空间分辨力 |
| 导联 | 三路差分,S1、S2、S3 | 只能得到三个方向的投影 |
| 时长 | 约 30 分钟 | 足够覆盖数次宫缩或一段静息 |
| 体位与环境 | 官方未描述 | 无法判断是否同一体位、同一房间 |
| 抗混叠 | 三极点巴特沃斯低通,截止 5 Hz | 5 Hz 以上成分一律丢失 |
| 数字化 | 20 Hz,16 位,±2.5 毫伏 | 分辨率 0.076 微伏 |
| 记录时机 | 常规产检时,孕 23 周或孕 31 周前后 | 非临产、非产程 |
这一步的物理含义值得展开。子宫肌电是平滑肌细胞同步除极产生的电位,幅度在几十到几百微伏量级,频率集中在 0.08 至 5 Hz。记录时电极贴在腹壁上,中间隔着皮肤、脂肪、筋膜与子宫壁,信号被大幅衰减,还要与母体心电、呼吸、肠蠕动、运动伪迹共处一段频谱。7 厘米的电极间距是一个折中:太近则差分信号太弱,太远则两枚电极看到的可能是不同的电活动区域。
3.4 九十一次妊娠与三种分娩结局
官方按结局定义了三组,定义写得很具体,值得原样保留:
| 分组 | 官方定义 | 记录数 / 妊娠数 |
|---|---|---|
| 引产(Induced) | 预期自然临产,最终足月但临产未自行发动,需人工引产 | 81 / 59 |
| 剖宫产(Cesarean) | 足月,未经引产直接急诊剖宫产 | 19 / 13 |
| 引产转剖(Induced-cesarean) | 足月,引产失败后转急诊剖宫产 | 26 / 19 |
| 合计 | 三种结局均为足月 | 126 / 91 |
三组的入选前提是同一个:记录当时,这批妊娠被判断为会自然进展到足月阴道分娩。结局是事后才知道的。这个设计让标签与信号之间不存在因果倒置——信号在先,结局在后,中间隔了七到十六周。
| 分组 | 分娩孕周(均值 ± 标准差) | 记录孕周窗口 |
|---|---|---|
| 引产 | 39.8 ± 1.4 周 | 23 周与 31 周 |
| 剖宫产 | 39.7 ± 1.1 周 | 23 周与 31 周 |
| 引产转剖 | 39.4 ± 0.9 周 | 23 周与 31 周 |
三个均值都落在足月区间,彼此相差不到半周。这意味着单靠分娩孕周无法区分三组,也意味着任何想从信号里读出结局的模型,都不能借用「孕周越短越危险」这条捷径。
3.5 为什么这批记录只能出自 1997–2006 年的那个池子
原始记录池的规模是一千二百余条,官方写作「a total of 1,211」。这些记录来自两个来源:常规产检的普通人群,以及因先兆早产入院观察的患者。采集横跨九年,用同一套设备、同一套协议。
一千二百余条记录,最终被切成三份公开数据:2011 年的 TPEHG DB 取走自发早产与自发足月,2018 年的 TPEHGT DS 取走带宫缩标注的部分,2023 年的 ICEHG DS 取走足月引产与剖宫产。三次切分按结局互斥,同一妊娠不会同时出现在两份公开数据里——这是官方描述的选择标准所决定的。
按今天的标准,这样的池子几乎不可能重建。它需要一家医院连续九年用同一台设备、同一套电极位置做常规检查,需要伦理批件覆盖一个横跨九年的项目,还需要有人在十七年后回头把当年判定为「会自然分娩」的病例一个个找出来、核对结局、重新格式化。三项条件里任何一项断掉,数据就散了。
3.6 与 TPEHG 两条库的血缘
同门三份数据的关系可以这样理解:TPEHG DB 回答「会不会早产」,TPEHGT DS 回答「宫缩什么时候来」,ICEHG DS 回答「足月了,但是怎么生的」。三者共用采集协议与设备,因此可以直接合并成一个更大的池子使用,官方明确推荐这种做法。
合并的价值在一篇 2022 年的研究里被具体化了。Pirnar、Jager 与 Geršak 把三份数据的晚期记录放在一起,比较早产、足月自发、引产、剖宫产、引产转剖五个组,发现归一化功率谱在 0.125 至 0.575 Hz 频段的峰值幅度,能有效把早产组与其他所有足月组分开。这个结果反过来说明:足月各组之间靠这个特征分不开。分不开不是坏消息——它恰恰说明「足月但非自然分娩」在电生理上更接近正常足月,而不是接近早产。模型若把它们误判成早产,错在模型的类别边界,不在信号。
§4 它最独特的东西:把结局拆成三类,还给了两个时间点
4.1 四枚电极、三路差分、一路可以算出来
四枚电极只能构成三路独立差分,这是电路决定的:四个节点的电位差,去掉一个公共参考后只剩三个自由度。官方给的三个式子是 S1 = E2 − E1(上两枚之间)、S2 = E2 − E3(左两枚之间)、S3 = E4 − E3(下两枚之间)。
| 信号 | 电极对 | 方向与来源 |
|---|---|---|
| S1 | E2 − E1 | 水平方向,直接采集 |
| S2 | E2 − E3 | 垂直方向,直接采集 |
| S3 | E4 − E3 | 水平方向,直接采集 |
| S4 | E4 − E1 | 垂直方向,由前三路合成 |
第四路 S4 可以用 S1 − S2 + S3 算出来。推导过程只用了一次代换:由 S3 = E4 − E3 得 E4 = S3 + E3,由 S1 = E2 − E1 得 E1 = E2 − S1,两式相减即得 E4 − E1 = S1 − S2 + S3。
官方还给了一个精度声明:合成出来的 S4 与真正在 E4 与 E1 之间测到的信号相比,逐样本差值的标准差小于相邻两个整数刻度之差 0.076 微伏,接近模数转换器的量化误差 0.038 微伏。换句话说,这个合成几乎是无损的,因为三路差分已经把四个节点的信息完整保留了下来。反过来说,单极信号 E1 到 E4 无法从三路差分里还原——差分会丢掉共模成分,这是不可逆的。
4.2 原始与滤波成对存放
.dat 里同时存了两份信号:一份是数字化之后的原始波形,一份是经四极点 0.08 至 5 Hz 巴特沃斯带通、双向滤波后的版本。双向滤波的作用是抵消相位延迟——正向滤一遍再反向滤一遍,群延迟相互抵消,输出与输入在时间上对齐。子宫肌电的传播时序分析依赖毫秒级对齐,这一步是必要的。
| 处理 | 参数 | 目的 | 副作用 |
|---|---|---|---|
| 模拟抗混叠 | 三极点低通,截止 5 Hz | 防止 10 Hz 以上折叠进带内 | 5 Hz 以上信息永久丢失 |
| 带通滤波 | 四极点,0.08–5 Hz | 去掉基线漂移与残余高频 | 首尾各 150 秒出现瞬态 |
| 滤波方向 | 双向 | 零相位,波形不移位 | 无法在线实时使用 |
| 首尾处理 | 官方建议置零或弃用 | 规避瞬态 | 每条记录少 300 秒,约六分之一 |
最后一行是最容易被忽略的边界。一条记录名义上 1767 秒,去掉首尾各 150 秒,剩 1467 秒,约 24 分半。做频谱估计时若把整段都喂进去,两端的瞬态会被当成低频能量,抬高 0.1 Hz 附近的谱峰——正好落在研究者最关心的频段里。
4.3 案例:664 与 665,同一个人相隔七周
配对记录是这份数据最值得单独讲的机制。以引产组里编号相邻的这一对为例:
| 项目 | icehg665 |
icehg664 |
|---|---|---|
| 子目录 | early_induced |
later_induced |
| 记录孕周 | 23.1 周 | 30.4 周 |
| 采样点数 | 35340 | 35080 |
| 折合时长 | 29 分 27 秒 | 29 分 14 秒 |
| 分娩方式 | Induced | Induced |
| 分娩孕周 | 37.1 周 | 37.1 周 |
| 母亲年龄 | 26 岁 | 26 岁 |
| 体重 | 83 千克 | 84 千克 |
| 身高 | 165 厘米 | 165 厘米 |
| 胎盘位置 | front | front |
| 新生儿体重 | 2860 克 | 2860 克 |
Pair_RecID |
664 | 665 |
两条记录除了孕周与体重,其余字段完全相同——因为它们本来就是同一次妊娠。这正是配对机制的意义:它把「同一个人的两个时间点」变成了一次可计算的纵向对照,而不是两次互不相干的横断面采样。
这一对还暴露了一个使用上的细节。分娩孕周 37.1 周,比引产组的均值 39.8 周早了近三周,刚好压在足月定义的下沿。也就是说,这个「Induced」标签覆盖的孕周跨度不小,从 37 周出头到 40 周以上都有。做分组统计时,孕周是一个必须控制的变量,不能默认三组孕周分布一致。
§2.4 里提到的编号相邻规律在这一对上体现得最清楚:665 与 664。但规律只是规律,同一个池子里也有相差很远的配对,写代码时仍应以 Pair_RecID 字段为准。
4.4 标注只有临床字段,没有波形标注
这是全库最需要说清的一件事。数据里不存在任何以时间为单位的标注:没有宫缩起点与终点,没有肌电爆发区间,没有伪迹段,没有分娩方式之外的任何事件标记。
| 标注类型 | 是否存在 | 说明 |
|---|---|---|
| 宫缩区间 | 否 | 同门的 TPEHGT DS 有,本库没有 |
| 肌电爆发起止 | 否 | 需自行用算法或人工标 |
| 伪迹与丢帧 | 否 | 无质量标记 |
| 分娩方式 | 是 | 三个取值,写在头文件 RecType |
| 分娩孕周 | 是 | 写在 Gestation |
| 新生儿体重 | 是 | 写在 Newborn_weight |
| 母亲人体测量 | 是 | 年龄、身高、记录时体重 |
| 胎盘位置 | 是 | 两个取值 |
所以它的监督信号只到「记录级」这一层。整条记录对应一个标签,记录内部没有任何细粒度真值。这与影像分割数据集是完全不同的形态:那边一条记录有很多标注,这边一条记录只有一个标签。
4.5 边界条件:什么情况下它不再适用
频段边界。 5 Hz 的抗混叠截止是硬边界,任何 5 Hz 以上的分析都不成立。有人想从子宫肌电里找高频肌电尖峰、做小波多尺度分解到 8 Hz 以上,这份数据给不了。
空间边界。 四枚电极贴在 7 厘米见方的范围内,测到的是这一小块腹壁下方的整体电活动投影。要说「电活动从哪个角开始传」,只能在这三个方向上说,不能说「从子宫的哪个部位开始」。
时间边界。 只有孕 23 周与孕 31 周两个窗口,没有临产前、产程中、产后。任何关于「临产发动那一刻电活动如何变化」的问题,都不在它的覆盖范围内。
因果边界。 结局是产后回填的,引产指征没有记录。同样的「Induced」标签,可能来自胎膜早破、可能来自过期妊娠、可能来自产妇要求。把这三类混在一起做机制解释,结论会互相抵消。
§5 怎么拿到:一百一十五兆的完整闭环
5.1 目录结构与下载面
整库未压缩 115.6 MB,压缩包 89.0 MB。PhysioNet 提供三种取法:网页下载 ZIP、wget 递归抓取、AWS 开放数据桶同步。三种取到的内容一致,区别只在速度与是否需要断点续传。
四种取法都不需要凭证。网页 ZIP 最省事,点一下拿到 89.0 MB;wget -r -N -c -np 适合脚本化,会保留两级目录结构;aws s3 sync --no-sign-request 在云端环境里最快,桶名是 physionet-open;curl -O 适合只要某几条记录的场景,按 RECORDS 里的整行拼 URL 即可。
按记录挑也实用。六个子目录里,剖宫产组最薄,两次记录加起来只有 19 条;引产组最厚,81 条。若只想验证读取流程,取 early_cesarean 里的几条就够,不到十兆。
5.2 批量下载
#-- 全库递归下载,保留目录结构,支持断点续传
wget -r -N -c -np https://physionet.org/files/icehg-ds/1.0.1/
#-- 或者走 AWS 开放数据桶,无需任何凭证
aws s3 sync --no-sign-request s3://physionet-open/icehg-ds/1.0.1/ ./icehg
#-- 只要剖宫产组:先拿清单,再按前缀过滤
curl -s https://physionet.org/files/icehg-ds/1.0.1/RECORDS | grep cesarean > cs.txt
while read r; do
curl -sO "https://physionet.org/files/icehg-ds/1.0.1/${r}.hea"
curl -sO "https://physionet.org/files/icehg-ds/1.0.1/${r}.dat"
done < cs.txt
RECORDS 每行是「子目录/记录名」的形式,直接把整行拼进 URL 就能取到文件,不用自己拆。-np 禁止上溯父目录,-c 支持断点续传,两个参数一起用才不会把整个 PhysioNet 拖下来。
5.3 用 wfdb 直接流式读取
不下载也能读。wfdb 的 pn_dir 参数支持直接从 PhysioNet 拉取,但有一个坑:记录存放在子目录里,pn_dir 必须把子目录带上。
import wfdb
import numpy as np
#-- pn_dir 指到具体子目录,只写 'icehg-ds/1.0.1' 会 404
hdr = wfdb.rdheader('icehg665', pn_dir='icehg-ds/1.0.1/early_induced')
print(hdr.fs, hdr.n_sig, hdr.sig_len)
print(hdr.sig_name)
#-- 只取第 600 到 900 秒,避免整条载入
rec = wfdb.rdrecord('icehg665', pn_dir='icehg-ds/1.0.1/early_induced',
sampfrom=600 * 20, sampto=900 * 20)
x = rec.p_signal
print(x.shape)
print([round(float(np.ptp(x[:, i])), 3) for i in range(x.shape[1])])
p_signal 已按增益换算,单位是毫伏;d_signal 是原始整数。要复现头文件里的初始值、校验和,必须用 d_signal,用 p_signal 会得到浮点近似值。
5.4 解析头文件里的临床字段
十行临床字段藏在注释区,格式是「字段名 空格 值」。它们不在 WFDB 的标准字段里,rdrecord 会整段塞进 comments,需要自己拆。
import re
import wfdb
rec = wfdb.rdrecord('icehg665', pn_dir='icehg-ds/1.0.1/early_induced')
meta = {}
for line in rec.comments:
line = line.strip()
if not line or line.startswith('Comments'):
continue
key, _, val = line.partition(' ')
meta[key] = val.strip()
print(meta)
#-- {'RecID': '665', 'RecType': 'Induced', 'Gestation': '37.1',
#-- 'Rectime': '23.1', 'Age': '26', 'Weight': '83',
#-- 'Placental_position': 'front', 'Height': '165',
#-- 'Newborn_weight': '2860', 'Pair_RecID': '664'}
拆出来的字典里,Gestation 与 Rectime 是浮点字符串,Placental_position 是两个单词之一,Pair_RecID 为 0 时表示没有配对记录。批量处理时建议先跑一遍全库,确认所有键都出现了——缺键与键名拼写差异不会报错,只会静默产生空值。
5.5 合成第四路 S4
官方给出了 S4 的合成公式,也给出了精度声明。要做三个方向的电活动分析,这一步省不掉。
import numpy as np
#-- 取原始三路(索引 0、2、4),滤波版在 1、3、5
s1, s2, s3 = rec.p_signal[:, 0], rec.p_signal[:, 2], rec.p_signal[:, 4]
s4 = s1 - s2 + s3
print(float(np.std(s4)), float(np.ptp(s4)))
#-- 首尾各 150 秒置零,规避滤波器瞬态
fs, n = rec.fs, rec.sig_len
edge = 150 * fs
for i in range(6):
rec.p_signal[:edge, i] = 0.0
rec.p_signal[-edge:, i] = 0.0
注意索引:原始与滤波交替排列,所以原始三路是 0、2、4,滤波三路是 1、3、5。按 0、1、2 取会把滤波版当成原始版,图上看不出差别,频域上差别很大。
5.6 五个最容易出错的地方
| 易错点 | 表现 | 正确做法 |
|---|---|---|
| 把 S1、S2、S3 当成相邻通道 | 频谱分析结果偏差 | 三者是两两差分,不是空间相邻采样 |
| 取错通道索引 | 拿滤波版当原始版 | 原始在 0、2、4,滤波在 1、3、5 |
| 忽略首尾 150 秒 | 低频段出现虚假谱峰 | 置零或直接裁掉前后各 150 秒 |
| 用记录数当样本数 | 划分后测试集虚高 | 以妊娠为单位,按 Pair_RecID 分组 |
pn_dir 不带子目录 |
404 或拉错记录 | 写成 icehg-ds/1.0.1/<子目录> |
第三条与第四条是实战里最贵的。前者影响每一次频谱估计,后者影响每一次模型评估。第五条只在新手第一次读的时候出现一次,改一次就记住了。
§6 与库内相关资源的关系
6.1 关系图谱
库内与它最近的资源是 TPEHGT,同一位作者、同一家医院、同一套电极与采样率,区别在结局分组与压力通道。再远一层是冰岛的十六电极子宫肌电库,同一种信号、不同的空间分辨率。产时监护一侧,胎心宫缩图的两个公开集回答的是「临产后胎儿状态」,与孕期的子宫电活动不在一个时间窗。
| 关联资源 | 信号关系 | 时间窗 | 与本文的分工 |
|---|---|---|---|
| TPEHGT | 同一协议,20 Hz,含压力通道与宫缩标注 | 孕 31 周前后 | 它是宫缩时序,本文是分娩方式 |
| ehgdb(冰岛) | 同为子宫肌电,16 电极 | 孕期与产程 | 它是空间传播,本文是结局分类 |
| CTU-UHB 胎心宫缩图 | 产时胎心与宫缩压力 | 产程中 | 产时监护,不是孕期预测 |
| UCI 胎心宫缩图 | 特征化后的产时记录 | 产程中 | 特征工程素材,非原始波形 |
| NIFEA 胎儿心电 | 腹部记录,目标是胎心 | 孕期 | 同一类腹壁电极,目标信号不同 |
| adfecgdb | 腹壁与直接胎心电 | 分娩前后 | 胎心提取的金标准对照 |
| PICS 早产儿心肺 | NICU 婴儿监护 | 出生后 | 早产儿结局侧,不是产前 |
6.2 检索路径
按信号找:先看「生理信号」大类,再往下找子宫肌电与胎心两个分支,本文与 TPEHGT、ehgdb 同支。按任务找:先看「早产预测」,再看「分娩方式预测」,后者目前只有本文一条。按数据形态找:「时序信号 + 波形 + 元数据」这个组合能把产科电生理的几个库一并捞出来。
具体到几条常用路径:找孕期子宫电活动,走「生理信号 → 子宫肌电」,会同时落到本文、TPEHGT 与 ehgdb;找宫缩标注,同一条路径下只有 TPEHGT 满足;找产时胎儿监护,改走「胎心宫缩」,会落到 CTU-UHB 与 UCI 两个公开集;找胎心电提取,走「胎儿心电」,NIFEA、adfecgdb 与 FECGSYNDB 都在这一支;找早产预测的对照基准,则要先确定自己缺的是正类还是负类。
6.3 与 TPEHG 体系的分工
三份数据常被当成一个整体引用,实际使用时分工很清楚:
| 问题 | 用哪份 | 理由 |
|---|---|---|
| 会不会早产 | TPEHG DB / TPEHGT DS | 有自发早产记录 |
| 宫缩什么时候来、来多强 | TPEHGT DS | 有压力通道与宫缩区间 |
| 足月了但是不是自然临产 | ICEHG DS | 唯一把三类足月结局分开的 |
| 早产模型在真实人群里会掉多少 | 三份合并 | 只有合并才能同时含早产与三类足月 |
官方明确说三份数据的采集协议与设备相同,因此可以并池使用。并池时有一个细节:三份数据的妊娠是按结局互斥切分的,同一次妊娠不会同时出现在两份里,所以并池不会产生重复样本。这一点在写方法学时值得写进去,它决定了并池后不需要额外的去重步骤。
6.4 任务与选型
| 任务 | 本库是否适合 | 更合适的资源 |
|---|---|---|
| 三类足月结局分类 | 适合,样本偏少 | 无更合适的公开资源 |
| 早产 vs 足月二分类 | 不适合,无早产样本 | TPEHG DB、TPEHGT DS |
| 分娩方式的多类预测(含产程) | 部分适合,只有孕期窗 | 产时胎心宫缩图 |
| 子宫肌电传播速度估计 | 勉强,三方向且无定位 | ehgdb(16 电极) |
| 宫缩检测与分割 | 不适合,无宫缩标注 | TPEHGT DS |
| 滤波方案对比 | 适合,原始与滤波成对 | 无更合适的公开资源 |
6.5 什么时候该放弃它
当你要的样本量在千级以上。 126 条记录、91 次妊娠,按妊娠分组后每类只剩十几到五十几次,做深度模型连一次像样的交叉验证都撑不住。
当你要预测的是「会不会早产」。 这不是它的任务。硬用它当负类,得到的模型只学会了区分「自然临产」与「没自然临产」,换个队列就失效。
当你的场景不是足月。 全部记录的分娩孕周都在足月区间,晚期早产、极早产、双胎、臀位、瘢痕子宫,一个都没有。
当你要的是可解释的临床决策依据。 引产指征缺失,三组的临床成因不可分辨。模型即使分对了,也说不清依据是什么。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
讨论这份数据的质量,得先把三件事摆正,否则很容易把它当成一份做得不够好的大库来评判。
第一,它的样本量小不是因为没做完,而是因为分母就那么大。足月引产与足月剖宫产在 1997 至 2006 年那家医院的记录池里只有这么多条,作者把能用的全拿出来了。用「才九十一次妊娠」去扣分,等于用大库的标准衡量一份全量抽取的小池子,评判的尺子本身就错位。
第二,它的标注薄不是遗漏,而是这个任务只需要记录级标签。分娩方式预测的输出就是一个类别,不需要逐秒真值。拿它跟分割数据集比标注密度,是把两种任务混为一谈。
第三,它没有压力通道不是缺陷,而是与同门数据的分工。宫缩压力在 TPEHGT DS 里,这份数据负责的是电信号与结局的对应。两份数据共用协议,需要的可以并池。
把这三条摆正之后,剩下的问题才是真问题:单中心、旧年代、无指征、无随访。这四条会实打实地限制结论的适用范围,也是下面几节要逐条量化的。
7.1 五维评分
按 DAIMS 的常用维度打分,每项 1 至 5 分。评分的用途是「作为足月分娩方式预测的机制研究素材」,不是「作为可上线的临床模型训练集」:
| 维度 | 分数 | 判断依据 |
|---|---|---|
| 完整性 | 3 | 三路信号、原始与滤波成对、临床字段齐全;无压力通道、无波形标注 |
| 准确性 | 4 | 孕周精确到零点一周,新生儿体重精确到克,配对关系有专门字段 |
| 一致性 | 5 | 全库 20 Hz、6 通道、同一增益、同一滤波参数、命名规则统一 |
| 可追溯性 | 4 | 有 DOI、有伦理批号、有配套论文、有版本历史;版本间变更未说明 |
| 可获得性 | 5 | 无需注册、无需申请、百兆级、三种下载方式 |
一致性拿到满分是有底气的:126 条记录的采样率、通道数、增益字段、滤波参数完全一致,头文件格式一字不差,连临床字段的行序都固定。这种整齐度在小规模手工整理的数据集里并不常见,它直接降低了批量解析的出错率。
可追溯性扣的那一分在版本上。1.0.0 到 1.0.1 只隔十六天,页面上没有任何变更说明,也没有勘误记录。使用者无法判断这十六天里改了什么,只能默认最新版是修正后的版本。
同一批数据,用途一换,分数就变。若问的是「能不能训一个可上线的分娩方式模型」,完整性会从三分掉到两分,因为缺指征、缺随访、缺外部验证集;准确性会从四分掉到三分,因为标签含义随临床决策而变;一致性与可获得性两项不动,它们衡量的是数据工艺,与用途无关。总分从二十一降到十九。分数变化集中在前两项,这说明它的短板在「临床上下文」而不在「数据工艺」。
7.2 信号的三层可信度
同一条记录里,不同属性的可信度差别很大,应该分层看:
| 层次(可信度) | 依据 | 使用建议 |
|---|---|---|
| 时间轴(高) | 采样率固定 20 Hz,样本数与时长自洽 | 可直接用于秒级时序分析 |
| 通道身份(高) | 头文件逐路声明,全库一致 | 按 sig_name 取列即可 |
| 幅度(高) | 增益 13107 单位每毫伏,量程 ±2.5 毫伏 | 与同类库相比可做绝对幅度比较 |
| 波形形态(中) | 真实采集,受电极接触与体位影响 | 形态学结论需限定在记录内 |
| 空间位置(低) | 四枚电极 7 厘米见方,无影像配准 | 只做方向性描述,不做定位 |
| 标签含义(中) | 结局可靠,成因未知 | 分类可以,机制解释要留白 |
幅度这一层与心内电图类数据正好相反。心内双极的绝对幅度取决于电极贴壁压力,跨记录不可比;这里电极贴在腹壁上,接触压力对幅度的影响小得多,增益又是统一标定的,所以不同记录之间的毫伏值是有意义的。这一条常被误判——很多人带着「生理信号幅度不可比」的成见来,反而放弃了这份数据里可用的一个维度。
可信度最低的是空间位置。7 厘米的电极间距,测到的是这一小块区域下方所有电活动的叠加,包括子宫、腹壁肌肉、肠管。说「信号从 S2 传到 S1」,只在这两个方向上有意义,不能翻译成解剖上的传播路径。
7.3 已知的、可枚举的偏差
| 偏差 | 具体表现 | 会污染什么结论 |
|---|---|---|
| 单中心 | 全部来自卢布尔雅那一家医院 | 跨机构泛化 |
| 年代 | 采集于 1997–2006 年 | 引产与剖宫产指征的时代变化 |
| 样本量 | 91 次妊娠,三类分别为 59、13、19 | 类别间的统计功效 |
| 类别不平衡 | 引产组占三分之二 | 三分类的多数类偏置 |
| 孕周跨度 | 分娩孕周从 37 周出头到 40 周以上 | 未控制孕周的分组比较 |
| 缺失指征 | 无引产原因、无 Bishop 评分 | 标签的临床可解释性 |
| 无随访 | 只有出院时的结局 | 母婴近远期并发症 |
| 无压力通道 | 只有电信号 | 电活动与机械宫缩的对应 |
| 记录窗口 | 只有孕 23 周与孕 31 周 | 其他孕周的预测 |
第五条容易被忽视。三组的分娩孕周均值相差不到半周,但个体跨度不小,§4.3 的案例就落在 37.1 周,比组均值早了近三周。若把孕周当成无关变量直接分组比较,孕周带来的信号差异会混进结局差异里。
第七条决定了这份数据的解释上限。同样的「引产」,可能因为胎膜早破,可能因为过期妊娠,也可能因为产妇主动要求。三种成因对应的子宫状态完全不同,混在一个标签里,任何「引产组的电活动特征」都是三种机制的加权平均。
7.4 外部验证矩阵
| 验证维度 | 本库能否支撑 | 说明 |
|---|---|---|
| 内部复现(同记录不同时段) | 能 | 30 分钟记录可切前后段互测 |
| 跨孕周复现(同一次妊娠两个窗口) | 能 | 35 次妊娠有配对记录 |
| 跨妊娠复现 | 勉强 | 按妊娠分组后测试集只有十几例 |
| 跨库复现(对 TPEHG 体系) | 能 | 协议与设备相同,可直接并池 |
| 跨机构复现 | 不能 | 全部单中心 |
| 与临床决策变量对照 | 不能 | 无指征、无 Bishop 评分 |
| 与影像或解剖对照 | 不能 | 无影像、无配准 |
这张表说明它的验证能力集中在「同一协议内部」。跨库那一行之所以能,是因为同门三份数据共用采集条件——这是它的独特优势,也是它无法外推的原因:一旦离开这套协议,就没有第二个可比的队列。
7.5 它为何能持续:稀缺性来自结局分类,不来自信号质量
一份九十一次妊娠、二十年前采集、没有波形标注的数据,按常规标准早该被更大的库取代。它没有,原因很具体:公开的子宫肌电库里,把足月引产与足月剖宫产单独成组、还给出同一次妊娠两个孕周配对记录的,就公开目录所见只有这一份。
信号本身并不稀缺。子宫肌电可以用便宜的设备采,可以在家测,近几年可穿戴方向也有进展。稀缺的是「结局分得很细、时间点对得很齐、还能跟同门数据合并」这个组合。它要求采集时不知道结局、随访时能查到结局、整理时愿意按结局重切一次。这三步都不难,但同时做到的人很少。
于是它处在这样一个位置:需求不大,替代品为零。做早产预测的团队迟早会撞上「足月非自然分娩」这个类别,撞上之后回头找数据,能找到的就是这里。这是分类带来的生存逻辑,与信号质量关系不大。
§8 生态位与历史
8.1 历史沿革
子宫肌电进入临床研究视野的时间不算晚。上世纪九十年代,欧洲几个组已经在做体表记录与频谱分析,试图从子宫电活动里读出临产的发动。那时的瓶颈不在算法,在数据:没有公开的、带结局标注的记录,每个组守着自己医院的几十条样本。
| 年代 | 事件 | 对本文的意义 |
|---|---|---|
| 1990 年代 | 体表子宫肌电的记录与频谱分析成形 | 确定了 0.08–5 Hz 这个工作频段 |
| 1997 | 卢布尔雅那开始系统采集 | 本文全部记录的起点 |
| 2006 | 采集结束 | 池子封存,共一千二百余条 |
| 2008 | 线性与非线性方法区分早产与足月的对比研究 | 奠定 TPEHG 体系的方法学 |
| 2011 | TPEHG DB 上线 | 第一次切分,只取自发分娩 |
| 2018 | TPEHGT DS 上线 | 第二次切分,加入宫缩标注 |
| 2022 | 五个足月与早产组的分离研究 | 首次把三份数据合并使用 |
| 2023 | ICEHG DS 上线 | 第三次切分,补上引产与剖宫产 |
这条线有一个共同点:每一次新数据集上线,都是把同一个池子按新的问题重切一遍。池子没变,问题变了。这也是为什么三份数据能无缝合并——它们本来就是同一批记录的不同切片。
8.2 与早产预测这条研究线的关系
早产预测的文献里,子宫肌电常被当作「比宫颈长度更早、比胎心监护更直接」的一条路。这条路的经典做法是:取孕 20 到 36 周之间的记录,算频谱、算样本熵、算传播速度,然后分类。
ICEHG DS 对这条线的作用是提出一个反问:你分出来的「足月」到底是什么。如果训练集里的足月全是自然临产,模型学到的可能不是「有没有早产风险」,而是「有没有自然临产的迹象」。这两件事在临床上不等价——一个 31 周时被判为「不会自然临产」的孕妇,可能只是后来被引产了,而不是早产。
| 研究问题 | 传统做法 | 加入本库后 |
|---|---|---|
| 早产 vs 足月 | 足月只含自然临产 | 足月含三类结局,更接近真实人群 |
| 特征是否具有普适性 | 在自然临产上验证 | 可在三类足月结局上验证稳健性 |
| 模型误差来源 | 归因于信号质量 | 可拆分出「类别边界」这一项 |
| 临床可用性 | 报告 AUC | 可报告加入困难负例后的性能下降 |
第三行是这份数据最实用的价值。很多早产模型在论文里表现很好,上线后掉得厉害,掉的那部分里有多少来自「足月但被引产」,此前无从估计。有了这份数据,至少可以量化一个下界。
8.3 生态位:产科电生理里的一个窄格
把产科公开数据摊开看,影像一侧最热闹:胎儿超声、胎心超声、胎盘 MRI,都有成规模的标注集。产时监护一侧有胎心宫缩图的两个公开集,样本上千。孕期电生理一侧则很小:子宫肌电三份,胎儿心电若干,加起来不到十份。
| 生态位 | 代表资源 | 规模量级 | 主要任务 |
|---|---|---|---|
| 胎儿影像 | 胎儿超声与 MRI 系列 | 千至万级图像 | 分割、测量、切面分类 |
| 产时监护 | 胎心宫缩图公开集 | 数百至数千例 | 胎儿状态分类 |
| 孕期子宫电 | 本文、TPEHGT、ehgdb | 三十至一百余条 | 早产与分娩方式预测 |
| 胎儿心电 | 腹壁与直接记录 | 数十条 | 胎心提取 |
| 早产儿监护 | NICU 心肺记录 | 十余例 | 新生儿状态 |
孕期子宫电这一格之所以窄,原因是采集需要孕妇在诊室静躺半小时,且信号微弱、易受干扰,很难像影像那样批量回顾。这个结构性约束短期内不会改变,所以这一格里的每一份数据都会长期被引用,哪怕体量很小。
8.4 谁在用它,用来做什么
项目页显示的访问量是当前版本三百余次、全部版本三百八十余次。对一个上线三年的数据集来说,这个数字偏低,说明它的用户群很窄。官方列出的用途有三条:研究导致引产或剖宫产的孕期生理机制;早期预测引产与剖宫产的分娩方式;与 TPEHG 体系合并,评估早产分类方法在包含全部结局时的表现。
使用者大体分四类。生理机制研究者比较三组在孕 23 周与 31 周的频谱差异,额外要做的是控制孕周与体重;算法研究者把它当困难负例重估早产模型,额外要做的是按妊娠分组重划分;设备开发者拿它验证自家电极位置与滤波链,额外要做的是把协议对齐;教学者用它演示差分导联与零相位滤波,取一对配对记录就够。
设备开发者这一类值得多说一句。四枚电极、三路差分、7 厘米间距,是一套很标准的腹部电生理配置。做母胎监护设备的团队可以用它做参考实现:同样的电极位置采出来的信号应该长什么样,滤波链的哪一步会影响什么,都能在这批记录上看到。
§9 使用指引
9.1 三种角色的路径
想快速判断能不能用,先读 §1.3 与 §1.6,然后下一条记录看波形,最容易犯的错是把「126 条」当成 126 个独立样本。要做分类实验,先读 §2.2 与 §4.4,然后按妊娠分组划分,要盯住类别不平衡与孕周混杂。要做信号处理,先读 §4.1 与 §5.6,然后取原始三路、裁掉首尾,要盯住通道索引与滤波瞬态。要写方法学章节,先读 §3.3 与 §9.3,然后引用数据集与配套论文,版本号必须写具体。
9.2 一条最短的可用流程
从零到一张可用的特征表,最短的路径是四步:取清单、按妊娠分组、逐条读信号、算特征。
import wfdb
import numpy as np
import pandas as pd
BASE = 'icehg-ds/1.0.1'
rows = []
for line in open('RECORDS'):
path = line.strip()
if not path:
continue
sub, name = path.split('/')
rec = wfdb.rdrecord(name, pn_dir=f'{BASE}/{sub}')
meta = {}
for c in rec.comments:
k, _, v = c.strip().partition(' ')
if k and not k.startswith('Comments'):
meta[k] = v.strip()
x = rec.p_signal[:, [0, 2, 4]] #-- 只取原始三路
x = x[150 * rec.fs : -150 * rec.fs] #-- 裁掉首尾各 150 秒
rows.append({
'record': name, 'dir': sub, 'pair': meta.get('Pair_RecID'),
'type': meta.get('RecType'), 'gest': float(meta.get('Gestation', 0)),
'rectime': float(meta.get('Rectime', 0)),
'ptp_s1': float(np.ptp(x[:, 0])), 'ptp_s2': float(np.ptp(x[:, 2])),
'std_s1': float(np.std(x[:, 0])), 'std_s2': float(np.std(x[:, 2])),
})
df = pd.DataFrame(rows)
df.to_csv('icehg_index.csv', index=False)
print(len(df), df['type'].value_counts().to_dict())
跑完得到的是一张 126 行的索引表。后续任何分析都先在这张表上筛,再回读原始信号,不必反复访问网络。划分时用 pair 列做分组键,把同一次妊娠的两条记录绑在一起——按这个键分组,§4.3 的案例那两条记录会落在同一折里,不会一分为二。
9.3 引用方式
官方给出的引用分两层:数据集本身与配套论文。两篇都该引,前者指向具体版本,后者给出方法学背景。
| 引用对象 | 建议写法 | 何时必须引 |
|---|---|---|
| 数据集 | Jager, F. (2023). Induced Cesarean EHG DataSet (ICEHG DS), v1.0.1. PhysioNet. doi:10.13026/zw34-n382 | 任何用到数据的结果 |
| 配套论文 | Jager, F. (2023). An open dataset with electrohysterogram records of pregnancies ending in induced and cesarean section delivery. Scientific Data 10:669. doi:10.1038/s41597-023-02581-6 | 描述数据来源与方法 |
| 平台 | PhysioNet 平台论文 | 平台层面的引用要求 |
| 同门数据 | TPEHG DB 与 TPEHGT DS 各自的数据集页 | 合并使用时逐份引 |
引用时把版本号写全。10.13026/zw34-n382 对应 1.0.1,10.13026/vrvd-mf28 是「最新版」的浮动 DOI。写死版本号能让别人复现到你用的那一份。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本页性质 | 数据集说明文档,不是原始数据的再分发 |
| 事实来源 | 全部取自 PhysioNet 项目页、目录清单与库内头文件 |
| 数字口径 | 规模、结构、边界三类;分布类统计不在范围内 |
| 推导数字 | 时长、样本量、可用段占比由头文件换算,方法已写明 |
| 未核实项 | 记录时的体位与环境、引产指征、产次、既往剖宫产史 |
| 医学建议 | 本页不含诊断或治疗建议,不构成产科临床指导 |
| 许可提示 | ODC-ODbL 1.0,衍生数据库须以相同许可发布 |
| 更新策略 | 官方版本不变则事实部分不变,勘误另记于编辑说明 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 这是一份心电数据集 | EHG 是子宫肌电,电极贴在腹部 | 官方标题与采集协议 |
| 库里有早产记录 | 三条结局全部是足月分娩 | 分娩孕周均值 39.4 至 39.8 周 |
| 126 条记录等于 126 个样本 | 来自 91 次妊娠,35 次有配对记录 | RECORDS 126 行,官方给 91 次妊娠 |
| 每条记录只有三路信号 | 六路,原始与滤波交替存放 | 头文件第一行写 6 |
| 有宫缩区间标注 | 没有任何时间维度的标注 | 头文件只有十行临床字段 |
| 采样率太低,做不了频谱 | 5 Hz 以上本就被抗混叠滤掉 | 滤波器截止 5 Hz,20 Hz 留一倍余量 |
| 信号幅度不可跨记录比较 | 腹壁记录,增益统一,毫伏可比 | 增益 13107 单位每毫伏,全库一致 |
| 记录首尾可以直接用 | 各 150 秒是滤波器瞬态,官方建议置零 | 官方 Limitations 段 |
| 许可与 TPEHG 一样,署名即可 | 这里是 ODbL,衍生库须同许可 | 项目页 License 栏 |
分组清单叫 RECORDS_induced-cesarean |
目录里的文件名拼作 RECORDS_induced-ceasarean |
文件目录与正文两处写法不一致 |
最后一条不是文字游戏。按正文写的文件名去取,会拿到 404;按目录里的拼写去取,才拿得到。两种写法并存,官方未说明以哪一处为准。
FAQ
Q1:ICEHG DS 里的 EHG 到底测什么?
测子宫平滑肌的电活动。子宫收缩前,平滑肌细胞的膜电位会同步变化,这些变化叠加起来在腹壁上形成几十到几百微伏的电位差。它跟心电、脑电同属电生理信号,但源器官、频段、电极位置都不同。
Q2:为什么记录孕周是 23 周和 31 周?
这是产检的两个固定节点。23 周前后做一次系统筛查,31 周前后再做一次,孕妇本来就要来医院,顺带记录半小时不影响流程。选这两个点也是为了让预测有提前量——31 周发现风险,还有近两个月可以干预。
Q3:91 次妊娠怎么会产生 126 条记录?
一部分孕妇两个孕周都来了,各留一条。官方用 Pair_RecID 把两条串起来,配对清单里则是同一行的两列。35 次妊娠有配对,剩下 56 次只有一条。
Q4:三类结局的样本为什么差这么多?
因为人群里本来就这样。足月引产比急诊剖宫产常见得多,引产转剖居中。这不是抽样偏差,是产科现实的比例在数据里的投影,但它确实让三分类任务的多数类偏置很明显。
Q5:可以把它和 TPEHG DB 直接拼在一起吗?
可以。协议、设备、采样率、电极位置全相同,官方明确推荐合并。需要注意两点:一是按结局互斥,不会重复;二是合并后类别变成五个(早产、足月自发、引产、剖宫产、引产转剖),分类任务的难度会明显上升。
Q6:20 Hz 的采样率够用吗?
对这个频段够。子宫肌电的有效成分在 5 Hz 以下,抗混叠滤波器切在 5 Hz,20 Hz 采样对应 10 Hz 的奈奎斯特上限,留了一倍余量。不够的是别的东西:看不了肌电尖峰的精细形态,也无法分离母体心电的高频成分。
Q7:为什么要自己合成 S4?
因为原始只有三路差分,而官方指出第四路(E4 与 E1 之间)可以用 S1 − S2 + S3 无损算出。要做两个垂直方向的分析,就得自己算。精度上官方给了保证:合成误差小于一个量化台阶。
Q8:首尾各 150 秒一定要丢掉吗?
官方用的是「建议」二字。做时域形态分析时影响不大,做频谱时影响明显——瞬态会在低频端造出虚假能量。稳妥做法是裁掉,代价是每条记录只剩约 24 分半。
Q9:能不能用它训练分娩方式预测模型?
能训,但别指望泛化。91 次妊娠、单中心、二十年前的临床实践,任何交叉验证数字都只在这个队列内部成立。合理定位是机制验证或方法可行性,不是产品原型。
Q10:ODbL 会不会影响我发论文?
不影响。分析结果、图表、模型参数都不受 ODbL 约束。受约束的是数据库本身:如果你整理出一份修改过的数据集对外发布,那份衍生库必须以 ODbL 共享。内部使用与论文发表都不触发这一条。
Q11:为什么有两个版本,改了什么都查不到?
1.0.1 在 1.0.0 之后十六天发布,页面上没有变更说明,也没有勘误段落。从目录看,LICENSE.txt 与 SHA256SUMS.txt 的时间戳是 10 月 8 日,信号文件是 7 月与 10 月初,推测涉及许可与校验文件的补齐,但官方未确认。
Q12:记录里的胎盘位置只有两个取值,够用吗?
官方只给了 front 与 end 两个值。临床上胎盘位置通常分前壁、后壁、侧壁、宫底,这份数据把它压成了二分。做与胎盘位置相关的分析时,只能按二分处理,不能还原更细的类别。
术语表
| 术语 | 英文 | 含义 |
|---|---|---|
| 子宫肌电 | electrohysterogram, EHG | 子宫平滑肌电活动的体表记录 |
| 子宫肌电图 | uterine EMG | 同上的另一种叫法,强调肌电属性 |
| 引产 | induction of labor | 用药物或机械方法启动临产 |
| 剖宫产 | cesarean section | 经腹切开子宫取出胎儿 |
| 引产转剖 | induced-cesarean | 引产失败后改行剖宫产 |
| 足月 | term | 孕 37 周至 42 周之间分娩 |
| 晚期早产 | late preterm | 孕 34 至 36 周分娩 |
| 宫颈评分 | Bishop score | 评估宫颈成熟度与引产成功率的评分 |
| 胎膜早破 | premature rupture of membranes | 临产前胎膜破裂,常见引产指征 |
| 差分导联 | bipolar derivation | 两个电极之间的电位差 |
| 单极导联 | unipolar | 相对公共参考的电位,本库未存 |
| 抗混叠滤波 | anti-aliasing filter | 采样前去掉高于奈奎斯特频率的成分 |
| 巴特沃斯滤波器 | Butterworth filter | 通带平坦的经典滤波器类型 |
| 零相位滤波 | zero-phase filtering | 双向滤波抵消相位延迟 |
| 瞬态 | transient | 滤波器启停时产生的虚假响应 |
| 量化误差 | quantization error | 模数转换的最小刻度带来的误差 |
| 增益 | gain | 每物理单位对应的整数刻度数 |
| 基线 | baseline | 零电平对应的整数值 |
| 采样率 | sampling rate | 每秒采样点数,本库 20 Hz |
| 配对记录 | pair record | 同一次妊娠在不同孕周的两条记录 |
| 功率谱 | power spectrum | 信号能量随频率的分布 |
| 归一化功率谱 | normalized power spectrum | 除以总能量后的谱,便于跨记录比较 |
| 快速波 | fast wave | 子宫肌电中频率较高的成分,与宫缩相关 |
| 妊娠结局 | pregnancy outcome | 分娩方式与母婴状态的总称 |
| WFDB | Waveform Database | PhysioNet 的生理信号存储规范 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 妊娠数 | 91 | 官方页面正文 | 官方 |
| 记录数 | 126 | 官方页面与 RECORDS |
官方 |
| 早期记录数 | 62 | 官方页面正文 | 官方 |
| 晚期记录数 | 64 | 官方页面正文 | 官方 |
| 引产组记录数 | 81 | 官方页面与分组清单 | 官方 |
| 剖宫产组记录数 | 19 | 同上 | 官方 |
| 引产转剖组记录数 | 26 | 同上 | 官方 |
| 每记录通道数 | 6 | 头文件第一行 | 官方文件 |
| 采样率 | 20 Hz | 头文件第一行 | 官方文件 |
| 量化位宽 | 16 位 | 头文件信号行 | 官方文件 |
| 增益 | 13107 单位每毫伏 | 头文件信号行 | 官方文件 |
| 电极数 | 4 枚,间距 7 厘米 | 官方页面方法段 | 官方 |
| 单条采样点数 | 约三万五千 | 头文件第一行 | 官方文件 |
| 全库体积 | 未压缩 115.6 MB | 官方页面文件栏 | 官方 |
| 压缩包体积 | 89.0 MB | 官方页面 | 官方 |
| 记录池总量 | 一千二百余条 | 官方页面方法段 | 官方 |
| 许可 | ODC-ODbL 1.0 | 官方页面许可栏 | 官方 |
| DOI | 10.13026/zw34-n382 | 官方页面 | 官方 |
附录 B:数字的来源分层
| 层级 | 含义 | 本篇中的例子 | 可信度 |
|---|---|---|---|
| 官方直述 | 项目页正文直接写出 | 91 次妊娠、126 条记录、20 Hz、115.6 MB | 高 |
| 官方文件 | 头文件与清单可读出 | 六路通道名、临床十字段、配对编号、样本数 | 高 |
| 推导 | 由官方文件换算 | 单条时长 29 分半、可用段约六分之五、单条体积四百余千字节 | 中,方法已写明 |
三层的差别在于是否需要中间计算。官方直述没有计算,官方文件是一次读取,推导要经过换算。凡是推导值,本篇都写明了换算方式,方便核对。
未列入三层的数字一律不写。这包括:三组的母亲年龄均值、体重均值、新生儿体重均值、各孕周的记录条数——这些都需要把 126 份头文件全部读一遍才能得到,属于数据使用者的工作,不是说明文档该做的事。
附录 C:完整参考文献
| 编号 | 文献 | 用途 |
|---|---|---|
| 1 | Jager, F. Induced Cesarean EHG DataSet (ICEHG DS), v1.0.1. PhysioNet, 2023. doi:10.13026/zw34-n382 | 数据本体与全部事实 |
| 2 | Jager, F. An open dataset with electrohysterogram records of pregnancies ending in induced and cesarean section delivery. Scientific Data 10:669, 2023. doi:10.1038/s41597-023-02581-6 | 方法学背景与摘要口径 |
| 3 | Pirnar, Ž., Jager, F., Geršak, K. Characterization and separation of preterm and term spontaneous, induced, and cesarean EHG records. Comput Biol Med 151:106238, 2022 | 三库合并分析的实证结果 |
| 4 | Jager, F., Libenšek, S., Geršak, K. Characterization and automatic classification of preterm and term uterine records. PLoS ONE 13(8):e0202125, 2018 | TPEHGT DS 的来源 |
| 5 | Fele-Žorž, G. 等. 线性与非线性信号处理技术区分足月与早产子宫肌电的比较. Med Biol Eng Comput 46:911–922, 2008 | TPEHG DB 的方法学基础 |
| 6 | PhysioNet 项目页 https://physionet.org/content/icehg-ds/1.0.1/ | 描述、许可、版本与文件清单 |
附录 D:任务代码
把 126 条记录按妊娠分组,做一次不泄露的三分类基线。特征只用最朴素的时域与频域量,目的是验证管线而不是刷分:
import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedGroupKFold, cross_val_score
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv('icehg_index.csv')
df['grp'] = df['pair'].where(df['pair'].astype(str) != '0', df['record'])
X = df[['ptp_s1', 'ptp_s2', 'std_s1', 'std_s2', 'rectime', 'gest']].values
y = df['type'].map({'Induced': 0, 'Cesarean': 1, 'Induced-cesarean': 2}).values
cv = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=0)
clf = RandomForestClassifier(n_estimators=300, random_state=0)
scores = cross_val_score(clf, X, y, cv=cv, groups=df['grp'], scoring='balanced_accuracy')
print('balanced acc %.3f +- %.3f' % (scores.mean(), scores.std()))
groups 这一参数是整个脚本的关键。去掉它,同一个人的两条记录会分别落进训练集与测试集,分数会虚高;留着它,每次划分都以妊娠为单位,数字才有意义。balanced_accuracy 也是为了对冲三类的样本量差异。
附录 E:如果只记五件事
| 序 | 记住这一条 |
|---|---|
| 1 | 91 次妊娠、126 条记录,全部是足月,分引产、剖宫产、引产转剖三类 |
| 2 | 每条约 30 分钟,四枚腹部电极、三路差分、20 Hz、原始与滤波成对 |
| 3 | 没有早产样本,也没有任何波形标注,标签只到记录级 |
| 4 | 35 次妊娠有孕 23 周与孕 31 周的配对记录,划分必须以妊娠为单位 |
| 5 | ODbL 许可,衍生数据库须同许可共享;署名与版本号要写全 |
编辑说明
本篇事实部分依据 PhysioNet 项目页、目录清单、RECORDS 与若干头文件核对,核对于 2026 年 10 月。时长、可用段占比、单条体积为换算值,换算方式已在正文标明。官方未提供的项目(引产指征、产次、记录时体位与环境、版本变更内容)一律标为未提供,不作推测。原始数据版权归作者与采集机构,按 ODC-ODbL 1.0 使用;本篇为说明文档,不包含数据本体。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- edb — 共享标签:生理信号 / 心电信号
- aami-ec13 — 共享标签:生理信号 / 心电信号
- kiel-cardio — 共享标签:生理信号 / 心电信号
- meditation — 共享标签:生理信号 / 心电信号
- eye-tracking-ecg — 共享标签:生理信号 / 心电信号
- nifecgdb — 共享标签:生理信号 / 心电信号
- tpehgdb — 共享标签:生理信号 / 心电信号
- ecg-capable-smartwatches — 共享标签:生理信号 / 心电信号
- szdb — 共享标签:生理信号 / 心电信号
- wctecgdb — 共享标签:生理信号 / 心电信号
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

