Darts项目中的TimeSeries核心概念解析与使用指南
什么是TimeSeries
在Darts时间序列分析库中,TimeSeries
是最核心的数据结构类,它专门用于表示单变量或多变量的时间序列数据。与普通的Pandas DataFrame或NumPy数组不同,TimeSeries
提供了针对时间序列分析优化的特性和方法,确保数据具有完整且时间排序的索引。
TimeSeries的核心特性
1. 时间索引支持
TimeSeries
支持两种时间索引类型:
pandas.DatetimeIndex
:基于具体日期时间的索引pandas.RangeIndex
:基于整数的索引(适用于没有具体时间戳的顺序数据)
2. 数据维度支持
- 单变量时间序列:每个时间点只有一个标量值
- 多变量时间序列:每个时间点有多个值(称为"组件"或"维度")
3. 概率性支持
TimeSeries
还能表示概率性时间序列,用于获取置信区间等概率性分析。
多变量时间序列 vs 多个时间序列
理解这一区别对正确使用Darts至关重要:
多变量时间序列
- 单个
TimeSeries
对象 - 多个组件共享相同的时间轴
- 示例:一个病人的血压和心率随时间变化(2个组件)
多个时间序列
- 多个
TimeSeries
对象组成的序列(如Python列表) - 各序列可以有不同时间索引甚至不同频率
- 示例:多个病人的血压和心率数据(每个病人一个TimeSeries)
图1:多变量时间序列(单个TimeSeries对象)
图2:多个时间序列(多个TimeSeries对象)
选择建议
- 如果多个维度在时间上相关(如物体的多个坐标),使用多变量序列
- 如果是多个独立观测(如不同实验数据),使用多个序列
- 如果时间范围不同,必须使用多个序列
概率性时间序列
Darts通过蒙特卡洛采样表示概率性预测:
- 概率性(随机)序列:包含多个样本
- 确定性序列:只包含一个样本
创建TimeSeries的常用方法
Darts提供了多种工厂方法创建TimeSeries:
1. 从DataFrame创建
TimeSeries.from_dataframe(df)
- 每列代表一个组件
- 多列创建多变量序列
2. 从NumPy数组创建
TimeSeries.from_values(np_array)
- 1D数组:单变量确定性序列
- 2D数组:多变量确定性序列
- 3D数组:多变量概率性序列
3. 指定时间索引创建
TimeSeries.from_times_and_values(time_index, values)
4. 序列拼接
from darts import concatenate
# 沿时间轴拼接
concatenate([series1, series2], axis=0)
# 沿组件轴拼接(创建多变量序列)
concatenate([series1, series2], axis=1)
# 沿样本轴拼接(创建概率性序列)
concatenate([series1, series2], axis=2)
数据导出方法
将TimeSeries数据导出为其他格式:
# 导出为Pandas DataFrame(确定性序列)
series.to_dataframe()
# 导出为xarray DataArray
series.data_array()
# 导出为NumPy数组(单个样本)
series.values()
# 导出为NumPy数组(所有样本)
series.all_values()
高级特性
静态协变量
可以附加与时间无关的静态数据:
# 添加静态协变量
static_df = pd.DataFrame({
'location': ['NY', 'LA'],
'type': ['A', 'B']
})
series = series.with_static_covariates(static_df)
层次结构
定义组件间的层次关系:
hierarchy = {
"east_sales": ["total_sales"],
"west_sales": ["total_sales"]
}
可用于预测后的协调处理。
实现原理
TimeSeries
内部使用3维xarray.DataArray
:
- 维度:(时间, 组件, 样本)
- 单变量:组件维度大小为1
- 确定性:样本维度大小为1
- 不可变设计:操作返回新对象
最佳实践建议
- 数据检查:创建TimeSeries前确保时间索引完整且有序
- 维度规划:根据业务场景合理设计单变量/多变量结构
- 内存考虑:大型概率性序列会占用较多内存
- 预处理:利用Darts提供的转换器进行数据标准化等处理
- 模型匹配:选择支持所需特性的模型(多变量/概率性等)
通过掌握这些核心概念,您将能够更有效地使用Darts进行时间序列分析和预测建模。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考