📦 数据集设计 (Dataset)
August 29, 2025 · View on GitHub
⏬ 数据下载
要开始使用数据集,请从 Google Drive 或 百度网盘 下载 all_data.zip 文件。下载后,将文件解压至 datasets/ 目录:
cd /path/to/BasicTS # not BasicTS/basicts
unzip /path/to/all_data.zip -d datasets/
这些数据集已经过预处理,可以直接使用。
💿 数据格式
每个数据集至少包含两个基本文件:data.dat 和 desc.json:
-
data.dat: 该文件以numpy.memmap格式存储原始时间序列数据,形状为 [L, N, C]。- L: 时间步数,训练集、验证集和测试集通常沿该维度划分。
- N: 时间序列数量,也称为节点数量。
- C: 特征数量,通常包括 [目标特征、时间(如日、周、月、年)],其中目标特征是必须的,其他是可选的。
-
desc.json: 该文件包含数据集的元数据,包括:- 数据集名称
- 数据集所属领域
- 数据形状
- 时间切片数量
- 节点数量(即时间序列数量)
- 特征描述
- 是否存在先验图结构
- 常规设置:
- 输入和输出长度
- 训练集、验证集和测试集的比例
- 是否对每个通道(即时间序列)单独归一化
- 评估时是否重新归一化
- 评估指标
- 异常值处理方式
🧑💻 数据集类设计
在时间序列预测中,数据集通常通过滑动窗口方法从原始时间序列数据中生成。正如上图所示,原始时间序列沿时间维度划分为训练集、验证集和测试集,样本通过大小为 inputs + targets 的滑动窗口生成。大多数数据集遵循这种结构。
BasicTS 提供了一个内置的 Dataset 类,称为 TimeSeriesForecastingDataset,专门用于时间序列数据。该类以字典形式生成样本,包含两个对象:inputs 和 target。inputs 表示输入数据,target 表示目标数据。详细的文档可以在类的注释中找到。
🧑🍳 如何添加或自定义数据集
如果您的数据集遵循上述结构,您可以将数据预处理为 data.dat 和 desc.json 格式,并将其放置在 datasets/ 目录中,例如 datasets/YOUR_DATA/{data.dat, desc.json}。BasicTS 将自动识别并使用您的数据集。
参考资料可以查看 scripts/data_preparation/ 中的脚本,这些脚本用于处理来自 raw_data.zip 的数据集(Google Drive,百度网盘)。
如果您的数据集不符合标准格式或有特殊要求,您可以通过继承 torch.utils.data.Dataset 来定义自己的数据集类。在该自定义类中,__getitem__ 方法应返回包含 inputs 和 target 的字典。