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

时间:2017-10-19 19:58:54

标签: python time-series

我有一个时间序列数据集,我喜欢在历史中捕捉向上趋势模式(通常爬升趋势为30-90天)。 我试图使用滚动窗口,但是我必须放弃NaN以获得线性回归工作,这会使x轴混乱,从而使回归系数变得混乱。

我的问题是:

  1. 识别时间序列向上模式的最佳方法是什么 数据?
  2. 如果我的方法(滚动窗口线性回归)是正确的方向,我该如何解决NaN问题,这可能导致线性拟合的空返回或弄乱x轴的比例?
  3. 如果我想选择多个窗口,而不是滚动窗口来应用线性回归,我该如何处理?
  4. 感谢您的帮助!

    数据框示例

    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
    

    时间序列图 enter image description here

    我目前的方法是滚动窗口线性回归,然后检测高于阈值的斜率。但挑战是如何在所选择的数据窗口中拟合线性回归,在该窗口的某些天可能缺少数据。

    # 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,这不应该是预期的。

    enter image description here

0 个答案:

没有答案