时间序列建模

今天给小伙伴说一下时间序列ARIMA模型建模过程,有帮助到亲的可以点赞加关注,废话不多说直接上代码以及过程。

1.导库

# 导入必要的库
import pandas as pd
import numpy as np
from math import sqrt
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
import statsmodels.api as sm
import pymysql
import matplotlib.pyplot as plt

2.连接数据库读取数据

con = pymysql.connect(host='192.172.3.168',user='root',password='123456',database='test',charset='utf8')
# 创建游标
cur = con.cursor()
## sql代码
sql = "select * from carbon_dioxide_emissions_data where country = 'China' and sector='Power'"
cur.execute(sql)
### 将sql查询出来的数据转化为df
result = cur.fetchall()
df = pd.DataFrame.from_records(result,columns=['country','co2','sector','date'])
cur.close()

3.获取电力co2排放量数据

## 拿到中国电力数据
data = df.loc[:,['date','co2']]

4.划分测试集和训练集

## 划分训练集和测试集
train_data = data[(data['date']>='2019-01-01') & (data['date'] <= '2023-06-01')].iloc[:,1].astype(float, copy=True)
test_data = data[(data['date']>='2023-06-01') & (data['date'] <= '2023-07-31')].iloc[:,1].astype(float, copy=True)
print(len(train_data))
print(len(test_data))

5.设置ARIMA模型参数

# # 指定模型及参数,例如 ARIMA(p, d, q) 模型
p =  1  # AR(p) 的阶数
d = 0  # I(d) 的阶数
q = 3  # MA(q) 的阶数
# 创建并拟合 ARIMA 模型

6.建模和预测

# 创建并拟合 ARIMA 模型
model = sm.tsa.ARIMA(train_data, order=(p, d, q))
model_fit = model.fit()
## 预测未来的时间序列
predicted_values = model_fit.predict(1614,1674) # start='2023-07-20', end='2023-08-10'

7.模型评价指标

# # 打印预测结果
# print(predicted_values)
print('mean_absolute_error:',mean_absolute_error(test_data,predicted_values))
print('mean_squared_error:',mean_squared_error(test_data,predicted_values))
print('rmse:',sqrt(mean_squared_error(test_data,predicted_values)))
print('r2 score:',r2_score(test_data,predicted_values))

8.画图以及设置

# epoch,acc,loss,val_acc,val_loss
data = data.iloc[1000:1613,:]
x_axis_data = data['date']
y_axis_data1 = train_data[1000:1614]
print(len(x_axis_data),len(y_axis_data1))
x_axis_data2 = data.iloc[-61:,0]
y_axis_data2 = test_data
y_axis_data3 = predicted_values

# # 画图
# 设置中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号 #有中文出现的情况,需要u'内容'
plt.plot(x_axis_data, y_axis_data1, 'b-', alpha=0.5, linewidth=1, label='train')
# plt.plot(x_axis_data2, y_axis_data2, 'r--', alpha=0.5, linewidth=1, label='test')
plt.plot(x_axis_data2, y_axis_data3, 'g-.', alpha=0.5, linewidth=1, label='predict')
plt.legend()  # 显示上面的label
plt.title('中国电力co2排量预测')
plt.xlabel('time')
plt.ylabel('batch production of power CO2')
plt.show()

9.效果图

mean_absolute_error: 2150.5333140933108
mean_squared_error: 7011447.891685436
rmse: 2647.9138754282467
r2 score: -1.7977862325381362

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值