【2024_CUMCM】时间序列算法ARMA

news2024/9/20 12:33:54

目录

2023-c-问题二

 问题分析

介绍

单位根检验

白噪声检验

自相关和偏自相关图 

利用信息准则定阶 

构建AMIMA模型

D-W检验 

预测

代码 


2023-c-问题二

 问题分析

ARMA适合多个领域的时间序列分析,不同时间的定价策略属于这类问题。

介绍

ARMA模型,全称为自回归移动平均模型(Autoregressive Integrated Moving Average Model),是一种常用于时间序列分析的统计模型。它结合了自回归模型(AR)移动平均模型(MA)的特性,能够描述时间序列数据中的自相关性和随机扰动之间的关系。ARMA模型通常表示为ARMA(p, q)形式,其中p表示自回归项的数量,q表示移动平均项的数量。

对时间序列的随机性和平稳性进行检验,根据检验的结果,可将序列分为不同的类型:

        纯随机序列(白噪声序列):序列的各项之间没有任何的相关关系,序列在进行完全无序的波动,对于这样的序列,ARMA选择放弃分析。

        平稳非白噪声序列:平稳的意思指该序列的均值和方差是常数,对于该类型的数据,我们通常建立一个线性拟合该序列的发展,比如使用ARMA。

        非平稳序列:它的均值和方差不稳定,处理方法一般是将其转化为平稳性数据,然后再使用ARMA算法。

单位根检验

用于判断时间序列是否有非平稳性

 输出:

原始序列的ADF检测结果为: (-3.5139213200446737, 0.007636680826067631, 13, 1071, {'1%': -3.436470487817901, '5%': -2.8642424166404, '10%': -2.5682088634756735}, 10564.986426036365)

p值为 0.007636680826067631<0.05,ADF值为-3.5139213200446746,同时小于1%= -3.436470487817901、5%=-2.8642424166404、10%=-2.5682088634756735即说明非常好地拒绝该假设,故为平稳序列,选择ARMA模型

白噪声检验

用于确定一个给定的数据集是否符合白噪声的特性。在实际应用中,白噪声检验可以用来评估数据的随机性,以及排除数据集中可能存在的非随机因素。

在python中,引入相关函数就可以直接判断是否为非白噪声

自相关和偏自相关图 

自相关是指一个时间序列与其自身在不同时间点的相似程度。它通常用于分析时间序列数据中的重复模式或周期性波动。

偏自相关是自相关的一种特殊形式,它考虑了时间序列中的滞后效应。偏自相关图是用来展示这种滞后效应的图形工具,观察偏自相关图,我们可以识别出时间序列中的潜在因果关系。

 这种图大多只需你会识别即可,如下图自相关图将显示出明显的峰值,数据序列中的未来值与过去值有较高的相关性。

 

利用信息准则定阶 

信息准则定阶是指使用AIC(赤池信息准则)或BIC(贝叶斯信息准则)等信息准则来确定ARMA模型的最佳阶数。帮助我们在不同的ARMA模型之间做出选择,找到那个既能很好地拟合数据,又不会过度拟合的数据。AIC和BIC都是基于模型复杂度和拟合优度的权衡。

在python中,利用statsmodels库,使用内置的方法来自动选择最佳的ARMA模型阶数。

构建AMIMA模型

上面的准则是为了得到参数order

绘制出如下诊断图(残差图、散点图、直方图、自相关图)

  • 残差图展示了模型残差与时间的关系。理想情况下,残差应该是随机噪声,不显示出任何明显的模式或趋势。

D-W检验 

D-W检验(Durbin-Watson检验),用于检测时间序列数据中自相关的统计测试。它主要用于检查模型残差是否存在自相关性。

D-W检验的值范围在0到4之间,接近2表示没有自相关,小于2表示正自相关,大于2表示负自相关。D-W检验的值越远离2,表明自相关性越强。

在Python中,可以使用statsmodels库来进行Durbin-Watson检验。

预测

主要关注p值和置信区间 

代码 

# %% [markdown]
# 考虑商超以品类为单位做补货计划,请分析各蔬菜品类的销售总量与成本加成
# 定价的关系,并给出各蔬菜品类未来一周(2023 年 7 月 1-7 日)的日补货总量和定价策略,
# 使得商超收益最大。

