零基础搞定时间序列自定义数据集:Time-Series-Library全流程指南

【免费下载链接】Time-Series-Library A Library for Advanced Deep Time Series Models. 【免费下载链接】Time-Series-Library 项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library

你是否还在为时间序列模型适配自定义数据而烦恼?格式不兼容、参数配置复杂、数据加载失败?本文将通过3个核心步骤+2个实战案例,手把手教你快速接入任意格式的时间序列数据,让你的模型训练效率提升50%。读完本文你将掌握:数据集格式规范、加载代码编写、参数配置技巧,以及异常检测/预测任务的适配方法。

一、数据集接入流程图解

时间序列数据接入需要经过数据准备、格式转换、参数配置、模型调用四个阶段。项目提供的标准流程如图所示:

数据集处理流程

图1:Time-Series-Library数据集处理全流程 项目流程图

核心处理模块位于 data_provider/ 目录,包含数据工厂 data_factory.py 和加载器 data_loader.py,支持从CSV文件、NPY数组等多种格式构建数据集。

二、自定义数据集格式规范

2.1 基础格式要求

所有自定义数据集需满足以下结构(以CSV文件为例):

字段名 说明 数据类型
date 时间戳 字符串(如"2023-01-01 00:00")
feature_1 特征1 数值型
... ... ...
target 目标变量 数值型

参考示例:data_provider/m4.py 中的M4数据集格式定义

2.2 时间特征编码

支持两种时间编码方式,通过 timeenc 参数控制:

三、代码开发三步骤

3.1 定义数据集类

继承 Dataset 类实现自定义加载逻辑,关键重写以下方法:

class Dataset_Custom(Dataset):
    def __init__(self, args, root_path, data_path, flag='train'):
        # 初始化参数:序列长度、特征类型等
        self.seq_len = args.seq_len
        self.pred_len = args.pred_len
        # 数据加载
        self.__read_data__()
        
    def __read_data__(self):
        # 读取CSV文件
        df_raw = pd.read_csv(os.path.join(self.root_path, self.data_path))
        # 特征选择与标准化
        self.data_x = df_raw[cols_data].values
        self.data_y = df_raw[[self.target]].values
        
    def __getitem__(self, index):
        # 返回序列片段 (seq_x, seq_y)
        return seq_x, seq_y

代码片段来源:data_loader.py#L207-L307

3.2 注册数据集到工厂

data_factory.py 中注册新数据集:

data_dict = {
    'ETTh1': Dataset_ETT_hour,
    'custom': Dataset_Custom,  # 添加自定义数据集
    'm4': Dataset_M4
}

3.3 配置运行参数

通过命令行参数指定自定义数据路径:

python run.py --task_name long_term_forecast \
              --data custom \
              --root_path ./data/custom_data/ \
              --data_path my_data.csv \
              --features M \
              --target OT

完整参数说明:run.py#L22-L143

四、任务适配实战案例

4.1 异常检测任务

以SMAP数据集为例,适配异常检测需要实现滑动窗口切割:

class SMAPSegLoader(Dataset):
    def __getitem__(self, index):
        # 窗口大小=win_size,步长=step
        return self.test[index:index+self.win_size], self.test_labels[index:index+self.win_size]

实现参考:data_loader.py#L479-L520

4.2 多变量预测任务

修改特征配置为 --features M,模型自动加载所有特征列。核心处理逻辑在 data_loader.py#L257-L268

if self.features == 'M':
    cols_data = df_raw.columns[1:]  # 加载所有特征
elif self.features == 'S':
    cols_data = [self.target]  # 仅加载目标列

五、常见问题解决

5.1 数据归一化问题

使用 StandardScaler 对训练集单独拟合:

self.scaler = StandardScaler()
train_data = df_data[border1s[0]:border2s[0]]
self.scaler.fit(train_data.values)

代码位置:data_loader.py#L66-L68

5.2 时间粒度适配

通过 freq 参数指定时间粒度:

--freq 'h'  # 小时级数据
--freq 't'  # 分钟级数据(支持15min等细分粒度)

时间特征生成逻辑:utils/timefeatures.py

六、项目资源与学习路径

点赞+收藏本文,关注项目更新,下期将推出《时间序列数据增强实战指南》。如有技术问题,欢迎提交Issue到项目仓库。

【免费下载链接】Time-Series-Library A Library for Advanced Deep Time Series Models. 【免费下载链接】Time-Series-Library 项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