Skip to content

LianshengTAT/WeatherForecast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WeatherForecast

基于长短期记忆神经网络进行天气预测

一、项目概述

本项目旨在开发一个基于 Python 的气温预测系统,通过对历史气温数据的分析和学习,使用 LSTM(长短期记忆网络)模型来预测未来的气温变化。该系统能够根据用户输入的城市名称,获取该城市的历史气温数据,并进行数据预处理、模型训练和预测,最终输出预测结果。

二、设计内容

(一)数据获取

  1. 数据源:从天气网站(https://tianqi.2345.com/wea_history/{}.htm)获取历史气温数据,其中 {} 为城市代码。
  2. 城市代码查找:通过读取 cityCode.txt 文件,根据用户输入的城市名称查找对应的城市代码。
  3. 网页内容获取:使用 requests 库发送 HTTP 请求获取网页内容,并使用 BeautifulSoup 库进行 HTML 解析。

(二)数据预处理

  1. 数据提取:从解析后的 HTML 中提取出日期和气温数据。
  2. 数据清洗:去除数据中的空格、换行符等无效字符,并将气温数据转换为浮点数类型。
  3. 数据格式化:将日期和气温数据组合成适合模型训练的格式,并保存为文本文件。

(三)模型设计

  1. LSTM 模型构建:使用 PyTorch 框架构建 LSTM 模型,包括输入层、隐藏层和输出层。
  2. 模型参数设置:设置输入维度为 1(日期序列),隐藏层维度为 256,输出维度为 2(最高气温和最低气温),学习率为 0.001,训练轮数为 1000。

(四)模型训练

  1. 数据加载:从预处理后的训练集文件中读取数据,并将其转换为 PyTorch 张量。
  2. 损失函数选择:使用均方误差(MSELoss)作为损失函数,用于衡量模型预测值与真实值之间的差异。
  3. 优化器选择:使用 Adam 优化器来更新模型参数,以最小化损失函数。
  4. 训练过程:在训练过程中,按照设定的训练轮数进行迭代训练,每 100 轮打印一次损失值,观察模型的收敛情况。

(五)模型测试

  1. 数据加载:从预处理后的测试集文件中读取数据,并将其转换为 PyTorch 张量。
  2. 模型预测:使用训练好的模型对测试集数据进行预测,得到预测结果。
  3. 损失计算:计算预测结果与真实测试集数据之间的均方误差损失,并打印测试损失值。

(六)结果输出

将预测结果以清晰易懂的方式输出给用户,包括预测的日期和对应的最高气温、最低气温。

三、设计工具

  1. Python 编程语言:作为主要的开发语言,用于实现整个系统的功能。
  2. PyTorch 库:用于构建和训练 LSTM 模型,提供了丰富的神经网络层和优化算法。
  3. requests 库:用于发送 HTTP 请求,获取网页内容。
  4. BeautifulSoup 库:用于解析 HTML 页面,提取数据。
  5. numpy 库:用于处理数值计算和数组操作。
  6. sklearn 库:用于数据划分,将数据集分为训练集和测试集。

四、设计步骤

(一)数据获取与预处理

1. 获取城市代码

◦ 用户输入想要预测气温的城市名称。 ◦ 程序调用 createTrainingSet.py 中的 findCityCode 函数,在 cityCode.txt 文件中查找对应的城市代码。

2. 获取网页内容

◦ 根据找到的城市代码,构造完整的 URL。 ◦ 使用 requests 库发送 GET 请求获取网页内容,设置超时时间为 30 秒,并处理可能的异常。 ◦ 如果请求成功,将响应内容的编码设置为 utf - 8 并返回;否则,打印异常信息并返回 None。

3. 数据提取与清洗

◦ 调用 createTrainingSet.py 中的 dataExtract 函数,判断获取的网页内容是否为 None,如果是则终止程序运行。 ◦ 使用 BeautifulSoup 解析网页内容,调用 fillData 函数提取日期和气温数据。 ◦ 在 fillData 函数中,遍历 HTML 中的表格行(tr)和列(td),将每个单元格的文本内容添加到 singleData 列表中,再将 singleData 列表添加到 allData 二维列表中。 ◦ 去除数据中的无效字符,如空格、换行符等,并将气温数据转换为浮点数类型。

4. 创建训练集文件

◦ 调用 createTrainingSet.py 中的 CreateTrainingSet 函数,将处理后的数据保存为文本文件。 ◦ 在 CreateTrainingSet 函数中,将日期和气温数据组合成字符串,用制表符(\t)分隔,每行数据末尾添加换行符(\n)。 ◦ 将所有行数据写入指定路径的文件中,如果写入成功则打印 "Success!",否则打印异常信息。

(二)模型构建与训练

1. 构建 LSTM 模型

◦ 在 LSTM.py 中定义 LSTM 类,继承自 nn.Module。 ◦ 在类的初始化函数中,设置隐藏层大小、创建 LSTM 层和全连接层。 ◦ 实现 forward 函数,定义模型的前向传播过程,包括 LSTM 层的计算和全连接层的输出。

2. 准备训练数据

◦ 调用 LSTM.py 中的 GetTrainSet 函数,从训练集文件中读取数据。 ◦ 将读取到的日期数据转换为整数序列,气温数据转换为浮点数数组。 ◦ 使用 sklearntrain_test_split 函数将数据集按照 40% 的比例划分为训练集和测试集。 3. 训练模型 ◦ 创建 LSTM 模型实例,传入输入维度、隐藏层维度和输出维度。 ◦ 调用 LSTM.py 中的 train 函数,传入模型、训练数据、训练标签、学习率和训练轮数。 ◦ 在 train 函数中,将训练数据和标签转换为 PyTorch 张量,并设置数据类型为 float。 ◦ 定义均方误差损失函数和 Adam 优化器,在训练循环中,进行前向传播、计算损失、反向传播和参数更新,每 100 轮打印一次损失值。

(三)模型测试与结果输出

1. 测试模型

◦ 调用 LSTM.py 中的 test 函数,传入模型、测试数据和测试标签。 ◦ 在 test 函数中,将测试数据和标签转换为 PyTorch 张量,并设置数据类型为 float。 ◦ 使用训练好的模型进行预测,计算预测结果与真实标签之间的均方误差损失,并打印测试损失值。 ◦ 将预测结果转换为 numpy 数组并返回。

2. 输出结果

◦ 在 main.py 中,接收 test 函数返回的预测结果。 ◦ 打印预测结果,包括预测的日期和对应的最高气温、最低气温。

五、设计程序

(一)main.py

  1. 导入必要的库,包括 createTrainingSetLSTMsystrain_test_splittime
  2. 设置模型的输入维度、隐藏层维度、输出维度、训练轮数和学习率。
  3. 记录程序开始时间 t1
  4. 使用 try - except 语句捕获异常,在 try 块中: ◦ 获取用户输入的城市名称。 ◦ 调用 createTrainingSet 中的函数获取城市代码、网页内容、提取数据并创建训练集。 ◦ 调用 LSTM 中的函数获取训练集数据,划分训练集和测试集,创建 LSTM 模型,训练模型并进行测试,得到预测结果并打印。
  5. except 块中,打印异常类型和异常信息,并使用 sys.exit () 终止程序。
  6. 记录程序结束时间 t2,计算并打印程序运行时间。

(二)LSTM.py

  1. 导入必要的库,包括 sysnumpytorchtorch.nntorch.optim
  2. 定义 GetTrainSet 函数,用于从训练集文件中读取数据,包括日期和气温信息,返回数据时间序列和气温序列的列表。
  3. 定义 LSTM 类,继承自 nn.Module,在类中: 初始化函数设置隐藏层大小,创建 LSTM 层和全连接层。 forward 函数定义模型的前向传播过程,包括 LSTM 层的计算和全连接层的输出。
  4. 定义 train 函数,用于训练 LSTM 模型,包括数据转换、定义损失函数和优化器、训练循环和损失值打印。
  5. 定义 test 函数,用于测试 LSTM 模型,包括数据转换、模型预测、损失计算和结果返回。

(三)createTrainingSet.py

  1. 导入必要的库,包括 sysrequestsBeautifulSoup
  2. 定义 findCityCode 函数,在 cityCode.txt 文件中查找城市名称对应的城市代码并返回。
  3. 定义 getHTMLtext 函数,根据城市代码发送 HTTP 请求获取网页内容,处理异常并返回内容或 None
  4. 定义 dataExtract 函数,判断网页内容是否为 None,若不为 None 则使用 BeautifulSoup 解析并调用 fillData 函数提取数据,否则终止程序。
  5. 定义 fillData 函数,从解析后的 HTML 中提取日期和气温数据,存储为二维列表并返回。
  6. 定义 CreateTrainingSet 函数,将数据保存为训练集文件,每行数据格式为日期 \t 最高气温 \t 最低气温,处理异常并打印结果信息。

About

基于长短期记忆神经网络进行天气预测

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages