基于Hadoop的气象数据的大数据可视化系统的设计与实现

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主。

1 项目整体说明

气象数据看起来只是温度、风向、风力和空气质量指数的简单记录,真正做成系统以后才会发现,它更像是一条完整的数据链路:前端需要有清晰的大屏展示,后端需要有稳定的数据服务,底层还要能处理多年、多城市、多指标的历史数据。这个项目就是围绕河南省多城市历史气象数据搭建的一套大数据分析与可视化平台,整体包含数据采集、数据存储、Hadoop 分析、Flask 展示以及空气质量预测几个部分。

项目数据覆盖 2017 年至 2025 年 3 月,涉及河南省多个城市,最终形成约五万条左右的结构化气象记录。字段中既有最高温度、最低温度、天气情况、风向、风力,也有 AQI、空气质量等级、城市、省份等维度。相比只做单一图表展示,这套系统更强调完整流程,把"数据从哪里来、怎样存、怎样算、怎样展示、怎样预测"全部串起来。

从展示效果来看,系统既有代码运行过程,也有数据库落库结果,还有 Hadoop、Hive、Flume、Sqoop 等大数据组件的操作痕迹,最后通过交互式图表和大屏页面呈现分析结果。用于课程设计、毕业设计或数据可视化类项目时,整体层次比较完整,技术栈也比较丰富。

2 技术路线与系统架构

整个项目可以拆成五层。第一层是数据采集层,使用 Python 爬虫从 2345 天气网获取历史气象数据,通过动态 URL 拼接、请求头模拟、随机延时等方式完成批量抓取。第二层是数据存储层,先将数据保存为 CSV 文件,方便快速检查和备份,再写入 MySQL 数据库,便于结构化管理。第三层是大数据分析层,将清洗后的数据导入 Hadoop 生态,借助 Hive 完成分组统计、趋势分析和指标汇总。

第四层是数据流转层,主要使用 Flume 和 Sqoop。Flume 负责监听指定目录,将新增的 CSV 文件自动采集到 Hive 数据仓库;Sqoop 负责把 Hive 中的分析结果导出到 MySQL,方便后续 Web 系统读取。第五层是可视化与预测层,Flask 提供页面服务,Pyecharts、ECharts、Matplotlib 负责图表展示,GRU 模型用于短期 AQI 时间序列预测。

这种设计的好处是流程清晰,工程味比较足。数据不只是被简单读取出来,而是经历了"网页采集---本地存储---数据库管理---HDFS/Hive 分析---关系库回流---Web 展示---模型预测"的完整闭环。对于想展示大数据项目能力的同学来说,这种结构会比单独写几个 SQL 或画几张图更有说服力。

|--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|
| 图 1 数据来源页面展示 | 图 2 原始 JSON 数据展示 |
| 图 3 数据采集流程代码逻辑 | 图 4 采集过程运行效果 |
| 图 5 采集存储结果展示 | 图 6 MySQL 建表代码展示 |
| 图 7 数据库存储展示 | |

3 数据采集与存储实现

数据采集是这个项目的起点。气象网站的数据按城市和月份组织,每个月的数据对应不同的 URL 地址,因此爬虫部分先根据年份、月份和城市编号动态构造请求地址,再使用 requests 获取页面内容。由于部分数据以 JavaScript 或 JSON 片段形式存储,程序需要结合正则表达式提取日期、最高温度、最低温度、天气、风向、风力、AQI 等字段。

实际采集时,最容易遇到的问题不是代码写不出来,而是请求过快导致访问失败。项目里设置了 3 到 6 秒左右的随机等待时间,同时添加浏览器请求头,让访问行为更接近真实用户。这样做可以提高数据获取稳定性,也能降低频繁请求带来的阻塞风险。部分早期年份空气质量字段缺失,程序中也预留了异常处理逻辑,保证不同年份的数据能够保持统一结构。

存储方面采用 CSV 与 MySQL 双轨方案。CSV 用来做中间备份,方便查看数据是否抓取完整;MySQL 用来做结构化管理,数据库中设置了 weather_data 库和 weather_info 表,字段包含 ymd、high、low、tianqi、fengxiang、fengli、aqi、aqiInfo、aqiLevel、train_level、Province、City 等。这样既能保证数据可查、可管,也方便后续导入 Hadoop 做进一步分析。

从运行截图可以看到,程序采集后会输出数据行,并将结果持续写入数据库。由于数据量达到五万条左右,项目中也考虑到逐条插入效率偏低的问题,实际可以采用批量插入或先 CSV 再统一导入的方式提高写入速度。

4 Hadoop 大数据分析流程

完成基础存储以后,数据进入 Hadoop 分析流程。环境启动后,通过 jps 可以看到 NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager 等核心进程正常运行。NameNode 负责管理 HDFS 元数据,DataNode 负责实际数据存储,YARN 则负责资源调度。这样的配置为后续 Hive 分析提供了运行基础。

