【2024_CUMCM】时间序列算法ARMA

目录

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)

# %%

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PingCAP 成为全球数据库管理系统市场增速最快的厂商

近日&#xff0c;Gartner 发布的《Market Share Analysis: Database Management Systems, Worldwide, 2023》&#xff08;2024 年 6 月&#xff09;报告显示&#xff1a;“2023 年全球数据库管理系统&#xff08;DBMS&#xff09;市场的增长率为 13.4%&#xff0c;略低于去年的…

我国网络安全领域有哪些法律法规?主要内容是什么?

1. 背景介绍 网络信息安全方面的法规在全球范围内都有相应的立法&#xff0c;我们主要的立法有《网络安全法》、《密码法》、《数据安全法》以及《个人信息保护法》。当前也有一些相关的条例和管理办法&#xff0c;接下来就为大家一一介绍。 2. 法规介绍 在中国&#xff0c;…

博客搭建-图床篇

我们的博客难免少不了图片&#xff0c;图片管理是一个不小的难题。如果我们将图片全部放到我们自己的服务器上&#xff0c;那么带宽就基本上会被图片所占满了&#xff0c;这会导致网站加载很慢&#xff08;特别是图片加载很慢&#xff09;。 ‍ 什么是图床 为了解决图片的问…

Python28-7.5 降维算法之t-分布邻域嵌入t-SNE

t-分布邻域嵌入&#xff08;t-distributed Stochastic Neighbor Embedding&#xff0c;t-SNE&#xff09;是一种用于数据降维和可视化的机器学习算法&#xff0c;尤其适用于高维数据的降维。t-SNE通过将高维数据嵌入到低维空间&#xff08;通常是二维或三维&#xff09;中&…

大数据之路 读书笔记 Day4 数据同步

回顾&#xff1a; Day 3 总结了无限客户端的日志采集 大数据之路 读书笔记 Day 3Day 2总结了浏览器端的日志采集 大数据之路 读书笔记 Day 2 数据同步 阿里数据体系中的数据同步&#xff0c;主要指的是在不同的数据存储系统之间进行数据的传输与更新&#xff0c;以保证数据的一…

人工智能系列-Python面向对象编程

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 面向对象编程和面向过程编程 在使用计算机语言进行代码编写时&#xff0c;常见的两种思路是面向对象编程和面向过程编程。 面向过程&#xff1a;根据业务逻辑从上到下写代码。…

GDP播放器 驱动视频播放器 PHP 系统源码 v4.4.3

最重要的是我们自己开发了源代码&#xff0c;因此无论您在使用此工具时遇到什么问题&#xff0c;我们都会快速解决。这个版本演示 分别支持PHP7.4/8.1/8.2三个版本 演示地址

大华DSS user_toLoginPage.action命令执行漏洞

免责声明 本文章仅做网络安全技术研究使用&#xff01;严禁用于非法犯罪行为&#xff0c;请严格遵守国家法律法规&#xff1b;请勿利用文章内的相关技术从事非法测试&#xff0c;如因此产生的一切不良后果与文章作者无关。使用本文所提供的信息或工具即视为同意本免责声明&…

华为云简介

前言 华为云是华为的云服务品牌&#xff0c;将华为30多年在ICT领域的技术积累和产品解决方案开放给客户&#xff0c;致力于提供稳定可靠、安全可信、可持续创新的云服务&#xff0c;赋能应用、使能数据、做智能世界的“黑土地”&#xff0c;推进实现“用得起、用得好、用得放心…

µCOS-III 任务同步机制-任务信号量

1. 什么是任务信号量 任务信号量是一种用于任务间同步和通信的计数器&#xff0c;通常用于解决任务间的竞争条件和资源共享问题。在C/OS-III中&#xff0c;任务信号量提供了二进制信号量和计数信号量两种类型&#xff1a; 二进制信号量&#xff1a;只能取值0或1&#xff0c;适…

昇思12天

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

ImportError: DLL load failed while importing _imaging: 操作系统无法运行 %1

解决方案&#xff1a; &#xff08;1&#xff09;搜索打开Anaconda Prompt控制台&#xff0c;进入到自己要安装的环境下面去&#xff0c;卸载Pillow:pip uninstall Pillow 没有安装Pillow的就不用卸载&#xff0c;直接安装&#xff0c; &#xff08;2&#xff09;然后再安装&a…

[优化算法]梯度下降法-凸函数的收敛性

文章目录 1. 三个条件2. 二次上界引理3. 证明 1. 三个条件 f f f 有下界&#xff0c;可微&#xff0c;凸函数 ∇ f \nabla f ∇f是 Lipschitz连续步长 α ∈ ( 0 , 1 L ] \alpha \in (0,\frac{1}{L}] α∈(0,L1​] 则 { f ( x k ) } \{ f(x_k) \} {f(xk​)} 以 O ( 1 k ) \m…

53-1 内网代理3 - Netsh端口转发(推荐)

靶场还是用上一篇文章搭建的靶场 :52-5 内网代理2 - LCX端口转发(不推荐使用LCX)-CSDN博客 一、Netsh 实现端口转发 Netsh是Windows自带的命令行脚本工具,可用于配置端口转发。在一个典型的场景中,如果我们位于公网无法直接访问内网的Web服务器,可以利用中间的跳板机通过…

人工智能写作对话系统源码 自然语言的处理能力 前后端分离 带完整的安装代码包以及搭建教程

系统概述 随着互联网信息爆炸式增长&#xff0c;用户对于高质量、个性化内容的需求日益增长&#xff0c;而传统的内容生成方式已难以满足这一需求。另一方面&#xff0c;深度学习和自然语言处理技术的突破性进展&#xff0c;为人机交互提供了新的可能。本项目正是在此背景下应…

使用OpenCV与PySide(PyQt)的视觉检测小项目练习

OpenCV 提供了丰富的图像处理和计算机视觉功能&#xff0c;可以实现各种复杂的图像处理任务&#xff0c;如目标检测、人脸识别、图像分割等。 PyQt(或PySide)是一个创建GUI应用程序的工具包&#xff0c;它是Python编程语言和Qt库的成功融合。Qt库是最强大的GUI库之一。Qt的快速…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【明文导入密钥(C/C++)】

明文导入密钥(C/C) 以明文导入ECC密钥为例。具体的场景介绍及支持的算法规格 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 指定密钥别名keyAlias。 密钥别名的最大长度为64字节。 封装密钥属性集和密钥材料。通过[OH_Huks_I…

linux RTC时钟时间出现了明显的偏移

RTC时钟时间出现了明显的偏移 1、开发环境2、问题阐述3、验证问题3.1、首先去排查了硬件电路和芯片电压不稳定的问题。3.2、晶振的问题。3.3、芯片本身3.4、芯片寄存器 4、代码修改 1、开发环境 平台&#xff1a;imx6ul kernel版本&#xff1a;linux4.1.5 RTC芯片&#xff1a;…

18_特征金字塔网络FPN结构详解

1.1 简介 在深度学习领域&#xff0c;尤其是计算机视觉和目标检测任务中&#xff0c;Feature Pyramid Networks (FPN) 是一种革命性的架构设计&#xff0c;它解决了多尺度特征检测和融合的关键问题。FPN最初由何凯明等人在2017年的论文《Feature Pyramid Networks for Object …