ECG-Arrhythmia:4.5 万份 12 导联心电公开库

四万五千一百五十二名患者、每份十秒、十二导联、五百赫兹——这份数据的罕见之处不是规模,而是它把「诊断标签从哪来」写得足够清楚:GE MUSE 系统出的自动报告,再由专家复核,最终落成五十五个 SNOMED CT 编码;也因此,它的标签错误率是可以被推理的,而不是只能被相信

来源 绍兴市人民医院(浙江大学医学院附属绍兴医院)心电科;宁波市第一医院;查普曼大学发布时间: 2026-10-19最后更新: 2026-10-20 阅读 19
ECG-Arrhythmia:4.5 万份 12 导联心电公开库

信息速览

数据集名称ECG-Arrhythmia:4.5 万份 12 导联心电公开库
数据类型心电图,十二导联,心律失常,SNOMED CT,WFDB,房颤,束支传导阻滞,诊断编码,公开数据
规模45152
接入方式绍兴市人民医院(浙江大学医学院附属绍兴医院)心电科;宁波市第一医院;查普曼大学
AI 就绪度

心电图是少数「信号很清楚、标签很模糊」的医学数据。波形本身标准化程度极高:十二个导联、走纸速度、增益,全世界都一样;但「这份心电图说明了什么」这句话,落成文字时差异巨大——同一份图,三位心内科医生可能给出三种措辞,而自动分析系统给的是第四种。

这份数据集把这件事摊开在明面上:四万五千一百五十二名患者、每人十秒、十二导联、五百赫兹,标签来自 GE MUSE 系统的自动报告,经专业人员复核后落成五十五个 SNOMED CT 编码。它没有假装标签是金标准,头文件里写的是 #Dx: 后面一串数字。

它的规模足以训练模型,许可足够宽松(CC BY 4.0,含商业使用),格式与 2021 年 PhysioNet 挑战赛一致,所以能直接接进现成的评测流水线。但它也有四个必须先处理的窟窿:十秒的长度、编码的混叠、单次记录、以及「标签是机器先说的」这件事本身。想直接拿来训模型的,先读 §4 与 §6;想弄明白为什么同一份心电图会有三个编码的,看 §2.3;只关心许可与下载的,看 §3。

§1 它是什么:四万五千份十秒心电

1.1 一句话定义与四条边界

这是一份公开的十二导联心电记录库:四万五千余名患者各一份记录,每份 10 秒、12 导联、500 赫兹采样、5000 个采样点,16 位量化、增益 1000 单位每毫伏,附年龄、性别与一串 SNOMED CT 诊断编码。

四条边界。

第一,每次就诊一份记录,不是每人多份。 文档的表述是「四万五千余名患者的十二导联心电」,编号从 JS00001 起;无法从数据判断有没有同一患者多次就诊的情况,因为没有患者标识符,只有记录号。

第二,每份 10 秒。 这是常规静息心电的标准时长,不是 Holter,也不是监护。阵发性事件、间歇性传导阻滞、与睡眠相关的变化,这十秒可能什么都没抓到。

第三,标签是「诊断编码列表」,不是单标签。 每条记录有 1 到 7 个编码,中位数 2 个以下。这意味着这是一个多标签分类问题,而不是多分类。

第四,没有心搏级标注。 不知道每个 QRS 波属于哪个心搏、每次房颤发作从第几秒开始。只有整份记录层面的诊断。

1.2 数据从哪来:两家医院与一个转换链

文档给出的链条是:查普曼大学牵头,绍兴市人民医院(浙江大学医学院附属绍兴医院)与宁波市第一医院提供数据。

采集流程是常规十二导联心电检查。原始数据从心电设备导出为 XML,再由开源工具转成 CSV,最后转成 WFDB 格式。这条链上每一次转换都可能丢东西,而文档只说了格式,没说转换过程做过什么校验。

可以确认的是:CSV 阶段发布过 10,646 名患者的子集(含原始与去噪两版),WFDB 阶段扩充到四万五千余。所以这份数据是「先小规模公开、再扩容重发」的产物,早期用过 CSV 版本的研究与后来用 WFDB 版本的研究,样本范围不同。

这一点在复现文献时很关键:2021 年前后引用这份数据的论文,可能用的是 10,646 那一版。

1.3 目录结构与命名

WFDBRecords 下是两级目录,命名是两位数补零:第一级从 01 到 46,共四十六个;第二级每个一级目录下十个,共四百五十二个。每个二级目录装两百条记录,只有最后一个装一百零四条。

记录名是 JS 加五位数字,从 JS00001 起。目录与记录号的对应关系是:记录号前两位决定第一级目录,前三位决定第二级。比如 JS00001 在 01/010/,JS32412 在 33/330/。

这套编号有一个副作用值得记住:四百五十二个二级目录,四百五十一个装满两百条,四百五十一个不多不少。 这不是数据本身分布均匀,而是发布方按容量切好的。换句话说,目录编号与记录号之间是机械映射,目录本身不携带任何临床或时间信息——不要试图从目录结构里读出「这批是哪个医院」这类结论。

按校验和清单核对,这份数据共四万五千余条记录,每条两个文件,合计九万零三百零四个文件,加三个顶层文件与四百五十二个二级目录各自的 RECORDS 清单,总行数九万零七百五十九。解压后总大小 5.1 GB,压缩包 2.3 GB。单条记录的数据文件约 120 千字节(12 导联 × 5000 点 × 2 字节 = 120,000 字节,加 MAT 头约 24 字节)。

这个体量很适合本地训练:5.1 GB 全量放进内存不够,但放进一块固态硬盘绰绰有余,加载一条记录只需毫秒级。

1.4 头文件里到底写了什么

一条记录的全部元数据都在 .hea 文件里。以 JS00001 为例,结构是四段。

第一行是记录描述:JS00001 12 500 5000——记录名、导联数、采样率、采样点数。

接着十二行,每导联一行:

JS00001.mat 16+24 1000/mV 16 0 -254 21756 0 I

从左到右:关联的数据文件、格式码(16 位、24 字节偏移)、增益与单位(1000/mV)、ADC 分辨率(16 位)、基线值(0)、第一个采样值(-254)、该导联的最小值(21756)、最大值、校验和、导联名。

再往后是注释行,每行以 # 开头:

#Age: 85
#Sex: Male
#Dx: 164889003,59118001,164934002
#Rx: Unknown
#Hx: Unknown
#Sx: Unknown

年龄、性别、诊断码、用药史、病史、症状。后三项在这份数据里绝大多数是 Unknown——这是一个需要单独说的事(§2.5)。