# %%
import numpy as np
import pandas as pd
import datetime
import seaborn as sns
from scipy import stats
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.model_selection import KFold
from statsmodels.graphics.tsaplots import acf,pacf,plot_acf, plot_pacf
from statsmodels.tsa.stattools import adfuller as ADF
from sklearn.metrics import mean_squared_error
import sys
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# %%
Category = pd.read_excel(r"D:\jianmo\2023年数学建模C\2023年数学建模C\附件1.xlsx")
Category

# %%
loss = pd.read_excel(r"D:\jianmo\2023年数学建模C\2023年数学建模C\附件2.xlsx")
loss

# %%
price = pd.read_excel(r"D:\jianmo\2023年数学建模C\2023年数学建模C\附件3.xlsx")
price

# %%
merge_data=pd.merge(price, loss, on="单品编码", how="left")
merge_data

# %%
category_sales = pd.read_excel(r"C:\Users\Administrator\Desktop\程序\data\save2.xlsx")
category_sales

# %%
# Group by date and category and sum the sales volume
daily_sales = category_sales.groupby(['销售日期', '分类名称'])['销量(千克)'].sum().reset_index()
daily_sales

# %%
daily_sales.info()

# %% [markdown]
# daily_sales=daily_sales.set_index('销售日期')
# daily_sales

# %%
plt.figure(figsize=(10, 5))
for category in daily_sales['分类名称'].unique():
    subset = daily_sales[daily_sales['分类名称'] == category]
    plt.plot(subset['销售日期'], subset['销量(千克)'], label=category)
plt.title('按时间分类的销售量趋势')
plt.xlabel('时间')
plt.ylabel('销量 (kg)')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

# %%
lj=daily_sales[daily_sales['分类名称'] == '辣椒类']
hy=daily_sales[daily_sales['分类名称'] == '花叶类']
hc=daily_sales[daily_sales['分类名称'] == '花菜类']
qz=daily_sales[daily_sales['分类名称'] == '茄类']
syj=daily_sales[daily_sales['分类名称'] == '食用菌']
ss=daily_sales[daily_sales['分类名称'] == '水生根茎类']

# %% [markdown]
# # 辣椒类预测

# %%
lj=lj.set_index('销售日期')
lj

# %%
#进行单位根检验
print('原始序列的ADF检测结果为:',ADF(lj['销量(千克)']))
#返回值依次为:adf,pvalue,usedleg,nobs,critrical value,icbest,regresults,resstore

# %% [markdown]
# pvalue= 0.007636680826067594< 0.5,ADF Test result=-3.5139213200446746,同时小于1%= -3.436470487817901、5%=-2.8642424166404、10%=-2.5682088634756735即说明非常好地拒绝该假设,故为平稳序列,选择ARMA模型

# %%
#白噪声数据没有分析价值,所以要进行白噪声检验
from statsmodels.stats.diagnostic import acorr_ljungbox as lb_test
p= lb_test(lj['销量(千克)']).iloc[0,1]
if p<0.05:
    print(u'原始序列为非白噪声序列')
else:
    print(u'原始序列为白噪声序列')

# %%
#绘制自相关、偏自相关图
plt.figure(figsize=(10,5))
plot_acf(lj['销量(千克)'])
plot_pacf(lj['销量(千克)'])
plt.show()

# %% [markdown]
# 两个都是拖尾,选择ARMA模型

# %%
import statsmodels.api as sm
def detetminante_order_AIC(timeseries): #信息准则定阶:AIC、BIC、HQIC
    #AIC
    AIC = sm.tsa.arma_order_select_ic(timeseries,\
        max_ar=6,max_ma=4,ic='aic')['aic_min_order']
    #BIC
    BIC = sm.tsa.arma_order_select_ic(timeseries,max_ar=6,\
           max_ma=4,ic='bic')['bic_min_order']
    #HQIC
    HQIC = sm.tsa.arma_order_select_ic(timeseries,max_ar=6,\
                 max_ma=4,ic='hqic')['hqic_min_order']
    print('the AIC is{},\nthe BIC is{}\n the HQIC is{}'.format(AIC,BIC,HQIC))

# %%
lj

# %%
lj_train_size = 1078
lj_test_size = len(lj) - lj_train_size
lj_train,lj_test = lj[0:lj_train_size], lj[lj_train_size:len(lj)]
lj_train

# %%
trend_evaluate = sm.tsa.arma_order_select_ic(lj_train['销量(千克)'], ic=['aic', 'bic'], trend='n', max_ar=20,
                                            max_ma=5)