Hive 部分创建了 weather 数据库,并建立 weather_data 数据表。为了提高查询效率和节省存储空间,表采用 ORC 格式,字段与前期采集数据保持一致。数据导入没有采用纯手动方式,而是通过 Flume 监控指定目录,当新的 CSV 文件放入目录后,Flume 会自动采集并写入 Hive 表。配置中使用 spooldir 作为 source,file channel 作为缓冲,再通过 Hive sink 写入数据仓库。

分析维度主要围绕温度、空气质量、天气状况、风向风力等展开。比如按月份统计平均最高温、平均最低温,按城市统计平均 AQI,按年份比较空气质量变化,按天气情况统计污染程度差异。Hive 分析完成后,再通过 Sqoop 将结果导出到 MySQL。这样 Web 页面就不需要直接访问 Hive,而是从 MySQL 中读取已经整理好的统计结果,响应速度更快,系统结构也更清楚。

|------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|
| 图 8 Hadoop 集群启动展示 | 图 9 Hive 环境配置展示 |
| 图 10 MySQL 环境安装展示 | 图 11 Hive 建表过程展示 |
| 图 12 Hive 与 Flume 服务启动展示 | 图 13 数据自动加载展示 |
| 图 14 Flume 配置文件展示 | 图 15 数据加载成功展示 |
| 图 16 Hive 数据分析过程展示 | 图 17 数据分析结果展示 |
| 图 18 分析 SQL 结果展示 | 图 19 Hive 分析结果表展示 |
| 图 20 MySQL 接收表创建展示 | 图 21 Sqoop 数据导出展示 |
| 图 22 数据库备份导出展示 | |

5 可视化分析功能展示

可视化是这个项目最适合展示的部分。系统并没有只放一张折线图,而是围绕空气质量、温度变化、城市对比、天气影响、风向风力、大屏展示等多个方向做了图表组合。页面端使用 Flask 作为 Web 服务框架,图表部分结合 Pyecharts、ECharts 和 Matplotlib,能够将后端分析结果转成更直观的页面效果。

空气质量分析中,2019 年河南省不同城市 AQI 差异比较明显,安阳市的 AQI 值较高,信阳市相对较低;从省域地图看,北部地区整体污染程度比南部更高。郑州市 2023 年 AQI 日历图中,3 月至 4 月出现明显高值区间,部分日期 AQI 接近 500,说明该阶段存在较严重的污染波动。洛阳市日 AQI 曲线则能看出春季和冬季波动较明显,夏秋季相对平稳。

温度分析部分展示了不同年份各月平均最高温和最低温变化,整体趋势符合季节规律:5 月至 7 月气温上升明显,冬季低温阶段用电、供暖、出行风险也更值得关注。空气质量对比部分进一步展示了不同城市之间的 AQI 排序,安阳等城市污染压力更大,驻马店等城市数值相对较低。天气与 AQI 关系中,扬沙天气下开封市平均 AQI 明显偏高,而降雨、降雪天气下空气质量相对更好,这与降水对污染物的沉降作用相吻合。

风向风力分析把风向出现频率和风力等级分布做成统计图,能够看出河南省主要风向与风级分布情况。大屏页面则把地图、折线图、柱状图、饼图、环形图等结果集中到一个界面中,适合用于系统汇报、项目答辩或成果展示。

|----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| 图 23 2019 年不同城市平均 AQI | 图 24 2022 年郑州市 AQI 日历图 |
| 图 25 2023 年郑州市 AQI 日历图 | 图 26 2023 年洛阳市每日 AQI |
| 图 27 2024 年洛阳市每日 AQI | 图 28 河南省各市平均 AQI 地图 |
| 图 29 洛阳市每月平均 AQI 变化 | 图 30 洛阳市空气质量等级分布 |
| 图 31 郑州市空气质量相关性分析 | 图 32 郑州市空气质量说明分布 |
| 图 33 全省空气质量说明分布 | 图 34 不同年份各月平均最低气温 |
| 图 35 不同年份各月平均最高气温 | 图 36 不同城市平均 AQI 对比 |
| 图 37 开封市不同天气下平均 AQI | 图 38 不同风向的风力统计 |
| 图 39 不同风力等级下风向分布 | |

图 40 综合大屏可视化展示

图 41 可视化页面展示

6 GRU 空气质量预测模型

除了统计分析和页面展示,项目还加入了空气质量预测模块。这里选择 GRU 模型对 AQI 进行时间序列预测。GRU 属于循环神经网络结构的一种,适合处理连续时间序列数据,相比普通 RNN 更能缓解长期依赖和梯度消失问题。空气质量本身具有明显时间相关性,因此用 GRU 建模具有一定合理性。