1.5 两个数字:500 赫兹与 5 微伏

采样率 500 赫兹是常规心电的常见档位(另一档是 250 或 1000)。500 赫兹意味着相邻采样点间隔 2 毫秒,QRS 波的上升支(正常约 20 到 40 毫秒)有 10 到 20 个采样点,足够算斜率。

文档另给了一个数:每个 A/D 位的电压是 4.88 微伏,ADC 分辨率 32 位,幅度单位是微伏,上限 32767、下限 -32768。

这三个数放在一起有一处需要辨析。4.88 微伏 × 32767 ≈ 0.16 伏,而心电信号典型幅度是 1 毫伏量级,量程覆盖绰绰有余。而「32 位分辨率」与「上限 32767」自相矛盾——32767 是 16 位有符号整数的上限。头文件里的 16 也指向 16 位。

所以合理的读法是:存储是 16 位整数,4.88 微伏是 1 个存储单位对应的物理量,文档里「32 位」的说法应视为笔误。这个细节值得单独指出,因为按 32 位去规划内存会高估一倍。

换算关系是:物理电压(微伏)= 存储值 × 4.88。这一点在 §11.4 给了代码。

1.6 与 2021 年挑战赛的关系

文档明说:这套设置是为了与 PhysioNet/Computing in Cardiology Challenge 2021 保持一致。

那条线索很重要。2021 年挑战赛的任务是「从十二导联心电识别多种心电异常」,用的是多标签、多中心、带 SNOMED CT 编码的评分体系。这份数据用了同样的编码表、同样的 WFDB 结构、同样的目录组织,因此可以直接套用挑战赛的评测脚本。

对使用者来说,这意味着两件事:好处是省了自己写评测;风险是「与挑战赛一致」不等于「与挑战赛数据独立」——如果训练集与挑战赛隐藏测试集有重叠,评估会偏乐观。

1.7 它不适合回答什么

不能做患者级纵向分析。 只有记录号,没有患者 ID,同一个人多次检查无法关联。

不能做心律发作的时序分析。 十秒太短,看不到发作的起始与终止过程。

不能把诊断编码当作三位专家的共识。 来源是自动报告加复核,不是盲法多读(§2.1)。

不能用来评估「诊断准确性」而不交代标签来源。 用带噪标签评估模型,得到的数字是「与标签的一致率」,不是「与真实诊断的一致率」。

不能外推到门诊筛查场景而不做人群校正。 两家三甲医院的心电科,来检查的人本身就有选择偏倚。

§2 数据构成:五十五个编码与它们的边界

2.1 标签是怎么来的,为什么这件事重要

文档的原话是:诊断标签来自 GE MUSE 心电信息系统(acquired from GE MUSE system),由专业人员复核。

GE MUSE 是心电管理系统的老牌产品,它的自动分析模块会给出一份结构化报告:节律、传导、梗死、肥厚、ST-T 改变等分类,用标准缩写(如 SR、AFIB、LBBB)表示。这类自动分析的准确率在常见心律上很高(窦性心律、房颤),在细微形态改变上则弱得多(ST 段轻微压低、T 波低平)。

所以这份数据的标签链条是:算法先判 → 人复核 → 落成编码。链条上有两个误差源:算法的系统性偏差,人的复核是否真的逐条看。

这一点与「三位心内科医生独立盲法判读、取多数」的金标准流程不同。差异的后果是:标签噪声不是随机的,而是与算法的判断倾向相关。模型学到的可能不是「真心电图特征→真诊断」,而是「真心电图特征→MUSE 的判断→复核者的容忍度」。

这不是说标签没用。规模足够大时,带系统偏差的标签仍能训练出有用的模型——但它决定了模型的上限,也决定了评估数字的含义。

2.2 五十五个编码的清单

数据提供了 ConditionNames_SNOMED-CT.csv,把缩写、全名与 SNOMED CT 编码对应起来。共 55 个编码,按语义可以分六组。

节律组:窦性心律(SR,426783006)、窦性心动过缓(SB,426177001)、窦性心动过速(ST,427084000)、窦性心律不齐(SA,427393009)、房颤(AFIB,164889003)、房扑(AF,164890007)、房性心动过速(AT,713422000)、室上性心动过速(SVT,426761007)、房室结折返性心动过速(AVNRT,233896004)、房室折返性心动过速(AVRT,233897008)、窦房结至心房游走节律(SAAWR,195101003)。

传导阻滞组:一度房室阻滞(1AVB,270492004)、二度房室阻滞(2AVB,195042002)、二度一型(2AVB1,54016002)、二度二型(2AVB2,28189009)、三度房室阻滞(3AVB,27885002)、房室阻滞未特指(AVB,233917008)、左束支阻滞(LBBB,164909002)、右束支阻滞(RBBB,59118001)、室内阻滞(IVB,698252002)。

早搏与逸搏组:房性早搏(APB,284470004)、室性早搏(VPB,17338001)、交界性早搏(JPT,251164006)、交界性逸搏(JEB,426995002)、室性逸搏(VEB,75532003)、房性二联律(ABI,251173003)、室性二联律(VB,11157007)、室性逸搏三联律(VET,251180001)、室性融合波(VFW,13640000)、预激(VPE,195060002)、WPW 综合征(WPW,74390002)。

形态与间期组:T 波改变(TWC,164934002)、ST-T 改变(STTC,428750005)、ST 段压低(STDD,429622005)、ST 段抬高(STE,164930006)、ST 段上斜(STTU,164931005)、T 波倒置(TWO,59931005)、P 波改变(PWC,164912004)、PR 间期延长(PRIE,164947007)、QT 间期延长(QTIE,111975006)、U 波(UW,164937009)、异常 Q 波(AQW,164917005)、fQRS 波(FQRS,164942001)、早期复极(ERV,428417006)。

肥厚与电轴组:左室肥厚(LVH,164873001)、右室肥厚(RVH,89792004)、左房肥大(RAH,446358003)、电轴左偏(ALS,39732003)、电轴右偏(ARS,47665007)、顺钟向转位(CR,251198002)、逆钟向转位(CCR,251199005)。

低电压与梗死组:全导联低电压(LVQRSAL,251146004)、胸导联低电压(LVQRSCL,251148003)、肢体导联低电压(LVQRSLL,251147008)、心肌梗死(MI,164865005)、后壁梗死(MIBW,164865005)、前壁梗死(MIFW,164865005)、下壁梗死(MILW,164865005)、侧壁梗死(MISW,164865005)。

2.3 编码表里的一处别名问题

清单里有一类缩写的全名写法不同,但编码相同,这会造成标签混叠。