print('train AIC', trend_evaluate.aic_min_order)
print('train BIC', trend_evaluate.bic_min_order)

# %%
detetminante_order_AIC(lj['销量(千克)'])

# %%
from statsmodels.tsa.arima.model import ARIMA #ARIMA模型
model=ARIMA(lj_train['销量(千克)'],order=(4,0,3)) #建立ARIMA(8,0)模型
model_fit=model.fit()
model_fit.plot_diagnostics(figsize=(12,8))

# %%
# D-W检验
 # DW趋近2,P=0,不存在自相关性
print(sm.stats.durbin_watson(model_fit.resid.values))

# %%
resid=model_fit.resid
fig=plt.figure(figsize=(16,12))
ax1=fig.add_subplot(211)
sm.graphics.tsa.plot_acf(resid,lags=15,ax=ax1)  #自相关系数

ax2=fig.add_subplot(212)
sm.graphics.tsa.plot_pacf(resid,lags=15,ax=ax2)  #偏相关系数

# %%
acf,q,p=sm.tsa.acf(resid.values.squeeze(),nlags=20,qstat=True)
data=np.c_[range(1,21),acf[1:],q,p]
table=pd.DataFrame(data,columns=["lag","AC","Q","P-value"])
print(table.set_index("lag"))

# %%
fc= model_fit.forecast(7)  # 95% conf
fc

# %%
print('模型报告为:\n',model_fit.summary())

# %%
fc_series = pd.DataFrame(fc, index=lj_test.index)
fc_series

# %%
forcast=pd.DataFrame(fc)
forcast

# %%
dates = pd.date_range('2023-06-24',periods=7)

# %%
forcast.index=dates
forcast

# %%
plt.figure(figsize=(10,5), dpi=100)
plt.plot(lj_train['销量(千克)'], label='training')
plt.plot(lj_test['销量(千克)'], label='actual')
plt.plot(forcast , label='forecast')
plt.title('Forecast vs Actuals')
plt.xlabel('时间')
plt.ylabel('销量 (kg)')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %%
lj_model=ARIMA(lj['销量(千克)'],order=(4,0,3)) #建立ARIMA(8,0)模型
lj_model_fit=lj_model.fit()
pre_lj=lj_model_fit.forecast(7)
pre_lj

# %%
forcast_lj=pd.DataFrame(pre_lj)
dateslj = pd.date_range('2023-07-01',periods=7)
forcast_lj.index=dateslj
forcast_lj

# %%
plt.figure(figsize=(10,5), dpi=100)
plt.plot(lj['销量(千克)'], label='actual')
plt.plot(forcast_lj , label='forecast')
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %% [markdown]
# # 花叶类预测

# %%
from statsmodels.tsa.stattools import adfuller #ADF检验
def ADF_test(timeseries): ## 用于检测序列是否平稳
    x = np.array(timeseries['销量(千克)'])
    adftest = adfuller(x, autolag='AIC')
    #print (adftest) 
    if adftest[0] < adftest[4]["1%"] and adftest[1] < 10**(-8): 
    # 对比Adf结果和10%的时的假设检验 以及 P-value是否非常接近0(越小越好)
        print("序列平稳")
        return True 
    else:
        print("非平稳序列")
        return False

# %%
ADF_test(hy)

# %%
hy=hy.set_index('销售日期')
#进行单位根检验
print('原始序列的ADF检测结果为:',ADF(hy['销量(千克)']))
#返回值依次为:adf,pvalue,usedleg,nobs,critrical value,icbest,regresults,resstore

# %% [markdown]
# 非平稳时间序列,故选择ARIMA模型

# %%
## 做差分,检查平稳性
def diff(timeseries):
    time_diff1=timeseries.diff(1).fillna(0) #1阶差分
    time_diff2=time_diff1.diff(1).fillna(0) #2阶差分

    time_adf=ADF(timeseries)
    time_diff1_adf=ADF(time_diff1)
    time_diff2_adf=ADF(time_diff2)
    
    fig = plt.figure(figsize=(10, 5))
    ax1 = fig.add_subplot(111)
    time_diff1.plot(ax=ax1)
    plt.title('一阶差分图')
    return [time_diff1_adf,time_diff2_adf]

diff(hy['销量(千克)'])

