【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#AICAIC = sm.tsa.arma_order_select_ic(timeseries,\max_ar=6,max_ma=4,ic='aic')['aic_min_order']#BICBIC = sm.tsa.arma_order_select_ic(timeseries,max_ar=6,\max_ma=4,ic='bic')['bic_min_order']#HQICHQIC = 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% confprint('模型报告为:\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=datesplt.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.xdnf.cn/news/1474647.html

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

相关文章

昇思25天学习打卡营第14天|基于MindNLP的文本解码原理

基于MindNLP的文本解码原理 文本解码 文本解码是自然语言处理中的一个关键步骤,特别是在任务如机器翻译、文本摘要、自动回复生成等领域。解码过程涉及将编码器(如语言模型、翻译模型等)的输出转换为可读的文本序列。以下是一些常见的文本解码方法和原理: 1. 自回归解码:…

10 docker 安装 mysql详解

目录 一、安装mysql 1. 镜像获取 2. 简单版 2.1. 使用mysql镜像 2.2. 建库建表插入数据 2.3. 外部win 连接并插入中文数据测试 2.4. 简单版本问题 3. 创建容器-实战版 3.1. 新建容器实列并挂载卷 3.2. 新建my.cnf , 解决中文乱码 3.3. 重启容器验证 3.4. 总结 一、…

BigDecimal(double)和BigDecimal(String)有什么区别?BigDecimal如何精确计数?

BigDecimal(double)和BigDecimal(String)的区别 double是不精确的&#xff0c;所以使用一个不精确的数字来创建BigDecimal&#xff0c;得到的数字也是不精确的。如0.1这个数字&#xff0c;double只能表示他的近似值。所以&#xff0c;当我们使用new BigDecimal(0.1)创建一个Bi…

Report Design Analysis报告之logic level详解

目录 一、前言 二、Logic Level distribution 2.1 logic level配置 2.2 Logic Level Distribution报告 2.3 Logic Level 报告详情查看 2.4 Route Distributions 报告详情查看 2.5 示例代码 一、前言 ​在工程设计中&#xff0c;如果需要了解路径的逻辑级数&#xff0c;可…

【python技巧】parser传入参数

参考网址: https://lightning.ai/docs/pytorch/LTS/api/pytorch_lightning.utilities.argparse.html#pytorch_lightning.utilities.argparse.add_argparse_args 1. 简单传入参数. parse_known_args()方法的作用就是把不在预设属性里的参数也返回,比如下面这个例子, 执行pytho…

2024吉他手的超级助手Guitar Pro8中文版本发布啦!

亲爱的音乐爱好者们&#xff0c;今天我要来和你们分享一款让我彻底沉迷的软件—Guitar Pro。如果你是一名热爱吉他的朋友&#xff0c;那么接下来的内容你可要瞪大眼睛仔细看哦&#xff01;&#x1f440;&#x1f3b6; Guitar Pro免费绿色永久安装包下载&#xff1a;&#xff0…

搭建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 编译…

React中的useMemo和memo

引言 React是一个声明式的JavaScript库&#xff0c;用于构建用户界面。在开发过程中&#xff0c;性能优化是一个重要的方面。useMemo和memo是React提供的工具&#xff0c;用于帮助开发者避免不必要的渲染和计算&#xff0c;从而提升应用性能。 问题背景 在React应用中&#…

Ubuntu编译 OSG

目录 一、安装步骤 二、配置 1、数据文件配置 2、OSG环境变量配置 一、安装步骤 在Ubuntu上安装OSG(OpenSceneGraph),你可以按照以下步骤操作: 打开终端,更新你的包管理器的包列表: sudo apt update 安装必要的依赖库 sudo apt install libglu1-mesa-dev freeglu…

数字信号处理及MATLAB仿真(3)——量化的其他概念

上回书说到AD转换的两个步骤——量化与采样两个步骤。现在更加深入的去了解以下对应的概念。学无止境&#xff0c;要不断地努力才有好的收获。万丈高楼平地起&#xff0c;唯有打好基础&#xff0c;才能踏实前行。 不说了&#xff0c;今天咱们继续说说这两个步骤&#xff0c;首先…

[激光原理与应用-101]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 5 - 3C行业应用 - 电子布局类型

目录 前言&#xff1a; 一、激光在3C行业的应用概述 1.1 概述 1.2 激光焊接在3C-电子行业应用 二、3C电子行业中激光焊接 2.1 纽扣电池 2.2 均温板 2.3 指纹识别器 2.4 摄像头模组 2.5 IC芯片切割 三、3C行业中激光切割 四、激光在3C行业中的其他应用 4.1 涂层去除…

【机器学习实战】Datawhale夏令营:Baseline精读笔记2

# AI夏令营 # Datawhale # 夏令营 在原有的Baseline上除了交叉验证&#xff0c;还有一种关键的优化方式&#xff0c;即特征工程。 如何优化特征&#xff0c;关系着我们提高模型预测的精准度。特征工程往往是对问题的领域有深入了解的人员能够做好的部分&#xff0c;因为我们要…

day01:项目概述,环境搭建

文章目录 软件开发整体介绍软件开发流程角色分工软件环境 外卖平台项目介绍项目介绍定位功能架构 产品原型技术选型 开发环境搭建整体结构&#xff1a;前后端分离开发前后端混合开发缺点前后端分离开发 前端环境搭建Nginx 后端环境搭建熟悉项目结构使用Git进行版本控制数据库环…

记录问题:解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1. 背景 我非要用vscode&#xff0c;不用pycharm&#xff0c;哼&#xff01; 2. 问题 由于 import xx 自定义的模块&#xff0c; python run 的时候会报错 No module named ‘xxx‘ 报错信息&#xff1a; Traceback (most recent call last):File "d:\work\sf_financ…

90元搭建渗透/攻防利器盒子!【硬件篇】

前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦&#xff0c;并不能实现真正全局&#xff0c;而且还老容易忘记&#xff0c;那么为了在实景工作中&#xff0c;防止蓝队猴子封IP&#xff0c;此文正现。 正文 先说一下实验效果&#xff1…

【JavaEE】多线程进阶

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; 文章目录 1.锁策略1.1悲观锁和乐观锁1.2重量级锁和轻量级锁1.3自旋锁和挂起等待锁1.4可…

【讲解下iOS语言基础】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

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

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

git简介以及git操作软件下载以及安装教程,git基础指令介绍,持续更新中~

什么是Git&#xff1f; 最近在学一些git的基础指令&#xff0c;仔细地了解了一下git&#xff0c;发现了他的强大功能&#xff0c;分享一下&#xff1a; Git是一个强大的工具&#xff0c;它在软件开发中扮演着至关重要的角色。 Git是一个开源的分布式版本控制系统&#xff0c;…

使用RAID与LVM磁盘阵列技术

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、RAID磁盘冗余阵列 1、部署磁盘整列 2、损坏磁盘阵列及修复 3、磁盘阵列备份盘 4、删除磁盘阵列 二、LVM逻辑卷管理器 致谢 一、RAID…