Physionet Apnea-ecg数据库预处理(一):ECG信号读取

一、前言

    这篇博客主要是关于Apena-ecg数据库中ECG信号的读取,将数据库中的.dat文件(ECG数据)和.apn文件(标签)做成TXT格式,方便后续的处理。

    apnea-ecg信号读取部分代码:https://github.com/zzklove3344/CodeForReadingApneaECG

二、TXT文件的生成与读取

    根据apnea-ecg的官方说明,每个.dat文件中存的是一个晚上的ECG信号,.apn文件存的是ECG信号的标签。标签是对每分钟ECG片段的标注,共2种,A(disordered breathing)和N(normal breathing)。目的是对整个晚上的ECG信号按照每分钟进行划分,与每个标签能够相对应。这样做的好处,一是方便读取,读某一分钟的ECG片段的数据与标签,不需要将整个晚上的ECG数据和整个标签全部读进来;二是方便分类错误定位,可以将每分钟的ECG片段分配一个独立ID,当做分类之后,想要查看分类器将哪些ECG信号错误分类了,可以快读定位到错误的ECG片段,方便后续的优化。

    工具:pycharm, wfdb工具包(python环境下的包)

2.1 ECG片段数据结构

    每个ECG片段,除了有ECG片段的数据,标签,为了快速定位,还需要一个全局ID以及一个局部ID(该ECG片段在哪个.dat文件中,在第多少分钟)。为了后续数据集的扩展,加了一个数据库名称的属性。以下代码给出了ECG片段类的属性定义。

class ECGDataSegment:
    """
    Minute-by-minute ECG segment.
    """

    def __init__(self):
		self.data = None              # ECG segment data
		self.label = None             # ECG segment label
		self.database = "apnea-ecg"   # Database name
		self.filename = None          # Which file does it belong to?
		self.local_id = None          # The ID in file
		self.global_id = None         # global ID in database

2.2 ECG片段的写入

   在构造完ECG片段的数据结构之后,就可以针对该数据结构写读取函数了。对于每一个ECG记录,我们读出ECG数据和标签,然后利用标签中的采样点的开始位置,顺序读6000个构造ECG片段,再读出标签和一些辅助信息,一起写入TXT文件就可以了,TXT文件以全局ID(global_id)命名。另外还需要写入一个extra-info文件,主要记录ECG segments的总数,方便以后的读取。

    在这里训练集和测试集的处理有些不同。训练集中有.dat文件和.apn文件,测试集中有.dat文件,但没有.apn文件,标注文件是一个TXT文件。具体的代码见github链接。

2.3 ECG片段的读取

    在读取上训练集和测试集就没有写入上的不同了,使用相同的函数就可以读取了。

三、附录

    apnea-ecg数据库官方网站:https://physionet.org/physiobank/database/apnea-ecg/

    apnea-ecg(带测试集标签)百度网盘下载链接:

        链接:https://pan.baidu.com/s/1GPzUvBWYtKypxO1rYDUGRw 
        提取码:vxe9 

    apnea-ecg subjects基础信息统计表:https://physionet.org/physiobank/database/apnea-ecg/additional-information.txt

   

你可能感兴趣的:(PhysioNet,Apnea-ecg,python)