# %%
def autocorr(time_series,lags):
    fig=plt.figure(figsize=(12,8))
    ax1=fig.add_subplot(211)
    sm.graphics.tsa.plot_acf(time_series,lags=lags,ax=ax1)

    ax2=fig.add_subplot(212)
    sm.graphics.tsa.plot_pacf(time_series,lags=lags,ax=ax2)

    plt.show()

hy_diff1=hy['销量(千克)'].diff(1).fillna(0) 
#hy_diff2=hy_diff1.diff(1).fillna(0) 
autocorr(hy_diff1,30) 

# %% [markdown]
# 选择d=1

# %%
train_size_hy=len(hy)-7
train_hy,test_hy = hy[0:train_size_hy], lj[train_size_hy:len(hy)]

# %%
detetminante_order_AIC(train_hy['销量(千克)'])

# %%
arma_64=sm.tsa.SARIMAX(train_hy['销量(千克)'],order=(6,1,4)).fit()
print("arma_64",arma_64.aic,arma_64.bic,arma_64.hqic)

arma_34=sm.tsa.SARIMAX(train_hy['销量(千克)'],order=(3,1,4)).fit()
print("arma_34",arma_34.aic,arma_34.bic,arma_34.hqic)


# %%
def Arima(train,test,order):
    model=ARIMA(train['销量(千克)'],order=order) #建立ARIMA(8,0)模型
    model_fit=model.fit()
    fc= model_fit.forecast(7, alpha=0.05)  # 95% conf
    print('模型报告为:\n',model_fit.summary())
    fc_series = pd.DataFrame(fc, index=test.index)
    forcast=pd.DataFrame(fc)
    dates = pd.date_range('2023-06-24',periods=7)
    forcast.index=dates
    plt.figure(figsize=(10,5), dpi=100)
    plt.plot(train['销量(千克)'], label='training')
    plt.plot(test['销量(千克)'], label='actual')
    plt.plot(forcast , label='forecast')
    plt.title('Forecast vs Actuals')
    plt.legend(loc='upper left')
    plt.show()
    R_squared = 1- (mean_squared_error(test['销量(千克)'],forcast)/ np.var(test))
    return model_fit,forcast,R_squared

# %%
forcast_hy,R=Arima(train_hy,test_hy,order=(6,1,4))
print(R)

# %%
arma_64.plot_diagnostics(figsize=(10,8))

# %%
# D-W检验
 # DW趋近2,P=0,不存在自相关性
print(sm.stats.durbin_watson(arma_64.resid.values))

# %%
resid_hy=arma_64.resid
fig=plt.figure(figsize=(16,12))
ax1=fig.add_subplot(211)
sm.graphics.tsa.plot_acf(resid_hy,lags=15,ax=ax1)  #自相关系数

ax2=fig.add_subplot(212)
sm.graphics.tsa.plot_pacf(resid_hy,lags=15,ax=ax2)  #偏相关系数

# %%
from statsmodels.tsa.arima.model import ARIMA #ARIMA模型
model_hy=ARIMA(hy['销量(千克)'],order=(6,1,4)) #建立ARIMA(8,0)模型
model_fit_hy=model_hy.fit()
fc_hy= model_fit_hy.forecast(7, alpha=0.05)  # 95% conf
print(fc_hy)
print('模型报告为:\n',model_fit_hy.summary())

# %%
forcast_hy=pd.DataFrame(fc_hy)
dates_hy = pd.date_range('2023-07-01',periods=7)
forcast_hy.index=dates_hy
forcast_hy

# %%
def Pre(data,pre_data):
    plt.figure(figsize=(10,5), dpi=100)
    plt.plot(data['销量(千克)'], label='actual')
    plt.plot(pre_data , label='forecast')
    plt.title('Forecast vs Actuals')
    plt.legend(loc='upper left', fontsize=8)
    plt.show()

# %%
Pre(hy,forcast_hy)

# %% [markdown]
# # 花菜类预测

# %%
hc

# %%
plt.figure(figsize=(20, 10))
plt.plot(hc.index,hc['销量(千克)'])
plt.title('花菜类销售量趋势')
plt.xlabel('时间')
plt.ylabel('销量 (kg)')

# %%
#平稳性检验
ADF_test(hc)

# %%
hc=hc.set_index('销售日期')
#进行单位根检验
print('原始序列的ADF检测结果为:',ADF(hc['销量(千克)']))
#返回值依次为:adf,pvalue,usedleg,nobs,critrical value,icbest,regresults,resstore

