【问题标题】:Package for time series analysis in python [closed]python中的时间序列分析包[关闭]
【发布时间】:2024-01-17 01:47:01
【问题描述】:

我正在研究 python 中的时间序列。我发现有用且有前途的库是

  • 熊猫;
  • statsmodel(用于 ARIMA);
  • pandas 提供了简单的指数平滑。

也用于可视化:matplotlib

有人知道指数平滑的库吗?

【问题讨论】:

    标签: python pandas time-series forecasting statsmodels


    【解决方案1】:

    Pandas 具有指数加权的移动矩函数

    http://pandas.pydata.org/pandas-docs/dev/computation.html?highlight=exponential#exponentially-weighted-moment-functions

    顺便说一句,scikits.timeseries 包中不应该有任何功能在 pandas 中没有。

    编辑:由于这仍然是一个流行的问题,现在有一个正在进行的拉取请求,以向 statsmodels here添加更多功能齐全的指数平滑

    【讨论】:

    • 非常感谢您的更新和出色的工作。
    【解决方案2】:

    您可以使用 Pandas 指数加权移动平均线 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.stats.moments.ewma.html 预测未来值

    from pandas.stats.moments import ewma
    import numpy as np
    
    pred_period = 12
    
    def predict(x,span,periods = pred_period):     
        x_predict = np.zeros((span+periods,))
        x_predict[:span] = x[-span:]
        pred =  ewma(x_predict,span)[span:]
    
        return pred
    

    【讨论】:

      【解决方案3】:

      有些问题不知何故被合并或删除,所以我会在这里发布我的答案。

      Python 原生的 Exp 平滑。

      '''
      simple exponential smoothing
      go back to last N values
      y_t = a * y_t + a * (1-a)^1 * y_t-1 + a * (1-a)^2 * y_t-2 + ... + a*(1-a)^n * y_t-n
      '''
      from random import random,randint
      
      def gen_weights(a,N):
          ws = list()
          for i in range(N):
              w = a * ((1-a)**i)
              ws.append(w)
          return ws
      
      def weighted(data,ws):
          wt = list()
          for i,x in enumerate(data):
              wt.append(x*ws[i])
          return wt
      
      N = 10
      a = 0.5
      ws = gen_weights(a,N)
      data = [randint(0,100) for r in xrange(N)]
      weighted_data = weighted(data,ws)
      print 'data: ',data
      print 'weights: ',ws
      print 'weighted data: ',weighted_data
      print 'weighted avg: ',sum(weighted_data)
      

      【讨论】: