GluonTS中基于pandas.DataFrame的时间序列数据处理指南

GluonTS中基于pandas.DataFrame的时间序列数据处理指南

gluonts awslabs/gluonts: GluonTS (Gluon Time Series) 是一个由Amazon Web Services实验室维护的时间序列预测库,基于Apache MXNet的Gluon API构建,适用于各种商业应用中复杂时间序列数据的建模和预测任务。 gluonts 项目地址: https://gitcode.com/gh_mirrors/gl/gluonts

概述

本文将详细介绍如何在GluonTS项目中使用pandas.DataFrame格式处理时间序列数据。GluonTS作为一个强大的时间序列预测工具库,提供了PandasDataset这一专门针对pandas数据结构的接口,极大简化了时间序列数据的预处理和建模流程。

核心数据结构:PandasDataset

PandasDataset是GluonTS中专门设计用于处理pandas数据结构的类,它能够接受多种格式的输入:

  1. 单个DataFrame(单变量时间序列)
  2. DataFrame列表(多变量时间序列)
  3. 字典形式的DataFrame集合
  4. 长格式(Long-Format)DataFrame(包含item_id列)

基本数据要求

最基本的时间序列数据应包含两列:

  • timestamp:单调递增的时间戳,具有固定频率
  • target:对应的目标值

示例格式:

| timestamp | target | |---------------------|--------| | 2021-01-01 00:00:00 | -0.21 | | 2021-01-01 01:00:00 | -0.33 |

实战案例解析

案例1:长格式数据处理

当数据以长格式存储时(即多个时间序列堆叠在一个DataFrame中,通过item_id区分),处理流程如下:

from gluonts.dataset.pandas import PandasDataset

# 假设df是包含item_id列的长格式DataFrame
ds = PandasDataset.from_long_dataframe(df, target="target", item_id="item_id")

案例2:缺失值处理

时间序列数据常见的问题是存在缺失时间点,解决方法是对齐时间索引并填充缺失值:

# 创建完整的时间索引
new_index = pd.date_range(start_time, end_time, freq="1H")

# 对每个时间序列重新索引
filled_dfs = {
    item_id: gdf.reindex(new_index).fillna(method="ffill")
    for item_id, gdf in df.groupby("item_id")
}

ds = PandasDataset(filled_dfs, target="target")

案例3:宽格式数据处理

当数据以宽格式存储时(每个时间序列作为单独列),转换方法如下:

# 假设df_wide的每列代表一个时间序列
ds = PandasDataset(dict(df_wide))

高级特性应用

特征工程

GluonTS支持丰富的特征类型:

  • 静态特征(static features):不随时间变化的特征
  • 动态特征(dynamic features):随时间变化的特征

示例代码:

# 创建包含特征的DataFrame
ts_with_features = pd.DataFrame({
    "timestamp": date_range,
    "target": target_values,
    "static_cat": static_categories,
    "dynamic_real": dynamic_values
})

# 构建数据集时指定特征类型
dataset = PandasDataset(
    ts_with_features,
    target="target",
    feat_static_cat=["static_cat"],
    feat_dynamic_real=["dynamic_real"]
)

模型训练与评估

使用包含特征的DataFrame训练模型:

from gluonts.mx import DeepAREstimator

estimator = DeepAREstimator(
    freq="1H",
    prediction_length=24,
    use_feat_static_cat=True,
    use_feat_dynamic_real=True,
    cardinality=[num_categories]  # 静态分类特征的基数
)

predictor = estimator.train(dataset)

训练测试集划分

正确划分训练测试集对评估模型性能至关重要:

# 划分数据集
train = PandasDataset([ts.iloc[:-prediction_length] for ts in time_series_list])
test = PandasDataset(time_series_list)

# 训练评估
predictor = estimator.train(train)
forecasts = predictor.predict(test)

# 可视化部分结果
for i in range(3):  # 展示3个样本
    test[i][-100:].plot()  # 绘制真实值
    forecasts[i].plot()    # 绘制预测值

最佳实践建议

  1. 数据质量检查:确保时间戳单调递增且频率一致
  2. 特征标准化:对连续型特征进行标准化处理
  3. 缺失值处理:根据业务场景选择合适的填充策略
  4. 模型选择:根据数据特性选择合适的GluonTS模型
  5. 超参数调优:合理设置预测长度、训练轮次等参数

通过本文介绍的方法,开发者可以高效地将pandas格式的时间序列数据转换为GluonTS可用的格式,并利用其强大的预测能力解决实际问题。

gluonts awslabs/gluonts: GluonTS (Gluon Time Series) 是一个由Amazon Web Services实验室维护的时间序列预测库,基于Apache MXNet的Gluon API构建,适用于各种商业应用中复杂时间序列数据的建模和预测任务。 gluonts 项目地址: https://gitcode.com/gh_mirrors/gl/gluonts

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔瑗励

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值