房颤心电数据库读取与转换

设置数据库路径,这里主要使用MIT-BIH房颤数据库和正常窦性心律数据库。

mit_bih_af_path = 'F:/python/pycharm/AF_prediction/AF/data/MIT-BIHafdb/'
mit_bih_nsrdb_path = 'F:/python/pycharm/AF_prediction/AF/data/MIT-BIHnsrdb/'
path_save1='F:/python/pycharm/AF_prediction/AF/data/MIT-BIHafdb/csv/'
path_save2='F:/python/pycharm/AF_prediction/AF/data/MIT-BIHnsrdb/csv/'

DS1 = ['04015','04043','04048','04126','04746','04908','04936','05091','05121','05261','06426','06453','06995','07162','07859','07879','07910','08215','08219','08378','08405','08434','08455']
DS2 = ['16265','16272','16273','16420','16483','16539','16773','16786','16795','17052','17453','18177','18184','19088','19090','19093','19140','19830']

AFDB原始数据的读取:

def ReadTrainingSet1(DS):
    for ds in DS:
        dataSetLoc1 = mit_bih_af_path + ds
        record1 = wfdb.rdrecord(dataSetLoc1, physical=True)
        signal_annotation1 = wfdb.rdann(dataSetLoc1, 'atr')
        r_peak_annotation1 = wfdb.rdann(dataSetLoc1, 'qrs')
        # 获取关键信息
        af_ECG_rpeaks = r_peak_annotation1.sample
        af_ann_aux_note = signal_annotation1.aux_note
        af_ann_sample = signal_annotation1.sample
        ECG0 = record1.p_signal[:, 0]
        ECG1 = record1.p_signal[:, 1]
        trainingSet1[ds] = {'ECG0': ECG0, 'ECG1': ECG1, 'af_ann_aux_note': af_ann_aux_note, 'af_ann_sample': af_ann_sample, 'af_ECG_rpeaks': af_ECG_rpeaks}

trainingSet1 = {}
ReadTrainingSet1(DS1)

NSRDB原始数据的读取:

def ReadTrainingSet2(DS):
    for ds in DS:
        dataSetLoc2 = mit_bih_nsrdb_path + ds
        record2 = wfdb.rdrecord(dataSetLoc2, physical=True)
        signal_annotation2 = wfdb.rdann(dataSetLoc2, 'atr')
        # 获取关键信息
        nsr_ann_aux_note = signal_annotation2.aux_note
        nsr_ann_sample = signal_annotation2.sample
        nsr_ECG0 = record2.p_signal[:, 0]
        nsr_ECG1 = record2.p_signal[:, 1]
        trainingSet2[ds] = {'nsr_ECG0': nsr_ECG0, 'nsr_ECG1': nsr_ECG1, 'nsr_ann_aux_note': nsr_ann_aux_note, 'nsr_ann_sample': nsr_ann_sample}

trainingSet2 = {}
ReadTrainingSet2(DS2)

将数据保存为.csv格式,以AFDB为例:

headers = ['ECG0', 'ECG1', 'ann_aux_note', 'af_ann_sample', 'af_ECG_rpeaks']

for k, v in trainingSet1.items():
    df1 = pd.DataFrame({ 'af_ECG0': trainingSet1[k]['ECG0'], 'af_ECG1': trainingSet1[k]['ECG1']})
    df1.to_csv(path_save1 + k + '_afdb.csv', index=False)

    df2 = pd.DataFrame({'af_ann_aux_note': trainingSet1[k]['af_ann_aux_note'], 'af_ann_sample': trainingSet1[k]['af_ann_sample']})
    df2.to_csv(path_save1 + k + '_ann.csv', index=False)

    print(k,end = '')

检验数据的读取情况:

from matplotlib import pyplot as plt
# 检测数据的读取情况
plt.figure(figsize=(20, 6), dpi=80)
temp1 = trainingSet1['04015']['ECG0'][:5000]
plt.plot(temp1)
plt.show()

如图所示:

### 关于MIT心电数据库五分类的相关信息 #### 数据集描述 MIT-BIH心电数据库包含了大量标准化的心电图(ECG)记录,这些记录来自不同健康状况的人群。该数据库中的每条记录通常持续30分钟以上,并由两个导联同步采集得到[^2]。 #### 五分类任务定义 对于基于MIT-BIH数据库构建的五分类模型而言,目标是对不同类型的心跳模式进行区分。具体来说,这五个类别可能包括正常心跳以及四种常见的异常情况,比如室性早搏(Ventricular Premature Contraction, VPC),房颤(Atrial Fibrillation),左束支传导阻滞(Left Bundle Branch Block, LBBB) 和右束支传导阻滞(Right Bundle Branch Block, RBBB)[^1]。 #### 数据预处理特征提取 为了有效训练机器学习算法,在实际操作过程中需要先完成一系列的数据准备工作: - **ECG信号读取**:通过特定工具或库函数加载原始`.dat`文件及其对应的标注信息(存储在同名`.atr`文件内),并将其转换成适合后续处理的形式。 - **QRS波形定位**:采用Pan-Tompkins等经典算法识别每一个QRS复合波的位置,从而分割出单个心跳周期作为独立样本[^3]。 - **噪声去除和平滑化**:应用滤波器消除基线漂移和其他干扰因素的影响;同时执行平滑处理使曲线更加连续稳定。 ```python import wfdb record = wfdb.rdrecord('mit-bih-database/100') # 加载指定编号的患者数据 annotation = wfdb.rdann('mit-bih-database/100', 'atr') # 获取人工标记的时间戳和标签 ``` #### 构建分类模型 当准备好干净且结构化的输入向量之后,可以选择多种监督式学习方法来进行最终预测工作。例如支持向量机(SVM),随机森林(Random Forests),卷积神经网络(CNNs)都是较为常用的选项之一。其中深度学习框架下的CNN由于其强大的表征能力而特别适用于此类时间序列型态的任务。 ```python from sklearn.svm import SVC clf = SVC(kernel='rbf') X_train, y_train = prepare_dataset() # 假设此函数返回训练所需的自变量矩阵X及因变量y clf.fit(X_train, y_train) def predict_heartbeat_type(ecg_signal): processed_ecg = preprocess_single_record(ecg_signal) # 对新来的ecg片段做相同预处理流程 prediction = clf.predict([processed_ecg]) return get_label_name(prediction[0]) # 将内部编码映射回人类可理解的文字表述形式 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值