LBBB(左束支阻滞)、LBBBB(左后分支阻滞)、LFBBB(左前分支阻滞)三个缩写的 SNOMED CT 编码都是 164909002。

同样,MI、MIBW、MIFW、MILW、MISW 五个缩写的编码都是 164865005。

IDC(室内传导差异)与 IVB(室内阻滞)都是 698252002。SAAWR 与 WAVN 都是 195101003。

这意味着:从编码层面看,左前分支阻滞与左束支阻滞是同一个标签。 临床上这两者的意义差别很大——左束支阻滞通常提示更广泛的心肌病变,左前分支阻滞常见于老年人且多无显著后果。但在这份数据里,它们不可区分。

这不是数据制作者的疏忽,是编码表本身的问题(SNOMED CT 的层级关系与他们的映射策略)。对使用者的实际影响:任何在这份数据上训练的左束支阻滞分类器,实际学的是「左束支阻滞或左前分支阻滞或左后分支阻滞」的合并概念。 想分开,必须回到原始报告文本,而原始报告不在数据里。

2.4 多标签的分布

每条记录有 1 到 7 个编码。抽样 145 条得到的分布是:1 个编码 71 条、2 个 46 条、3 个 18 条、4 个 4 条、5 个 3 条、6 个 2 条、7 个 1 条,均值 1.84。

这个分布有一个直接后果:单标签分类的做法在这里会丢掉一半信息。 若只取第一个编码当标签,等于把「房颤 + 右束支阻滞 + T 波改变」压成「房颤」。

常见做法是把 55 个编码当 55 个独立的二分类问题(多标签),用平均精确率或宏平均 F1 评估。这个做法的问题是:55 个标签里有一半的样本量不足百例,个别标签(如 U 波、早期复极)在整个数据里可能只有个位数——抽样 145 条里各出现 1 次。这类标签上的指标方差极大,不宜单独报告。

2.5 年龄、性别与三项 Unknown

头文件里有六个注释字段:年龄、性别、诊断、用药史、病史、症状。

前三个有内容,后三个在这份数据里普遍是 Unknown。抽样 145 条,#Rx:、#Hx:、#Sx: 全为 Unknown。

这是一个明确的缺口:没有用药信息,就无法判断 ST-T 改变是原发还是继发(洋地黄效应、电解质紊乱、抗心律失常药的复极影响都会造成 ST-T 改变)。临床上判读心电图时,用药史是关键上下文;这份数据把它抹平了。

年龄与性别的分布(抽样 145 条):年龄中位数 63 岁,均值 60.7 岁,范围 20 到 89;男性 91 例、女性 54 例。这个构成与「到三甲医院心电科做检查的人群」相符——中老年为主,男性偏多。

要注意年龄下限是 20 岁。这份数据不含儿童心电图,任何儿科应用都不能用它。

2.6 我按文件核对出的分布

以下统计来自对校验和清单的完整解析,以及对 145 份头文件的抽样核对(每 40 条抽 1 条,覆盖全部记录号范围)。

  • 记录总数四万五千余条(精确值见表格),每条一对文件;SHA256SUMS.txt 共 90,759 行 / 8,711,012 字节,构成为四万五千一百五十二个 .hea + 四万五千一百五十二个 .mat + 三个顶层文件 + 四百五十二个二级目录的 RECORDS
  • 二级子目录结构:四百五十二个二级目录,四百五十一个各装两百条,最后一个装一百零四条;按记录号前两位分第一级、前三位分第二级
  • 记录号不连续,缺号 399 个。 头尾是 JS00001 到 JS45551,这段区间若连续应有四万五千五百五十一个号,实有四万五千一百五十二个,差 399。按千号段统计,每段的缺号数在 29 到 49 之间浮动,不是均匀删的
  • 抽样 145 份头文件,导联数全部为 12、采样率全部为 500、采样点数全部为 5000——没有例外
  • 每条记录的 MAT 数据文件 120,024 字节,与 12 × 5000 × 2 字节 + 24 字节 MAT 头完全吻合
  • 抽样中出现的诊断码共 28 个,覆盖编码表的约一半

抽样里出现频次最高的六个编码是:窦性心动过缓 56 次、T 波改变 31 次、窦性心律 28 次、窦性心动过速 27 次、房颤 24 次、右束支阻滞 5 次。

这个频次顺序值得停一下。窦性心动过缓出现了 56 次,比「窦性心律」的 28 次还多一倍。 这在一般人群里不常见,但在心电科检查人群里说得通:术前评估、体检发现的窦缓,是常见的开单理由。它同时提示,这个队列的心率分布偏向慢端,任何与心率相关的特征(如心率变异性、QT 校正)都会有系统性偏移。

另有一个无法从抽样解释的编码:55827005 出现了 19 次,但不在 ConditionNames_SNOMED-CT.csv 的 55 个编码里。 按 SNOMED CT 条目,55827005 是「左心室肥大」(Left ventricular hypertrophy)。而表里 LVH 对应的是 164873001。两个编码并存,说明头文件里至少有一部分标签用的是另一套映射,或者是转换过程中的遗留。使用前必须自己扫一遍全量的 #Dx: 取值,不能假定只出现那 55 个。

2.7 标签频次能读出什么

抽样里六个高频标签的次序是:窦缓、T 波改变、窦性心律、窦速、房颤、右束支阻滞。这个排序不只是「什么病常见」,它还反映了开单逻辑。

窦缓排在窦性心律之前,说明「正常心电图」这个结论在这批记录里不是主流。多数记录至少带一个异常编码——这与「心电科检查人群」的构成一致:体检异常被转来做心电、术前评估、心悸胸闷待查。真正因为「什么都正常」而做的检查,在这类数据里占比不高。

T 波改变排第二,值得单独说。T 波改变是一个极度非特异的描述——它可以是缺血、可以是电解质紊乱、可以是体位、可以是正常变异、也可以是自动算法的误判。当它成为第二高频标签时,意味着这份数据里有大量「说不清但被标了」的样本。

这对多标签训练的影响是:模型很可能靠 T 波改变这个标签把 AUROC 刷得很高,而这个标签本身的临床意义最弱。评估时应当把它单独列出来看,而不是混在宏平均里。

房颤只有 24 次,排第五。这个数字低于很多人的预期——房颤是心电 AI 最热的目标,但在常规门诊心电里,它的比例本来就不高(多数流行病学调查里,非选择性人群的房颤检出率在个位数百分比)。若你的任务专做房颤,这份数据里正样本可能只有几千例,需要自己先统计。

2.8 三个未标明的元数据

文档没写三件事,都会影响使用。