# %%
diff(hc['销量(千克)'])

# %%
train_size2 = len(hc)-7
test_size2 = len(hc) - train_size2
train2,test2 = hc[0:train_size2], hc[train_size2:len(hc)]

# %%


# %%
detetminante_order_AIC(train2['销量(千克)'])

# %%
model_hc,forcast_hc,R=Arima(train2,test2,order=(3,1,4))

# %%
model_hc.plot_diagnostics(figsize=(12,8))

# %%
forecasthc2=pd.DataFrame(forecasthc1)
dates1 = pd.date_range('2023-07-01',periods=7)
forecasthc2.index=dates1
forecasthc2

# %%
Pre(hc,forecasthc2)

# %% [markdown]
# # 茄类预测

# %%
qz

# %%
ADF_test(qz)

# %%
qz=qz.set_index('销售日期')
#进行单位根检验
print('原始序列的ADF检测结果为:',ADF(qz['销量(千克)']))
#返回值依次为:adf,pvalue,usedleg,nobs,critrical value,icbest,regresults,resstore

# %% [markdown]
# 平稳时间序列,使用ARMA模型

# %%
p= lb_test(qz['销量(千克)']).iloc[0,1]
if p<0.05:
    print(u'原始序列为非白噪声序列')
else:
    print(u'原始序列为白噪声序列')

# %%
#绘制自相关、偏自相关图
plt.figure(figsize=(20,5))
plot_acf(qz['销量(千克)'])
plot_pacf(qz['销量(千克)'])
plt.show()

# %%
train_size3 = len(qz) -7
test_size3 = len(qz) - train_size3
train3,test3 = qz[0:train_size3], qz[train_size3:len(qz)]

# %%
train3

# %%
detetminante_order_AIC(train3['销量(千克)'])

# %%
model4=ARIMA(train3['销量(千克)'],order=(4,0,4)) #建立ARIMA(8,0)模型
model_fit4=model4.fit()
forcastqz= model_fit4.forecast(7, alpha=0.05)  # 95% conf
print('模型报告为:\n',model_fit4.summary())

# %%
forcastqz

# %%
forcastqz=pd.DataFrame(forcastqz)
dates = pd.date_range('2023-06-24',periods=7)
forcastqz.index=dates
forcastqz

# %%
plt.figure(figsize=(10,5), dpi=100)
plt.plot(train3.index,train3['销量(千克)'], label='training')
plt.plot(test3.index,test3['销量(千克)'], label='actual')
plt.plot(forcastqz, label='forecast')
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %%
from statsmodels.tsa.arima.model import ARIMA #ARIMA模型
modelqz=ARIMA(qz['销量(千克)'],order=(4,0,4)) #建立ARIMA(8,0)模型
model_fitqz=modelqz.fit()
forecastqz1= model_fitqz.forecast(7, alpha=0.05)  # 95% conf
print(forecastqz1)
print('模型报告为:\n',model_fitqz.summary())

# %%
forecastqz2=pd.DataFrame(forecastqz1)
dates1 = pd.date_range('2023-07-01',periods=7)
forecastqz2.index=dates1
forecastqz2

# %%
plt.figure(figsize=(10,5), dpi=100)
plt.plot(qz['销售日期'],qz['销量(千克)'], label='actual')
plt.plot(forecastqz2.index,forecastqz2 , label='forecast')
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %% [markdown]
# # 食用菌预测

# %%
syj

# %%
#ADF_test(syj)
#syj=syj.set_index('销售日期')
#进行单位根检验
print('原始序列的ADF检测结果为:',ADF(syj['销量(千克)']))
#返回值依次为:adf,pvalue,usedleg,nobs,critrical value,icbest,regresults,resstore

# %% [markdown]
# 平稳,用ARMA模型

# %%
detetminante_order_AIC(syj['销量(千克)'])

# %%
train_size4 = len(syj) -7
test_size4= len(syj) - train_size4
train4,test4 = syj[0:train_size4], syj[train_size4:len(syj)]
test4

# %%
model5=ARIMA(train4['销量(千克)'],order=(3,0,3)) #建立ARIMA(8,0)模型
model_fit5=model5.fit()
forcastsyj= model_fit5.forecast(7, alpha=0.05)  # 95% conf
print('模型报告为:\n',model_fit5.summary())

# %%
forcastsyj

