python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...

项目地址

系列教程

0.前言

在上一篇教程里我们已经获取了所需要的全部数据,包括训练数据集和测试数据集,使用ProcessData()调用,所以接下来写模型的建立和预测

1.建立模型

没段代码在文章后面都会整合成一段,分段展示只是便于阅读

a.准备

引入所需要的头文件

from sklearn.ensemble import RandomForestRegressor # 随机树森林模型

import joblib # 保存模型为pkl

from sklearn.metrics import mean_absolute_error # MAE评估方法

from ProcessData import ProcessData # 取数据

选择模型

首先我们先要从模型里选择一项适合这次场景的模型,比如从决策树,随机树森林,RGB模型等等中选择,本处选用的随机树森林也就是RandomForest

选择评估方法

目前有许多的模型准确率评估方法,本处使用的是MAE,也就是mean_absolute_error 平均错误数值,就每个预测的数值离正确数值错误数值的平均数

获取数据集

这次可以从ProcessData()获取到全部的被预处理后的数据,如

# 取到数据

[X_train, X_valid, y_train, y_valid, X_test] = ProcessData()

b.建立模型

# 用XGB模型,不过用有bug

# modelX = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=0, n_jobs=4)

# # model.fit(X_train_3, y_train_3)

# # model.fit(X_train_2, y_train_2)

# col = ["Ave_t", "Max_t", "Min_t", "Prec","SLpress", "Winddir", "Windsp", "Cloud"]

# modelX.fit(X_train, y_train,

# early_stopping_rounds=5,

# eval_set=[(X_valid, y_valid)],

# verbose=False)

# 随机树森林模型

model = RandomForestRegressor(random_state=0, n_estimators=1001)

# 训练模型

model.fit(X_train, y_train)

其中n_estimators是可自己选的,不过在多次调试后得到1001是MAE最优

c.获取模型评估结果

# 用MAE评估

score = mean_absolute_error(y_valid, preds)

d.用joblib模块保存模型

保存后的模型便于传播即可多次使用,但当前环境下的需求不大但我还是写了

# 保存模型到本地

joblib.dump(model, a)

e.封装

GetModel.py

# -*- coding: utf-8 -*-

# @Time: 2020/12/16

# @Author: Eritque arcus

# @File: GetModel.py

from sklearn.ensemble import RandomForestRegressor

import joblib

from sklearn.metrics import mean_absolute_error

from ProcessData import ProcessData

# 训练并保存模型

def GetModel(a="Model.pkl"):

"""

:param a: 模型文件名

:return:

[socre: MAE评估结果,

X_test: 预测数据集]

"""

# 取到数据

[X_train, X_valid, y_train, y_valid, X_test] = ProcessData()

# 用XGB模型,不过用有bug

# modelX = XGBRegressor(n_estimators=1000, learning_rate=0.05, random_state=0, n_jobs=4)

# # model.fit(X_train_3, y_train_3)

# # model.fit(X_train_2, y_train_2)

# col = ["Ave_t", "Max_t", "Min_t", "Prec","SLpress", "Winddir", "Windsp", "Cloud"]

# modelX.fit(X_train, y_train,

# early_stopping_rounds=5,

# eval_set=[(X_valid, y_valid)],

# verbose=False)

# 随机树森林模型

model = RandomForestRegressor(random_state=0, n_estimators=1001)

# 训练模型

model.fit(X_train, y_train)

# 预测模型,用上个星期的数据

preds = model.predict(X_valid)

# 用MAE评估

score = mean_absolute_error(y_valid, preds)

# 保存模型到本地

joblib.dump(model, a)

# 返回MAE

return [score, X_test]

2.总控

代码

这几篇文章写了零零散散好几个类,所以要写个总文件也就是启动文件串起来,然后在控制台输出

Main.py

# -*- coding: utf-8 -*-

# @Time: 2020/12/16

# @Author: Eritque arcus

# @File: Main.py

import joblib

import datetime as DT

from GetModel import GetModel

import matplotlib.pyplot as plt

# 训练并保存模型并返回MAE

r = GetModel()

print("MAE:", r[0])

# 读取保存的模型

model = joblib.load('Model.pkl')

# 最终预测结果

preds = model.predict(r[1])

# 反归一化或标准化,不过出bug了,不用

# for cols in range(0, len(preds)):

# preds[cols] = scaler.inverse_transform(preds[cols])

# sns.lineplot(data=preds)

# plt.show()

# 打印结果到控制台

print("未来7天预测")

