Python构建ANN模型预测气温变化

2023-11-03

在利用爬虫模型得到了气温数据集后,具体参考上篇Python构建爬虫模型爬取天气数据,我们开始利用tensorflow自带的模块搭建一个简单的ANN模型预测气温变化,其实这个模型适用于预测很多数据变化趋势,这里以预测气温变化为例。

import requests
from bs4 import BeautifulSoup
def get_data(city_name,tim):
    url="http://www.tianqihoubao.com/lishi/"+city_name+"/month/"+tim+".html"
    re=requests.get(url)
    html = re.content.decode('gbk')#规范编码,避免乱码
    soup = BeautifulSoup(html,'html.parser')
    data=soup.find_all('tr')
    for i in range(1,len(data)):#因为data[0]没有气温数据
        temp=data[i].text.split()
        temp1=temp[3][:-1]
        temp2=temp[5][:-1]
        res=0
        if temp1=='' and temp2=='':#后来爬数据发现有某天的气温不存在
            continue
        elif temp1=='':
            res=int(temp2)
        elif temp2=='':
            res=int(temp1)
        else:
            res=(int(temp1)+int(temp2))/2.0#取平均值
        #print(tim,temp1,temp2)
        fp.writelines(str(res)+'\n')
fp=open('data.txt','w',encoding='utf-8')
city_name="shanghai"
for year in range(2015,2020):#时间从2015年到2019年
    for month in range(1,13):#时间从1月到12月
        tim=str(year)
        if month<10:
            tim+=("0"+str(month))
        else:
            tim+=str(month)
        get_data(city_name,tim)#获取数据

fp.close()

运行上面的代码得到上海从2015年到2019年的完整气温数据,文件名叫data.txt,如下:
在这里插入图片描述

然后我们展开,这里很简单,我们以7个(也可以是其他个)气温为单位进行数据预测,也就是把前7个气温作为特征值,第8个为结果,也就是

x=[temp[i],temp[i+1],temp[i+2],temp[i+3],temp[i+4],temp[i+5],temp[i+6]]
y=[temp[i+7]]

以此得到我们模型的训练数据集。

一、读取数据

利用pandas读取数据

import pandas as pd
import numpy as np
def read_data(N):
    df=pd.read_csv('data.txt',header=None)#没有列名,为None
    data=df.values#提取数据内容
    X=[]
    Y=[]
    for i in range(N,len(data)):
        s=[]
        for j in range(i-N,i):
            s.append(data[j][0])
        X.append(s)
        Y.append(data[i][0])
    return np.array(X),np.array(Y)

N=7#特征数目
X,Y=read_data(N)
print(X)
print(Y)

显示内容如下:
在这里插入图片描述
于是我们得到了模型的训练数据集。

二、数据归一化
这里直接利用sklearn框架里面的MinMaxScaler模块进行数据归一化,比较方便,不用自己手写归一化函数了。

from sklearn.preprocessing import MinMaxScaler
'''
读取数据
'''
min_max_scaler = MinMaxScaler()
min_max_scaler.fit(X)
x = min_max_scaler.transform(X)#均值化处理
x_ = min_max_scaler.transform([[24.5,25.0,24.0,25.0,21.0,20.5,21.0]])#这里随便取一组数据,作为后面预测用,注意数据维度
y=Y

显示x和y的内容如下,print(x),print(y):

在这里插入图片描述特征数据得到了很好的归一化。

三、训练集和测试集的划分

这里同样调用sklearn框架里面的train_test_split模块进行数据集划分

from sklearn.model_selection import train_test_split
'''
数据读取+均值化处理
'''
#划分数据集,按训练集:测试集=8:2比例划分
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2)

四、构建ANN模型
ANN模型为人工神经网络模型,共三层结构,输入层,隐含层,输出层,我们需要对中间的隐含层的参数(主要为隐含层中的神经元层数和每层的神经元个数进行调整),手工搭建模型比较麻烦,但是tensorflow框架里面提供了现成的模型框架,我们只需要对隐含层参数进行修改即可。

from tensorflow import keras#这里可能很多人报错没有keras模块,我直接在阿里云天池平台跑的数据,本地电脑的python需要调整下tensorflow版本等问题
'''
数据的读取+均值化+划分
'''
#模型结构,采用relu函数为激活函数,输入层为N个属性
#下面为4层隐含层,每层的神经元个数依次为500,500,250,250
#输入层对应N个属性
model = keras.Sequential([
        keras.layers.Dense(500,activation='relu',input_shape=[N]),
        keras.layers.Dense(500,activation='relu'),
        keras.layers.Dense(250,activation='relu'),
        keras.layers.Dense(250,activation='relu'),
        keras.layers.Dense(1)])#最后输出为一个结果,也就是预测的值
