时间序列数据上升趋势模式识别的Python算法

时间序列数据上升趋势模式识别的Python算法,python,time-series,Python,Time Series,我有一个时间序列数据集,我喜欢捕捉历史上的上升趋势模式(通常上升趋势为30-90天)。 我曾尝试使用滚动窗口,但我必须删除NaN以获得线性回归工作,这会弄乱x轴,从而导致回归系数 我的问题是: 识别时间序列上升模式的最佳方法是什么 数据 如果我的方法(滚动窗口线性回归)方向正确,我如何解决NaN问题,这可能会导致线性拟合返回为空或扰乱x轴的比例 如果我喜欢选择多个窗口,而不是滚动窗口来应用线性回归,我该如何处理 谢谢你的帮助 数据帧示例 import pandas as pd import sc

我有一个时间序列数据集,我喜欢捕捉历史上的上升趋势模式(通常上升趋势为30-90天)。 我曾尝试使用滚动窗口,但我必须删除NaN以获得线性回归工作,这会弄乱x轴,从而导致回归系数

我的问题是:

  • 识别时间序列上升模式的最佳方法是什么 数据
  • 如果我的方法(滚动窗口线性回归)方向正确,我如何解决NaN问题,这可能会导致线性拟合返回为空或扰乱x轴的比例
  • 如果我喜欢选择多个窗口,而不是滚动窗口来应用线性回归,我该如何处理
  • 谢谢你的帮助

    数据帧示例

    import pandas as pd
    import scipy.stats
    import numpy as np
    
    dict_ = {'COMPLETIONDATE': ['2017-10-05 11:05:08',
      '2017-10-06 14:18:25',
      '2017-10-05 10:52:20',
      '2017-10-05 11:13:18',
      '2017-10-03 15:18:08',
      '2017-10-06 11:19:38',
      '2017-10-03 15:36:34',
      '2017-10-06 11:32:08',
      '2017-10-05 11:15:38',
      '2017-10-06 11:20:37'],
     'LOGFIELD16': [45.44571,
      46.31465,
      47.66407,
      38.89286,
      45.37415,
      38.44305,
      45.74217,
      40.59497,
      39.72602,
      46.18687]}
    
    df_ = pd.DataFrame(dict_)
    
        COMPLETIONDATE  LOGFIELD16
    0   2017-10-05 11:05:08 45.44571
    1   2017-10-06 14:18:25 46.31465
    2   2017-10-05 10:52:20 47.66407
    3   2017-10-05 11:13:18 38.89286
    4   2017-10-03 15:18:08 45.37415
    5   2017-10-06 11:19:38 38.44305
    6   2017-10-03 15:36:34 45.74217
    7   2017-10-06 11:32:08 40.59497
    8   2017-10-05 11:15:38 39.72602
    9   2017-10-06 11:20:37 46.18687
    
    时间序列图

    我目前的方法是滚动窗口线性回归,然后检测阈值以上的斜率。但面临的挑战是,如果选定的数据窗口中某些天可能缺少数据,如何为该窗口拟合线性回归

    # function to calculate the slope
    def roll_reg(df):
        df_size = df.shape[0]
        linregress = scipy.stats.linregress(df, np.array(range(df_size)))
        return linregress[0]
    
    df_.index = pd.to_datetime(df_.COMPLETIONDATE)
    df_.sort_index(inplace=True)    
    
    df_[['LOGFIELD16']].resample("1D").mean().dropna().rolling(30).apply(roll_reg).plot(style='o')
    
    滚动回归斜率图。但是,如果仔细观察,2周围的坡度平台值不是预期值

    使用:
    .rolling('30D')
    @Goyo“类型错误:需要整数”使用:
    .rolling('30D')
    @Goyo“类型错误:需要整数”