UEA数据集和UCR数据集的处理

摘要:本文主要内容为针对tsv格式的UCR数据集和arff格式的UEA数据集进行处理,将其中的标签和数据分离出来,并转换为csv文件和xlsx文件。文中也提供了UCR和UEA数据集的下载链接,供大家使用。

目录

前言

数据集

UCR数据集处理

UEA数据集处理

总结

处理后的数据集


前言

UEA数据集和UCR数据集,目前是时间序列挖掘领域重要的开源数据集资源,每个数据集样本都带有样本类别标签,为了方便处理,这里将其中的标签和数据分离出来,并转换为csv文件或xlsx文件。

数据集

UCR数据集

注:下载数据集后,解压缩密码为 someone

UEA数据集

点击链接,下载如图所示的arff格式的UEA数据集:

ab0db52a409c4121949cf6f0541e9208.png

下载后的数据集如图所示:

UCR数据集:

de98707cc9024e61ab3f142c215c9a5b.png

UEA数据集

c1c4243fac334e49b7053b4cba11483b.png

备注:UEA数据集的网站好像关闭了,虽然也有ts格式的数据集,官网链接如下:ts格式的UEA数据集

这里也提供下载网盘链接:Multivariate2018_ts.zip 提取码:CJL3

但是为了方便,这里也提供了arff格式的数据集 ,链接如下:arff格式的UEA数据集 提取密码:CJL2


UCR数据集处理

代码如下:

import os
import pandas as pd
datapath="E:/桌面/代码/数据集/UCRArchive_2018/UCRArchive_2018"
save_data_path="E:/桌面/代码/数据集/UCRArchive_2018_csv"
def cope_UCR(datapath,save_data_path):
    '''
    :param datapath: tsv格式的UCR数据集路径,type:string
    该数据集结构为:
    -E:/桌面/代码/数据集/UCRArchive_2018/UCRArchive_2018
        -ACSF1
            -ACSF1_TEST.tsv
            -ACSF1_TRAIN.tsv
            -README.md
        -Adiac
            -Adiac_TEST.tsv
            -Adiac_TRAIN.tsv
            -README.md
        -AllGestureWiimoteX
            -AllGestureWiimoteX_TEST.tsv
            -AllGestureWiimoteX_TRAIN.tsv
            -README.me
        -......
    :param save_data_path: 保存转换为csv格式的UCR数据集的路径 type:string
        该数据集结构为:
    -E:/桌面/代码/数据集/UCRArchive_2018_csv
        -ACSF1
            -TEST.csv
            -TEST_label.csv
            -TRAIN.csv
            -TRAIN_label.csv
        -Adiac
            -TEST.csv
            -TEST_label.csv
            -TRAIN.csv
            -TRAIN_label.csv
        -AllGestureWiimoteX
            -TEST.csv
            -TEST_label.csv
            -TRAIN.csv
            -TRAIN_label.csv
        -......
    每个数据集下包含测试集数据、测试集标签、训练集数据、训练集标签

    :return:None
    '''
    data_list=os.listdir(datapath)
    for data_name in data_list:
        #读取每个数据集下的train test readme文件
        new_data_path=datapath+"/"+data_name
        train_test_readme=os.listdir(new_data_path)
        for data_file in train_test_readme:
            if data_file.endswith('.tsv'):#如果文件以tsv结尾
                data_label = pd.read_csv(new_data_path+"/"+data_file, sep='\t',header=None)

                label = data_label.iloc[:, 0]
                data = data_label.iloc[:, 1:]

                data_csv_dir=save_data_path+"/"+data_name
                #如果数据目录不存在,则创建
                if not os.path.exists(data_csv_dir):
                    os.mkdir(data_csv_dir)

                # 将标签和数据分别存到csv文件中
                file_name=data_file.split('_')[1].split('.')[0]
                prefix_path=data_csv_dir+"/"+file_name
                #用savetxt精度会出问题
                # label=data_label.iloc[:,0].values
                # data=data_label.iloc[:,1:].values
                # np.savetxt(prefix_path+"_label.csv", label, delimiter=",",encoding='utf-8',fmt='%f')
                # np.savetxt(prefix_path+".csv", data, delimiter=",",encoding='utf-8',fmt='%f')

                label.to_csv(prefix_path+"_label.csv",mode='w',index=False,header=None,encoding='utf-8')
                data.to_csv(prefix_path+".csv",mode='w',index=False,header=None,encoding='utf-8')
        print(data_name)
cope_UCR(datapath,save_data_path)

效果如图:

227b79b21d0e40ef9d7e235b388c3a91.png

UEA数据集处理

说明:

  1. 以下提供了三种UEA数据存储方式,分别是npz、npy、xlsx格式,其中目前相关论文中常用npy或npz格式,xlsx用于序列可视化。
  2. 由于UEA数据标签有些是文本格式,所以不使用csv格式存储数据,而是使用xlsx格式。
  3. 读取arff格式的文件使用的是scipy.io中的arff.loadarff方法,但是官方给的arff文件中有注释(“%”开头的语句),所以处理之前需要将其删除。处理后的数据为:处理后的UEA数据1处理后的UEA数据2
    提取码:CJL4