采集时间跨度。 没有年份字段,也没有记录日期。因此无法判断这四万五千份是几年内采集的,也无法做「随时间变化」的分析(比如某个诊断的检出率是否在上升)。

设备与滤波器设置。 只说是常规十二导联检查,没说是哪家厂商的机器、是否开基线漂移滤波、是否开 50 赫兹陷波。这两项对 ST 段与高频成分的影响很大。

去噪版本是否随 WFDB 版发布。 CSV 阶段明确有「原始」与「去噪」两版;WFDB 阶段的那批是否也是原始信号,文档没明说。若是去噪后的,那么高频细节(如 fQRS 的切迹)可能已被平滑掉。

2.9 与另一份常用库的定量对照

把这份数据与 PTB-XL 摆在一起比,能更清楚地看出它的位置。

维度 本库 PTB-XL
记录数 四万五千余 约两万二千
患者数 未标明 18,869
每份时长 10 秒 10 秒
采样率 500 赫兹 500 赫兹(另有 100 赫兹版)
导联 12 12
标签体系 SNOMED CT,55 个 SCP-ECG,71 个陈述
标签来源 自动分析报告 + 复核 心内科医生结构化报告
标签层级 扁平,多标签 三层(诊断/形态/节律)
许可 CC BY 4.0 CC BY 4.0
人群 中国两家三甲医院 德国一家大学医院

两处差异值得展开。

标签层级的差异。 PTB-XL 的三层结构允许「诊断:心肌梗死;形态:Q 波;节律:窦性」这样的组合,因此能做「同一诊断下形态的差异」这类分析。本库是扁平的多标签,做不了这种分解——一个「心肌梗死」编码下面,你无法知道它是急性期还是有 Q 波陈旧性。

人群的差异。 德国单中心与中国两中心,人群构成不同,心电图基线也不同(比如胸导联电压的整体水平、早期复极的比例)。跨库测试时,性能下降有多少来自人群、多少来自标签定义,需要设计实验才能分开。

§3 怎么拿到:一个许可,三种下载方式

3.1 许可与约束

CC BY 4.0,是全套 Creative Commons 里最宽松的一档:可以复制、分发、修改、商用,唯一条件是署名。

署名的具体要求是:注明作者、标明许可、说明是否做过修改。对数据集而言,通常写法是引用它的 DOI 与版本,并在方法学部分说明用了哪个版本。

注意 CC BY 4.0 不提供任何担保,也不承担数据使用的责任。医学数据用于临床决策时,这个免责条款的实际意义是:出了问题不能归咎于数据提供方。

3.2 三种下载方式

页面给了三条路径。

网页直接下 ZIP(2.3 GB)。适合一次性拿全量,但断点续传要靠浏览器。

wget -r -N -c -np 递归下载。-c 是断点续传,-N 是只拿更新的,-np 是不上溯父目录。这条命令会拉九万多个文件,对小文件极多的场景效率很低。

aws s3 sync --no-sign-request 从 S3 同步。这条最快,也最稳,因为 S3 支持并行与断点。若你的环境能访问 S3,优先用这条。

3.3 下载这件事本身的坑

我在核对校验和清单时遇到了典型问题,值得写下来。

SHA256SUMS.txt 实际是 8,711,012 字节、90,759 行。这个文件我抓了十几轮才拿全:单次 curl --max-time 100 最好的一次只到 245,742 字节,续传一次到 671,726 字节,之后每轮推进几百 KB 到一两 MB 不等——累计跑了十六轮才见到末行 WFDBRecords/46/461/RECORDS。

处理办法与前面的经验一致:写循环,每次带 -C - 续传,检查目标大小是否达到,未达到就再跑一次;同时在循环里判断「本次大小是否与上次相同」,相同则说明卡死,需要换时间重试。

这个坑的教训是:不要用「命令返回 0」作为下载完成的判据,也不要只看「大小不再变化」。curl 在超时被切断时照样返回 0;而文件停在同一尺寸两三轮,可能只是那几轮都断在同一个位置。判据只能是「文件末行是预期的最后一行」,或整文件校验和。

3.4 校验和怎么用

SHA256SUMS.txt 覆盖了全部文件,可以逐文件校验:

sha256sum -c SHA256SUMS.txt --quiet

--quiet 只输出失败项。九万个文件全量校验大约几分钟,对训练前的数据完整性检查是值得的——尤其是用递归方式下载时,小文件丢失很常见。

§4 质量:四处必须先处理的问题

4.1 十秒的长度决定了什么能问、什么不能问

十秒记录能回答:这份心电的节律是什么、有没有传导阻滞、ST-T 有没有改变、电轴偏向哪边。

十秒记录不能回答:这个人的房颤是持续的还是阵发的、早搏一天有多少、夜间心率降不降、QT 在心率变化时是否跟着变。

这条限制在做「心律失常检测」时尤其要留心。房颤的诊断在十秒内通常够(连续多个心动周期无 P 波、RR 绝对不齐),但阵发性房颤的「检出」需要长记录。用这份数据训练出来的房颤检测器,其敏感度只对「十秒内可见的房颤」有意义。

4.2 标签噪声无法从内部估计

这是这份数据最大的方法论限制。

要估计标签噪声,通常需要一部分数据有「金标准」——多位专家独立盲法判读的共识。这份数据没有这样的子集。因此你无法算出「标签正确的比例是多少」,只能引用外部文献对这个自动分析系统的已知性能,或者自己做一个小规模的人工复核。

这个限制的实践后果是:任何在这份数据上报出的准确率,都不应该被解释为「模型的诊断准确率」。 它是「模型与这套标签的一致率」。两者在标签质量高时接近,在标签质量差时差距巨大——而你不知道是哪一种。

4.3 编码混叠与标签定义漂移

§2.3 说的编码混叠(左束支阻滞与左前分支阻滞同码)是硬伤。

此外还有一类软问题:缩写到编码的映射在不同记录里可能不一致。§2.6 发现的 55827005(左心室肥大)不在官方 55 个编码表里,就是一个例子。

这对训练的影响是:同一个标签下的样本,可能来自不同的诊断定义。 模型学到的是这个混合概念的平均特征,在细分任务上会失效。

4.4 缺失的上下文:用药、症状、既往史

心电图判读从来不是只看图。同样一份 ST 段压低两毫米的图,在一位服用洋地黄的患者身上是药物效应,在一位胸痛发作中的患者身上是缺血。这份数据把这三项都写成 Unknown。

因此它适合做「图到描述」的映射,不适合做「图到临床决策」的映射。后者需要上下文,而上下文不在数据里。

4.5 采样率与滤波的未知项