print(preds)

all_ave_t = []

all_high_t = []

all_low_t = []

for a in range(1, 7):

today = DT.datetime.now()

time = (today + DT.timedelta(days=a)).date()

print(time.year, '/', time.month, '/', time.day,

': 平均气温', preds[a][0],

'最高气温', preds[a][1],

'最低气温', preds[a][2],

"降雨量", preds[a][3],

"风力", preds[a][4])

all_ave_t.append(preds[a][0])

all_high_t.append(preds[a][1])

all_low_t.append(preds[a][2])

temp = {"ave_t": all_ave_t, "high_t": all_high_t, "low_t": all_low_t}

# 绘画折线图

plt.plot(range(1, 7), temp["ave_t"], color="green", label="ave_t")

plt.plot(range(1, 7), temp["high_t"], color="red", label="high_t")

plt.plot(range(1, 7), temp["low_t"], color="blue", label="low_t")

plt.legend() # 显示图例

plt.ylabel("Temperature(°C)")

plt.xlabel("day")

# 显示

plt.show()

使用方法

直接用python运行pre_weather/Main.py,就会在控制台输出预测的数据

python pre_weather/Main.py

在你的python代码里用joblib导入生成的模型,然后输入你的数据进行预测

(PS: 因为模型的训练用的数据日期和你预测数据的日期有关,所以不建议直接用使用非当天训练的模型进行预测,误差可能偏大)

如以下代码(在Main.py的11行):

import joblib

# 读取保存的模型

model = joblib.load('Model.pkl')

# 最终预测结果

preds = model.predict(r[1])

其中,r[1]是预测数据

参考Main.py,自己写一个符合你需求的启动文件

3.最后效果

3a5eaaf7fbc1581a129063035910781e.png

本系列教程到这就结束了,代码具体还要以github项目:PYWeatherReport为主,可能会在这个github项目上不定期优化更新

有问题可以在评论问问

-END-

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

偶然在网上看到的题目,jQuery功底如何一测便知晓!!!!!!

笔者最终实现的效果如下:    参考答案下载地址 通过手写html代码实现如图效果:以下题目全部使用jQuery来做 当点击“加载数据”按钮时根据提供的数据通过jQuery动态创建表格数据填充该表格。数据见data.txt文件。效果如图: 当点击“设置样…

何为生气

天下有不如意事,不当忿激与争。   ———陈于陛   生活中经常有人为一些小事而生气,其实他们也不想这样做,但就是控制不了自己的心情。生气不但影响了自己的身心健康,而且还影响到周围的人际关系。   从前,有个妇…

ps作业素材和成品_没有用过PS的画框工具,你还敢说你是设计大佬?

大家好,过完春节大伙们都踏上了离乡的征程,再多不舍,看看自己的钱包,还是要出发!2019年已经悄然过去一个半月,你的学习计划开始了嘛?来吧继续学习PS-cc2019,今天继续给大家带来CC2019 ps 的基础…

isfile java_isfile 方法