从训练过程来看,模型损失在前期下降较快,后期逐渐趋于稳定,说明模型能够学习到 AQI 波动的主要趋势。测试结果中,RMSE 约为 26.82,MAE 约为 17.35,R² 约为 0.48。这个结果说明模型在常规波动范围内有一定预测能力,但遇到突发污染、极端 AQI 高值时误差会变大。原因也比较清楚:极端污染样本本身数量有限,单纯依靠历史 AQI 序列很难完整解释工业排放、交通活动、沙尘、降雨等外部因素。

因此,预测模块更适合作为项目中的扩展亮点,而不是绝对精准的预警系统。后续如果继续优化,可以加入湿度、风速、降水、污染源、节假日、交通强度等更多特征,也可以尝试 LSTM、Transformer 或混合模型,提高对异常波动的捕捉能力。

|---------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|
| 图 42 GRU 模型训练结果 | 图 43 AQI 预测结果展示 |

7 项目亮点与应用价值

这个项目的第一个亮点是链路完整。从网页数据采集开始,到 CSV 备份、MySQL 存储、Hadoop 分析、Hive 建表、Flume 导入、Sqoop 导出、Flask 展示,再到 GRU 预测,整个过程基本覆盖了大数据可视化项目的核心环节。展示时不仅能看到最终页面,也能看到背后的数据处理和组件配置过程。

第二个亮点是图表类型丰富。系统包含柱状图、折线图、日历热力图、地图、饼图、环形图、相关性热力图、大屏页面等多种形式,可以从时间、地区、天气、风向、空气等级等角度观察气象数据。对于答辩或成果展示来说,图表越丰富,越容易体现系统完成度。

第三个亮点是业务场景明确。气象数据可以服务农业生产、城市治理、环保监测、交通出行和公众生活。比如空气质量分布可以帮助定位重点治理区域,气温趋势可以辅助用电和供暖安排,天气与 AQI 的关联分析可以为污染预警提供参考。项目虽然是学生系统,但场景并不空泛,能够和现实需求形成对应关系。

第四个亮点是技术组合适合展示。Python、MySQL、Hadoop、Hive、Flume、Sqoop、Flask、Pyecharts、Matplotlib、GRU 这些关键词串联在一起,既有数据工程,也有数据分析,还有前端可视化和深度学习模型。对于需要体现综合开发能力的项目来说,这种组合比较容易形成完整叙事。

8 项目总结

整体来看,这套气象数据大数据可视化系统不是单纯做几个统计图,而是把真实数据、分布式存储、离线分析、结果导出、页面展示和预测模型整合到同一个项目中。前期通过爬虫获取长期历史数据,中间通过 Hadoop 生态完成大规模处理,后端通过 Flask 提供页面服务,前端通过多图表展示分析结果,最后再用 GRU 增加预测能力。

项目比较适合用于大数据、数据分析、数据可视化、环境监测、气象信息服务等方向的课程设计或毕业设计。后续如果继续完善,可以增加实时数据接口、登录权限、可配置城市筛选、更多预测变量和模型对比,也可以把大屏页面做成更接近企业 BI 系统的效果。

每文一语:

把复杂流程拆成清晰步骤,项目就会从"能运行"走向"能展示"。

相关推荐
喵手3 个月前
Python爬虫实战:环境监测实战 - 天气与空气质量的联合分析!
爬虫·python·爬虫实战·环境监测·天气预测·零基础python爬虫教学·天气质量
java1234_小锋5 个月前
[免费]基于Python的天气预报(天气预测分析)(Django+sklearn机器学习+selenium爬虫)可视化系统【论文+源码+SQL脚本】
爬虫·python·selenium·天气预报·天气预测
麦麦大数据7 个月前
F043 vue+flask天气预测可视化系统大数据+机器学习+管理端+爬虫+超酷界面+顶级可视化水平 【黑色版】
大数据·vue.js·flask·天气预测·气温预测·天气大数据·天气可视化
麦麦大数据7 个月前
F043 vue+flask天气预测可视化系统大数据(浅色版)+机器学习+管理端+爬虫+超酷界面+顶级可视化水平
大数据·vue.js·机器学习·flask·空气质量·天气预测·气温预测
xiao5kou4chang6kai41 年前
Python人工智能在气象中的应用,包括:天气预测、气候模拟、降雨量和降水预测、气象数据分析、气象预警系统
python·气象数据分析·天气预测·气候模拟.·降雨量和降水预测·气象预警系统
胖哥真不错2 年前
Python基于TensorFlow实现BP和LSTM神经网络的空气质量预测并使用SHAP解释模型项目实战
python·tensorflow·项目实战·bp神经网络回归模型·lstm神经网络·空气质量预测·shap解释模型
王小王-1232 年前
基于Python的河南省天气数据分析与空气质量预测研究【含数据抓取与数据库自动存储】
数据库·python·气象数据分析·空气质量分析·空气质量预测