import pandas as pd
import datetime
import matplotlib.pylab as plt
import seaborn as sns
import numpy as np
from matplotlib.pylab import style
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
style.use('ggplot') #样式美化
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取数据 读取的数据路径 索引的列编号 解析0列的值作为单独的日期
data = pd.read_csv( "./dataset/LD2011_2014.csv", index_col=0, parse_dates=[0])
# data.head
# 异常值替换
data = data.replace(0.000000, np.nan)
# 提取一户的数据
data_158_week = data["MT_158"].resample("W").sum() # W是周 按照每周的数据进行求和
data_158_week_train = data_158_week["2011-01-09":"2014-12-28"]
data_158_week_train.plot() #plot函数用来画线,画点
# 将序列平稳(差分法确定d)
data_diff = data_158_week_train.diff() #diff用来求差分
data_diff = data_diff.dropna()
plt.figure()
plt.plot(data_diff)
plt.title("一阶差分") #做差分为了消除恒定趋势
plt.show()
# 自相关函数ACF求p lags 表示滞后的阶数
acf = plot_acf(data_diff, lags=20)
plt.title("ACF")
acf.show()
# 偏自相关函数pacf求q
pacf = plot_pacf(data_diff, lags=20)
plt.title("PACF")
pacf.show()
# 训练模型 ARIMA(p,d,q)
model = ARIMA(data_158_week_train, order=(1,1,1),freq='W')
result = model.fit() #程序执行到这里之后 就没有返回值了 而且下面的程序也不执行了,不知道是什么原因
# 选择时间段进行预测
pred = result.predict(
"2014-10-26"
,
"2015-01-15"
,
[color=]dynamic
=
[color=]True
,
[color=]typ
=
"levels"
)
[color=]print
(pred)
# 将原本数据与预测数据同时画在图上,展示预测效果
plt.figure(
[color=]figsize
=(
[color=]6
,
[color=]6
))
#为什么显示不出来???????
plt.xticks(
[color=]rotation
=
[color=]45
)
plt.plot(pred)
plt.plot(data_158_week_train)
plt.show()
其中,所用到数据集格式如下:https://imgse.com/i/ppQxa8K就是简单的用电数据,按照每周进行求和