信息速览
一份靠 VitalDB 工具链在兽医手术台旁边录下来的术中生命体征记录,2026 年 10 月 28 日登上 PhysioNet。它把人类麻醉信息学那套采集范式——监护仪加麻醉机、统一时钟写进同一种二进制容器——第一次成规模地套用到了犬与猫身上。226 例麻醉、241 个记录文件、约 369 小时,是当前公开兽医术中时序数据里体量最大的一份。
它不是驯化版的 VitalDB。它没有事件标注,没有结局,没有动物级标识,波形也没有转成 WFDB。它的价值在于提供了一块「跨物种对照的原始录音」:同一套解析工具能读,但同一套判断阈值不能直接套。把这两件事分开,是使用它的全部前提。
一屏速览见下表。
| 项目 | 内容 |
|---|---|
| 官方全称 | A Veterinary Vital Sign Time-Series Database Collected During General Anesthesia |
| 版本 / 发布 | v1.0.0 / 2026-10-28 |
| 托管 | PhysioNet(RRID:SCR_007345) |
| DOI | 10.13026/wvfp-p831 |
| 作者 | Jeesoo Cha、Hyung-Chul Lee |
| 采集机构 | VIP Animal Medical Center, Cheongdam(韩国首尔) |
| 规模 | 226 例麻醉 / 241 个 .vital 文件 |
| 物种 | 犬 191 例、猫 35 例 |
| 总时长 | 约 369 小时 |
| 单文件时长 | 中位 88.5 分钟(IQR 55–123,范围 5–307) |
| 波形通道 | ECG_II、ART、PLETH(部分),500 Hz |
| 数值参数 | 心率、SpO2、脉率、食管温、有创/无创血压,约 1 Hz |
| 麻醉机数据 | 呼末 CO2、吸入药浓度、MAC、潮气量,仅 52 例 |
| 事件标注 | 无 |
| 结局 | 无 |
| 文件格式 | .vital 原生二进制,无 WFDB |
| 体积 | 633.7 MB |
§1 它到底是什么:一份没有标注的兽医麻醉原声带
一句话:这是一份按可得性收集、按原样发布的犬猫全麻术中监护记录,官方在页面里把「不做处理」写成了明确承诺——No processing was applied to the contents of the .vital files。选择文件、改名、脱敏,除此之外没有滤波、没有重采样、没有插补、没有裁掉伪迹段。
1.1 为什么这不是「又一个麻醉数据集」
判别一个麻醉数据集的关键不是它的规模,而是它在时间轴上留下了什么。人类侧的公开术中库大多沿着两条路走:一条是器官层面的完整叙事(波形、给药、事件、结局俱全),一条是任务定制的切片(专门标心律失常、专门标伤害性刺激)。兽医这份走在第三条路上:它只交付设备当时看见的东西,不交付人对这些东西的解释。
这个差别决定了它的能力边界。能让模型学到「犬在七氟烷维持下心率与呼末二氧化碳的耦合形态」,但学不到「这个形态在该病例里算不算危险」——因为危险与否的判断从来不在文件里。凡是宣称「用它训练术中低血压预警」的说法,都在偷换「信号」与「标签」。
1.2 三层结构的读法
全文按三层展开,每层对应一类使用者的真实痛点:
| 层 | 回答的问题 | 落点章节 |
|---|---|---|
| 物种与设备层 | 这些数字来自什么动物、什么机器,为什么读法与人类不同 | §3 |
| 信号与完整性层 | 哪些轨道真的存在、缺的是什么、伪迹从哪来 | §4 |
| 取数与标注层 | 怎么把 .vital 读成表格,缺的标注要自己怎么补 | §5 |
1.3 三十秒决策卡
| 你的处境 | 这份数据能帮你什么 |
|---|---|
| 做兽医麻醉方向的信号处理,但没有公开数据 | 拿下目前最大的犬猫术中多参数时序集,无需申请 |
| 做人类术中模型,想找跨物种外部验证集 | 可在同一套 Vital Recorder 工具链下做通道级对照,但必须先做物种归一 |
| 研究小而轻体重的动物如何影响血压读数 | 体重中位数明显偏低,能直接观察袖带误差的表现 |
| 需要犬猫低血压 / 拔管延迟的真值 | 给不了,没有任何事件或结局字段 |
| 想验证自己的 PhysioNet 自动下载流水线 | 可以,但这批文件不是 WFDB,标准 WFDB 读取器会直接失败 |
1.4 不适合谁
如果你的需求是「一个带标签的兽医术中事件识别基准」,这份数据给不了你标签,也不该被硬凑成基准。同类需求下,人类侧应当去看 VitalDB 系索引出的心律失常逐搏标注集,那里有五位麻醉科医师复核过的搏级真值;兽医侧目前没有等价物,只有等新的发布,或者自己在一个能拿到麻醉记录单的机构里补标。
如果你的需求是「动物模型生理学的基础研究」,那么这份数据也不能替代实验室级采集:它是临床监护,不是受控实验,麻醉药、体位、手术类型都不可控,也不提供血气、心输出量这类金标准测量。
§2 数据构成与规格
2.1 规模数字的三种口径
同一个规模话题,官方给了三组数字,它们并不等价,混用会直接算错。
| 口径 | 数值 | 含义与陷阱 |
|---|---|---|
| 麻醉病例数 | 226 | 病例单位;同一动物可贡献多个病例,动物级唯一数未知 |
| 记录文件数 | 241 | 文件单位;15 个病例被拆成多段(带 -1、-2 后缀) |
| 记录总时长 | 约 369 小时 | 文件跨度之和,不等于麻醉时长之和 |
| 单文件时长 | 中位 88.5 分钟 | IQR 55–123,全长 5–307 |
| 麻醉日志时长 | 中位 113 分钟 | IQR 72–147;与记录跨度不是同一件事 |
| 信号轨道 | 55 种 | 全队列去重后的轨道名总数,单文件远少于这个数 |
这里最容易犯的错是把「记录总时长」当成「可用于建模的清醒-麻醉全过程」。记录往往在麻醉机或监护仪接入后才开始,在撤机时结束;而麻醉日志记录的是从给药到拔管的临床时段。两者相差十几到几十分钟很常见,做时间序列长度统计时必须挑一个口径并写明。
2.2 队列构成
| 维度 | 分布 |
|---|---|
| 物种 | 犬 191 例(约 84.5%)、猫 35 例(约 15.5%) |
| 年龄中位数 | 105 个月(IQR 64–137) |
| 体重中位数 | 4.5 kg(IQR 3.3–6.8) |
| 性别 | 雄性 115 例(约 50.9%) |
| 绝育状态 | 已绝育 194 例(约 85.8%) |
| ASA 分级 1/2/3/4/5 | 48 / 73 / 62 / 36 / 7 |
| 维持麻醉剂 | 七氟烷 204 例、异氟烷 20 例、未明确 2 例 |
体重中位数只有 4.5 千克,说明这份队列以猫与小体型犬为主,与「犬类平均体重二三十公斤」的常识相去甚远。这不是瑕疵,而是兽医麻醉的真实画像:小体型动物的低体温、低血糖与血压测量误差都是临床上更突出的问题。但它也意味着任何「平均犬」的结论在这里都会偏。
ASA 分级的分布同样偏离择期手术人群——3 级及以上合计 105 例,接近一半。这是三级转诊中心的典型病例结构:常规绝育被社区诊所分流,留下来的多是肿瘤切除、骨科修复、急诊开腹这类高 ASA 手术。
2.3 五个随附文件
| 文件 | 粒度 | 解决什么问题 |
|---|---|---|
| clinical_metadata.csv | 每病例一行 | 物种、品种、年龄、性别、绝育、体重、ASA、手术类别 |
| record_manifest.csv | 每文件一行 | 病例与文件的映射、分段顺序、记录时长、信号可用标志 |
| track_inventory.csv | 每文件每轨道一行 | 设备标签、轨道名、类型、单位、采样率、观测数、缺失状态 |
| data_dictionary.csv | 每变量一行 | 单位、允许值、缺失约定 |
| breed_summary.csv / procedure_glossary.csv | 汇总与词表 | 品种统计与手术术语的中英对照 |
五张表里,真正决定分析可行性的是 track_inventory.csv。它把轨道状态分成了三类:不存在(absent)、存在但为空(empty)、存在但有数据却不可用(present-but-unusable)。这个区分在公开数据集里并不常见,却是信号分析的真实前提——「这一例没有麻醉机数据」和「这一例接入了麻醉机但只录到一条平线」在统计上是两件事,混在一起会系统性高估信号可用率。
2.4 一条记录逐行解剖
.vital 是 VitalDB 自研的二进制容器,内部不是「一条波形一个文件」,而是把所有轨道按各自采样率写进同一个容器,并附带一个轨道索引。下面这段是官方示例脚本的等价写法,用来说明提取顺序。
#-- 读取单个 .vital 文件的轨道清单(需 pip install vitaldb)
import vitaldb
path = "vital/CASE_0001.vital"
trk = vitaldb.VitalFile(path)
#-- 轨道被发现记录在文件内部,不依赖外部头文件
names = trk.get_track_names()
print(len(names), names[:12])
#-- 按需提取单条轨道并显式指定输出间隔
ecg = trk.to_numpy(["ECG_II"], 1 / 500) # 500 Hz 原生
hr = trk.to_numpy(["HR"], 1.0) # 数值轨道按 1 秒对齐
print(ecg.shape, hr.shape)
关键在于最后两行的差别:to_numpy 的第二个参数是重采样后的目标间隔,不是轨道原生频率。官方文档特意提醒过这一点——把输出间隔当作采样率来引用,会在论文里写出一个并不存在的 500 Hz 采样声明,而数值轨道本来是 1 Hz。
2.5 与同类资源的定位差异
| 资源 | 物种 | 规模 | 事件/结局 | 格式 |
|---|---|---|---|---|
| 这份兽医库 | 犬、猫 | 226 例 | 无 | .vital |
| VitalDB | 人 | 数千例 | 有限(分项索引) | .vital |
| VitalDB Arrhythmia | 人 | 数百例手术 | 有(逐搏) | .vital + 标注 |
| cardiac-accel 犬猪库 | 犬、猪 | 数十只 | 无(实验态) | WFDB |
| 一般兽医电子病历库 | 犬、猫 | 数千条 | 有(诊断/转归) | 表格 |
一句话判断:要术中连续波形,兽医侧目前只有这一份;要事件真值,兽医侧没有,只能退到人类侧的索引集;要群体规模的诊断与转归,则应当离开波形库,去看兽医电子病历类资源,代价是失去秒级分辨率。
§3 物种与设备层:为什么同一套数字在犬猫身上换了含义
3.1 生理基线不同,阈值不能平移
人类术中监护的常见报警阈值有一套几十年的经验底座:心率低于 50 或高于 100、平均动脉压低于 65 毫米汞柱、血氧饱和度低于 90 视为警戒。犬猫的对应区间完全是另一套——成年犬静息心率常在 60 至 140 之间,猫更高;犬猫的收缩压正常区间也比人低得多。直接把人的阈值搬到这份数据上做「低血压事件」推导,得到的所谓事件率没有临床意义,只有信号统计意义。
这个差异不是四舍五入能解决的。它影响三件事:一是标签推导(阈值法报警的阳性率);二是归一化方式(按人群均值方差做的标准化在跨物种时会把物种差异也标准化掉);三是多任务混训(人类与犬猫样本同批训练时,模型可能学到的最强特征是「这是不是人」)。
3.2 设备层:同一台监护仪,两种接入方式
| 通道 | 来源 | 采样率 | 覆盖病例 |
|---|---|---|---|
| ECG_II | Infinity M540 波形输出经 SNUADC | 500 Hz | 226(全部) |
| HR、SpO2、脉率 | Infinity M540 数值 | 约 1 Hz | 226(全部) |
| 食管温度 | Infinity M540 数值 | 约 1 Hz | 225 |
| ART 波形 | 有创动脉置管 + SNUADC | 500 Hz | 192 |
| ART 数值 | 有创血压数值 | 约 1 Hz | 121 |
| 无创血压 | 袖带示波法 | 约 1 Hz | 55 |
| PLETH | 脉搏波 | 500 Hz | 部分 |
| 麻醉机参数 | MedibusX | 波形 + 数值 | 52 |
表里有一个值得停一下的现象:有创动脉压波形覆盖 192 例,而对应的数值只有 121 例。这不是数据错误,而是设备配置差异——波形来自独立采集通道,数值来自监护仪向中央站的输出,两条路并不总是同时打开。做血压分析时如果只查数值轨,会凭空丢掉七成有创血压病例。
3.3 采样惯例:三种时钟同时存在
先看动物的麻醉生理学,它决定了哪些通道最值得珍惜。犬猫麻醉的主要风险与人类不完全重合:低体温比低血压更常见,尤其在小体型动物身上,因为体表面积与体重之比高、散热快;呼吸抑制在吸入麻醉加深时出现得更突然;苏醒期躁动与术后低体温相关。这三点决定了食管温这条「看起来不起眼」的数值轨道,在本数据里的临床权重不亚于血压——它覆盖 225 例,是全队列覆盖率第二高的连续参数,仅次于心电与血氧。
反过来,人类术中监护里权重极高的几类参数在这份数据里缺席:脑电双频指数类设备在犬猫上的应用尚未普及,因此没有麻醉深度的直接指标;心输出量与每搏量需要一个可用的人类公式,而这类公式在犬猫身上的适用性本身存疑。这意味着「麻醉深度估计」这类任务在这份数据上只能间接做,用呼末二氧化碳与吸入药浓度的组合做代理,而代理的覆盖只有 52 例。
再看三种时钟。
这份数据里有三种时间来源:监护仪内部时钟、SNUADC 采集卡时钟、麻醉机经 MedibusX 的时钟。官方在局限性里明确写了「不同设备时间戳可能存在未知偏移,不应假定样本级同步」。
这个提醒的含义比字面更重。在人类 VitalDB 场景里,研究者已经习惯了「Vital Recorder 做的同步足够好,可以直接对因果下结论」这样的默会前提。在这份数据上,这个前提没有背书:如果要做「血压下降后心率反射」这类秒级因果分析,必须先把偏移量估出来,或者至少把分析窗口放宽到分钟级,让偏移落在窗口噪声里。
3.4 一个贯穿全文的观察:猫的样本
全文反复回到同一个具体片段——那批猫。它们占队列约六分之一,却几乎承载了所有「不能用犬的经验推断」的风险。
原因有三层。第一层是体重:猫的体重分布更窄也更低,袖带尺寸选择余地小,无创血压在猫身上的误差普遍比犬大,而这批数据里无创血压只覆盖 55 例,稀释了样本。第二层是麻醉反应:猫对α2 受体激动剂的反应、对体温下降的敏感程度都与犬不同,食管温这一条几乎全覆盖的数值轨道在猫身上往往呈现更陡的下降。第三层是统计:这六分之一再按手术类型与 ASA 分层,每格只剩个位数,任何关于猫的血压异常比例估计都带着极宽的置信区间。
所以正确的用法是把猫当作异质性来源而不是独立子群体:可以检验模型在猫上的表现退化,不宜单独发布猫的分布统计。这个原则在 §4 的信号完整性讨论和 §7 的局限清单里都会再出现。
§4 信号与完整性层:缺的是什么,伪迹从哪来
4.1 三层完整性,逐层收紧
在兽医场景里,缺口还有一类人类数据不太常见的成因:动物在记录期间移动。犬猫不像人类手术患者被约束固定,术中体位的维持依赖绑带与体位垫,一旦动物在恢复期开始抬头或挣扎,电极片与血氧探头就会移位,信号随之劣化。这类缺口不是设备故障,也不是临床中断,而是动物的行为本身。
这一点决定了修补策略:人类数据的缺口多数可以用「设备重连」解释,插值补几个点是合理的;这里的缺口往往对应一次真实的体位改变,插值会在拼接处造出一段从未存在过的平稳信号。更稳妥的做法是把缺口标记为「不可用区间」,让下游模型显式地学会在缺失条件下推理,而不是假装信号连续。
判断一份监护数据能不能用,要过三道关,每道关淘汰的东西不一样。
| 关卡 | 问题 | 本数据的位置 |
|---|---|---|
| 文件存在性 | 这个病例有没有被录下来 | 226 例里有记录,其余病例未纳入 |
| 轨道存在性 | 该文件里有没有这条轨道 | 只有 ECG 与心率、血氧全量覆盖 |
| 轨道可用性 | 这条轨道在全程是否连续可用 | 官方明确不保证,须自行评估 |
第三关是最容易被跳过的一关。页面上有一句很容易被忽略的话:file-level signal availability does not guarantee complete coverage throughout a case——文件级可用性不等于全程覆盖。一条轨道可能只在文件的前二十分钟有数据,后面的时间是空字段。把「文件里有 ECG_II」当作「这一例全程有心电」,是所有基于此数据的静默错误里最常见的一个。
4.2 伪迹的四种来源
临床监护的伪迹与实验室采集的伪迹不是同一类问题。这里能预见到的有四类:
| 伪迹类型 | 成因 | 表现 |
|---|---|---|
| 电刀干扰 | 术中电凝、电切 | ECG 上高频爆发,与真实 QRS 混淆 |
| 袖带充放气 | 无创血压周期性测量 | 该通道出现阶跃与平台 |
| 冲洗与采血 | 有创动脉管路操作 | ART 波形短时畸变、归零 |
| 断连与重新接入 | 传感器脱落、换探头 | 数值轨道出现空字段或常量段 |
这四类都不是「可以用一个通用滤波解决」的。电刀干扰的频带与 QRS 主能量重叠,窄带滤波会把真实信号一起削掉;袖带充放气的阶跃恰恰是有效信息,滤掉它等于抹掉血压测量的时间锚点。对这份数据做质控,本质上是在做临床操作规程的逆向推断:看到连续的阶跃,就该想到这一例在按时测无创血压。
4.3 为什么不做 WFDB 转换会伤人
官方明确说明 v1.0.0 不含 WFDB 转换,生理记录以 .vital 原样提供。这个决定的代价,是所有面向 PhysioNet 生态的自动化脚本都会在这份数据上断掉。
最常见的失败是这样的:研究者写好了基于 wfdb 包的批处理流水线,假设目录下是一堆 .hea 与 .dat,结果 wfdb.rdrecord 在第一个文件上就抛异常,而异常信息指向文件头解析失败,看起来像是下载损坏。实际上没有任何损坏,只是格式不同。
正确的处理是走 VitalDB 的 Python 库,并把结果显式落成 Parquet 或 NumPy 数组,再交给下游。这一步多做一次,换来的是下游完全不用知道 .vital 的存在。
#-- 通过 PhysioNet 官方命令行工具下载整包(约 633.7 MB)
physionet download veterinary-vitals-anesthesia --version 1.0.0
#-- 或用 wget 递归抓取到本地目录
wget -r -N -c -np https://physionet.org/files/veterinary-vitals-anesthesia/1.0.0/
#-- 确认拿到了什么:五张 CSV 与一个 vital/ 目录
ls 1.0.0/ | head
ls 1.0.0/vital/ | head
4.4 把 .vital 一次性落盘
批量转换是使用这份数据的第一道工程门槛。下面的脚本把每个文件、每条轨道导出成独立数组,并把 track_inventory.csv 里的状态标记一并带下来,方便后续筛掉不可用轨道。
#-- 批量导出:每个文件一条轨道一个 .npy,附状态清单(需 pip install vitaldb pandas)
import os
import ast
import numpy as np
import pandas as pd
import vitaldb
inv = pd.read_csv("track_inventory.csv")
out = "arrays"; os.makedirs(out, exist_ok=True)
usable = inv[inv["status"].astype(str).str.lower().eq("present")]
for (fname, trk_name), grp in usable.groupby(["file_name", "track_name"]):
path = os.path.join("vital", fname if fname.endswith(".vital") else fname + ".vital")
vf = vitaldb.VitalFile(path)
if trk_name not in vf.get_track_names():
continue
dt = float(grp["sampling_rate"].iloc[0])
arr = vf.to_numpy([trk_name], 1.0 / dt)
np.save(os.path.join(out, f"{fname}__{trk_name}.npy"), arr)
print("done:", len(os.listdir(out)))
这段代码只做一件事:把「轨道清单」与「二进制内容」对齐。它不判断质量——质量判断留给下一步,因为「可用」在原始数据里只意味着「有观测值」,不意味着「没有伪迹」。
4.5 覆盖率决定了能做什么任务
把覆盖率排成一张表,任务可行性就一目了然。
| 想做的问题 | 需要哪些轨道 | 可用病例上限 |
|---|---|---|
| 犬心电图节律分析 | ECG_II 500 Hz | 226 |
| 血氧下降与心率耦合 | SpO2、HR | 226 |
| 有创血压趋势与低血压推导 | ART 波形或数值 | 192 或 121 |
| 麻醉深度与吸入药浓度关系 | 麻醉机参数 | 52 |
| 通气血氧耦合 | 呼末 CO2、SpO2、呼吸率 | 52 |
| 无创 vs 有创血压方法学比较 | 两者兼有 | 远少于 55 |
最后一行的「远少于 55」是一个必须自己算的数:无创血压覆盖 55 例,有创数值覆盖 121 例,两者的交集不会出现在任何一张汇总表里,只能逐个文件求交。任何声称「用本数据做无创血压一致性评价」的研究,第一步都该先把这个交集的规模报出来。
§5 取数与标注层:缺的标签怎么自己补
5.1 官方不提供的三样东西
| 缺失项 | 台账位置 | 影响 |
|---|---|---|
| 麻醉事件(诱导/插管/拔管) | 无 | 无法做阶段切分,只能靠信号形态推断 |
| 低血压等不良事件 | 无 | 无法做预测任务的真值 |
| 临床结局 | 无 | 无法做转归分析 |
| 动物级标识 | 无 | 无法去重、无法做个体内时间外推 |
官方对此的措辞很直接:要做「暴露或干预效应」分析,需要另外获取治疗时序与混杂信息,而「本发布不包含这些内容,也不应假定其存在」。这句话应当被当作使用边界,而不是可以绕过去的建议。
5.2 事件时间戳可以从信号里猜,但要写清猜法
既然没有标注,想做事阶段分析的研究者只能自建。可用的线索有四条,可靠性依次下降:
| 线索 | 可推断什么 | 可靠性 |
|---|---|---|
| 麻醉机参数出现时间 | 插管与机械通气的开始 | 较高,但只有 52 例能提供 |
| 呼末 CO2 从零到平台 | 有效通气开始 | 较高,同受 52 例限制 |
| 吸入药浓度从零上升 | 诱导给药时刻 | 中等,吸入诱导与静脉诱导不同 |
| 无创血压阶跃序列 | 测压节奏,而非事件本身 | 低,只说明监测行为 |
用第二条信号推插管时刻是可行的,但要接受两个偏差:一是麻醉机接入的时刻可能晚于实际插管(设备准备好才接),二是只有约四分之一的病例具备这个通道。把基于 52 例推导出的事件规则套到全部 226 例,是典型的样本外推。
5.3 一个可复用的最小实现
下面这段给出「用呼末二氧化碳平台推通气开始」的最小写法,只在有麻醉机通道的病例上运行,并把结果落成一张事件表,方便与自建标注合并。
#-- 从 ETCO2 数值轨道推通气开始时刻(仅适用于含麻醉机数据的病例)
import numpy as np
import pandas as pd
def ventilation_onset(etco2, ts, thresh=10.0, hold_sec=60):
"""etco2: 1 Hz 数值序列;ts: 对应秒偏移;返回首次持续超阈值的秒数"""
over = etco2 > thresh
if not over.any():
return None
idx = np.flatnonzero(over)
for i in idx:
end = i + hold_sec
if end <= len(over) and over[i:end].mean() > 0.9:
return float(ts[i])
return None
#-- ETCO2 轨道缺失时返回 None,不要用 0 填充冒充
onset = {f: ventilation_onset(a[:, 0], np.arange(len(a)))
for f, a in etco2_by_file.items()}
pd.Series(onset, name="vent_onset_sec").to_csv("derived_events.csv")
两个细节决定这段代码会不会误导人:一是阈值 10 毫米汞柱是按犬猫呼末二氧化碳的常见平台定的,不是人类常用值;二是找不到持续平台时返回 None 而不是 0,因为「没检测到」与「第一秒就开始」是完全相反的结论。
5.4 标注的经济学
自建标注的成本主要不在写代码,而在可复核性。一份没有第三方复核的事件表,在论文里只能作为「探索性时间锚点」,不能作为真值。
人类侧的对照很能说明问题:VitalDB 系的心律失常标注集之所以被当作基准,是因为有五位麻醉科医师逐搏复核,复核过程本身写进了方法学。兽医侧要做同等强度的标注,需要兽医麻醉专科医师参与,而这恰恰是公开数据里最稀缺的资源。因此这份数据的合理定位是标注的原料,而不是标注的成品。
§6 与库内既有的关系
6.1 关系图谱
库里人类术中方向已经相当密:主库、心律失常索引、伤害性刺激多模态集、丙泊酚自主神经动态、脑电功率谱、外科重症波形库、儿童神经重症。跨物种方向只有犬猪心功能实验库与犬胶质瘤影像组学集两个点。这份兽医麻醉库补上的是「兽医术中连续多参数监护」这一格,之前是空的。
6.2 分工说明
| 库内已有数据集 | 与它的分工 | 边界提醒 |
|---|---|---|
| vitaldb(rid 192) | 同一工具链、同一文件格式的母体;这份兽医库是它在兽医侧的对应物 | 母体有分项索引与更多轨道,但没有犬猫;不可假设轨道名与覆盖率对等 |
| vitaldb-arrhythmia(rid 1577) | 提供「有逐搏真值」的对照样本 | 这份数据没有节律标注,不能直接借它的标签做迁移 |
| cardiac-accel-canine-porcine(rid 1466) | 同样是犬与猪,但走的是受控实验路线 | 它是心外膜加速度与左室压,秒级片段;这份数据是临床长时监护,两者不能拼成同一张表 |
| multimodal-surgery-anesthesia(rid 1313) | 提供人类侧的伤害性刺激标注范式 | 其标注是代理指标,这份兽医库连代理指标都没有 |
| icdc-glioma(rid 1734) | 提供跨物种的另一种切法:影像与组学 | 它证明跨物种价值在「自然发病模型」,与这份数据的「信号对照」是两条路 |
| propofol-anesthesia-dynamics(rid 1316) | 提供给药与自主神经响应的细粒度人类样本 | 它是小样本深描,这份兽医库是大样本浅标 |
| eeg-power-anesthesia(rid 1317) | 提供麻醉深度的脑电标签 | 这份数据没有脑电通道 |
最需要说清的是与犬猪心功能库的分工。两者物种重叠,但研究问题正交:那一份回答「心脏机械运动在药物作用下的形态」,这一份回答「一台手术全程监护仪表盘上留下了什么」。把小片段的实验数据与长时程的临床数据混为「兽医生理信号库」,会同时毁掉两边的可比性。
6.3 检索路径建议
按需求走三条线:要人类术中波形与事件,走主库与心律失常索引;要兽医术中连续监测,只有这一份;要兽医的影像与组学,走胶质瘤集。三条线之间不存在「合并成一个超大数据集」的合理路径,因为没有共同的标识符、没有共同的物种、也没有共同的标注体系。
6.4 一句话的分工原则
把六条互链压成一句可操作的规则:要看人类术中波形与事件,去主库与心律失常索引;要看兽医术中连续监护,只有这一份;要看兽医的器官层面影像与组学,去胶质瘤集;要看受控实验下的心脏机械信号,去犬猪心功能库。
四条线之间不应该被强行合并。合并的第一步通常是找一个共同标识符,而这四条线连「同一个体」这一层都对不上——人、犬、猫、猪各说各话。强行合并的产物往往是一个字段全都稀疏、维度全都对齐不了的空壳,不如维持四条独立的线,在分析层面做对照。
§7 质量评估与局限性
7.0 阅读本节前需要知道的一件事
评估这份数据时,最常发生的框架错位是拿「AI-Ready」的标准去要求一份「原始录音」。它不是为训练准备的:没有划分、没有标签、没有基线结果、没有统一的张量形状。按监督学习基准的尺子去量,它会处处不合格;按临床数据源原声带的尺子去量,它的保真度反而是优点——因为任何预处理都会不可逆地丢掉临床规程留下的痕迹。
7.1 DAIMS 视角下的判定
DAIMS(Data and AI Maturity 评估框架)用若干维度判断一个数据集在 AI 流程中的成熟度。逐项落到这份数据上:
| 维度 | 判定 | 依据 |
|---|---|---|
| 可发现性 | 合格 | 有 DOI、有 PhysioNet 固定入口、有引用格式 |
| 可访问性 | 合格 | 无需申请,ZIP 直下;无 WFDB 转换是格式代价而非准入代价 |
| 文档完整性 | 良好 | 五张 CSV 覆盖变量字典、轨道清单与手术词表 |
| 元数据粒度 | 中等 | 病例级与文件级元数据齐,轨道级靠 inventory 间接查 |
| 标识与关联 | 弱 | 无动物级标识,病例不可串联;无跨库外键 |
| 标签与监督信号 | 缺 | 零事件、零结局,需完全自建 |
| 机器可读性 | 中等 | .vital 需专用库解析,通用工具链不通 |
| 可复现性 | 良好 | 原样发布、未做处理,反而减少了「上游悄悄改过」的风险 |
判定的结论是:它是一份高保真的数据源,不是一份可即刻投入训练的资产。把它当作 AI-Ready,需要经过一层不便宜的转换工作——这层工作恰好也是判断使用者是否真的读懂它的分水岭。
7.2 逐条局限
| 局限 | 具体表现 | 应对 |
|---|---|---|
| 单中心 | 全部来自首尔一家专科动物医院 | 结论外推到社区诊所前必须加限定 |
| 便利抽样 | 按可得性纳入,非常规全量 | 不应用来估计兽医人群的麻醉并发症率 |
| 无动物标识 | 一动物多病例无法识别 | 划分数据集时按病例随机会造成泄漏 |
| 多文件病例 | 部分病例拆段 | 时长统计与事件时间轴需先合并 |
| 时间戳平移 | 统一到 2000-01-01 合成时间 | 只能做相对时序,不能做季节或年份分析 |
| 轨道异质 | 逐文件配置不同 | 每个任务都要先算可用子集 |
| 设备偏移 | 三类时钟未验证同步 | 秒级因果分析需先估偏移 |
| 无标注 | 事件与结局皆无 | 只能做描述与无监督,不能做监督预测 |
其中「按病例随机划分是否会泄漏」值得单独说一句:官方明确写了少数动物贡献了多个病例,且未提供动物级标识,因此在数据划分时无法避免同一动物跨训练集与测试集。这不是研究者的疏忽,是数据本身的结构限制,正确做法是在论文里声明该限制,而不是假装已经去重。
7.3 与人类术中数据的六点差异
这是这份兽医数据不可替代的理由,也是跨物种迁移被过度宣传的地方。差异远不止「参数范围略有不同」这么轻——把六点逐一摊开,才能看清哪一部分能借用、哪一部分必须重做。
| 差异维度 | 人类术中数据 | 这份兽医数据 |
|---|---|---|
| 生理基线 | 心率、血压阈值有成熟共识 | 犬猫各有区间,人用阈值不适用 |
| 体型跨度 | 成年人相对集中 | 4.5 千克中位数,袖带与置管方式随之变 |
| 麻醉方案 | 静脉为主、方案标准化程度高 | 吸入为主(七氟烷占绝大多数) |
| 监护配置 | 三件套几乎标配 | 有创波形与无创数值覆盖率差三倍 |
| 数据治理 | 有事件登记、有结局字段 | 两者皆无 |
| 时钟体系 | Vital Recorder 同步有实践共识 | 三类设备时钟未验证 |
第一点决定的是标签能否自动生成。人的低血压阈值被写进了无数监护系统的报警逻辑,因此很多人类数据集可以靠阈值回推事件;犬猫没有同等地位的共识阈值,回推得到的「事件」在不同文献里口径不一,拿来当监督信号等于把文献分歧固化成标签。
第二点决定的是测量误差的量级。袖带宽度与肢体周径的比例直接决定示波法读数偏差,4.5 千克的猫与 40 千克的犬用的根本不是同一种 cuff,同一套校准曲线不可能同时成立。这份数据里无创血压只覆盖 55 例,很大程度上就是小体型动物上袖带不可靠导致的临床选择。
第三点决定的是药代与药效的时间尺度。吸入麻醉的深度调整以呼吸周期为单位,静脉麻醉以输注泵的设定为单位,两者在信号上留下的痕迹(一个是阶跃式的气体浓度变化,一个是缓慢的输注曲线)完全不同,用人类静脉麻醉的时序先验去解读这份数据,会系统性地错判调整时刻。
第四点决定的是任务可行性。覆盖率差三倍意味着「心电-血压耦合」这类任务在人类数据上是全量可用,在这里只能在子集上做,且子集本身是有偏的(能上有创监护的多是高 ASA 手术)。
第五点决定的是评估范式。人类数据可以做成完整的「信号到结局」链路评估,这份数据只能做链路的前半段;任何声称端到端效果的论文,都需要说明后半段用的是外部标签还是自建标签。
第六点决定的是因果推断的可行性。三类设备时钟未验证同步,意味着「血压下降 → 心率上升」的秒级因果链条无法从数据本身确立,只能作为假设提出。
一句总结:工具链可迁移,阈值不可迁移,标注体系完全不可迁移。任何「用犬猫数据预训练、再微调到人类」的方案,能迁移的只有信号的形态统计(例如 QRS 的时频结构),不能迁移的是所有与临床判断相关的部分。
7.4 跨物种迁移的三个真实陷阱
模板化的说法是「先在大规模动物数据上预训练,再小样本微调到人类」。这个叙事有三处会在实操中塌陷。
第一处是伪标签泄漏。如果预训练阶段用了基于人类阈值生成的伪标签(比如把犬的血压按人的 65 毫米汞柱切成正常/异常),那么模型学到的其实是人的阈值函数,而不是犬的生理;微调到人类时表现好,反映的是这个泄漏,不是跨物种迁移。
第二处是设备指纹。这份数据全部来自 Philips Infinity 与 MedibusX 的组合,人类 VitalDB 也是同一体系——这意味着在两者之间做迁移,测到的「迁移成功」里有多少来自生理共性、有多少来自设备共性,无法分离。要做干净的实验,必须引入第三方设备的数据做对照,而目前兽医侧没有。
第三处是任务定义漂移。同一个任务名在两侧的标签定义不同:「低血压检出」在人类指平均动脉压低于某个共识值,在犬猫指平均动脉压低于麻醉医师当时的判断。名字相同、真值来源不同,跨数据集比较就失去意义。
7.5 外部验证矩阵
| 验证方式 | 是否可行 | 说明 |
|---|---|---|
| 与人类 VitalDB 做通道级对照 | 可行 | 同一工具链、同格式,但需按物种分开归一 |
| 与犬猪心功能库做心脏信号对照 | 有限可行 | 片段时长短,仅能做形态学小样本比对 |
| 与兽医电子病历做转归关联 | 不可行 | 无共同标识符 |
| 用人类模型直接推理 | 不建议 | 输出无法映射到兽医临床阈值 |
| 用兽医模型推理人类数据 | 不建议 | 反向同样不成立 |
7.6 值得留意的两个正向特性
局限说够了,也要指出它做对的地方,否则评估会偏成一边。
第一个正向特性是原样发布的勇气。绝大多数公开生理数据集都会在发布前做一轮清洗,理由通常是「提升可用性」。清洗的代价是不可逆:一旦滤波或插补写进了发布版本,后来者就无法再研究「原始信号长什么样」。这份数据选择保留原始形态,等于把清洗的权力交还给使用者——这是长期价值,短期会显得难用。
第二个正向特性是状态语义的诚实。轨道清单把「不存在」「为空」与「存在但不可用」分开记录,这个区分在多数数据集里是没有的。正因为有这个字段,做可用子集统计时才有据可依,不必靠猜。
§8 版本与生态
8.1 版本节奏
v1.0.0 是首个公开版本,发布说明把它与「早期未公开的提交」区分开来:相比那一版,正式版扩大了队列、补充了临床元数据、写清了采集方法、加了文件与轨道清单与使用文档。这个修订方向说明作者关心的不是「再收几百例」,而是「让已有记录能被正确使用」。
对一个没有标注的数据集而言,文档就是它的主要价值增量。轨道清单与状态三分类这两个补充,比多几十例病例更能决定它是否可用。
8.2 生态位
它站在三个生态的交汇处:
| 生态 | 它扮演的角色 |
|---|---|
| PhysioNet 波形库 | 首批兽医术中监护数据,打破「全人类」的物种单一性 |
| VitalDB 工具链 | 证明 .vital 容器可以跨物种复用,且不需要改动格式 |
| 兽医临床信息学 | 提供目前规模最大的公开术中多参数时序集 |
这个位置有稀缺性,也有脆弱性。稀缺来自「第一次」;脆弱来自「唯一」——如果后续没有第二个独立中心的同类发布,所有基于它的跨中心结论都无从验证。
8.3 与 VitalDB 的技术血缘
文件格式、采集硬件、同步软件全部沿用 VitalDB 体系:SNUADC 是开源的八通道采集卡,Vital Recorder 是同步写入工具,Python 库负责读取。这套工具链原本为人类手术室设计,被直接搬到兽医手术室,没有做格式层改造。
血缘带来的好处是零学习成本(会读 VitalDB 就会读它);带来的风险是研究者的默会假设也会一起搬过来——包括「同步足够好」「轨道名可以硬编码」「缺失等于未监测」这些在人类场景里被反复验证过、在兽医场景里尚未被验证的前提。
8.4 为何能持续
一份没有标注、单中心、无经费支持的临床数据,靠什么活下去?答案在发布说明里:它来自常规诊疗的副产品。
记录行为本来就是临床流程的一部分(麻醉必须监护、监护仪本来就在记录),作者做的是二次利用与脱敏,不是为研究额外采集。这意味着边际成本极低:新增病例只需要继续录、继续脱敏,不需要重新招募、不需要额外伦理审查(机构已判定为常规记录的二次使用)。低边际成本是它能持续扩版的真正原因,也是它没有标注的原因——加标注就需要一笔研究经费,而加记录不需要。
这个逻辑有一个必须承认的软肋:作者明确写了本项目没有获得任何专项资助。没有资助意味着扩版与维护依赖个人意愿,版本节奏不可预期。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一步 | 第二步 | 不要做 |
|---|---|---|---|
| 数据工程师 | 下载 ZIP,跑通 read_vital_example.py | 批量落盘成 Parquet,附轨道状态表 | 直接塞进 WFDB 流水线 |
| 临床研究者 | 读 clinical_metadata 与 track_inventory | 先定义可用子集,再谈分布 | 用人用阈值直接推不良事件 |
| 模型开发者 | 选定单任务(如节律形态分类) | 用动物级不可知的前提下声明划分限制 | 把它当低血压预测基准 |
9.2 一个先做、再谈方法的检查
在跑任何模型之前,有一件事必须做:报告动物级去重后的可行规模。下面的脚本用体重与手术类别的组合做粗略的重复线索筛查,只给出「可疑候选」,不给出确定结论——因为没有动物标识,任何去重都是推断。
#-- 用体重-年龄-ASA-手术类别四元组找出可能同一动物的重复病例
import pandas as pd
m = pd.read_csv("clinical_metadata.csv")
key = ["weight", "age_months", "asa", "procedure_category"]
#-- 只保留四元组完全一致的组,并列出组内 case_id
dup = (m.groupby(key)["case_id"]
.agg(list)
.reset_index()
.query("case_id.str.len() > 1"))
print(f"可疑重复组 {len(dup)} 组,涉及病例 {dup['case_id'].str.len().sum()} 例")
print(dup.head())
这段的产出不是「真实动物数」,而是一个下界估计与一张需要人工核对的清单:体重精确到小数点后一位恰好相同、年龄月数相同、ASA 与手术类别也相同,三者同时成立的概率在真实队列里不高,但也不是零。把这张清单写进方法学,比声称「按动物划分」更诚实。
9.3 最小可用流程
#-- 最小流程:筛出「ECG + 有创血压波形」双全的病例,并报告可用规模
import pandas as pd
inv = pd.read_csv("track_inventory.csv")
ok = inv[inv["status"].astype(str).str.lower().eq("present")]
want = {"ECG_II", "ART"}
per_file = ok.groupby("file_name")["track_name"].apply(set)
both = per_file[per_file.map(lambda s: want.issubset(s))]
man = pd.read_csv("record_manifest.csv")
cases = man[man["file_name"].isin(both.index)]["case_id"].nunique()
print(f"双通道文件 {len(both)} 个,覆盖病例 {cases} 例(占 226 例)")
这段代码不产生任何模型结论,只回答一个工程问题:想做心电-血压耦合分析,手上有多少病例真正可行。先跑它,再谈方法。
9.4 在 AI 流程里的位置
它适合放在流程的最上游:作为原始信号源,经过转换层(.vital 到数组)与质控层(伪迹标记、可用区间切分),进入特征提取或无监督预训练。不适合放在下游的评估位,因为没有标签可供评估。
跨物种迁移实验里,它更适合当「目标域」而不是「源域」:先用人类数据训练,再用这份数据测退化幅度,能直接暴露模型对物种与设备的敏感性。反过来用它预训练、再迁移到人类,收益来源不明——可能来自信号形态,也可能只是来自「多了一批数据」,而后者在人类数据足够时是负收益。
§10 AI 使用声明
| 项目 | 内容 |
|---|---|
| 数据性质 | 常规临床麻醉监护的回顾性二次利用,非研究设计采集 |
| 推荐用途 | 描述性分析、信号质量研究、跨物种外部验证、无监督预训练 |
| 不建议用途 | 直接临床诊断、低血压或不良事件预测、跨物种阈值平移 |
| 伦理 | 机构判定为不涉及动物伦理委员会正式审查;已移除全部直接标识符 |
| 引用 | Cha, J., & Lee, H. (2026). PhysioNet. doi:10.13026/wvfp-p831 |
| 许可 | PhysioNet 开放获取;再分发前核实具体授权条款 |
| 版本 | v1.0.0 |
| 状态 | 公开、免申请、单中心、无事件标注 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 「这是 VitalDB 的兽医版,字段一一对应」 | 轨道名沿用,但覆盖率差别极大,麻醉机数据只覆盖少数病例 | track_inventory.csv 逐文件统计 |
| 「226 例就是 226 只动物」 | 病例数不等于动物数,同一动物可贡献多个病例且无动物 ID | 官方局限说明 |
| 「369 小时可以直接当训练时长」 | 记录跨度不等于可用时长,空字段与伪迹未扣除 | manifest 的 duration 字段定义 |
| 「有 ECG 就能做心律失常标注」 | 无节律标注,且缺少放大导联,部分节律不可判 | 官方通道清单 |
| 「用了人的低血压阈值就能生成标签」 | 犬猫血压正常区间与人不同,阈值法得到的是伪事件 | 物种生理基线差异 |
| 「.vital 与 WFDB 可以互转无损」 | 官方未提供转换,需专用库读取,转换需自建 | 发布说明明确不含 WFDB |
| 「缺失麻醉机数据说明没用麻醉机」 | 缺失只说明未接入采集,与是否使用无关 | track_inventory 的状态语义 |
| 「可以和人类 VitalDB 混在一起训练」 | 可混,但不做物种归一混训出的模型可能只学会区分物种 | 队列构成差异 |
| 「单中心数据也能量化兽医并发症率」 | 便利样本不能估计人群率 | 抽样方式 |
| 「猫的样本足够做猫的独立结论」 | 分层后每格个位数,置信区间极宽 | 病例构成 |
FAQ
Q1:它和 VitalDB 是什么关系?
同一团队体系、同一文件格式、同一采集硬件,采集对象换成犬与猫。工具链完全通用,但数据内容、覆盖率与标注情况都不同,不能视为同一数据库的物种扩展。
Q2:为什么没有 WFDB?
作者选择原样发布,不做任何处理,包括格式转换。代价是通用 WFDB 工具不能直读,需要走 VitalDB 的 Python 库。
Q3:能不能用来训练低血压预警模型?
不能直接训练。没有血压事件标签,「低血压」只能靠阈值推导,而阈值在犬猫身上没有公认标准,推导出的标签不构成真值。
Q4:数据可以商用吗?
PhysioNet 页面标为开放获取,但未另标 CC 或 ODC 许可。商用或再分发前应向 PhysioNet 与数据提供方确认具体条款。
Q5:犬和猫应该分开建模还是合并?
建议分开评估、合并谨慎。合并时至少要加入物种与体重作为协变量,并单独报告猫子群的性能。
Q6:时间戳全部是 2000 年,还能做什么?
所有相对时序都保留,可以做序列建模与事件先后分析;不能做涉及绝对日期的工作,例如季节性、年份趋势或与外部登记的按日对齐。
Q7:一例数据可能出现在多个文件里怎么办?
先按 case_id 合并,再按记录跨度拼接,注意接缝处可能存在缺口,不要把缺口当连续。
Q8:可以做多模态吗?
可以,但「多模态」在这里只指同一场景下的不同传感器(波形、数值、麻醉机),不包含影像、文本或组学。
Q9:为什么猫的数量这么少还要单独提?
因为猫在体重、麻醉反应与血压测量误差上与犬差异明显,把它当作同质样本会稀释这些问题,而不是解决它们。
Q10:VitalDB 的学习资料能直接套用吗?
读取层面可以,研究设计层面不行。VitalDB 的教程默认的同步质量、轨道覆盖与标注可得性,在这份数据上都不成立。
术语表
| 术语 | 含义 |
|---|---|
| .vital | VitalDB 自定义二进制容器,多轨道按各自采样率共存,附内部索引 |
| SNUADC | VitalDB 体系的开源八通道采集卡,用于高分辨率波形 |
| MedibusX | 麻醉机数据接口,提供通气、吸入药与气体参数 |
| 呼末二氧化碳 | 呼气末二氧化碳浓度,反映通气有效性与代谢 |
| MAC | 最低肺泡有效浓度,衡量吸入麻醉药强度的相对单位 |
| ASA 分级 | 术前身体状况分级,1 为健康,5 为濒死 |
| PLETH | 脉搏波体积描记信号,常用于推导血氧与灌注 |
| ART | 有创动脉压波形,经动脉置管获得 |
| 袖带示波法 | 无创血压测量方法,通过袖带充放气估计血压 |
| 食管温 | 经食管探头测得的核心体温 |
| 轨道 | 一条独立的时间序列通道,对应一个信号或参数 |
| 采样率 | 每秒采集的样本数;本数据波形 500 Hz、数值约 1 Hz |
| 重采样间隔 | 提取时指定的输出间隔,不等于原生采样率 |
| 控制性降压 | 通过药物有意降低血压,与不良事件低血压不同 |
| 诱导 | 从清醒到可插管的麻醉起始阶段 |
| 插管 | 置入气管导管以维持通气 |
| 拔管 | 撤除气管导管,麻醉转复苏 |
| 伪迹 | 非生理来源的信号畸变,如电刀干扰与断连 |
| 便利样本 | 按可得性而非随机抽样纳入的样本 |
| 外部验证 | 用与训练分布不同的数据检验模型表现 |
| 领域偏移 | 训练与目标数据在分布或设备上的系统性差异 |
| 去标识化 | 移除直接标识符以降低再识别风险 |
| 数据划分泄漏 | 相关样本同时进入训练与测试,虚高评估结果 |
| 代理指标 | 与目标概念相关但不等于其真值的替代量 |
| 二次利用 | 将常规诊疗中产生的数据用于研究 |
附录 A 通道与设备
| 轨道 | 类型 | 单位 | 采样率 | 来源设备 | 覆盖 |
|---|---|---|---|---|---|
| ECG_II | 波形 | mV | 500 Hz | Infinity M540 + SNUADC | 226 |
| ART | 波形 | mmHg | 500 Hz | 动脉置管 + SNUADC | 192 |
| PLETH | 波形 | 归一化 | 500 Hz | Infinity M540 | 部分 |
| 呼气末 CO2 波形 | 波形 | mmHg | 视设备 | MedibusX | 52 |
| 气道压波形 | 波形 | cmH2O | 视设备 | MedibusX | 52 |
| HR | 数值 | 次/分 | 约 1 Hz | Infinity M540 | 226 |
| SpO2 | 数值 | % | 约 1 Hz | Infinity M540 | 226 |
| 脉率 | 数值 | 次/分 | 约 1 Hz | Infinity M540 | 226 |
| 食管温 | 数值 | ℃ | 约 1 Hz | Infinity M540 | 225 |
| ART 数值 | 数值 | mmHg | 约 1 Hz | Infinity M540 | 121 |
| 无创血压 | 数值 | mmHg | 约 1 Hz | Infinity M540 | 55 |
| 吸入药浓度 | 数值 | % | 约 1 Hz | MedibusX | 52 |
| MAC | 数值 | 无量纲 | 约 1 Hz | MedibusX | 52 |
| 潮气量 | 数值 | mL | 约 1 Hz | MedibusX | 52 |
| 呼吸率 | 数值 | 次/分 | 约 1 Hz | MedibusX | 52 |
附录 B 文件与时间轴
| 文件或目录 | 内容 | 注意 |
|---|---|---|
| vital/ | 全部 .vital 原始记录 | 未转 WFDB,需专用库 |
| clinical_metadata.csv | 病例级临床变量 | case_id 随机分配 |
| record_manifest.csv | 文件级清单 | 含分段序号与时长 |
| track_inventory.csv | 文件 × 轨道清单 | 状态三分类是关键字段 |
| data_dictionary.csv | 变量字典 | 缺失填法以此为准 |
| breed_summary.csv | 品种统计 | 用于体重与品种关联 |
| procedure_glossary.csv | 手术词表 | 中英对照,便于归类 |
| read_vital_example.py | 读取示例 | 演示轨道名与间隔参数 |
时间轴的读法:原始绝对时间为保护隐私已全部移除,统一平移到 2000 年 1 月 1 日的合成参考时间。文件内保留的是相对偏移,可用于序列建模;跨文件拼接时接缝处可能有缺口,需按 manifest 的分段序号确认先后。
附录 C 术语翻译对照
| 中文 | 英文 | 备注 |
|---|---|---|
| 兽医麻醉 | veterinary anesthesia | 非 veterinary anaesthesia 拼写,PhysioNet 用美式 |
| 生命体征 | vital signs | 特指连续监护参数,不含实验室指标 |
| 呼末二氧化碳 | end-tidal CO2 / ETCO2 | 数值与波形在不同轨道 |
| 最低肺泡浓度 | minimum alveolar concentration | 与临床监测的 MAC 值同源 |
| 有创动脉压 | invasive arterial pressure | 波形与数值分开存 |
| 袖带示波法 | oscillometric method | 无创血压的常用方法 |
| 食管温度 | esophageal temperature | 近似核心体温 |
| 身体状况分级 | ASA physical status | 1–5 级 |
| 分段记录 | split recording | 文件名后缀 -1、-2 |
| 轨道清单 | track inventory | 逐文件逐轨道 |
| 不可用 | present-but-unusable | 有数据但不能用 |
| 缺失 | absent / empty | 两种缺失语义不同 |
附录 D 常见误读 FAQ 补充
Q:为什么有些病例的血压同时有波形与数值,有些只有波形?
因为波形来自独立采集通道,数值来自监护仪输出,两条路是否同时打开取决于现场配置。只查数值轨会丢掉大量有创血压病例。
Q:麻醉机数据缺失还能推断通气吗?
只有呼末二氧化碳能直接说明通气有效性,而它来自麻醉机通道。缺失时只能靠血氧与呼吸率的间接变化推测,可靠性明显下降。
Q:能用来做心电图算法吗?
形态学层面的算法可以,但要注意犬猫的 QRS 宽度、心率范围与人类不同,且本数据只有单一导联,复杂节律判读受限。
Q:与公开的兽医电子病历数据能用同一套评估吗?
不能。电子病历给的是诊断与转归,本数据给的是术中连续信号,两者的「正确答案」定义完全不同。
Q:作者是麻醉科医师吗?
团队中包含从事麻醉学与疼痛管理的兽医。这一点影响数据采集质量,但不影响它没有标注这一事实。
附录 E 许可与引用
官方引用格式:
Cha, J., & Lee, H. (2026). A Veterinary Vital Sign Time-Series Database
Collected During General Anesthesia (version 1.0.0). PhysioNet.
RRID:SCR_007345. https://doi.org/10.13026/wvfp-p831
许可与使用要点:页面标为公开可访问、无需申请;正文未另写 CC 或 ODC 许可名称,涉及再分发、商用或二次发布衍生数据时应向 PhysioNet 与数据提供方确认。数据已移除全部直接标识符;机构认定该用途为常规临床记录的二次利用,未做额外动物干预。
引用时应同时交代三件事:版本号(v1.0.0)、是否经自行质控与筛选(原始包无质控)、以及是否使用了自己推导的事件时间。缺了前一项,后来者无法复现;缺了后两项,结论会被误读为数据集自身提供了这些。
编辑说明
核验时间 2026-10-29。核验方式:读取 PhysioNet 数据集页、v1.0.0 下载页与发布说明,交叉核对 DOI、作者、规模、通道覆盖、许可表述与文件清单;未下载 633.7 MB 全量包做逐文件复算。规模数字均按官方口径转述,其中物种分布、体重与年龄分位数、通道覆盖计数取自数据集页正文,未做独立审计。未覆盖内容:逐轨道观测数核对、伪迹比例的定量估计、动物级去重的可能规模。站内互链 rid 均已查库确认存在。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- charisdb — 共享标签:生理信号 / 心电信号 / 时序数据 / 重症监护
- pics — 共享标签:生理信号 / 心电信号 / 时序数据 / 重症监护
- fantasia — 共享标签:生理信号 / 心电信号 / 时序数据 / 队列研究
- mimic-iv-waveform-legacy — 共享标签:生理信号 / 时序数据 / 重症监护
- mmgdb — 共享标签:生理信号 / 时序数据 / 队列研究
- cinc-2015 — 共享标签:生理信号 / 心电信号 / 时序数据 / 重症监护
- mover — 共享标签:生理信号 / 心电信号 / 时序数据 / 重症监护
- mimic-iv-ext-ecg-glucose — 共享标签:生理信号 / 心电信号 / 时序数据 / 重症监护
- sicdb — 共享标签:生理信号 / 时序数据 / 重症监护
- vtac — 共享标签:生理信号 / 心电信号 / 重症监护
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

