• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
冰蝶儿
博客园    首页    新随笔    联系   管理    订阅  订阅

Python_自编程序实现时间序列分解法预测

from sklearn import linear_model
import numpy as np
import pandas as pd


def time_series_decomposition(data, n):
    """
    时间序列分解
    预测n个值
    """
    #求四项平均和居中平均TC
    #data['四项平均'].iloc[2:len(data)-2] =  data['销售额'].rolling(4).mean()[3:].tolist()
    data.loc[2:len(data)-2, '四项平均'] = data['销售额'].rolling(4).mean()[3:].tolist()
    data.loc[2:len(data)-2, '居中平均TC'] = data['四项平均'].rolling(2).mean()[3:].tolist()
    #求Y/TC=SI(%)
    data['SI'] = data['销售额']/data['居中平均TC']*100
    #长期趋势T
    t = np.arange(1,len(data)+1).tolist()
    y = np.array(data['销售额']).reshape(-1, 1)
    x = np.array(t).reshape(-1, 1)
    model = linear_model.LinearRegression()
    model.fit(x, y)
    data['长期趋势T'] = model.predict(x)
    #周期变动C
    data['周期变动C'] = data['居中平均TC']/data['长期趋势T']*100
    #求季节指数
    data.index = pd.to_datetime(data['time'], format='%Y-%m-%d %H:%M:%S')    
    data['month'] = data.index.month
    SI_ = data['SI'].groupby(data['month']).mean()
    SI_x = 400/np.sum(SI_)   #修正系数
    #修正后的季节指数
    SI = SI_*SI_x
    
    #预测
    #周期变动本方法采取历史变动值的均值
    result = []
    for i in range(n+1)[1:]:
        yushu = i % 4
        tt = t[-1]+i
        T = model.predict([[tt]])
        S = list(SI)[yushu-1]/100
        C = np.mean(data['周期变动C'])/100
        Y = T*S*C    #预测
        result.append(Y[0][0]) 
    return result

#读取数据
data = pd.read_excel(u'D:\\Personal\\Desktop\\销售额季度数据.xlsx', sheet_name=0)
n = 1
y = time_series_decomposition(data, n)
print(y)

 

posted @ 2020-05-11 16:07  冰蝶儿  阅读(298)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3