500 赫兹够用,但不够做高频分析。若你的任务涉及晚电位、心室晚电位的碎裂 QRS、或者高频 QRS 分析(需要 1000 赫兹以上),这份数据不合适。

基线漂移与工频干扰的处理方式未知,意味着你无法判断 ST 段的低频成分有没有被滤掉。这一点在做 ST 段抬高检测时尤其要注意:过强的基线校正会把 ST 段的缓慢变化一起抹掉。

4.6 记录之间的重复与近重复

没有患者 ID,但重复记录仍可能出现:同一个人在不同日期做两次检查,记录号不同、波形可能高度相似;同一次检查被导出两次,则波形完全相同。

这两种情况对训练的影响不同。完全相同的是数据错误,应当去重;高度相似的是真实世界的样子(同一个人的基线确实稳定),但它会让随机划分的测试集泄漏。

检测办法:对每条记录算一个波形指纹(比如十二导联 QRS 段的降采样后再哈希),先查完全相同的,再查近邻。前者能立刻清掉,后者要设阈值,需要人工看一批确认。

这件事文档没提,但四万五千份数据里,重复是常见现象——尤其是同一家医院的不同批次导出。

4.7 自动分析的已知弱项

用自动报告当标签,等于继承了自动分析算法的弱项。心电自动分析在以下几类上公认不可靠。

细碎形态。 ST 段轻微压低(0.5 毫米以内)、T 波低平、U 波,这些的判断在算法与医生之间差异最大。这类标签的噪声率可能远高于房颤这类明确节律。

多诊断的优先级。 算法通常按固定优先级输出,比如「房颤」会压掉「窦性心律不齐」。所以在多标签数据里,某些标签的组合在生理上不可能同时出现,原因不是生理,是算法的互斥规则。

伪差与心律的混淆。 基线剧烈漂移可能被判成室性心律,肌电干扰可能让 QRS 时限被高估,从而误判束支阻滞。

这三条的实践含义是:标签的可靠性不是均匀的。 用房颤标签训练,你大概能得到一个不错的模型;用 T 波改变标签训练,你得到的可能是一个「复现算法偏好」的模型。

4.8 DAIMS 二十四项对照

维度 判定 说明
目的与用途说明 是 摘要明确说明用于心律失常研究
采集方法描述 是 常规十二导联,导联位置与时长给出
采样率与位深 是 500 赫兹、16 位、4.88 微伏
变量清单 是 十二导联名称逐一列出
单位说明 是 微伏,增益 1000 每毫伏
记录长度 是 5000 点、10 秒
标签体系 是 SNOMED CT,附映射表
标签来源 部分 说明来自 GE MUSE 系统与人工复核,未说明复核流程
标签一致性 否 无标注者间一致性指标
受试者人口学 部分 有年龄与性别,无种族、体重、合并症
队列纳入排除标准 否 未给出
采集时间跨度 否 无日期字段
设备与厂商 部分 提到 GE MUSE 为信息系统,未说明记录设备
滤波与预处理 否 未说明
信号质量指标 否 无逐记录质量评分
缺失数据处理 否 用药/病史/症状统一为 Unknown,未说明缺失机制
数据划分建议 否 未给训练测试划分
代码可用性 部分 提供转换工具与去噪代码的仓库链接,非本数据集配套分析代码
许可与访问条款 是 CC BY 4.0,明确
伦理审批 是 两家医院 IRB 批准,豁免知情同意
知情同意 是 豁免,且说明去标识后公开
资助来源 是 逐项列出
版本与 DOI 是 v1.0.0,两个 DOI
已知限制 部分 未单列限制章节,限制散见各处

是 11 项,部分 6 项,否 7 项。缺得最多的是「人」与「流程」两侧:纳入标准、标注一致性、采集时间、信号质量。

§5 能做什么:五类用法

5.1 用法一:多标签心电异常分类

最标准的用法。输入十二导联十秒波形,输出 55 个标签各自的有无。

关键决策有三个。一是标签怎么处理(只保留样本量够的,比如至少 200 例,通常会剩二十来个)。二是评估怎么算(宏平均 F1 对小标签不公平,微平均 F1 被大标签主导,建议两个都报)。三是划分怎么定(按记录随机划分会高估,因为同一患者可能多次就诊——但这数据没有患者 ID,所以只能在记录层划分,且必须承认这个乐观偏差)。

5.2 用法二:预训练与迁移

四万五千份、五百赫兹、十二导联,这个规模适合当预训练语料。先在它上面做自监督(掩码重建、对比学习),再迁到小规模的下游任务(比如某个特定心律失常的细分类)。

这个用法绕开了标签噪声问题——自监督不需要标签。它只用波形,而波形是这份数据里最可靠的部分。

5.3 用法三:节律与传导的规则验证

因为标签是按 SNOMED CT 编码的,而每个编码有明确的临床定义,可以用这份数据做「规则能否复现标签」的实验。

比如:用 RR 间期变异系数加 P 波检测,能否复现 AFIB 标签?用 QRS 时限加 V1 形态,能否复现 RBBB 标签?这类实验的价值不在模型性能,而在量化「算法与临床定义的重合度」。

5.4 用法四:信号质量与可判读性研究

数据里有相当比例的心电可能质量不佳(电极接触差、基线漂移、肌电干扰),但没有质量标记。

可以做的事:无监督地聚类出质量类型,再看每类的标签分布。若某个质量簇的标签分布显著偏离总体,说明标签可能受了信号质量影响——这是一个能自己补上的质控层。

5.5 用法五:作为其他模型的测试集

把它当外部测试集,评估在别的数据上训练的模型。

这个用法要注意人群差异:两家中国三甲医院的心电科人群、中位年龄 63 岁、男性占六成以上。用它测一个在欧美人群上训练的模型,性能下降有多少是数据漂移、多少是标签定义差异,很难分开。

5.6 用法六:做年龄与性别的基线曲线

这份数据有年龄与性别,规模又够大,因此可以画一些基础曲线:不同年龄段的平均心率、QRS 时限、QT 间期、电轴分布。

这些曲线本身没有新发现(教科书上都有),但用一份四万五千份的中国数据重新画一遍,有它的用途:一是检验教科书数字在本地人群上是否成立;二是给下游模型提供「按年龄校正」的参考;三是暴露数据本身的问题(比如某个年龄段的样本极少,曲线在那里不可信)。

做这件事要注意两点。一是年龄是整数岁,没有更细的分辨率。二是没有种族与体重,而这两项对 QRS 电压影响很大(肥胖者的胸导联电压偏低),所以电压类指标的人群比较要谨慎。

5.7 用法七:可控的噪声注入实验

因为波形是干净的(至少格式规范),可以人为注入噪声(基线漂移、肌电、工频),观察模型性能的退化曲线。

这类实验的价值是给出「这个模型在什么噪声水平下还能用」的定量答案,比单点准确率更有工程意义。做法是:选一个训练好的模型,按信噪比阶梯注入噪声,每个阶梯报一次宏平均 AUROC,画出退化曲线。

这条曲线的形状通常不是线性的——在某个噪声水平之后会断崖式下跌。那个拐点就是模型的可用边界。

5.8 七类用法的共同前提

无论做哪一类,有三件事必须先做:扫一遍全量的 #Dx: 取值(确认是否只有 55 个编码)、统计每个标签的样本量(决定保留哪些)、检查年龄与性别的分布(决定要不要分层)。

这三件事都不在文档里,只能自己算。§11.4 给了代码。

5.9 一条容易被忽略的前提:波形才是可靠的

把 §5 的七条用法排在一起看,会发现它们对数据的依赖不同。

依赖标签的(§5.1、§5.3、§5.5)受制于标签噪声;依赖波形的(§5.2、§5.6、§5.7)不受这个限制。

这个区分值得记住,因为它是这份数据最实用的一条判断标准:凡是用到波形的部分,这份数据是可靠的;凡是用到标签的部分,都要先问一句「这个标签是怎么来的」。 四万五千份十二导联十秒波形,格式规范、采样率统一、体量适中,这本身就是一个稳的基础;而标签是一层在其上的、带噪声的解释。

很多研究把这两者混在一起谈,导致结论的可靠度被标签拖累。分开谈,就能各用其长。

§6 常见误读与五处陷阱

6.1 误读一:把记录数当患者数

文档写的是「四万五千余名患者的十二导联心电」,但数据里只有记录号,没有患者 ID。

若同一患者做过多次检查,这四万五千份记录对应的患者数会少于四万五千。少多少不知道。因此「每患者一份」是一个无法验证的假设。

6.2 误读二:把编码当诊断金标准

SNOMED CT 编码是「临床概念的标准化表达」,不是「诊断结论」。同一个编码可以对应不同严重程度、不同病因的情况。而这份数据的编码又来自自动报告,所以它是「标准化之后的算法判断」。

用它当金标准做误差分析,会把算法的错当成真实的病。

6.3 误读三:把窦缓高频次读成人群特征

§2.6 发现窦性心动过缓在抽样里出现 56 次,是最高频的标签。这不代表中国人群中窦缓的患病率高,只代表「来心电科做检查且报告里写了窦缓」的人多。

选择偏倚在这类医院数据里是结构性的,不能反推人群。

6.4 陷阱一:随机划分导致的乐观偏差

按记录随机划分训练测试集,会因为同一患者的多份记录分处两边而泄漏。这个问题在没有患者 ID 时无法完全解决,只能承认。

一个缓解办法是:按记录号分块划分(比如前 80% 记录号训练、后 20% 测试)。这样至少避免了「相邻记录号来自同一患者同一次就诊」的泄漏,因为同一患者的记录号通常不连续。

6.5 陷阱二:把 4.88 微伏当固定换算

4.88 这个数来自「量程上限 32767 对应 0.16 伏」的推算。但头文件里每导联都有自己的增益字段(1000/mV),标准做法是用头文件的增益换算,不是用全局的 4.88。

若某个导联的增益不是 1000,用 4.88 会算错。正确的读法是:物理值(毫伏)= 存储值 ÷ 增益 × 单位系数。

6.6 陷阱三:忽略导联间的时间对齐

十二导联不是同时刻采的——常规心电设备通常按顺序扫过各导联组(三组肢体导联、一组胸导联,或更细的分组),每组采一小段,再拼接成「看起来同步」的十秒。

这意味着不同导联的同一下标可能对应不同时刻。对单导联分析无影响,对需要跨导联比较时间(如 QT 离散度、碎裂 QRS 的空间分布)的分析则有影响。

这个细节数据里没写,但它是常规心电设备的通行做法,用之前应当向数据提供方确认。

6.7 陷阱四:把 Unknown 当缺失随机

#Rx: Unknown 不是「随机缺失」,是「这个字段从来没被填写」。这两者在统计上完全不同:随机缺失可以插补,从未填写的字段插补出来的是假的。

正确处理是:承认这三项不可用,在方法学部分写明,而不是试图用年龄性别去预测它们。

6.8 陷阱五:拿 CSV 版与 WFDB 版混用

CSV 版是一万零六百余人,WFDB 版是四万五千余人。若你的流程里一部分代码读 CSV、一部分读 WFDB,很可能在不知情的情况下用了两个不同的样本范围。

统一用 WFDB 版,或者明确记录用了哪一版。

§7 在生态中的位置

7.1 与 PTB-XL 的分工

PTB-XL 是另一份常用的公开十二导联心电库:约两万一千份记录、一万八千名患者、五百赫兹、十秒,标签来自心内科医生的结构化报告,用 SCP-ECG 体系。

两份数据的对照很有意思:PTB-XL 的标签体系更细(SCP-ECG 有诊断、形态、节律三层),标注流程更接近人工判读;这份数据的规模更大(四万五千),标签来源更接近临床实际工作流(自动报告加复核)。

选哪一个取决于研究问题:做细粒度形态分析,PTB-XL 的标签更合适;做规模化训练或复现临床部署场景,这份更合适。

7.2 与 2021 挑战赛数据的关系

前面说过,这份数据的格式与挑战赛一致。但两者的样本集合不完全重叠——挑战赛用了多来源数据,这份是其中一支。

若要在挑战赛的评分体系下比较模型,需要确认「你的训练集里有没有包含挑战赛的隐藏测试集记录」。文档没给这个信息,只能靠谨慎。

7.3 在中文心电数据里的位置

中文语境下的公开十二导联心电数据很少。CPSC 系列(中国生理信号挑战赛)曾发布过一批,但规模与开放性都不如这份。

这份数据的价值在于:它是少数「中国人群、公开许可、规模够大、格式规范」的十二导联心电库。这对做人群差异研究(比如中国人群的早期复极比例、电轴偏移分布)是稀缺资源。

7.4 规模上的位置

放在公开心电数据里,四万五千份属于中上规模。比它大的有 MIMIC-IV-ECG(约八十万份),但那是重症监护场景、导联配置不同、许可也不同。

它的定位是「常规门诊心电」这一档里规模最大的公开库之一。

7.5 适合谁用

适合:做心电分类方法学的、做预训练语料的、做中文人群基线统计的、需要一份格式规范的外部测试集的。