# %%
forcastsyj=pd.DataFrame(forcastsyj)
dates = pd.date_range('2023-06-24',periods=7)
forcastsyj.index=dates
plt.figure(figsize=(10,5), dpi=100)
plt.plot(train4['销量(千克)'], label='training')
plt.plot(test4['销量(千克)'], label='actual')
plt.plot(forcastsyj , label='forecast')
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %%
from statsmodels.tsa.arima.model import ARIMA #ARIMA模型
modelsyj=ARIMA(syj['销量(千克)'],order=(3,0,3)) #建立ARIMA(8,0)模型
model_fitsyj=modelsyj.fit()
forecastsyj1= model_fitsyj.forecast(7, alpha=0.05)  # 95% conf
print(forecastsyj1)
print('模型报告为:\n',model_fitsyj.summary())

# %%
forecastsyj2=pd.DataFrame(forecastsyj1)
dates1 = pd.date_range('2023-07-01',periods=7)
forecastsyj2.index=dates1
print(forecastsyj2)
Pre(syj,forecastsyj2)

# %%
ss

# %%
ADF_test(ss)
ss=ss.set_index('销售日期')
#进行单位根检验
print('原始序列的ADF检测结果为:',ADF(ss['销量(千克)']))
#返回值依次为:adf,pvalue,usedleg,nobs,critrical value,icbest,regresults,resstore

# %%
#一阶差分
fig = plt.figure(figsize=(12, 8))
ax1 = fig.add_subplot(111)
diffss1 = ss['销量(千克)'].diff(1)
diffss1.plot(ax=ax1)

# %%
detetminante_order_AIC(ss['销量(千克)'])

# %%
train_size5 = len(ss) -7
test_size5= len(ss) - train_size5
train5,test5 = ss[0:train_size5], ss[train_size5:len(ss)]
model6=ARIMA(train5['销量(千克)'],order=(5,1,3)) #建立ARIMA(8,0)模型
model_fit6=model6.fit()
forcastss= model_fit6.forecast(7, alpha=0.05)  # 95% conf
print('模型报告为:\n',model_fit6.summary())

# %%
forcastss=pd.DataFrame(forcastss)
dates = pd.date_range('2023-06-25',periods=7)
forcastss.index=dates
plt.figure(figsize=(10,5), dpi=100)
plt.plot(train5['销量(千克)'], label='training')
plt.plot(test5['销量(千克)'], label='actual')
plt.plot(forcastss , label='forecast')
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %%
from statsmodels.tsa.arima.model import ARIMA #ARIMA模型
modelss=ARIMA(ss['销量(千克)'],order=(5,1,3)) #建立ARIMA(8,0)模型
model_fitss=modelss.fit()
forecastss1= model_fitss.forecast(7, alpha=0.05)  # 95% conf
print(forecastss1)
print('模型报告为:\n',model_fitss.summary())

# %%
forecastss2=pd.DataFrame(forecastss1)
dates1 = pd.date_range('2023-07-01',periods=7)
forecastss2.index=dates1
print(forecastss2)
Pre(syj,forecastss2)

# %%
plt.figure(figsize=(10,5), dpi=100)
plt.plot(forcast_lj,label='辣椒类')
plt.plot(forcast_hy,label='花叶类')
plt.plot(forecasthc2,label='花菜类')
plt.plot(forecastqz2,label='茄类')
plt.plot(forecastsyj2,label='食用菌')
plt.plot(forecastss2,label='水生根茎类')
plt.xlabel('销售时间')
plt.ylabel('销量(千克)')
plt.title('6种蔬菜品类未来七天的预测值')
plt.legend(loc='upper left', fontsize=8)
plt.show()

# %%
del lj['分类名称']
del hy['分类名称']
del hc['分类名称']
del qz['分类名称']
del syj['分类名称']
del ss['分类名称']

# %%
forcast_lj.rename(columns={'predicted_mean':'销量(千克)'},inplace=True)
forcast_hy.rename(columns={'predicted_mean':'销量(千克)'},inplace=True)
forecasthc2.rename(columns={'predicted_mean':'销量(千克)'},inplace=True)
forecastqz2.rename(columns={'predicted_mean':'销量(千克)'},inplace=True)
forecastsyj2.rename(columns={'predicted_mean':'销量(千克)'},inplace=True)
forecastss2.rename(columns={'predicted_mean':'销量(千克)'},inplace=True)

