一维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}')

跑出来的结果如下:

 33a017976d694a3999ba2b9ba16d2f04.png

 0f487f6324164957994162a1971e7950.png

3044708b2ef64661ae1a96fc3997dbd2.png

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大类。

0d139fb7d9874469a62400a874277be1.png

核心代码如下:

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'

3124ec6d0ddf4624bb74331a331f9f91.png

更加完善。更加易处理。

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值