如何将时间序列分解应用于自定义数据集

Posted

技术标签:

【中文标题】如何将时间序列分解应用于自定义数据集【英文标题】:How to apply Time-Series Decomposition to custom dataset 【发布时间】:2021-11-29 07:19:25 【问题描述】:

目标:尝试在我自己的 CSV 数据集上应用时间序列分解来查找 LeftHipAngle 列的趋势、季节性和噪声

我想使用 pandas 数据框对 CSV(找到 here)应用时间序列分解,但我不断收到频率错误。我的流程如下:

第 1 步:将 CSV 加载到 Pandas 数据框

from statsmodels.tsa.seasonal import seasonal_decompose
from dateutil.parser import parse

# Decomposition of a Time Series
import pandas as pd
url = 'https://raw.githubusercontent.com/lucaphen/EEE4022S/main/subject_31_angle_joints.csv'

df = pd.read_csv(url, parse_dates=['Time'], index_col='Time')
# dataset has duplicated time values passed 460 rows, which cause errors,
# ...so I limit the value to 420
df = df[:420] 
print(df.head())
print(type(df))

结果可见here

第 2 步:使用 Statsmodel 访问seasonal_decomposition 函数

# Use Statsmodel to decompose time-series
result_mul = seasonal_decompose(df['LeftHipAngle'], model='multiplicative', extrapolate_trend='freq')

在这里,我收到一个错误:

ValueError:频率 L 不理解。如果您认为这是错误的,请报告。

尝试诊断

我认为问题与时间序列的频率有关,以毫秒为单位(即“L”),但是当我在第一步代码中的df = df[:420] 下添加df = df.asfreq('L') 时,我收到此错误(@ 987654323@)。

如果有任何帮助,我将不胜感激,我正在尝试合并自定义 .csv 文件以进行时间序列分析。

【问题讨论】:

【参考方案1】:

我对此进行了一些尝试,并像您一样将索引更改为“L”,但出现了函数无法处理丢失数据的错误。所以我像这样重新索引:

date_index2 = pd.date_range(start=df.index.min(), end=df.index.max(), freq='L')
df = df.reindex(date_index2).fillna(0)

大大扩展了行数。

然后我得到了这个错误:

ValueError: Multiplicative seasonality is not appropriate for zero and negative values

然后我尝试不用 0 填充 Nan 并得到这个错误

ValueError: This function does not handle missing values

我认为真正的问题是您的数据集与您尝试使用的功能不匹配。也许另一个包或函数可以近似于您正在尝试做的事情。

【讨论】:

以上是关于如何将时间序列分解应用于自定义数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将纵横比约束应用于自定义 UICollectionViewCell?

将语义应用于自定义 git 流

如何选择样式并将其应用于自定义标签

在 ng-bootstrap datepicker 中将 CSS 类应用于自定义日期模板

应用于自定义 QAbstractItemModel 的外部选择

如何将样式应用于 Angular 中的自定义组件内容?