#定义损失函数loss,采用的优化器optimizer为Adam
model.compile(loss='mean_absolute_error',optimizer='Adam')
#开始训练模型
model.fit(x_train,y_train,batch_size = 126,epochs=1000)#训练1000个批次,每个批次数据量为126

至此,利用现成的模块构建一个简单的ANN模型完成。

五、模型的预测

#输出结果预测
y_=model.predict(x_)
print('预测结果为:',y_)

六、完整代码

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from tensorflow import keras#这里可能很多人报错没有keras模块,我直接在阿里云天池平台跑的数据,本地电脑的python需要调整下tensorflow版本等问题
def read_data(N):
    df=pd.read_csv('data.txt',header=None)#没有列名,为None
    data=df.values#提取数据内容
    X=[]
    Y=[]
    for i in range(N,len(data)):
        s=[]
        for j in range(i-N,i):
            s.append(data[j][0])
        X.append(s)
        Y.append(data[i][0])
    return np.array(X),np.array(Y)

N=7#特征数目
X,Y=read_data(N)
#数据均值化
min_max_scaler = MinMaxScaler()
min_max_scaler.fit(X)
x = min_max_scaler.transform(X)#均值化处理
x_ = min_max_scaler.transform([[24.5,25.0,24.0,25.0,21.0,20.5,21.0]])#这里随便取一组数据,作为后面预测用,注意数据维度
y=Y
#划分数据集,按训练集:测试集=8:2比例划分
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.2)
#模型结构,采用relu函数为激活函数,输入层为N个属性
#下面为4层隐含层,每层的神经元个数依次为500,500,250,250
#输入层对应N个属性
model = keras.Sequential([
        keras.layers.Dense(500,activation='relu',input_shape=[N]),
        keras.layers.Dense(500,activation='relu'),
        keras.layers.Dense(250,activation='relu'),
        keras.layers.Dense(250,activation='relu'),
        keras.layers.Dense(1)])#最后输出为一个结果,也就是预测的值
#定义损失函数loss,采用的优化器optimizer为Adam
model.compile(loss='mean_absolute_error',optimizer='Adam')
#开始训练模型
model.fit(x_train,y_train,batch_size = 126,epochs=1000)#训练1000个批次,每个批次数据量为126
#输出结果预测
y_=model.predict(x_)
print('预测结果为:',y_)

运行情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述最后误差停留在1.0左右,预测结果为21.177862。

希望我的分享对你的学习有所帮助,如果有错误请及时指出,谢谢~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python构建ANN模型预测气温变化 的相关文章