不适合:做长程心律监测的、做儿科心电的、需要心搏级标注的、需要用药上下文的。

§8 建模的实操建议

8.1 按导联组做输入是有依据的

十二导联不是平等的。肢体导联(I、II、III、aVR、aVL、aVF)是额面投影,胸导联(V1 至 V6)是水平面投影。前者擅长看电轴与下壁,后者擅长看前壁与左室肥厚。

若模型容量有限,一个合理的做法是:先按导联组分别编码,再合并。这比把十二个通道直接堆进一维卷积要省参数,也更容易解释。

8.2 采样率要不要降

500 赫兹降到 250 赫兹,对节律与传导分析几乎无损,对 ST-T 形态影响也很小,但对 QRS 切迹(fQRS)与高频成分有影响。

若任务只涉及节律与主要形态,降到 250 可以省一半内存与算力。若涉及碎裂 QRS 或晚电位,必须保留 500。

8.3 类别不平衡的处理顺序

五十五个标签的样本量差异极大(从个位数到数万)。正确的处理顺序是:先按样本量筛标签(保留 ≥200 例的),再在剩下的标签上调损失权重或做重采样。

不要一上来就对全部 55 个标签做加权——小标签的权重会大到让模型在小标签上过拟合。

8.4 评估指标的选择

建议报三组:宏平均 AUROC(对类别不平衡不敏感,是心电领域的通行指标)、宏平均 F1(对阈值敏感,反映实际可用性)、每类样本量与每类 AUROC 的表(让人能看出模型在哪类上不行)。

第三组最容易被省略,也最重要。平均指标会把「房颤 0.99、U 波 0.51」平均成 0.97,看起来很好。

8.5 一个必须做的基线

用年龄、性别加三个简单特征(心率、QRS 时限、QT 间期)做逻辑回归。

这个基线在许多标签上会意外地强——因为它抓到了「老年人更容易有传导阻滞」「心率快的人更可能是窦速」这类关联。若复杂模型赢不过它,说明模型学到的主要是人口学关联,不是波形特征。

8.6 过拟合的迹象

四条:训练与验证的 AUROC 差距随 epoch 扩大;模型在某个标签上的表现与该标签的样本量高度相关(说明在背样本);换随机种子后宏平均 AUROC 波动超过两个百分点;模型对导联顺序敏感(把十二导联随机重排后性能大幅下降,说明它没学到空间关系)。

8.7 五条失败模式

一,模型学到了「记录号」——若按记录号顺序划分,模型可能通过某些与记录号相关的系统性差异(不同批次采集)来区分,而不是波形。

二,模型学到了「年龄」——年龄与多个标签强相关,模型可能走捷径。

三,模型对基线漂移敏感——若训练集与测试集的滤波器设置不同,性能会断崖。

四,模型在低质量记录上失效——没有质量标记,模型可能学到了质量特征而非病理特征。

五,模型无法处理多标签共现——用 softmax 而非 sigmoid 会强制互斥,与数据的多标签性质冲突。

§9 三条技术路线的对照

9.1 规则加特征工程:可解释,上限低

手工算心率、PR 间期、QRS 时限、QT 间期、电轴,再用阈值规则判读。

优势是完全可解释,且能直接对照临床标准;劣势是规则组合爆炸,且对形态细微改变无能为力。这个路线适合做基线,也适合做「规则能否复现标签」的研究。

9.2 一维卷积网络:主流,成熟

十二通道一维卷积,加全局池化,多标签输出。这是 2021 挑战赛的主流方案,开源实现很多。

优势是效果好、训练快、有大量可参考的超参;劣势是可解释性差,且对长程依赖(十秒内的节律变化)建模能力有限。

9.3 序列模型与 Transformer:对数据量的要求最高

把十二导联切成 patch,用 Transformer 建模。这条路在八十万份规模的 MIMIC-IV-ECG 上有效,在四万五千份上容易过拟合。

若要用,建议先在大库上预训练,再在这份数据上微调。

9.4 一个常被忽略的中间路线:把自动分析当特征

除了「端到端」与「手工规则」,还有第三条:把心电设备自带的测量值(PR 间期、QRS 时限、QT、电轴)当特征,再训一个浅层分类器。

这条路的好处是特征稳定、可解释、对样本量要求低;坏处是它继承了设备的测量误差,而且这些测量值本身往往就是自动报告的产物——用它当特征去预测自动报告的标签,等于用「算法的中间结论」预测「算法的最终结论」,会得到虚高的准确率。

判断是否落入这个陷阱的办法很简单:看特征的来源与标签的来源是不是同一个系统。若是同一个,结果不可信。这在别的心电数据上只是一条建议,在这份数据上几乎是一条禁令。

9.5 选择建议

做方法学研究,走 §9.2 加一个 §9.1 的基线;做可解释性研究,走 §9.1;有更大预训练语料,走 §9.3。

§10 术语与口径速查

术语 本页用法
十二导联 I、II、III、aVR、aVL、aVF 加 V1 至 V6
增益 存储值到物理电压的换算系数,本库为 1000 每毫伏
基线 头文件中每导联的直流偏移,用于还原真实电压
SNOMED CT 系统化医学术语集,本库用其编码表示诊断
多标签 一条记录可同时有多个诊断编码
窦性心动过缓 窦性心律且心率低于 60 次每分
束支阻滞 希氏束以下传导受阻,分左右两束
分支阻滞 左束支前后分支的阻滞,本库与左束支阻滞同码
碎裂 QRS QRS 波内出现多个切迹,提示心肌瘢痕
宏平均 各类指标先算再平均,对小类公平

§11 事实清单与附录

11.1 核心事实

项目 值
全称 A large scale 12-lead electrocardiogram database for arrhythmia study
版本 1.0.0(2022-08-24 发布)
DOI 10.13026/wgex-er52(本版);10.13026/92ks-sq55(最新)
托管 PhysioNet
访问 公开,CC BY 4.0
记录数 45,152
每份时长 10 秒(5000 点,500 赫兹)
导联 12
量化 16 位,4.88 微伏每单位,增益 1000 每毫伏
解压后大小 5.1 GB
压缩包大小 2.3 GB
文件总数 90,762(90,304 个记录文件 + 3 个顶层 + 452 个二级目录 RECORDS)
目录结构 46 个一级目录(01–46)、452 个二级目录,451 个各 200 条、末位 104 条
记录号 JS00001–JS45551,实有 45,152,缺号 399
诊断编码 55 个 SNOMED CT 编码
标签来源 GE MUSE 自动分析报告,经专业人员复核
伦理 绍兴市人民医院与宁波市第一医院 IRB 批准,豁免知情同意
来源机构 查普曼大学、绍兴市人民医院、宁波市第一医院

