信息速览
妊娠期内脏脂肪测量数据集(Visceral adipose tissue measurements during pregnancy)是 PhysioNet 上一份体量极小的表格数据集,由南里奥格兰德联邦大学(UFRGS)胎儿医学团队在 2020 年 3 月 23 日发布。它收录的是 2016 年 10 月至 2017 年 12 月间,巴西阿雷格里港一项前瞻性队列里 133 位孕妇的入组记录与分娩结局。全库只有四个文件,合计未压缩 28.8 KB,其中真正承载数据的是一张 7.8 KB、15 列的 CSV。
它的全部信息量集中在一个动作上:用超声机自带的电子卡尺,在孕妇脐上二厘米的矢状切面上量一条从腹主动脉到腹白线的距离。这条以毫米计的厚度被当作内脏脂肪的代理量,与孕前体质指数、首次空腹血糖、分娩孕周、分娩方式、新生儿体重以及妊娠糖尿病诊断一起,压进同一行。没有影像,没有波形,没有第二张表。
这种极简形态决定了它的性格:解析成本几乎为零,可解释性却卡在几个格式细节上;体量小到可以一次读完,样本量也小到撑不起任何泛化结论。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Visceral adipose tissue measurements during pregnancy |
| 中文名 | 妊娠期内脏脂肪测量 |
| 托管平台 | PhysioNet(MIT 计算生理学实验室维护) |
| 版本与日期 | 1.0.0,2020 年 3 月 23 日,仅此一版 |
| 作者 | Alexandre da Silva Rocha 等六人 |
| 主要机构 | 南里奥格兰德联邦大学(UFRGS)胎儿医学系 |
| 采集年份 | 2016 年 10 月至 2017 年 12 月 |
| 入组例数 | 154 例,失访 21 例(13%),公开 133 例 |
| 记录规模 | 133 行 × 15 列 |
| 入组条件 | 单胎妊娠,入组孕周不超过 20 周 |
| 排除条件 | 既往 1 型或 2 型糖尿病 |
| 影像模态 | 超声测量(只留数值,不留图像) |
| 测量指标 | 脐周内脏脂肪厚度,毫米,吸气与呼气两次读数取均 |
| 标注方式 | 无人工标注;结局由病历回溯 |
| 体积 | 未压缩 28.8 KB,压缩包 11.0 KB |
| 许可 | ODC-By 1.0(署名即可) |
| DOI | 10.13026/p729-7p53(1.0.0) |
| 官方入口 | https://physionet.org/content/maternal-visceral-adipose/1.0.0/ |
§1 它要解决的具体麻烦
1.1 孕期量内脏脂肪这件事,传统手段都卡在可行性上
内脏脂肪与代谢风险的关联在成年人里有大量证据,官方背景段引了两篇:一篇讲内脏与皮下脂肪库同心血管风险因素的关系,一篇讲女性人群里这种关联更强。搬到孕期,问题立刻出现——可用手段几乎全被排除。腰臀比对中晚期腹部形态变化敏感,测到的是子宫与羊水;腹部断层扫描有电离辐射,孕期不作常规;磁共振无辐射,但成本与可及性在公立系统里是硬约束。
超声是唯一同时满足便宜、无辐射、孕妇本来就要做三条的手段:孕二十周前的常规产科超声,机器、探头、诊室都在,加测一条线不增加流程。Armellini 等人在 1991 年就描述过用超声测腹内脂肪变化,官方方法段直接沿用这个口径。
于是这个数据集要解决的麻烦可以一句话说清:在孕期把内脏脂肪变成一个可以批量采集、可以写进表格、可以和结局对齐的数字。它做到了一半——数字确实有了,而且是标准口径;但它没有解决另一半,即这个数字在多大程度上代表真正的内脏脂肪。
1.2 三条常见的错误期待
期待一:以为这是一份影像数据集。 名字里有「visceral adipose」、主题又挂在产科超声下,容易以为是腹部超声图像库。实际包里只有一份 CSV 与三段说明,没有任何图像,超声在这里是量具而不是产出。想做分割或影像组学的人进来会两手空空。
期待二:以为脐周厚度等于内脏脂肪体积。 卡尺量出的是特定切面上两个解剖标志之间的直线距离,受探头压力、呼吸相位与腹腔内容物状态影响。两次取均压低了这个波动,但官方没有声称它是体积的金标准。
期待三:以为 133 例是全部入组者。 官方方法段写得很清楚:入组 154 例,21 例失访,最终 133 例,失访比例百分之十三。也就是说,CSV 里的每一行都同时完成了入组测量与分娩结局的追踪。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 找一份能五分钟跑通的孕期表格数据做教学 | 一张 7.8 KB 的 CSV,15 列,无需清洗 | 够,体量最省 |
| 验证「超声内脏脂肪能预测妊娠糖尿病」这个假设 | 脂肪厚度与妊娠糖尿病标签同在一行 | 够做可行性,不够下结论 |
| 复现 Armellini 口径的测量流程 | 官方方法段逐句写明探头位置与标志点 | 够,但只有文字描述 |
| 把内脏脂肪与体质指数放在同一个模型里比贡献 | 两个变量同在一行,另带血压与血糖 | 够,样本量是主要限制 |
| 做腹部超声图像分割或测量自动化 | 无任何图像文件 | 不够,一张都没有 |
| 做孕妇体成分的纵向变化分析 | 每人只有一次测量 | 不够,没有重复测量 |
| 训练一个可上线的妊娠糖尿病预测器 | 133 例、单中心、判阳率即自然发生率 | 不够 |
| 用脂肪厚度做体质指数之外的分层 | 两个变量同在一行,可直接对比 | 够做观察,不足以下结论 |
| 分析不同族裔之间的脂肪分布差异 | 族裔只有白人 / 非白人二分 | 勉强,类别过粗 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 要给医学生讲「超声测量如何变成表格里的一格」 | 一句话的量法加一张 15 列的表,教学链路完整 | 用 §9.2 的流程读进来,先看一行原始数据 |
| 手上有一个妊娠糖尿病风险模型,只用了体质指数 | 提供同一批人的内脏脂肪厚度作替代或补充变量 | 做嵌套模型对比,报告加入脂肪项后的增量,注明样本量 |
| 在写孕期超声体成分测量的方法学综述 | 有完整口径、标志点与两次取均做法 | 引官方页面与 Armellini 原文献,注明只有数值 |
| 需要一个极小体积数据集做 CI 冒烟测试 | 7.8 KB,纯文本,无依赖 | 放进仓库固定路径,不建模拟数据 |
| 想找一份可二次发布的孕期数据 | ODC-By 只要求署名,衍生库可用其他许可 | 保留原作者与 DOI,整理版另附说明 |
| 在做孕期代谢的多队列合并 | 变量名与口径可与其他队列对齐 | 先统一孕周解码与缺失约定,否则合并不起来 |
1.5 一句话判断
它的价值不在样本量,而在把一件临床上难以批量化的测量——孕期内脏脂肪——变成了一列可以直接读的数字,并且诚实地只给数字;用它的人多半不是要更多病例,而是要一个口径清楚、能立刻跑通的最小样本。
1.6 不适合谁:四条边界
不适合做影像任务的人。 没有任何图像,连一张卡尺截图都没有。分割、检测、影像组学、超声自动测量都缺输入。
不适合要求统计功效的人。 133 行里判为妊娠糖尿病的只是一部分,按自然发生率推算在几十例量级;任何按亚组切分的分析,切完每格都会掉到个位数。
不适合做纵向或因果推断的人。 每人一次测量、一次结局,中间没有时间序列也没有干预信息。它支撑相关描述,支撑不了「内脏脂肪升高导致妊娠糖尿病」这类因果陈述。
不适合要求跨人群泛化的人。 单一人群、单一入组点、五家公立医院的分娩结局。巴西公立系统的人群构成、产检路径与筛查策略决定了标签的生成机制,换个卫生系统就不成立。
§2 数据构成与规格
2.1 四个文件,三个是辅助
数据包小到一次请求就能拉完,四个文件分工清楚:一个数据本体,两个说明,一个法律文本。
| 文件 | 大小 | 作用 | 是否必需 |
|---|---|---|---|
visceral_fat.csv |
7.8 KB | 数据本体,133 行 15 列 | 必需 |
legend.txt |
917 B | 15 个变量的逐条说明 | 强烈建议 |
SHA256SUMS.txt |
235 B | 三个文件的校验和 | 可选 |
LICENSE.txt |
19.9 KB | ODC-By 1.0 全文 | 备查 |
legend.txt 与页面「Data Description」一节的变量清单逐条对应,编号 1 到 15,措辞一致。这是同一份文本的两处呈现:页面讲背景与方法,图例给字段说明,两者之间没有矛盾。
SHA256SUMS.txt 列出三个非自身文件,visceral_fat.csv 的校验和以 2ffeff87 开头。做版本冻结时一并保存这个文件,就能确认拿到的是 2020 年 3 月 23 日那一份。
2.2 十五个字段的完整字典
字段名全部小写,空格与括号保留在表头里,这是从统计软件直接导出的痕迹。列名不改、直接读,是最省事的做法。
| 序 | 列名 | 中文 | 类型 | 取值与单位 |
|---|---|---|---|---|
| 1 | number |
病例编号 | 整数 | 非连续,最大 287 |
| 2 | age (years) |
母亲年龄 | 整数 | 岁 |
| 3 | ethnicity |
族裔 | 整数 | 0 白人 / 1 非白人 |
| 4 | diabetes mellitus |
既往糖尿病 | 整数 | 0 无 / 1 有 |
| 5 | mean diastolic bp (mmhg) |
平均舒张压 | 一位小数 | 毫米汞柱 |
| 6 | mean systolic bp (mmhg) |
平均收缩压 | 一位小数 | 毫米汞柱 |
| 7 | central armellini fat (mm) |
脐周内脏脂肪 | 一位小数 | 毫米 |
| 8 | current gestational age |
入组孕周 | 引号包裹 | 周,天 |
| 9 | pregnancies (number) |
孕次 | 整数 | 次 |
| 10 | first fasting glucose (mg/dl) |
首次空腹血糖 | 整数 | 毫克每分升 |
| 11 | bmi pregestational (kg/m) |
孕前体质指数 | 两位小数 | 千克每平方米(原文单位写法有误) |
| 12 | gestational age at birth |
分娩孕周 | 引号包裹 | 周,天 |
| 13 | type of delivery |
分娩方式 | 整数 | 0 阴道 / 1 剖宫产 |
| 14 | child birth weight (g) |
新生儿体重 | 整数 | 克 |
| 15 | gestational dm |
妊娠糖尿病 | 整数 | 0 无 / 1 有 |
十五个字段可以分成三段:入组期的体格与生理(第 2 至 7 列)、入组期的病史与实验室(第 8 至 11 列)、分娩期的结局(第 12 至 15 列)。第 1 列是键,不承载临床信息。
值得单独指出的是第 11 列的单位写法。体质指数的标准单位是千克每平方米,表头写成 kg/m,少了一个平方。这是导出时的笔误,不影响数值本身——数值明显是按千克每平方米算的,二十到五十之间的量级只有这个解释成立。把它当成线性密度去理解,会得出荒谬的结论。
另一个值得点出的字段是第 4 列既往糖尿病。它对应排除标准:官方把孕前 1 型或 2 型糖尿病排除在外,这一列按理应全为零。保留在表里等于留了一道自检口——出现非零行,说明样本与官方描述不符或编码被改过。
2.3 一行记录的完整解剖
取 CSVs 里的第一行,从头读到尾:
1,20,,0,73.5,125,28.1,"12,1",1,,33.2,"41,0",1,3840,0
把这一行按列名对齐,得到的是:
| 列 | 值 | 读法 |
|---|---|---|
number |
1 | 病例编号 1 |
age (years) |
20 | 二十岁 |
ethnicity |
空 | 族裔未知 |
diabetes mellitus |
0 | 无既往糖尿病 |
mean diastolic bp (mmhg) |
73.5 | 平均舒张压 73.5 |
mean systolic bp (mmhg) |
125 | 平均收缩压 125 |
central armellini fat (mm) |
28.1 | 脐周内脏脂肪 28.1 毫米 |
current gestational age |
12,1 | 入组孕周十二周一天 |
pregnancies (number) |
1 | 第一次妊娠 |
first fasting glucose (mg/dl) |
空 | 首次空腹血糖缺失 |
bmi pregestational (kg/m) |
33.2 | 孕前体质指数 33.2 |
gestational age at birth |
41,0 | 分娩孕周四十一周零天 |
type of delivery |
1 | 剖宫产 |
child birth weight (g) |
3840 | 新生儿 3840 克 |
gestational dm |
0 | 无妊娠糖尿病 |
这一行里有三个细节值得停一下。
读法先说清楚:两个孕周列存的是「周数,天数」,逗号不是小数点;两个空字段分别落在族裔与首次空腹血糖;分娩方式是整数编码。这三点决定了后面所有解析代码的写法。
第一,两个缺失值的位置不同。族裔在第 3 列、空腹血糖在第 10 列:前者是入组登记项,后者是实验室检查项,缺失机制很可能不同,族裔可能没问、血糖可能没查。把两者当同一种缺失处理,插补时会引入不同性质的偏差。
第二,"12,1" 与 "41,0" 都带引号,因为它们含逗号。常规 CSV 解析器会把引号内的逗号当成字段内容,这一点没有问题;问题在于解开之后怎么读。官方图例写的是「周数,天数」,所以 12,1 是十二周加一天。若把逗号当小数点,得到十二点一周,换算回来是十二周零一天的四舍五入,误差一天。单看一行无所谓,累计到分娩孕周上,一天的误差足以让 36,6 与 37,0 分属早产与足月两侧。
第三,number 从 1 开始但不连续。CSV 只有 133 行,编号最大到 287,说明编号来自更大的登记序列,中间空号不是被删掉的行,而是从未进入这份公开切片。
2.4 一份快照式表格,没有分层
这份数据的结构简单到可以用一句话概括:一行一例,一列一变量,没有第二张表,没有跨表关联。
| 结构要素 | 这份数据的情况 |
|---|---|
| 主键 | number,单列唯一 |
| 外键 | 无 |
| 关联表 | 无 |
| 时间维度 | 两个时点(入组、分娩)压在同一行 |
| 重复测量 | 无 |
| 派生表 | 无 |
| 缺失标记 | 空单元格 |
| 编码字典 | legend.txt,纯文本 |
宽表一次成型的直接后果是:要把入组期与分娩期拆开建模,得自己切列。好处是不用做连接,坏处是两个时点的变量混在一行,读取时不注意就会把分娩结局当入组信息喂进模型,造成标签泄露。
按 DAIMS 的描述框架看,这张表同时扮演两份数据资产:入组期的「暴露测量表」与分娩期的「结局记录表」,只是共用同一组键。
2.5 与同类孕期表格数据的字段差异
库内与它最近的是同团队 211 例孕期脂肪超声队列。两者共享采集点、伦理批件与部分口径,差别在规模、变量数与获取门槛。
| 字段维度 | 本库(133 例) | 同团队 211 例队列 |
|---|---|---|
| 变量数 | 15 | 116 |
| 脂肪测量 | 仅脐周内脏脂肪 | 上腹部与脐周的内脏、皮下四项 |
| 测量次数 | 入组时一次 | 三个孕期重复测量 |
| 血压 | 平均收缩压与舒张压 | 有 |
| 营养摄入 | 无 | 有 |
| 胎儿生物测量 | 无 | 有 |
| 获取方式 | 直接下载 | 需签署数据使用协议 |
| 许可 | ODC-By 1.0 | 凭证式许可 |
| 体量 | 28.8 KB | 数十倍于此 |
选择很直接:要最低代价拿到能跑的数据,用本库;要变量齐全、纵向设计或营养分析,去签另一份的协议。两者不是替代关系,而是同一条研究线上公开程度不同的两个切片。
2.6 legend.txt 与页面变量清单的两处对读
同一个字段表在官方出现两次:页面「Data Description」一节与包里的 legend.txt。逐条对读,十五项的编号、名称、单位与取值说明全部对得上。
| 序 | 页面写法 | legend.txt 写法 | 结论 |
|---|---|---|---|
| 1 | 病例唯一编号 | Unique ID for the case | 一致 |
| 3 | 族裔(0 白人 / 1 非白人) | Ethnicity (0 = white; 1 = not white) | 一致 |
| 7 | 脐周内脏脂肪,毫米 | Maternal visceral adipose tissue measurement in mm | 一致 |
| 8 | 孕周(周、天) | Age (weeks of pregnancy, days of pregnancy) | 一致 |
| 11 | 孕前体质指数 | Pregestational body mass index | 一致 |
| 13 | 分娩方式(0 阴道 / 1 剖宫产) | 0 = vaginal birth; 1 = cesarian section | 一致,但拼写有误 |
唯一值得记下的差异在第 13 项:cesarian 少了一个 e,标准写法是 cesarean。这属于文字层面,不影响解析。两份文本一致本身值得肯定——很多数据集的项目页与图例各写一套,字段名对不上,解析器要额外做映射。与这份「对得上」形成对照的是孕周分隔符:两处都说「周与天」,两处都没有说用什么符号连接。
§3 这批数字是谁量的:一条从公立诊所到公立医院的链路
3.1 六位作者与三个机构
官方署名六人,机构分布透出这条研究链的构成。第一作者 Alexandre da Silva Rocha 兼挂两个单位:南里奥格兰德联邦大学胎儿医学系与阿雷格里港市卫生局公共卫生处——前者是技术方,后者是场地与人群的提供方。Lisia von Diemen 来自该校精神病学系与阿雷格里港临床医院;Daniela Kretzer 与 Salete Matos 来自儿童与青少年健康研究生项目;Juliana Rombaldi Bernardi 兼挂食品营养与健康、儿童青少年健康两个项目;José Antônio Magalhães 是妇产科教授,主持胎儿医学讲席。
| 角色 | 署名者 | 机构 | 在本库中承担的部分 |
|---|---|---|---|
| 第一作者 | Alexandre da Silva Rocha | UFRGS 胎儿医学系 / 市卫生局 | 设计、超声测量、整理 |
| 统计 | Lisia von Diemen | UFRGS 精神病学系 / 临床医院 | 官方致谢中专门致谢其统计协助 |
| 儿科健康 | Daniela Kretzer | UFRGS 儿童与青少年健康项目 | 结局变量 |
| 护理与产科 | Salete Matos | UFRGS 儿童与青少年健康项目 | 结局变量 |
| 营养 | Juliana Rombaldi Bernardi | UFRGS 食品营养与健康项目 | 营养与代谢侧 |
| 导师 | José Antônio Magalhães | UFRGS 妇产科 | 胎儿医学讲席,项目主持 |
这条链路的特点是技术与人群分离:测量由大学团队带着探头完成,人群来自市卫生局辖下的统一卫生系统使用者,结局由五家公立医院病历汇总。三方各管一段。
3.2 时间线
| 阶段 | 时间 | 状态 |
|---|---|---|
| 伦理审批 | 提交至阿雷格里港市研究伦理委员会 | 总批件号 2.132.090 |
| 采集开始 | 2016 年 10 月 | 在 Murialdo 教学卫生中心超声科入组 |
| 采集结束 | 2017 年 12 月 | 最后一例入组 |
| 随访 | 入组后至分娩 | 追至五家公立医院的病历 |
| 上线 | 2020 年 3 月 23 日 | 1.0.0 版,此后无更新 |
从采集结束到上线,隔了两年多。这段时间用在随访收口、病历核对与格式化上。采集期只有十五个星期,随访期却跨过整个孕程,两者的重叠方式决定了入组是一个滚动过程,而不是一次性招募。
滚动入组的直接后果是入组孕周本来就分散:最早的可能在十周出头,最晚的接近二十周上限。表里的入组孕周列因此不是常数,而是从十周到二十周之间的一个区间。基线表里若不写出这一列的跨度,会被误以为所有测量都在同一个孕周完成。
另一个后果是随访窗口不齐。最后几例入组的人,其分娩发生在采集期结束后半年左右;最先入组的人,分娩则落在采集期内。这意味着「采集期 2016 年 10 月至 2017 年 12 月」这个说法指的是入组,不是全部分娩。
3.3 采集场景:一次常规产检里多量的一条线
采集点是 Murialdo 教学卫生中心,一家为统一卫生系统使用者提供胎儿医学服务的诊所。这解释了样本量小与人群单一:服务对象是公立系统里排队的孕妇,不是私立医院的体检人群。
| 环节 | 做法 | 后果 |
|---|---|---|
| 入组时机 | 孕二十周前的常规产科超声 | 与生物测量同一次,不额外约诊 |
| 探头 | 常规凸阵探头 | 与产科超声共用设备 |
| 体位 | 孕妇仰卧,探头矢状位置于脐上二厘米 | 与标准腹部超声一致 |
| 测量标志 | 腹主动脉弓到腹白线 | 与 Armellini 口径一致 |
| 呼吸相位 | 吸气一次、呼气一次 | 两次取均,压低呼吸引起的位移 |
| 设备 | 超声机自带电子卡尺 | 读数直接进机器,无二次标注 |
| 测者 | 研究团队执行 | 未见双人复读的描述 |
最后一行值得单独说。官方方法段描述了量什么、怎么量、量几次,却没描述谁读、读几遍、有没有一致性检验。对一份以测量为核心变量的数据,这是文档层面的空心处,不是数据本身的错误。
3.4 入组与排除:两道很窄的门
入组标准只有两条:单胎妊娠,入组孕周不超过二十周。排除标准只有一条:既往 1 型或 2 型糖尿病。
| 条件 | 内容 | 影响的推断范围 |
|---|---|---|
| 入组 | 单胎妊娠 | 双胎与多胎不可用 |
| 入组 | 孕周不超过二十周 | 只在孕早期与孕中期前半有测量 |
| 排除 | 孕前 1 型或 2 型糖尿病 | 孕前糖尿病不是它的研究对象 |
| 隐含 | 能完成常规产检并在公立系统分娩 | 未规律产检者不在样本内 |
排除孕前糖尿病把已确诊的糖代谢异常挡在门外,留下的是入组时尚未诊断的人。妊娠糖尿病判阳因此全部来自孕中晚期的新发诊断,而不是孕前状态的延续。这个设计让标签含义更干净,也让样本更接近一般孕妇,而不是高危门诊。
3.5 为什么是十五个星期、一个诊所
官方没有解释采样周期为什么定在十五个星期,但结构上的约束可以推出来:妊娠糖尿病在孕二十四到二十八周筛查,入组在二十周前,结局在分娩时确定。一个人从入组到出结局要大半年。要在十五个星期里攒够一百五十例左右的单胎、无孕前糖尿病、愿意配合且能追到病历的孕妇,等于每个星期入组十来例——这正是一家诊所超声工作量的一小部分。
这也解释了失访率:五家医院的病历、跨机构的随访、没有专门的随访团队,能留住百分之八十七已经是不错的结果。剩下的百分之十三,官方没有交代失访者的特征,也没有做失访分析。
§4 它最独特的东西:一次卡尺读数如何变成一行十五列
4.1 测量口径:从腹主动脉到腹白线
这是整份数据的技术核心,官方描述精确到可以照着做:孕妇仰卧,凸阵探头置矢状位、脐上二厘米,用电子卡尺量腹主动脉前壁到腹白线的距离,吸气与呼气各量一次取均值。
| 要素 | 官方描述 | 物理含义 |
|---|---|---|
| 探头方向 | 矢状位 | 沿身体纵轴切,看到的是前后向的层次 |
| 探头位置 | 脐上二厘米 | 避开脐部瘢痕与脐疝,落在腹主动脉走行段 |
| 近端标志 | 腹白线 | 腹直肌鞘在中线的腱膜交汇,超声上是一条高回声线 |
| 远端标志 | 腹主动脉前壁 | 腹膜后的血管壁,超声上是搏动的管状结构 |
| 读数次数 | 吸气一次、呼气一次 | 呼吸周期改变腹腔前后径 |
| 合成方式 | 两次取算术均值 | 官方明示 |
| 单位 | 毫米 | 表头写明 |
| 口径来源 | Armellini 等 1991 | 官方引用第 9 条 |
最容易被忽视的是「腹主动脉前壁」:这条线量的是腹白线与腹膜后大血管之间的整段距离,其中同时含腹膜外脂肪与部分腹腔内脂肪。所以它是厚度的代理量,不是体积,术语上必须分清。
另一处是探头的垂直位置。脐上二厘米以脐点为基准,而脐点随腹壁牵拉与子宫增大而相对上移。入组孕周都在二十周前,位移有限但仍然存在;官方没有给出以骨性标志为参照的替代定位。
4.2 两次呼吸取均:一个很小但很实的处理
吸气与呼气的腹腔前后径不同,这是生理事实。官方用两次读数取均值来压低这个差异,做法简单,代价是测量时间翻倍。
| 处理 | 目的 | 遗留问题 |
|---|---|---|
| 吸气相测量 | 捕捉膈下降、腹腔内容物下移时的距离 | 该相位本身有变异 |
| 呼气相测量 | 捕捉膈上升时收纳后的距离 | 同上 |
| 取算术均值 | 抵消单向偏差 | 两个相位的权重固定为一半,不看呼吸幅度 |
| 不记录分相读数 | 表里只有均值 | 无法还原两相之差,也就无法判断呼吸变异大小 |
最后一行是这份数据的一个隐性损失。表里只存了均值,两次原始读数的差值没有留下。这个差值本身是有信息量的——呼吸引起的位移越大,说明腹壁顺应性或腹腔内容物的可动性越强,而这恰好与体型相关。如果当初多存一列,今天就能做一层质量评估;现在只能接受均值。
这套流程在临床上的定位需要说清:它不是体成分分析,也不是内脏脂肪面积的替代。它只回答一个很窄的问题——在这个切面上腹白线与腹主动脉前壁相隔多远。要说内脏脂肪多不多,通常需要面积或体积量,这份数据只有一条线、一个部位。当粗略分层的输入合理,当定量指标不合理。
两次取均还带出一个操作层面的含义:一例测量要两个呼吸周期、两次读数、一次录入。门诊节奏下这几步的额外时间足以影响是否愿意做,这解释了同一种测法在成人研究里用了二十年、进产科门诊却仍不普及——成本不在设备,在流程。
4.3 案例:第 1 行那位二十岁的产妇
把 §2.3 那一行当成一个完整的人来读——这就是后文反复回到的 §4.3 的案例,这份数据的形态会立刻清楚。
| 读法 | 从数据里得到的 | 需要外部知识的部分 |
|---|---|---|
| 她多大 | 二十岁 | 无 |
| 她第几次怀孕 | 第一次 | 无 |
| 她的孕前体重状况 | 体质指数 33.2,落在肥胖区间 | 肥胖的切点由外部标准决定 |
| 她入组时多重 | 未记录,只有体质指数与身高可反推 | 身高也不在表里 |
| 她的内脏脂肪 | 28.1 毫米 | 与「正常」的界线由外部参考值决定 |
| 她入组时的孕周 | 十二周一天 | 无 |
| 她的血压 | 125 / 73.5 | 孕期血压的正常范围由外部标准决定 |
| 她的首次空腹血糖 | 缺失 | 无从判断是否查过 |
| 她最后怎么生 | 三十九周零天剖宫产 | 无 |
| 孩子多重 | 3840 克 | 巨大儿的切点由外部标准决定 |
| 她有没有妊娠糖尿病 | 没有 | 无 |
这一行把边界展示得很干脆:关于「她经历了什么」的问题都有答案,关于「她为什么这样」的问题都没有答案。为什么剖宫产、为什么没查空腹血糖、她的内脏脂肪在同龄人里算高算低,这三个产科医生最先想问的问题,数据都答不了。
§2.3 已交代过这一行的缺失模式。沿着 §4.3 的案例再往下一层看还有第二重含义:一位孕前体质指数 33.2 的初产妇,内脏脂肪 28.1 毫米,最后没有发展成妊娠糖尿病。在「肥胖加高内脏脂肪到妊娠糖尿病」的直觉链上,这是一个反例,也提醒使用者任何单行都不构成证据。
4.4 结局是怎么定的:四条判据的并集
妊娠糖尿病标签的生成方式,官方写得很细。只要满足以下任一条,就判为阳性:口服葡萄糖耐量试验结果异常;葡萄糖挑战试验结果异常;空腹血糖超过国际妊娠糖尿病研究小组(IADPSG)的界值;或者病历里已经写明妊娠糖尿病诊断。
| 判据 | 来源 | 性质 |
|---|---|---|
| 糖耐量试验异常 | 常规产检记录 | 实验室 |
| 糖挑战试验异常 | 常规产检记录 | 实验室 |
| 空腹血糖超限 | 常规产检记录,对照 IADPSG 界值 | 实验室 |
| 病历诊断已写明 | 分娩医院病历 | 临床 |
四条判据取并集,意味着标签是任何一种路径认定过的异常的集合,而不是按单一标准复判的结果。官方在局限说明里把这一点当作偏倚来源写明:诊断由常规产检完成,研究团队未参与实验室检测。
两个后果可预期:不同医院筛查策略不同,判阳门槛随之浮动;四条判据敏感度不同,糖挑战试验作为初筛本身就可能把一部分人拉进阳性。用时把它当临床路径产出的终点,比当金标准诊断稳妥。
4.5 边界条件:什么情况下它不再适用
模态边界。 没有任何图像。分割、测量自动化、切面识别、图像质控,全部超出这份数据的能力范围。
时间边界。 每人两个时点:入组测量与分娩结局。体重增长、血糖复查、是否用了胰岛素一概不知,任何关于孕期轨迹的问题都答不了。
人群边界。 单胎、无孕前糖尿病、能在公立系统完成产检并分娩、愿意配合。四条并集,是一个比一般孕妇更规整的人群。
解释边界。 脂肪厚度是一个代理量,标签是一个临床路径产出。两者之间的关联可以描述,不能解释。
§5 怎么拿到:一次请求与四段校验
5.1 三种取法,体量都不构成障碍
全库未压缩 28.8 KB,压缩包 11.0 KB。这个体量下,网页下载、递归抓取与对象存储同步的差别只在便利性,不在耗时。
| 方式 | 命令或入口 | 适用场景 |
|---|---|---|
| 网页 ZIP | 项目页 Download 按钮 | 一次拿到全部四个文件 |
| 递归抓取 | wget -r -N -c -np |
脚本化,保留目录结构 |
| 对象存储 | aws s3 sync --no-sign-request |
云端环境,无凭证 |
| 单文件 | curl 直接取 CSV |
只要数据本体 |
四种取法都不需要登录或签协议。访问策略原文:任何人只要能遵守指定许可的条款,就可以访问这些文件。
5.2 只取需要的那一个文件
多数场景只需要 CSV,图例可随取,校验和建议一起拿。
#-- 建目录并只拉数据本体
mkdir -p mva && cd mva
curl -sO https://physionet.org/files/maternal-visceral-adipose/1.0.0/visceral_fat.csv
#-- 图例与校验和一起拿,方便核对
curl -sO https://physionet.org/files/maternal-visceral-adipose/1.0.0/legend.txt
curl -sO https://physionet.org/files/maternal-visceral-adipose/1.0.0/SHA256SUMS.txt
#-- 校验:这一行应当与 SHA256SUMS.txt 里指向 csv 的那一行一致
sha256sum visceral_fat.csv
#-- 行数与列数:正文 133 行,加表头共 134 行,15 列
wc -l visceral_fat.csv
head -1 visceral_fat.csv | awk -F',' '{print NF}'
最后两条命令是快速体检:行数对不上说明拿到的是别的版本,列数对不上说明表头被改过。这两个数字与官方页面的描述直接可比,不需要任何额外假设。
5.3 不装 pandas 也能核对的 awk 命令
很多环境里装 pandas 要绕一圈依赖。这份表只有十五列、表头纯 ASCII,用 awk 就能把结构层面的事实核完。
#-- 字段数:每一行都应当是 15 个字段
awk -F',' '{print NF}' visceral_fat.csv | sort -u
#-- 表头的逐列名,核对与 legend.txt 的 15 项是否一一对应
head -1 visceral_fat.csv | tr ',' '\n' | nl
#-- 按纯逗号切分:孕周列会被切成两段,NF 不等于 15 的行就是错位线索
awk -F',' 'NR>1 {print NR": NF="NF}' visceral_fat.csv | awk -F'=' '$2!=15' | head
#-- 空字段位置:把空单元格的位置打印出来,只做结构核对,不出统计
awk -F',' 'NR>1 {for (i=1;i<=NF;i++) if ($i=="") print NR",col"i}' visceral_fat.csv | head -20
第二条命令看似多余,其实是这份数据里最容易出问题的一处。孕周列一旦有一行漏了引号,解析器会把周与天切成两列,从那行起后面所有字段整体错位一列,而 NF 的比对就能立刻发现。把这条检查写进管线的前置步骤,比事后排查便宜得多。
最后一条命令打印空字段的位置,不是空值率。它只回答有没有空、空在哪一列,不回答空了多少比例,后者是数据使用者自己该做的那一步。
这套命令的价值是不依赖任何库:教学环境、评审机器、CI 容器里往往只有裸 shell 与 curl,四行就够确认文件没坏、列没变、孕周格式没被破坏。它不替代后面的 pandas 路径,只是拦在前面的一道低成本闸门。
5.4 读进来:照顾两个格式陷阱
纯粹的 pd.read_csv 会踩两个坑:孕周里的逗号、以及只有两个文件才有的引号。默认配置下,"12,1" 会被正确当作一个字段,但它落进来之后是字符串 12,1,需要显式拆开。
import pandas as pd
#-- 表头保留原样,逗号被引号包住,标准解析器可以直接处理
df = pd.read_csv('visceral_fat.csv', dtype=str)
#-- 孕周两列是「周,天」,逗号不是小数点
def ga_to_days(x):
if pd.isna(x) or str(x).strip() == '':
return None
w, d = str(x).replace('"', '').split(',')
return int(w) * 7 + int(d)
df['ga_enroll_days'] = df['current gestational age'].map(ga_to_days)
df['ga_birth_days'] = df['gestational age at birth'].map(ga_to_days)
#-- 数值列显式转换,缺失保持为 NaN 而不是 0
num_cols = ['age (years)', 'mean diastolic bp (mmhg)', 'mean systolic bp (mmhg)',
'central armellini fat (mm)', 'pregnancies (number)',
'first fasting glucose (mg/dl)', 'bmi pregestational (kg/m)',
'child birth weight (g)']
for c in num_cols:
df[c] = pd.to_numeric(df[c], errors='coerce')
print(df.shape, df['ga_enroll_days'].notna().sum())
这段代码里最关键的一行是 split(',')。如果漏掉这一步,"41,0" 会被当成字符串留在列里,后续任何排序、比较、阈值判断都会静默出错,而且不报任何异常。
5.5 核对几个结构事实
拿到数据后,先做三项只依赖文件本身的结构核对,不涉及任何分布统计。
import pandas as pd
df = pd.read_csv('visceral_fat.csv', dtype=str)
#-- 主键唯一性:number 应当无重复
print('rows', len(df), 'unique id', df['number'].nunique())
#-- 编号是否连续:不连续说明编号来自更大的登记序列
ids = sorted(int(x) for x in df['number'])
print('min', ids[0], 'max', ids[-1], 'continuous', ids == list(range(ids[0], ids[-1] + 1)))
#-- 二进制字段的取值域:应当只有 0 与 1
for c in ['ethnicity', 'diabetes mellitus', 'type of delivery', 'gestational dm']:
print(c, sorted(df[c].dropna().unique()))
这三项都是结构层面的检查:主键是否唯一、编号是否连续、二值字段是否真的只有两个取值。它们回答的是「这份表能不能作为关系表使用」,而不是「这份表里的人长什么样」。第三项尤其值得做——若某个二值列出现了 2 或其他数值,说明编码被改过,或者混入了原始登记表的其他代码。
5.6 给一张能直接喂模型的宽表
接下来把两段时点拆开:入组期做特征,分娩期做标签。这一步做错,标签泄露就发生了。
import pandas as pd
df = pd.read_csv('visceral_fat.csv', dtype=str)
df = df.rename(columns={
'central armellini fat (mm)': 'vat',
'bmi pregestational (kg/m)': 'bmi0',
'first fasting glucose (mg/dl)': 'fpg',
'mean systolic bp (mmhg)': 'sbp',
'mean diastolic bp (mmhg)': 'dbp',
'gestational dm': 'gdm',
})
#-- 入组期特征:只保留入组时已知的量
feat = ['age (years)', 'ethnicity', 'pregnancies (number)', 'vat', 'bmi0', 'fpg', 'sbp', 'dbp']
X = df[feat].apply(pd.to_numeric, errors='coerce')
#-- 结局:分娩时才确定,绝不能进特征
y = pd.to_numeric(df['gdm'], errors='coerce')
print(X.shape, y.value_counts(dropna=False).to_dict())
feat 列表里刻意排除了分娩孕周、分娩方式与新生儿体重。这三项在分娩时才成立,把它们放进特征,模型会学到「结局之后的信息」,离线指标会虚高。这也是宽表把两个时点压在一行时最典型的错误。
5.7 五个最容易出错的地方
| 易错点 | 表现 | 正确做法 |
|---|---|---|
| 把逗号当小数点 | 十二点一周、四十一点零周 | 拆成周与天,换算成天 |
| 把空单元格读成 0 | 空腹血糖缺失被当作零血糖 | 显式 errors='coerce' 转 NaN |
| 把体质指数单位当线性密度 | 33.2 千克每米无法解释 | 按千克每平方米理解,表头是笔误 |
| 把分娩期变量放进特征 | 离线分数虚高,上线即崩 | 只留入组时已知的列 |
| 认为行数就是入组人数 | 用 133 当分母算失访 | 分母是 154,见官方方法段 |
第一条与第五条是实际使用里代价最大的。前者会让每一个孕周结论都偏一天,后者会让任何一个「完成率」指标算错。
还有一处不属于解析错误、但同样常见:把剖宫产编码当成「是否难产」。1 只表示分娩方式是剖宫产,不包含原因,也不包含是否急诊。用它做「分娩困难」的代理指标,会把这个队列里因择期手术而剖宫产的正常产妇一起算进去。
5.8 一次跑通的端到端脚本
把前面几节串成一段可放进 CI 的脚本,输出只有五行结构事实。
import hashlib
import io
import urllib.request
import pandas as pd
BASE = 'https://physionet.org/files/maternal-visceral-adipose/1.0.0'
raw = urllib.request.urlopen(f'{BASE}/visceral_fat.csv').read()
print('sha256', hashlib.sha256(raw).hexdigest())
df = pd.read_csv(io.BytesIO(raw), dtype=str, keep_default_na=False)
print('shape', df.shape)
print('key_unique', df['number'].is_unique)
print('cols_match_legend', len(df.columns) == 15)
#-- 孕周两列必须都能被「周,天」规则解析
def ok(x):
try:
w, d = x.split(',')
return 0 <= int(d) <= 6 and 5 <= int(w) <= 45
except Exception:
return False
print('ga_ok', df['current gestational age'].map(ok).all(),
df['gestational age at birth'].map(ok).all())
最后一行是唯一带业务判断的检查:周数落在五到四十五之间,天数落在零到六之间。它不验证临床合理性,只验证编码没被破坏。keep_default_na=False 让空单元格保持空字符串,避免 pandas 把某些字符串默认吃成缺失。
§6 与库内相关资源的关系
6.1 关系图谱
在千方医数集的孕期与母胎方向里,这份数据的位置很边缘,但也很难被替代——它是那一格里体量最小、门槛最低的一份。
| 关联资源 | 关系 | 与本库的分工 |
|---|---|---|
| 同团队 211 例脂肪超声队列 | 同采集点、同伦批件,变量超集 | 它是完整队列,本库是最小公开切片 |
| 孕期社会决定因素标注集 | 同为孕期记录,形态不同 | 它处理文本与人口学,本库处理测量与结局 |
| 胎心宫缩图类公开集 | 同为产科,时点不同 | 它在产程中,本库在孕期与分娩 |
| 母胎监护信号类数据 | 同为孕期生理测量 | 它是波形,本库是单次数值 |
| 妊娠期代谢组学类数据 | 同为代谢结局建模 | 它是组学,本库是临床与体成分 |
这份表真正的邻居不是影像库,而是那些一行一例、十几个变量、标着结局的临床队列小表。它们共享同一种用法:拆列、选特征、切训练测试、报告相关,区别只在主题。
6.2 检索路径
按形态找:从「电子健康记录」大类往下落到「队列研究」,再按主题筛「妊娠」,会同时撞上本库、它的 211 例兄弟集与若干产科结局数据集。
按变量找:要内脏脂肪,或体质指数加妊娠糖尿病这个组合,本库是库内唯一同时给出超声脂肪厚度与妊娠糖尿病标签的公开表;要腹部超声图像加脂肪测量,得走影像分支,本库不在其中。
按获取门槛找:不想签协议、不想走凭证流程,从「开放下载」一侧筛,本库的许可属于最宽松的一档。
6.3 与 211 例队列的分工
两份数据常被搞混,因为名字都指向孕期脂肪超声,分工其实很清楚。
| 问题 | 用哪份 | 理由 |
|---|---|---|
| 妊娠糖尿病与脐周内脏脂肪有没有关联 | 本库 | 直接下载,15 列够用 |
| 三个孕期内脏脂肪怎么变 | 211 例队列 | 有重复测量 |
| 上腹部与脐周两个测量点的差异 | 211 例队列 | 本库只有脐周 |
| 营养摄入对脂肪的影响 | 211 例队列 | 本库没有膳食变量 |
| 五分钟跑通流程做教学 | 本库 | 28.8 KB,无门槛 |
| 复现论文里的完整分析 | 211 例队列 | 变量与样本都对得上 |
判断规则只有一条:要看变化或要更多变量走 211 例;要最小可跑单元或不想签协议,用本库。
6.4 任务与选型
| 任务 | 本库是否适合 | 更合适的去处 |
|---|---|---|
| 妊娠糖尿病风险的可解释基线 | 适合,变量少、系数好读 | 本库即可 |
| 内脏脂肪的纵向轨迹 | 不适合,无重复测量 | 同团队 211 例队列 |
| 超声图像分割 | 不适合,无图像 | 影像类公开集 |
| 孕前体质指数与脂肪厚度的替代性研究 | 适合,两者同在一行 | 本库,注意样本量 |
| 跨人群验证已有的预测模型 | 不适合,单中心单人群 | 多队列合并 |
| 数据工程与格式解析练习 | 适合,格式陷阱典型 | 本库 |
6.5 什么时候该放弃它
当你要的样本量在几百以上。 133 行,按结局切分后每格都很小。
当你要的是图像。 放弃得很干脆,一张都没有。
当你要做因果结论。 单时点暴露、单时点结局,又缺体重增长、膳食、体育活动这些混杂变量,只能做关联。
当目标人群不是巴西公立系统。 标签的生成路径嵌在当地产检策略里,换人群就换含义。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
在评价这份数据之前,需要先把一个默认的评判框架拆掉,否则很容易产生误判。
第一种误判是拿影像数据集的标准来量它。看到「超声」「脂肪」就期待图像质量、标注精度与切面规范,这把尺子用在这里完全错位——本库不生产图像,只生产一次测量结果。评价测量汇总表,该看口径是否写清、变量是否齐全、缺失是否有约定。
第二种误判是拿大样本训练集的标准来量它。133 例在今天的确很小,但这份数据的设计目标从来不是训练:它是一项临床队列研究的公开附件,作者关心的是内脏脂肪能否预测妊娠糖尿病,公开只是顺手。用够不够训模型当唯一尺子,会把一份口径清楚的临床数据误判为失败的数据产品。
第三种误判是把「缺失」直接当成「质量问题」。三个字段存在空单元格,但官方的缺失约定是明确的——空即缺失。没有特殊标记符号、没有 -999 之类的哨兵值,这本身就是一种干净的做法。真正需要警惕的是缺失机制,而那是使用者该做的分析。
把这三条摆正之后,剩下的才是真问题:样本量、单中心、代理量、标签路径。四条都会实打实地限制结论的适用范围。下面的五维评分沿用 DAIMS 的框架,评分基准已经写在表前,换基准就会换分数。另有一条不属于质量而属于披露范围的限制:官方已评估但不公开的结局(子痫前期、妊娠高血压、早产、巨大儿等)会让这份表看起来比原始队列单薄,这是公开策略的结果,不是数据质量的结果。
7.1 五维评分
按 DAIMS 的常用维度打分,每项 1 至 5 分。
评分基准是作为孕期代谢的可行性验证与教学素材,而不是作为可上线的临床模型训练集;基准不同,分数会整体平移。
| 维度 | 分数 | 判断依据 |
|---|---|---|
| 完整性 | 3 | 15 列覆盖暴露与结局,关键混杂变量(体重增长、膳食)缺失 |
| 准确性 | 3 | 测量口径写明、两次取均;孕前体重靠回忆,诊断未复判 |
| 一致性 | 3 | 单表、单主键、编码统一;孕周分隔符未定义,体质指数单位笔误 |
| 可追溯性 | 4 | 有 DOI、伦理批件号、方法段与 9 条参考文献 |
| 可获得性 | 5 | 无需登录、无需协议、28.8 KB、四种取法 |
可获得性拿满分有底气:公开数据集里这份的获取成本几乎最低。
可追溯性扣的一分在版本上——只有一个版本、没有勘误说明,也无从判断哪些字段被复核过。它没有单独的配套论文,方法学细节只能从页面正文读,这一点与有官方论文标签的数据集相比是明显的短板。
换一个用途,分数就变。
若问「能不能训可上线的分类器」,完整性掉到 2(缺混杂变量),准确性掉到 2(标签未复判),可追溯性也掉(没有外部验证集),总分从 18 降到 14。一致性不动,它衡量的是文件工艺,与用途无关。
7.2 三层可信度
同一行里,不同字段的可信度差别很大,应该分层看。
| 层次 | 字段 | 依据 | 使用建议 |
|---|---|---|---|
| 高 | 年龄、孕次、分娩方式、新生儿体重 | 病历直接抄录,客观 | 可直接用于建模 |
| 中 | 内脏脂肪厚度、血压 | 一次测量、两次取均,无一致性检验 | 可做关联,但报告是「代理量」 |
| 中 | 妊娠糖尿病标签 | 四条判据取并集,路径依赖 | 当作临床终点,不当作金标准 |
| 低 | 孕前体质指数 | 孕前体重靠回忆或补录 | 视为粗略分层变量 |
| 低 | 族裔 | 二分类,未说明采集方式 | 只做粗分层,不做组间比较 |
中层的两个字段构成本库的实质内容:脂肪厚度在物理上是一个数,在临床上是一个代理,两者的距离取决于怎么用它。
高层的四列几乎不需要解释:年龄与孕次来自问诊,分娩方式与新生儿体重来自产房记录,都是客观事件,抄录误差小,在这份表里扮演协变量而非研究对象。
低层的两列只能当分层变量:体质指数的偏差来自回忆,族裔的偏差来自二分,切亚组时每格样本很小,组间结论会跟着波动。
7.3 已知的、可枚举的偏差
| 偏差 | 具体表现 | 会污染什么结论 |
|---|---|---|
| 单中心 | 全部从 Murialdo 一家诊所入组 | 跨机构泛化 |
| 单人群 | 统一卫生系统的公立系统使用者 | 人群外推 |
| 失访 | 入组后 13% 未追到结局 | 完成率与结局相关的推断 |
| 诊断路径 | 妊娠糖尿病由常规产检判定 | 标签的一致性 |
| 回忆 | 孕前体重靠回忆或病历补录 | 体质指数的准确性 |
| 通量 | 只有一次测量 | 纵向轨迹与剂量反应 |
| 混杂缺失 | 没有体重增长、膳食、体育活动 | 因果解释 |
| 未公开结局 | 子痫前期、妊娠高血压、早产、巨大儿已评估但不公开 | 多结局联合分析 |
第四条自认的两种偏倚值得留意:官方主动承认诊断偏倚与回忆偏倚,这是文档诚实的表现;同时提到团队另外评估过子痫前期、妊娠高血压、剖宫产、早产、产痛、胎儿外伤与巨大儿等结局,只是不在公开范围内。这份表因此是一份更大分析的一部分。
7.4 外部验证矩阵
| 验证维度 | 本库能否支撑 | 说明 |
|---|---|---|
| 内部复现(同队列不同折) | 勉强 | 133 例,分层后每折样本很少 |
| 跨测量点复现 | 不能 | 只有脐周一个部位 |
| 跨孕周复现 | 不能 | 每人只有一次测量 |
| 跨库复现 | 部分 | 可与 211 例队列比较,需签协议 |
| 跨机构复现 | 不能 | 全部单中心 |
| 与影像或解剖金标准对照 | 不能 | 无图像,也无疑像或体成分仪读数 |
这张表说明验证能力集中在同队列内部,一出队列几乎没有对照物,这是小队列数据集的普遍处境,不是这一份的缺陷。
7.5 它为何能持续:一个测法的公开,而不是一个库的公开
一份 133 行、28.8 KB、六年没更新的表,按数据产品的标准早该被更大的库覆盖。它还在,理由很具体。
一,测法本身稀缺。用超声在孕期量内脏脂肪,有文献支撑、有具体标志点、有两次取均做法。愿意把整套操作写进方法段、还把逐例数字公开出来的团队不多——多数研究只在论文里报告均值。
二,门槛低到没有理由重做。想复现 Armellini 口径、想找一份能演示「测量如何变成变量」的样本,它是最省的选择;模拟数据可解释性还不如它。
三,它与更大的 211 例队列构成互补。完整队列留给需要签协议的研究者,最小切片留给教学与快速验证。这种「一小一大」的公开策略,让本库不必被替换,只需要被引用。
它处在一个需求小、替代品近乎为零、获取成本近乎为零的位置。这是最稳定的一种生态位:不靠流量活着,靠唯一性加零成本活着。
§8 生态位与历史
8.1 历史沿革
超声测腹内脂肪这条线并不新。1991 年 Armellini 等人在《国际肥胖杂志》上发表用超声检测腹腔内小幅度脂肪变化的方法,奠定了「用声波量脂肪」的技术基础。此后二十多年,这个测法在成人体成分研究里反复使用,在孕期却几乎没落地。
| 年份 | 事件 | 对本库的意义 |
|---|---|---|
| 1991 | Armellini 等发表超声测腹内脂肪方法 | 本库测量口径的直接来源 |
| 2007 | 弗雷明汉心脏研究发表内脏与皮下脂肪库同代谢风险的关系 | 官方背景段引用 |
| 2009 | 有研究报导体脂腹部肥胖预测孕晚期糖耐量异常 | 官方背景段引用 |
| 2014 | 有研究报道孕早期超声内脏脂肪厚度可预测代谢综合征与妊娠糖尿病 | 官方背景段引用 |
| 2016 | 有研究报道孕早期腹部肥胖预测孕中期糖代谢异常 | 官方背景段引用 |
| 2016-10 | 本队列开始入组 | 采集起点 |
| 2020-03-23 | 本库以 1.0.0 版上线 | 公开 |
官方背景段引用的六条文献里,四条直接讨论孕期超声内脏脂肪与糖代谢的关系,其中三条发表于 2013 至 2017 年间。这说明本队列启动时临床假设已相当明确,缺的是可公开的逐例数据。
8.2 与妊娠糖尿病预测这条研究线的关系
妊娠糖尿病预测研究长期围绕几个变量转:年龄、体质指数、既往史、家族史、族裔。它们都能从问诊与称重得到,便宜且标准化,构成了绝大多数预测模型的基线。
内脏脂肪的加入提出一个更细的问题:体质指数相同的人里,脂肪分布不同,风险是否不同。这条假设在成人代谢研究里成立,孕期是否成立需要孕期数据回答。
| 研究问题 | 只用常规变量时 | 加入内脏脂肪后 |
|---|---|---|
| 体质指数相同,风险是否相同 | 无从区分 | 可分层观察 |
| 脂肪分布是否是独立风险因素 | 无法检验 | 可做嵌套模型对比 |
| 测量成本是否值得 | 不涉及额外测量 | 一次超声加一条线 |
| 结果的普适性 | 变量通用,跨人群较稳 | 测法需标准化 |
第四行是这条线能否走通的现实约束:多量一条线不增加设备成本,却增加操作时间与操作者差异。本库公开的正是这条线的数值,供后来者判断标准化难度。
8.3 生态位:孕期影像与孕期表格之间的缝
孕期公开数据两端很清楚:一端是影像,胎儿超声、胎心、胎盘磁共振,规模千到万级;另一端是纯表格,出生登记、医保理赔、队列问卷,规模万到百万级。中间那层「临床测量加结局」的小表数量少、体量小,却恰好是临床研究最常用的形态。
| 生态位 | 代表形态 | 规模量级 | 主要任务 |
|---|---|---|---|
| 胎儿影像 | 超声图像与切面 | 千至万 | 分割、测量、分类 |
| 孕期生理信号 | 胎心、子宫电 | 十至千 | 时序分析 |
| 孕期测量小表 | 本库这一类 | 百级 | 关联、预测、教学 |
| 出生登记与理赔 | 结构化登记 | 万至百万 | 流行病学、政策 |
| 多组学孕期队列 | 组学加临床 | 百至千 | 机制、整合 |
本库坐在第三格的最边缘:变量最少、体量最小、门槛最低。这一格的价值不在支撑重量级研究,而在于它是从原始测量到可分析表格这条链路上最短的一段。
8.4 谁在用它,用来做什么
项目页的当前版本访问量是四百余次,全部版本同为四百余次——只有一个版本,两个数字自然相等。对一份上线六年多的数据集,这个数字偏小,说明使用者很窄。
官方用途说明写的方向是研究内脏脂肪能否在分娩时预测妊娠糖尿病。致谢显示资助来自阿雷格里港临床医院的研究与活动激励基金,设备与场地由市政府提供,技术支持来自南里奥格兰德联邦大学。
使用者大体分三类:教学者用它演示一条卡尺读数如何变成一列变量,要点是讲清代理量的含义;临床研究者用它做可解释基线,要点是把混杂变量缺失写进局限;数据工程人员用它做解析与管线冒烟测试,要点是孕周逗号与空单元格。
三类用法有共同的起点,就是 §4.3 的案例。教学者拿它开讲,一行十五格已经画完整份数据的形状;临床研究者拿它做 sanity check,「高内脏脂肪加肥胖」却判阴,正好说明单行不能当证据;数据工程人员拿它做解析用例,这一行同时含两个缺失、两个逗号孕周与一个剖宫产编码,是最难的一行。同一个样本被三种人从三个方向读,说明小表格数据的价值不在深度,而在这一格能被反复解释。
§9 使用指引
9.1 三种角色的路径
想快速判断能不能用,先读 §1.3 与 §1.6,再打开 CSV 看一眼表头,最容易犯的错是以为里面有图。要做临床关联分析,先读 §4.1 与 §4.4,注意测量是代理量、标签是临床终点。要做数据工程,先读 §5.4 与 §5.7,注意孕周分隔符与缺失约定。要写方法学段落,先读 §3.3 与 §9.3,把测量口径与伦理批件号写全。
三类角色对同一份表的用法差别很大,值得分开写清楚。
教学角色。 目标是让一个没有产科背景的学生在半小时内理解「测量如何变成变量」。最短路径是:打开 CSV,找到 §4.3 的案例那一行,逐格解释每一列来自哪里;然后讲清两个空格的来历;最后让他自己把孕周列换算成天数。全程不需要任何统计,也不需要任何图。这一课最容易被卡住的点不是数据,而是「超声测量」与「超声影像」的区别,这需要在开头就说明白。
研究角色。 目标是把内脏脂肪放进一个已有的风险模型,看它有没有增量。最短路径是:读 §4.1 确认代理量的含义,读 §4.4 确认标签的生成路径,然后按 §5.6 拆出特征与结局,做嵌套模型对比。这一步最常见的错误不是代码,而是把分娩期的三列放进特征里。报告时至少写三句:样本量、单中心、未控制混杂。
工程角色。 目标是把这份表接进一条已有的数据管线。最短路径是:先跑 §5.3 的 shell 体检,再用 §5.8 的脚本核对结构,最后按自己的 schema 改名。这一角色关注的是稳定性而非结论,所以最该记住的是「逗号不是小数点」与「空即缺失」两条约定。
9.2 一条最短的可用流程
从零到一张可解释的关联表,最短路径是四步:取文件、解码孕周、拆两段时点、拟合一个只含两个变量的模型。
import pandas as pd
import statsmodels.api as sm
url = 'https://physionet.org/files/maternal-visceral-adipose/1.0.0/visceral_fat.csv'
df = pd.read_csv(url, dtype=str)
def ga_days(x):
if pd.isna(x) or str(x).strip() == '':
return None
w, d = str(x).replace('"', '').split(',')
return int(w) * 7 + int(d)
df['ga0'] = df['current gestational age'].map(ga_days)
df['vat'] = pd.to_numeric(df['central armellini fat (mm)'], errors='coerce')
df['bmi0'] = pd.to_numeric(df['bmi pregestational (kg/m)'], errors='coerce')
df['gdm'] = pd.to_numeric(df['gestational dm'], errors='coerce')
d = df.dropna(subset=['vat', 'bmi0', 'gdm']).copy()
X = sm.add_constant(d[['vat', 'bmi0']])
fit = sm.Logit(d['gdm'], X).fit(disp=0)
print(fit.params.round(3).to_dict())
print('n =', len(d))
跑完得到两行系数与一个样本量。这个模型的意义只在演示:它把「内脏脂肪」与「体质指数」放进同一个方程,让使用者看到两者在同一个队列里各自的量级。任何解读都必须同时报出 n,并注明这是单中心、单时点、未控制混杂的结果。
9.3 引用方式
官方给出的引用只有数据集本身一条,没有单独的配套论文。PhysioNet 的引用格式已经生成好,直接复制即可。
| 引用对象 | 建议写法 | 何时必须引 |
|---|---|---|
| 数据集 | Rocha, A. d. S., von Diemen, L., Kretzer, D., Matos, S., Rombaldi Bernardi, J., & Magalhães, J. A. (2020). Visceral adipose tissue measurements during pregnancy (version 1.0.0). PhysioNet. doi:10.13026/p729-7p53 | 任何用到数据的结果 |
| 测量口径 | Armellini, F. 等. Sonography detection of small intra-abdominal fat variations. Int J Obes, 1991 | 描述测量方法时 |
| 平台 | PhysioNet 平台论文 | 平台层面的引用要求 |
引用时把版本号与 DOI 写全。这份数据只有 1.0.0 一版,不存在版本歧义,但仍建议写全,因为 PhysioNet 的「最新版」DOI 与版本 DOI 是两个不同的字符串。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本页性质 | 数据集说明文档,不是原始数据的再分发 |
| 事实来源 | PhysioNet 项目页、legend.txt、SHA256SUMS.txt 与 CSV 表头 |
| 数字口径 | 规模、结构、边界三类;分布类统计不在范围内 |
| 推导数字 | 孕周换算、失访比例由官方数字换算,方法已写明 |
| 未核实项 | 测者一致性、失访者特征、族裔采集方式、子痫前期等未公开结局的具体数值 |
| 医学建议 | 本页不含诊断或治疗建议,不构成产科临床指导 |
| 许可提示 | ODC-By 1.0,署名即可;衍生库可用其他许可 |
| 更新策略 | 官方版本不变则事实部分不变,勘误另记于编辑说明 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 这是一份腹部超声影像库 | 只有一张 CSV,没有任何图像 | 文件清单四个文件,最大的是 19.9 KB 的许可文本 |
| 里面有 154 个人 | 公开 133 例,21 例失访 | 官方方法段写明 154 入组、21 失访、133 最终 |
| 内脏脂肪厚度等于内脏脂肪体积 | 是一条直线距离的代理量 | 方法段写的是从腹主动脉到腹白线的距离 |
| 每人可以看孕期变化 | 每人只有一次测量 | 表内没有时间列,只有入组孕周与分娩孕周 |
| 孕周写成十二点一周 | 是十二周加一天 | 图例写「周数,天数」,两个整数用逗号连接 |
| 体质指数单位是千克每米 | 千克每平方米,表头少一个平方 | 数值量级 20 至 50 只有此解释成立 |
| 妊娠糖尿病是金标准诊断 | 四条判据取并集,依赖常规产检路径 | 官方局限说明第一、二条 |
| 空单元格是零 | 空即缺失 | 数据描述段原文:缺失数据以空单元格表示 |
| 缺失的子痫前期结局也不存在 | 已评估但未公开 | 用途说明段明确列出已评估的结局 |
| 许可与 ODbL 一样有传染性 | 本库是 ODC-By,只需署名 | 项目页许可栏 |
十条里最影响选型的是首尾四条:前两条决定能不能做影像任务,后两条决定怎么用这份表。
FAQ
Q1:名字里有 visceral adipose,为什么不是影像数据集?
因为超声在这里是量具而不是产出,测完留在文件里的只有一条毫米数。作者选择的公开范围就是这份数值表,图像与视频从未进入公开包。判断是不是影像集,看文件清单比看名字可靠。
Q2:154 例、133 例、287 号,这三个数字怎么对上?
154 是入组例数,133 是公开例数,失访 21 例占百分之十三。287 是编号最大值,编号来自更大的登记序列,中间空号不是被删掉的行。三者分别回答招了多少、留了多少、登记到几号。
Q3:为什么只有一个版本?
发布记录只有 2020 年 3 月 23 日的 1.0.0,此后再无更新。小体量表格数据常见这种形态:一次整理、一次上传、没有后续维护。代价是没有勘误渠道,字段疑问只能参照图例与方法段。
Q4:孕周为什么不用小数?
用周与天两个整数,好处是精确、不会因四舍五入丢掉一天;坏处是需额外解码,且逗号在 CSV 里有特殊含义,必须加引号。从格式看,这更像统计软件导出的默认产物,而不是刻意设计。
Q5:体质指数表头少了一个平方,能用吗?
能。数值是按千克每平方米算的,量级在二十到五十之间;若真按千克每米理解,对应身高会荒谬得离谱。代码里改名即可,报告里不要照抄原表头。
Q6:妊娠糖尿病判阳的标准到底是什么?
四条取并集:糖耐量试验异常、糖挑战试验异常、空腹血糖超 IADPSG 界值、病历已写明诊断。官方把四条并列在方法段,未给权重,也未说明重复判定的处理顺序。
Q7:它和 211 例的兄弟集能合并吗?
理论上可以,两者同采集点、同伦理批件、部分测量口径相同。实际要小心两点:变量集不同,合并后大量列会缺失;样本是否重叠,官方未说明两批是同一批人的不同切片还是不同批次,合并前应先核对。
Q8:只有脐周一个测量点,够不够?
看你问什么。若问「脐周内脏脂肪与妊娠糖尿病的关系」,一个点就够。若问「上腹部与脐周哪个测量点更好预测」,一个点不够——那需要 211 例队列里两个点都测的那批数据。
Q9:为什么没有身高、体重这些原始量?
表里只有体质指数,无法反推原值,也做不了体质指数之外的人体测量学分析。需要这些量的研究得回到原始队列。
Q10:可以用它发论文吗?
可以,ODC-By 1.0 只要求署名。引用时写全作者、年份、版本与 DOI;分析结果与图表不受限,受限的只是数据库本身的再分发。
Q11:四百多次访问量说明它不重要吗?
不一定。访问量衡量的是有人来下载,不是有人用它得出成果;28.8 KB 的表下一次就够用很久。这个数字适合当使用广度的粗略指示,不适合当质量评分。
Q12:如果我要复现论文里的数字,该引哪一篇?
官方页面没有单独的配套论文,只有数据集本身与 9 条背景参考文献。要复现方法,参照方法段的测量口径与所引文献;要复现结果数字,只能在自己下载的这份表上跑。
术语表
| 术语 | 英文 | 含义 |
|---|---|---|
| 内脏脂肪 | visceral adipose tissue, VAT | 腹腔内包裹脏器的脂肪,与代谢风险关联强 |
| 皮下脂肪 | subcutaneous adipose tissue, SAT | 皮肤与肌层之间的脂肪层 |
| 脐周内脏脂肪 | periumbilical VAT | 以脐上二厘米为定位点的内脏脂肪厚度 |
| 上腹部内脏脂肪 | epigastric VAT | 以上腹部正中为定位点的内脏脂肪厚度 |
| 腹白线 | linea alba | 腹直肌鞘在中线汇合形成的腱膜带 |
| 腹主动脉 | abdominal aorta | 腹膜后的大血管,超声上可见搏动 |
| 矢状位 | sagittal plane | 沿身体前后方向的纵切面 |
| 凸阵探头 | convex probe | 产科超声常用探头,视野呈扇形 |
| 电子卡尺 | electronic caliper | 超声机内置的测距工具,读数直接入机 |
| 妊娠糖尿病 | gestational diabetes mellitus, GDM | 妊娠期首次发现或发生的糖代谢异常 |
| 糖耐量试验 | oral glucose tolerance test, OGTT | 口服葡萄糖后多次测血糖的诊断试验 |
| 糖挑战试验 | glucose challenge test, GCT | 单次服糖后测血糖的初筛试验 |
| IADPSG | International Association of Diabetes and Pregnancy Study Groups | 制定妊娠糖尿病血糖界值的国际组织 |
| 孕前体质指数 | pregestational BMI | 怀孕前的体重除以身高平方 |
| 孕周 | gestational age | 从末次月经起算的妊娠周数 |
| 足月 | term | 孕三十七周至四十二周之间分娩 |
| 失访 | loss to follow-up | 入组后未能追到结局的参与者 |
| 回忆偏倚 | recall bias | 依赖回忆填报的数据系统性偏离真值 |
| 代理量 | proxy measure | 用来近似另一个不可直接测量量的指标 |
| 开放数据许可 | ODC-By | 只需署名的开放数据许可 |
| DAIMS | Data and Analytics Improvement Maturity Score | 数据资产成熟度的五维评估框架 |
| 主键 | primary key | 唯一标识一行的字段 |
| 宽表 | wide table | 一行一例、变量横向铺开的表结构 |
| 标签泄露 | label leakage | 结局相关信息混入特征导致离线指标虚高 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 入组例数 | 154 | 官方方法段 | 官方 |
| 失访例数 | 21 | 官方方法段 | 官方 |
| 失访比例 | 13% | 官方方法段 | 官方 |
| 公开发例数 | 133 | CSV 行数与官方方法段 | 官方 |
| 变量数 | 15 | 表头与图例 | 官方文件 |
| 采集起止 | 2016 年 10 月至 2017 年 12 月 | 官方方法段 | 官方 |
| 入组孕周上限 | 20 周 | 官方方法段 | 官方 |
| 测量点位置 | 脐上 2 厘米 | 官方方法段 | 官方 |
| 读数次数 | 2 次(吸气、呼气) | 官方方法段 | 官方 |
| 未压缩体积 | 28.8 KB | 官方文件栏 | 官方 |
| 压缩包体积 | 11.0 KB | 官方文件栏 | 官方 |
| CSV 体积 | 7.8 KB | 官方文件栏 | 官方 |
| 许可 | ODC-By 1.0 | 官方许可栏 | 官方 |
| DOI | 10.13026/p729-7p53 | 官方页面 | 官方 |
| 伦理批件号 | 2.132.090 | 官方方法段 | 官方 |
| 背景参考文献数 | 9 | 官方参考文献段 | 官方 |
| 编号最大值 | 287 | CSV 首列 | 官方文件 |
附录 B:数字的来源分层
| 层级 | 含义 | 本篇中的例子 | 可信度 |
|---|---|---|---|
| 官方直述 | 项目页正文直接写出 | 入组 154、失访 21、20 周上限、脐上 2 厘米 | 高 |
| 官方文件 | CSV 与图例可读出 | 133 行、15 列、编号最大 287、表头单位写法 | 高 |
| 推导 | 由官方文件换算 | 孕周天数换算、体质指数单位解释 | 中,方法已写明 |
三层的差别在于是否需要中间计算。官方直述与官方文件都是直接读取,推导要经过换算。凡是推导值,本篇都写明了换算方式。
未列入三层的数字一律不写。这包括内脏脂肪厚度的均值与分位数、妊娠糖尿病的判阳例数、各孕周的分布、年龄与体重的交叉表——这些都需要把 133 行逐条统计才能得到,属于使用者的工作,不是说明文档该做的事。
附录 C:完整参考文献
| 编号 | 文献 | 用途 |
|---|---|---|
| 1 | Rocha, A. d. S. 等. Visceral adipose tissue measurements during pregnancy, v1.0.0. PhysioNet, 2020. doi:10.13026/p729-7p53 | 数据本体与全部事实 |
| 2 | PhysioNet 项目页 https://physionet.org/content/maternal-visceral-adipose/1.0.0/ | 描述、方法、许可与文件清单 |
| 3 | Armellini, F. 等. Sonography detection of small intra-abdominal fat variations. Int J Obes 15(12):847-852, 1991 | 测量口径来源 |
| 4 | Fox, C. S. 等. Abdominal visceral and subcutaneous adipose tissue compartments. Circulation 116:39-48, 2007 | 内脏脂肪与代谢风险的背景 |
| 5 | De Souza, L. R. 等. First-trimester maternal abdominal adiposity predicts dysglycemia and GDM in midpregnancy. Diabetes Care 39(1):61-64, 2016 | 孕早期腹部脂肪与糖代谢的背景 |
| 6 | Gur, E. B. 等. Ultrasonographic visceral fat thickness in the first trimester can predict metabolic syndrome and GDM. Endocrine 47(2):478-484, 2014 | 超声内脏脂肪与妊娠糖尿病的背景 |
| 7 | 同团队 211 例孕期脂肪超声队列(PhysioNet,凭证式访问) | 兄弟数据集对照 |
附录 D:任务代码
把 133 行拆成「特征—结局」两段,做一次留一交叉验证的基线。模型只用一个变量,目的是展示管线,不是追分数:
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import LeaveOneOut, cross_val_predict
from sklearn.metrics import roc_auc_score
df = pd.read_csv('visceral_fat.csv', dtype=str)
df['vat'] = pd.to_numeric(df['central armellini fat (mm)'], errors='coerce')
df['gdm'] = pd.to_numeric(df['gestational dm'], errors='coerce')
d = df.dropna(subset=['vat', 'gdm'])
X = d[['vat']].values
y = d['gdm'].astype(int).values
#-- 133 例太少,用留一法而不是 k 折,避免某折里没有阳性
loo = LeaveOneOut()
clf = LogisticRegression(max_iter=1000)
p = cross_val_predict(clf, X, y, cv=loo, method='predict_proba')[:, 1]
print('n =', len(y), 'auc = %.3f' % roc_auc_score(y, p))
LeaveOneOut 在这里不是更严谨,而是更现实:133 例按结局分层后,任何 5 折切分都可能出现某一折阳性极少。留一法不能解决样本量问题,只是让每一步都算得出来。跑出的 AUC 只能说明「这个单一变量在这个队列里的区分度」,不能说明任何因果关系。
附录 E:如果只记五件事
| 序 | 记住这一条 |
|---|---|
| 1 | 133 行、15 列、一张 7.8 KB 的 CSV,没有图像 |
| 2 | 入组 154 例、失访 21 例,公开 133 例 |
| 3 | 内脏脂肪是一条从腹主动脉到腹白线的毫米数,吸气呼气各测一次取均 |
| 4 | 孕周写成「周,天」,逗号不是小数点;空单元格就是缺失 |
| 5 | ODC-By 1.0,署名即可;体量小是它的优点,样本小是它的边界 |
编辑说明
本篇事实部分依据 PhysioNet 项目页(1.0.0 版)、legend.txt、SHA256SUMS.txt 与 CSV 表头核对,核对于 2026 年 10 月。孕周天数换算、失访比例、体质指数单位解释为推导值,换算方式已在正文标明。官方未提供的项目(测者一致性、失访者特征、族裔采集方式、已评估但未公开的结局数值)一律标为未提供,不作推测。原始数据版权归作者与采集机构,按 ODC-By 1.0 使用;本篇为说明文档,不包含数据本体。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- hrs — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
- mimicel — 共享标签:电子健康记录 / 公共卫生与流行病学
- mimiciii-demo — 共享标签:电子健康记录 / 公共卫生与流行病学
- mimiciv — 共享标签:电子健康记录 / 公共卫生与流行病学
- framingham — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
- abcd-study — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
- qresearch — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
- bold-blood-gas-oximetry — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
- sex-differences-hearing-loss — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
- our-future-health — 共享标签:电子健康记录 / 队列研究 / 公共卫生与流行病学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