随机推荐

  • C++中的map用法详解

    目录 1 map的介绍 2 map的操作 1 定义map类型 2 输出map中的元素 3 添加数据 4 查找数据 5 删除数据 1 map的介绍 map是C 中STL中的一个关联容器 以键值对来存储数据 数据类型自己定义 它的内部数据结构是
  • PaddleX入门教程2:搭建并配置Paddlex的推理环境(CPU版本)

    上一个教程中 同学们掌握了利用PaddleX完成训练并发布模型后 接下来我们将通过Python脚本来调用该模型 并做一些基础应用 本节教程主要教同学们从零搭建调用PaddleX导出模型的运行环境 1 运行PaddleX推理需要安装Visua
  • springboot学习(十)web工程扩展

    登录接口 这里是基于演示代码写的登录接口 实际肯定不会这么low 会出现get请求 包括参数注解也会用的是 RequestBody而不是 RequestParam Controller public class LoginControlle
  • Mac下,在VirtualBox上创建一台虚拟机

    1 Mac下 在VirtualBox上创建一台虚拟机 主机 Mac 32位 内存8G 虚拟机 Oracle VM VirtualBox 版本 软件 Linux安装软件 版本6 2 ISO映像 rhel server 6 2 i386 dvd
  • 【浅谈PC市场】

    市场调研机构Canalys数据显示 今年一季度 中国市场整体PC出货量同比下降24 至890万台 已是连续第五个季度下跌 今年截至618结束 都没有一家主要的PC厂商愿意发战报 PC市场怎样走出寒冬 谈谈你的理解和看法 PC市场在近年来确实
  • 基于VB脚本开发的机器人高级语言进行轨迹规划演示

    采用VB基本语言 在其中嵌入机器人运动控制指令 扩展成机器人高级编程语言 本例子演示的是高级螺旋线轨迹规划 movep 0 0 0 0 0 0 a 0 2 b 0 2 12 56 for i 0 to 12 56 step 0 01 x a
  • MNIST手写数字库格式转换(c++可用的格式)

    static int ReverseInt int i 转换魔数 读取数据库中的图片数 行数 列数等信息 unsigned char ch1 ch2 ch3 ch4 ch1 i 255 ch2 i gt gt 8 255 ch3 i gt
  • 在Windows7环境下使用GIT BASH免输入密码

    背景 根据一路向北的教 Windows下TortoiseGit over Putty or Openssh提交项目到GitLab 安装了TortoiseGit客户端 并完成在Gitlab上公钥的部署 但是有些操作必须通过GITbash命令行
  • 现代教育技术计算机网络试题及答案,《现代教育技术》期末复习题及答案

    现代教育技术期末复习1 一 填空题 1 教育技术就是人类在教育活动中所采用的一切 和方法的总和 它分为有形的技术 物化形态 和 的技术 智能形态 两大类 答案 技术手段 无形 2 学习资源主要包括教学材料 和 答案 支持系统 学习环境 3
  • UE4c++ Brush创建

    前言 UE4常用的new FSlateBrush的方式与正常的SlateStyle的方式就不说了 这类的文章很多 这里主要仿照引擎源码加载图片的方式加加载 参考源码 FTestStyle h class FMainStyle public
  • SpringBoot主程序运行及配置文件

    主程序运行 SpringBootApplication public class SpringbootApplication public static void main String args SpringApplication run
  • 5G 的未来

    目录 5G流量 5G应用场景 VR AR MR 5G关键技术 超密集组网 5G关键技术 动态自组织网 SON 软件定义网络SDN SDN与NFV的深度融合 5G挑战 频谱资源 新业务的挑战 新使用场景的挑战 终端设备带来的挑战 5G面临的安
  • 反射和多线程基础

    Version 邢朋辉 今日主播 邢朋辉 QQ 345086739 一 今日内容 1 1 课程回顾 1 2 反射是啥 1 3 进程和线程 1 4 线程的创建方式 1 5 线程的状态 1 6 线程的常用方法 二 课程回顾 Java的基本语法
  • R语言的常用的包

    在学习R的时候 R的包众多 很多时候对于初学者会造成很大的困扰就是不知道用什么样的包比较合适 我会在不断使用R的过程中 进行使用同时结合使用体验为大家推荐合适的R包 避免重复学习 以节约时间 标了 精 的是需要重点研究和掌握的包 1 数据导
  • 写CSDN博客时,调节字体、大小、颜色

    字体颜色样式系列 为了突出重点内容 想设置不同颜色 颜色挑选网址 https blog csdn net wo919191 article details 84249531 face设置字体 文本内容使用font标签包裹 可通过face设置
  • 查询tomcat可用 端口

    步骤一 cmd输入 输入 netstat ano 步骤二 查询端口号是否被占用 netstat aon findstr 端口号 步骤三 查询占用端口的应用 tasklist findstr 查询出的 listening 步骤四 taskki
  • 如果有多个异步函数需要保证同时执行并保证全部执行完毕后再进行下一步

    array push api post array push api get Promise all array then resArr gt resArr forEach res gt console log res 在 then后面判断
  • python3 抖音短视频链接去水印下载视频到本地

    基于近段时间对抖音 快手 秒拍等视频抓取一直想搞一下 加了个QQ群 里面全是自媒体 就是抖音 快手 秒拍的视频搬运工 把一个平台搬到另外一个平台上 去除水印 降低被干掉的危险 经过半天的琢磨 自己用python也搞出来一个根据抖音分享视频链
  • python用input输入列表_python怎么用input函数输入一个列表

    在Python3 0以后 键盘输入使用input函数 gt gt gt x input gt gt gt 123 123 在命令行没有任何显示 输入123后直接赋值给x 并打印 仅仅使用input是无法解决大部分数据处理的 通常输入的字符串
  • Python构建ANN模型预测气温变化

    在利用爬虫模型得到了气温数据集后 具体参考上篇Python构建爬虫模型爬取天气数据 我们开始利用tensorflow自带的模块搭建一个简单的ANN模型预测气温变化 其实这个模型适用于预测很多数据变化趋势 这里以预测气温变化为例 import