设置数据库路径,这里主要使用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()
如图所示: