一维ECG信号分割以及2D图像的转化(二)__just_one_click

本篇代码的内容如下:

在上一篇的代码的基础上。1,修改了生成的图片名称中还包含绝对路径的问题

2.一键式,将每一个患者的一维信号记录,变成对应的,适合于图像分类任务的csv。

3.按照传统的划分方式,将数据集划分为训练集和测试集

 filename = directory + '/' + change_name(filename_csv)+str(data_frame['sample_dot'][i]) + data_frame['labels'][i] + '.jpg'

核心:

def draw_pictures(data_frame, raw_data,filename_csv):
    #生成图片的存放地址
    directory = '/data1/ar/data_process/ecg_data_demo'

    labels = []
    file_name = []

    #第一个和最后两个样本不要
    for i in range(1,len(data_frame['labels'])-1):
        fig = plt.figure(frameon=True)
        labels.append(data_frame['labels'][i])
        #plt.plot(raw_data[2][data_frame['sample_dot'][i]-50:data_frame['sample_dot'][i]+150])
        plt.plot(raw_data[2][data_frame['sample_dot'][i - 1] + 20:data_frame['sample_dot'][i + 1] - 20])
        plt.xticks([]), plt.yticks([])
        for spine in plt.gca().spines.values():
            spine.set_visible(False)
        filename = directory + '/' + change_name(filename_csv)+str(data_frame['sample_dot'][i]) + data_frame['labels'][i] + '.jpg'
        fig.savefig(filename)
        file_name.append(chage_name2(filename))

        im_gray = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
        im_gray = cv2.resize(im_gray, (128, 128), interpolation=cv2.INTER_LANCZOS4)
        cv2.imwrite(filename, im_gray)
        plt.close()

    dataset_frame = {'file_name': file_name, 'labels': labels}
    dataset_frame = pd.DataFrame(dataset_frame)

    #dataset_frame保存为csv文件
    csv_filename = change_name(filename_csv)

    #csv存放地址
    csv_path = '/data1/ar/data_process/ecg_data_demo/csv'
    csv_path = os.path.join(csv_path, csv_filename+'.csv')
    dataset_frame.to_csv(csv_path, index=False)
    print(f'DataFrame saved to {csv_path}')

跑出来的结果如下:

 一维ECG信号分割以及2D图像的转化(二)__just_one_click_第1张图片

 

 一维ECG信号分割以及2D图像的转化(二)__just_one_click_第2张图片

一维ECG信号分割以及2D图像的转化(二)__just_one_click_第3张图片 

48个病人记录的2D样本以及对应的标签全部在这里了。

在一般情况下,不是所有数据都是要被使用的,根据, 大多数人的做法,是把48个病例分成DS1,和DS2,其中,

DS1 = [101, 106, 108, 109, 112, 114, 115, 116, 118, 119, 122, 124, 201, 203, 205, 207, 208, 209, 215, 220, 223, 230]
DS2 = [100, 103, 105, 111, 113, 117, 121, 123, 200, 202, 210, 212, 213, 214, 219, 221, 222, 228, 231, 232, 233, 234]

可以把一个作为训练集,一个作为测试集,而且label也被分成了5大类。

一维ECG信号分割以及2D图像的转化(二)__just_one_click_第4张图片

核心代码如下:

MITBIH_classes = ['N', 'L', 'R', 'e', 'j', 'A', 'a', 'J', 'S', 'V', 'E', 'F']  # , 'P', '/', 'f', 'u']
AAMI_classes = []
AAMI_classes.append(['N', 'L', 'R'])  # N label-0
AAMI_classes.append(['A', 'a', 'J', 'S', 'e', 'j'])  # SVEB label-1
AAMI_classes.append(['V', 'E'])  # VEB label-2
AAMI_classes.append(['F'])  # F label-3
# AAMI_classes.append(['P', '/', 'f', 'u'])              # Q drop
    for data in datalist:
        data_csv = pd.read_csv(os.path.join(root_dic,str(data)+'.csv'))
        labels_list = data_csv['labels'].tolist()
        file_name = data_csv['file_name'].tolist()
        for i in range(len(labels_list)):
            for j in range(len(AAMI_classes)):
                if labels_list[i] in AAMI_classes[j]:
                    clean_list.append(j)
                    file_names.append(file_name[i])
                    break
    dataset_frame = {'file_name': file_names, 'labels': clean_list}
    test_dataset_frame = pd.DataFrame(dataset_frame)
    #csv_path = '/data1/ar/data_process/DS1.csv'
    csv_path = '/data1/ar/data_process/DS2.csv'

一维ECG信号分割以及2D图像的转化(二)__just_one_click_第5张图片

更加完善。更加易处理。

 

你可能感兴趣的:(python,信号处理,分类)