任务描述
知识点:
- 时间序列分析
重 点:
- 指数平滑法
- Python连接数据库,更新数据
内 容:
- 读取所有省份各月的平均气温数据
- 预测各省份下一年1-12月的气温,并存储到MySQL数据库
任务指导
1. 读取所有省份各月的平均气温数据
- 数据集为2000年1月到2020年12月每月各省的平均气温数据(数据存于MySQL数据库中,数据库为china_all,存于province_temp_all表中)。
2. 预测各省份下一年1-12月的气温,并存储到MySQL数据库
- 参照上一个任务(山东省气温预测),根据读取的数据,循环取出各省份数据,建立指数平滑法模型,预测下一年各月的数据。
- 将指数平滑法预测的2023年各月各省份的气温数据更新到province_temp数据库表中。
任务实现
1. 读取所有省份各月的平均气温数据
1)引入库
from sqlalchemy import create_engine,text
import pandas as pd
import numpy as np
from statsmodels.tsa import holtwinters as hw
import warnings
warnings.filterwarnings('ignore')
2)读取数据
engine=create_engine('mysql+pymysql://root:root@192.168.4.190:3306/china_all')
sql=text('select * from province_temp_all')
connect = engine.connect()
mydata=pd.read_sql(sql,connect)
provinces=mydata['province'].unique()
print(provinces)
备注:create_engine中的ip需要根据自己的实际环境进行修改
可以看到,读取的所有省份的数据中,共有34个省份,接下来通过循环各个省份,从数据中取出各省份的数据,然后使用指数平滑法建立模型,并进行预测,最后将预测的数据保存到MySQL数据库表province_temp中,代码如下:
date=pd.period_range(start='2000/01',end='2022/12',freq='M')
for item in provinces:print(item)template=mydata[mydata['province']==item]temp_data=pd.DataFrame(template['temp'].values/10,index=date,columns=['temp'])#指数平滑法hw_model=hw.ExponentialSmoothing(temp_data,trend='add',seasonal='add',seasonal_periods=12).fit()#预测temp_forecast=hw_model.predict(start='2023/01',end='2023/12')#更新数据库for i in range(len(temp_forecast)):mytext='update province_temp set temp_forecast=%.4f where province="%s" and month=%d' % (temp_forecast[i],item,i+1)sql=text(mytext)connect = engine.connect()connect.execute(sql)
执行该段代码,循环完成后,数据库即进行了更新,到数据库中查看
select * from province_temp limit 30;
可以看到,在province_temp表中,temp_forecast字段已经更新了所有的数据(之前都为0),已经完成了对所有省份下一年1-12月的气温预测。