检验给出的路径是否是一个文件:os.path.isfile() 6.检验给出的路...从零开始-JSP动态网页制作基础培训教程 6、判断是文件还是文件夹 使用File类对象的isFile()方法(返回True表示 为文件)和isDirectory()方法(返回True表示为文 件夹......A、 FileReader B、BufferedReader C、…

第二次阅读作业

No Silver Bullet - Essence and Accidents of Software Engineering: 银弹能杀死狼人。如果我没记错的话,在漫画中柯南对黑暗组织而言就是一颗银弹。生活中是不是真的有银弹我还是不太确定。假如有,银弹就是 一点弱点也没有么?如…

Linux 每日一练习!!反单引号·(键盘上数字1左边)··

2019独角兽企业重金招聘Python工程师标准>>> ls -al locate ls # 说明locate ls执行出来的路径将会作为ls -al的参数 说明:在一串指令中,在之内的指令将会被先执行,而且执行出来的结果将作为外部的输入信息 转载于:https://my.osc…

订单不断,我是这样做的

为什么同样是上网,同样是做生意,可是有人单都做不完,有人却接不到订单,这是为何呢?我从去年下半年一路走来,虽说一年多了,大的成绩没什么,可还算可以吧.比上不足,比下还是有余.最先接触电子商务平台的是阿里.然后就是化工报价网www.chembj.com了.再者其他的一些网站.好了,闲话…

python迭代器使用_python迭代器的使用方法实例

什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数。迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常。python中有很多的对象都是迭代器,例如&#xff1…

docker-compose观察实时日志_大数据项目实战之在线教育(03实时需求) - 十一vs十一...

第1章Spark Streaming概念 Spark Streaming 是核心Spark API的扩展,可实现实时数据的可扩展,高吞吐量,容错处理。数据可以从许多来源(如Kafka,Flume,Kinesis,或TCP套接字)中获取,并可以使用高级函数进行处理,处理完后的…

代码之谜(二)- 语句与表达式

虽然文章标题是『语句与表达式』,在这篇文章中,我将陈述一个观点 每个表达式都有一个值。 在此之外,也会继续表述这个『代码之谜』系列的主题——数学与计算机之间被经常忽略的矛盾。 简单的讲 “表达式”(expression)…

Java动态加载类在功能模块开发中的作用

Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能,比如我们现在有个主类叫Web类这个类中能实现各种方法,比如用户注册、发送邮件等功能,代码如下: 1 /*2 * web功能实现类3 */4 public c…

创业者们的19个Surprises

郑昀玩聚SR 20091115 『毫无疑问,短跑运动员在起跑时速度最快,而后就变慢下来, 获胜者是变慢得最少的那个人。大多数创业公司也是如此。』 ——Paul Graham January 2007 上面这句笺言的作者Paul Graham最近问了Y Combinator旗下创业项目的创…

自学电脑编程_程序人生:盲人程序员蔡勇斌——用耳朵打开盲人的程序世界 - 沐歌爱编程...

有句话说:没有你想不到,只有你做不到。今天想为大家介绍一位程序员界中的励志人物,他就是蔡勇斌。蔡勇斌幼年失明,靠着顽强的毅力和不服输的精神自学编程,成为了一名全栈工程师。他是阿里“多隆奖”首位盲人获得者&…

qtabwidget的图标_QTabWidget每个标签上的关闭按钮怎样设置

自己做窗标题栏首先[DllImport("User32.dll", EntryPoint "ReleaseCapture")] static extern long ReleaseCapture(); [DllImport("User32.dll", EntryPoint "SendMessage")] private static extern int SendMessage(IntPtr hWnd, i…

poj 2299 (归并排序)

给定一个无序的数列&#xff0c;由32位整数组成的&#xff0c;序列长度可达500000&#xff0c;现在通过不断的两两交换&#xff0c;把这个序列排成由小到大的有序序列&#xff0c;问交换的次数是多少。 1 #include<stdio.h>2 #include<stdlib.h>3 #define NN 50000…

SQLite轻量级数据库,操作数据常用语句

2019独角兽企业重金招聘Python工程师标准>>> -----创建表---- ----------表格头英文换中文显示select name as 名字,age 年龄,class from student -----if not exists判断表存在否--字符串用char也行--- --如果用自增长&#xff0c;只能用包装类型integer,不能用int…

.NET常用功能和代码[总结与收藏] (转)

.NET常用功能和代码[总结与收藏] 1. 打开新的窗口并传送参数&#xff1a; 传送参数&#xff1a;response.write("<script>window.open(*.aspx?id"this.DropDownList1.SelectIndex"&id1"...")</script>") 接收参数&#xff1a;s…

deepin安装卡死在蓝色背景_求大神帮助~安装DEEPIN系统卡在蓝色背景图什么原因...

可能是联想拯救者 R7000笔记本的原因&#xff0c;用以下方法解决了先点开联想的电脑管家 你能在左边栏找到一个选项 那个选项是显卡模式点击进去→然后选择独显模式(如果找不到就在当前界面里面选择调回游戏模式)然后重启电脑确认你的电脑进入了独显模式然后再次重启按F2(单按…

cuda编程_CUDA编程入门(四)并行归约算法

这一篇我们一起学习一下如何使用CUDA实现并行归约算法。首先我们要知道什么是并行归约。并行归约&#xff08;Reduction&#xff09;是一种很基础的并行算法&#xff0c;简单来说&#xff0c;我们有N个输入数据&#xff0c;使用一个符合结合律的二元操作符作用其上&#xff0c;…

在ubuntu下各种格式软件安装及常用命令

Ubuntu下软件安装的几种方式&#xff1a; (1).bundle 格式 以VMware-Workstation-Full-7.0.0-203739.i386.bundle为例 命令如下&#xff1a;sudo sh VMware-Workstation-7.0.0-203739.i386.bundle(先切换到该文件所在文件夹) (2).deb格式 最常用的是deb包&#xff0c;deb是deb…