11.2 六个可立即验证的疑问

一,#Dx: 里到底出现过多少个不同的编码?官方表是 55 个,但抽样已发现表外的 55827005,全量扫描能确定实际数量。

二,各标签的真实样本量分布如何?抽样里最少的标签只出现 1 次,全量能确定哪些标签样本量不足 100。

三,有没有重复记录?没有患者 ID,但可以用波形哈希查完全相同的记录。

四,年龄与性别的完整分布如何?抽样只覆盖 145 条,全量能出真实分布与缺失比例。

五,信号质量分布如何?可以算每条记录的基线漂移幅度、高频噪声功率,聚成几类。

六,CSV 版与 WFDB 版的交集有多大?两版都用记录名,可以按名字比对。

11.3 下载与校验的最小流程

echo "── 方式一:ZIP 整包 ──"
wget -c https://physionet.org/files/ecg-arrhythmia/1.0.0/ecg-arrhythmia.zip

echo "── 方式二:S3 同步(推荐,支持并行与续传)──"
aws s3 sync --no-sign-request s3://physionet-open/ecg-arrhythmia/1.0.0/ ./ecg-arrhythmia/

echo "── 校验 ──"
cd ./ecg-arrhythmia/ && sha256sum -c SHA256SUMS.txt --quiet

第二方式的路径若不通,回退到第一种。若要单文件补,用 wget -c 加完整 URL,不要用 curl 单次抓取(§3.3)。

11.4 附录 A:读一条记录并还原物理电压

import numpy as np, scipy.io as sio
print("── 解析头文件 ──")
def read_hea(path):
    lines = open(path).read().splitlines()
    name, n_sig, fs, n_samp = lines[0].split()[:4]
    sigs = []
    for ln in lines[1:1 + int(n_sig)]:
        p = ln.split()
        sigs.append({"file": p[0], "gain": float(p[2].split("/")[0]),
                     "baseline": float(p[4]), "name": p[-1]})
    meta = {}
    for ln in lines[1 + int(n_sig):]:
        if ln.startswith("#") and ":" in ln:
            k, v = ln[1:].split(":", 1)
            meta[k.strip()] = v.strip()
    return {"fs": int(fs), "n": int(n_samp), "sigs": sigs, "meta": meta}

h = read_hea("/tmp/ecg_hea/JS04457.hea")
print(h["fs"], h["n"], len(h["sigs"]), h["meta"].get("Dx"))
print("── 还原电压,单位为毫伏 ──")
d = sio.loadmat("/tmp/JS00001.mat")["val"]
mv = (d - np.array([s["baseline"] for s in h["sigs"]])[:, None]) / np.array(
    [s["gain"] for s in h["sigs"]])[:, None]
print(mv.shape, mv[:, :3].round(3))
print("── 单导联峰峰值(毫伏)──")
print({s["name"]: round(float(mv[i].ptp()), 3) for i, s in enumerate(h["sigs"])})

第三段那行输出是检查信号质量最快的办法:峰峰值低于 0.1 毫伏的导联,基本可以判定为接触不良或脱落。

11.5 附录 B:全量扫描诊断编码

import re, collections, pathlib
print("── 扫全部头文件里的 Dx 值 ──")
cnt = collections.Counter()
for p in pathlib.Path("WFDBRecords").rglob("*.hea"):
    for ln in open(p, errors="ignore"):
        if ln.startswith("#Dx:"):
            for c in ln[4:].split(","):
                c = c.strip()
                if c:
                    cnt[c] += 1
            break
print("不同编码数", len(cnt))
print("出现 <100 次的编码", [c for c, n in cnt.items() if n < 100])
print("表外编码", [c for c in cnt if c not in set(open("CondNames.txt").read().split())])

这段跑完,§11.2 的前两个问题就有答案了。注意遍历九万个文件,在机械硬盘上会慢,建议放到本地 SSD。

11.6 附录 C:证据链

  • 数据集条目页:https://physionet.org/content/ecg-arrhythmia/1.0.0/(Abstract、Background、Data Description、Usage Notes、Release Notes、Ethics、Acknowledgements、References)
  • 许可与体量:页面 Files 段给出解压 5.1 GB、压缩 2.3 GB
  • 编码表:ConditionNames_SNOMED-CT.csv,55 行数据行
  • 校验和清单:SHA256SUMS.txt,8,711,012 字节 / 90,759 行;其中头文件与数据文件各四万五千一百五十二份,其余 455 项为三个顶层文件加四百五十二个二级目录的 RECORDS
  • 目录结构:一级 46 个(01–46)、二级 452 个;451 个二级目录各 200 条记录,46/461 装 104 条
  • 记录号:JS00001–JS45551,缺号 399(前十个缺号是 3、28、35、98、135、136、149、214、246、275)
  • 头文件样本:按每 40 条抽 1 条,共取到 145 份,全部为 12 导联、500 赫兹、5000 点
  • 数据文件样本:JS00001.mat 为 120,024 字节,val 矩阵形状 12×5000,int16

凡属分析性内容(§2.6 的抽样统计、§4.6 的 DAIMS 判定、§8 与 §9 的建模建议、§11.4 与 §11.5 的代码)为基于文件核对与领域常识的推演,非官方结论。凡标注「文档说」的均为条目页原文表述。

编辑说明

本页依据 PhysioNet 条目页与随附的编码表、校验和清单写成(2026-10-19 取)。数据本体未全量下载:ZIP 为 2.3 GB,本次只取了校验和清单、编码表、许可文件,以及按记录号每四十条抽一份的 145 份头文件与一份 MAT 数据文件。

抽样方法及其局限:145 份头文件覆盖了全部记录号范围(从 JS00001 附近到库尾),但因为原始清单下载曾多次中断、逐次续传补齐,抽样时的记录总数在下载过程中是变化的,因此这 145 份不是严格等距抽样。所有抽样统计(年龄、性别、标签频次)应视为量级参考,不是精确估计。

本页最有价值的一处发现也许是 §2.6 那个表外编码:55827005 出现 19 次,不在官方 55 个编码表里。这说明「官方编码表」与「头文件实际内容」并不完全一致,用之前必须自己扫全量。这类不一致不会写在文档里,只能靠核对发现。

本页未做的事:未做信号质量评估(需要全量波形);未核对 CSV 版与 WFDB 版的交集;未验证 §6.6 关于导联非同步采集的推断(这需要原始设备的采集时序说明,数据里没有)。

返回 AI-Ready 数据集