如何将时间序列分解应用于自定义数据集
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?
在 ng-bootstrap datepicker 中将 CSS 类应用于自定义日期模板