# %%
ljc=['辣椒类']*7
hyc=['花叶类']*7
hcc=['花菜类']*7
qzc=['茄类']*7
syjc=['食用菌']*7
ssc=['水生根茎类']*7

# %%
forcast_lj['分类名称']=ljc
forcast_hy['分类名称']=hyc
forecasthc2['分类名称']=hcc
forecastqz2['分类名称']=qzc
forecastsyj2['分类名称']=syjc
forecastss2['分类名称']=ssc

# %%
sales_predict= pd.concat([forcast_lj,forcast_hy,forecasthc2,forecastqz2,forecastsyj2,forecastss2])

# %%
sales_predict

# %%
sales_predict.to_csv(r"C:\Users\Administrator\Desktop\程序\data\各品类未来一周销量的ARIMA预测.csv", index=True)

# %%

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一.2.(4)放大电路静态工作点的稳定;(未完待续)

1.Rb对Q点及Au的影响 输入特性曲线&#xff1a;Rb减少&#xff0c;IBQ&#xff0c;UBEQ增大 输出特性曲线&#xff1a;ICQ增大&#xff0c;UCEQ减少 AUUO/Ui分子减少&#xff0c;分母增大&#xff0c;但由于分子带负号&#xff0c;所以|Au|减少 2.Rc对Q点及Au的影响 输入特性曲…

2024暑假集训

Day1——枚举 Day2——测试 Day3——贪心 Day4、5——测试 ——————————————————————————————————————————— Day3T7&Day5T7:没思路 Day3T8:不知道怎么排序筛选 Day5T5:没有算法难度&#xff0c;但是不知道怎么处理2队奶牛的情…

【大数据综合试验区1008】揭秘企业数字化转型:大数据试验区政策数据集大公开!

今天给大家分享的是国内顶级期刊中国工业经济2023年发布的最新期刊《政策赋能、数字生态与企业数字化转型——基于国家大数据综合试验区的准自然实验》文章中所使用到的数据集——国家大数据综合试验区政策数据集以及工具变量数据&#xff0c;该文章基于2009-2019年中国上市企业…

PYTHON自学笔记(一)vscode配置

安装python 自行官网下载 安装vscode 自行官网下载 环境变量设置 把python和scripts的文件路径&#xff0c;添加到环境变量的path中&#xff0c;如图&#xff1a; 此项不弄&#xff0c;在命令行模式中系统不会认为你装了python和pip&#xff0c;你的输入相关命令shell不会…

扩散模型笔记

长参数“T”决定了生成全噪声图像所需的步长。在本文中&#xff0c;该参数被设置为1000&#xff0c;这可能显得很大。我们真的需要为数据集中的每个原始图像创建1000个噪声图像吗?马尔可夫链方面被证明有助于解决这个问题。由于我们只需要上一步的图像来预测下一步&#xff0c…

STL复习-序列式容器和容器适配器部分

STL复习 1. 常见的容器 如何介绍这些容器&#xff0c;分别从常见接口&#xff0c;迭代器类型&#xff0c;底层实现 序列式容器 string string严格来说不属于stl&#xff0c;它是属于C标准库 **底层实现&#xff1a;**string本质是char类型的顺序表&#xff0c;因为不同编译…

windows系统本地端口被占用的问题

第一步&#xff1a;查找所有运行的端口 按住“WindowsR”组合键&#xff0c;打开命令窗口&#xff0c;输入【cmd】命令&#xff0c;回车。在弹出的窗口中输入 命令【netstat -ano】&#xff0c;再按一下回车键 Win系统端口被占用-查找所有运行的端口 第二步&#xff1a;查看…

基于Android Studio电影购票系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 主要实为了方便用户随时随地进行电影购票。在配色方面选择了一些富有电影元素的颜色。主要能够实现的功能与流程为&#xff1a; 1.用户首先需要注册用户名填写密码。 2.用户可以用之前注册的用户名和密码进行登录。 3.登…

ComfyUI+MuseV+MuseTalk图片数字人

电脑配置 GPU12G&#xff0c;如果自己电脑配置不够&#xff0c;选择云gpu&#xff0c;我就是用的这个&#xff0c;自己电脑太老配置跟不上 环境&#xff1a; Python 3.11.8 torch 2.2.1 cuda_12.1 资源提供&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_idZbF…

跟《经济学人》学英文:2024年07月06日这期:Japan’s mind-bending bento-box economics