代码如下:

# -*- coding: utf-8 -*-
# @File : UEA数据处理.py
import pandas as pd
import os
from scipy.io import arff
import numpy as np
import pandas as pd
from tqdm import tqdm

def load_data(data_path):
    data, meta = arff.loadarff(data_path)
    res_data = []
    res_labels = []
    for t_data, t_label in data:
        t_data = np.array([d.tolist() for d in t_data])
        t_label = t_label.decode("utf-8")
        res_data.append(t_data)
        res_labels.append(t_label)
    return np.array(res_data).swapaxes(1, 2), np.array(res_labels)
def save_csv_data(data,file_name,tag='train'):
    channel_num = data.shape[0]
    for channel_idx in tqdm(range(channel_num)):  # 读取每一个通道的数据
        channel_data = data[channel_idx]
        # 将 NumPy 数组转换为 pandas DataFrame
        df = pd.DataFrame(channel_data)
        data_file = f'{file_name}\\{tag}_dim{channel_idx+1}.xlsx'
        df.to_excel(data_file, index=False)
        # df.to_excel(data_file, index=False,header=None)#第一行不添加时间戳
def save_data(train_data, train_label,test_data, test_label, file_name,data_name,tag='npz'):
    if tag == 'npz':
        # np.savez(file_name,train_X=train_data,train_Y=train_label,test_X=test_data,test_Y=test_label)
        np.savez_compressed(file_name, train_X=train_data, train_Y=train_label, test_X=test_data, test_Y=test_label)#使用压缩方法
    elif tag == 'npy':
        data_dict = {}
        data_dict["train_X"]= train_data
        data_dict["train_Y"] = train_label
        data_dict["test_X"] = test_data
        data_dict["test_Y"]= test_label

        np.save(file_name,data_dict)
    elif tag == 'xlsx':
        #将通道置于第一个维度 维度变为N L C -> C N L
        train_data = np.transpose(train_data,(2,0,1))
        test_data = np.transpose(test_data, (2, 0, 1))
        # 将每个通道数据写入1个xlsx文件中
        save_csv_data(train_data,file_name,tag='train')
        save_csv_data(test_data, file_name,tag='test')
        #写入标签,由于标签可能不是数字,所以不写入csv文件而是excel文件
        df_train_label = pd.DataFrame(train_label)
        df_train_label.to_excel(f'{file_name}\\train_label.xlsx', index=False,header=None)

        df_test_label = pd.DataFrame(test_label)
        df_test_label.to_excel(f'{file_name}\\test_label.xlsx', index=False,header=None)

    else:
        print('No implemented...')

arff_path = 'D:\\资料\\数据集\\数据集\\Multivariate2018_arff\\New_Multivariate_arff'
tag = 'npz'  # 保存的数据的格式
target_path = f'D:\\资料\\数据集\\数据集\\Multivariate2018_{tag}'
def process_uea_data(arff_path,target_path,tag):
# 如果数据目录不存在,则创建
    if not os.path.exists(target_path):
        os.mkdir(target_path)
    wrong_data = ['EigenWorms']#由于数据集太大,处理成xlsx内存不够
    for data_name in os.listdir(arff_path):
        train_file = f'{arff_path}\\{data_name}\\{data_name}_TRAIN.arff'
        test_file =  f'{arff_path}\\{data_name}\\{data_name}_TEST.arff'
        train_data,train_label = load_data(train_file)
        test_data, test_label = load_data(test_file)
        data_dir = f'{target_path}\\{data_name}'
        if not os.path.exists(data_dir):
            os.mkdir(data_dir)
        if tag == 'npz':
            file_name = f'{data_dir}\\{data_name}.npz'
            save_data(train_data, train_label,test_data, test_label, file_name,data_name, tag=tag)
        elif tag == 'npy':
            file_name = f'{data_dir}\\{data_name}.npy'
            save_data(train_data, train_label, test_data, test_label, file_name,data_name, tag=tag)
        elif tag == 'xlsx':
            # EigenWorms数据序列长度太大了,处理不了
            if data_name in wrong_data:
                continue
            file_name = f'{data_dir}'
            save_data(train_data, train_label, test_data, test_label, file_name,data_name, tag=tag)
        else:
            print('No implemented...')
        print_info = f'{data_name} finished!'
        print(f'{print_info}{(70-len(print_info))*"="}')
process_uea_data(arff_path,target_path,tag)
'''---------------------------读取数据-------------------------------
#加载npy数据
data = np.load('XXX.npy',allow_pickle=True).item()
train_X,train_Y,test_X,test_Y = data['train_X'],data['train_Y'],data['test_X'],data['test_Y']

#加载npz数据
data = np.load('XXX.npz',allow_pickle=True)
train_X,train_Y,test_X,test_Y = data['train_X'],data['train_Y'],data['test_X'],data['test_Y']
'''

效果如图:

  • npy格式的数据

  • npz格式的数据:

  • xlsx格式的数据:

总结

arff格式的UEA数据集的处理当然可以使用Weka软件进行处理,具体参考:

Weka使用

但是一个一个转换起来太麻烦了,还不如自己写个python程序。

处理后的数据集

CSV格式的UCR数据集

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值