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 的基础…

第二次阅读作业

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

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

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

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

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

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

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

创业者们的19个Surprises

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

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

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

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

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

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

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

csgo怎么控制电脑玩家_电脑怎么远程控制他人电脑,教您给电脑设置远程控制的方法...

有些时电脑出现了一些我们解决不了的问题时,这时我们一定第一时间想到就是让电脑高手帮忙看一下问题;但要对方在异地该办呢,那就通过电脑远程来解决了;那么问题又来了,电脑怎么远程控制他人电脑呢?小编下面…

div悬浮在固定位置_悬浮式超声波致动器概要及研究动向

作者:东京工业大学 中村 健太郎1. 序言以往的超声波马达是通过摩擦力驱动,固定片压电振子与转子接触,通过振动摩擦转子从而获得旋转力和推动力。虽然具有高转矩、高控制性等特点,从原理上讲其速度无法超过振子振动速度。压电振子的…

基于Java的设计开题报告_基于Java的电子邮件的收发系统的设计与实现开题报告...

基于Java的电子邮件的收发系统的设计与实现开题报告 (8页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分开题报告 基于 Java 的电子邮件的收发系统的设计与实现 一、选题的背景、意义 1、 电…

Zookeeper-源码启动

源码启动zookeeper zookeeper源码下载地址: //选择分支3.5.8 https://github.com/apache/zookeeper.git 源码导入idea后,org.apache.zookeeper.Version类会报错,需要建一个辅助类 //全局搜索org.apache.zookeeper.Version这个类就找到了…

pandas 取excel 中的某一列_Excel快速分表(xlwings+pandas)

Excel总表快速分表:step1: 读取exel数据到DataFramestep2: dataframe中数据进行筛选step3:将筛选完的数据存储到excel中工作中应用实例step1:读取Excel的数据到pandas 的Dataframe方法1:采用pandas,读取sheet1的内容到…

通过点击切换文本框内容的脚本示例

定义一个字符串为内容的数组,每一行的多个文本框为一组,要求点击切换内容,且内容不重复. 代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">2 <html>3 <head>4 <title>New Document </title>5 <script>6 …

qmenu只在鼠标单击时消失_两种方法解决win10电脑无法使用无线鼠标问题

使用有线鼠标时用户们是否也都会被那条线控制住&#xff0c;有时需要大范围移动时并不行&#xff0c;现在很多用户都会选择使用无线鼠标&#xff0c;因为可以随意移动使用更加方便。但是在使用中也有用户遇到了麻烦&#xff0c;使用win10连接鼠标后无法使用&#xff0c;这是要怎…

线程的几个状态

Runnable&#xff1a;一般指该线程正在执行状态中&#xff0c;该线程占用了资源&#xff0c;正在处理某个请求&#xff0c;例如有可能在对某个文件操作&#xff0c;有可能进行数据类型等转换。Waiting on condition&#xff1a;等待资源&#xff0c;或等待某个条件的发生。具体…

c++ 数组的输入遇到特定字符停止输入_滑动窗口思维--挑战“无重复字符的最长子串”

文章来源&#xff1a; 饭饭的Python学习之路作者&#xff1a; 一粒米饭今天要挑战的是“无重复字符的最长子串”。难度&#xff1a;中等题目描述&#xff1a;给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例1:输入: "abcabcbb"输出: …

Effective C++ 读书笔记(八)

8 定制new和delete 条款49&#xff1a;了解new-handler的行为 new_handler set_new_handler (new_handler new_p) throw(); Sets new_p as the new handler function, the old one is returned. operator new抛出异常以反映一个未获满足的内存需求之前&#xff0c;它会先调…