Japan’s mind-bending bento-box economics 日本令人费解的便当盒经济学 mind-bending&#xff1a;使人知觉不正常的&#xff1b;使人精神恍惚的&#xff1b;使人精神错乱的 bento&#xff1a;美 [bentoʊ] 盒饭&#xff1b;盒饭或饭盒 The paradox of red-hot labour mar…

浅尝Apache Mesos

文章目录 1. Mesos是什么2. 共享集群3. Apache Mesos3.1 Mesos主节点3.2 Mesos代理3.3 Mesos框架 4. 资源管理4.1 资源提供4.2 资源角色4.3 资源预留4.4 资源权重与配额 5. 实现框架5.1 框架主类5.3 实现执行器 6. 小结参考 1. Mesos是什么 Mesos是什么&#xff0c;Mesos是一个…

昇思25天学习打卡营第14天|Pix2Pix实现图像转换

Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Adversarial Networks &#xff09;实现的一种深度学习图像转换模型&#xff0c;该模型是由Phillip Isola等作者在2017年CVPR上提出的&#xff0c;可以实现语义/标签到真实图片、灰度图到彩色图、航空图到…

【js基础巩固】深入理解作用域与作用域链

作用域链 先看一段代码&#xff0c;下面代码输出的结果是什么&#xff1f; function bar() {console.log(myName) } function foo() {var myName "极客邦"bar() } var myName "极客时间" foo()当执行到 console.log(myName) 这句代码的时候&#xff0c…

acwing 291.蒙德里安的梦想

解法&#xff1a; 核心&#xff1a;先放横着的&#xff0c;再放竖着的。 总方案数&#xff0c;等于只放横着的小方块的合法方案数。 如何判断当前方案是否合法&#xff1f;所有剩余位置&#xff0c;能否填充满竖着的小方块。 即按列来看&#xff0c;每一列内部所有连续的空着的…

第六十八回 东平府误陷九纹龙 宋公明义释双枪将-文心大模型ernie-speed免费使用方法

宋江和卢俊义抓阄儿&#xff0c;宋江打东平府&#xff0c;卢俊义打东昌府&#xff0c;谁先打下谁做梁山泊主。宋江带领林冲、花荣、刘唐等二十八人&#xff0c;卢俊义带领吴用、公孙胜、关胜等二十八人。 宋江等人到了东平府外安山镇&#xff0c;郁保四和王定六自告奋勇去下战…

搭建NEMU与QEMU的DiffTest环境(动态库方式)

搭建NEMU与QEMU的DiffTest环境&#xff08;动态库方式&#xff09; 1 DiffTest原理简述2 编译NEMU3 编译qemu-dl-difftest3.1 修改NEMU/scripts/isa.mk3.2 修改NEMU/tools/qemu-dl-diff/src/diff-test.c3.3 修改NEMU/scripts/build.mk3.4 让qemu-dl-difftest带调试信息3.5 编译…

昇思12天

FCN图像语义分割 1. 主题和背景 FCN是由UC Berkeley的Jonathan Long等人于2015年提出的&#xff0c;用于实现图像的像素级预测。 2. 语义分割的定义和重要性 语义分割是图像处理和机器视觉中的关键技术&#xff0c;旨在对图像中的每个像素进行分类。它在很多领域有重要应用…

【问题解决】 pyocd 报错 No USB backend found 的解决方法

pyocd 报错 No USB backend found 的解决方法 本文记录了我在Windows 10系统上遇到的pyocd命令执行报错——No USB backend found 的分析过程和解决方法。遇到类似问题的朋友可以直接参考最后的解决方法&#xff0c;向了解问题发送原因的可以查看原因分析部分。 文章目录 pyoc…

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建等高级进阶

目录 第一章 ChatGPT-4o使用进阶 第二章 大语言模型原理详解 第三章 大语言模型优化 第四章 开源大语言模型及本地部署 第五章 从0到1搭建第一个大语言模型 第六章 智能体&#xff08;Agent&#xff09;构建 第七章 大语言模型发展趋势 第八章 总结与答疑讨论 更多应用…

端口被占用,使用小黑框查杀

netstat -ano &#xff08;查看目前所有被占的端口&#xff09; netstat -ano|findstr " 8080" 查一下目前被占用的端口号 &#xff0c;目前我要查的端口号是&#xff1a;8080&#xff0c;注意 后面打8080的时候&#xff0c;要有空格&#xff0c;要不然报错 **task…