欢迎光临
我们一直在努力

基于 ARIMA + Transformer 的重庆市气象分析与预测

有需要本项目的代码、文档、完整资源,或者需要部署调试的朋友,可以私信博主。

一、项目背景

重庆是一座非常适合做气象数据分析的城市。它既有山地、河谷、主城都市圈,也有渝东北、渝东南等差异明显的区域,气温、降水、空气质量和极端天气都呈现出较强的空间差异。如果只是看某一天的天气预报,很难感受到这些长期变化;但把近十年的历史气象记录连续整理起来,再通过可视化和预测模型去观察,就能看到很多有意思的规律。

这个项目围绕重庆市气象分析与预测展开,核心思路是把分散在公开平台上的历史天气记录采集下来,经过清洗、字段转换、数据库存储之后,再做探索性分析、可视化大屏和温度预测建模。整体链路覆盖数据采集、数据治理、统计分析、地图展示、Web 大屏、ARIMA 预测、SARIMA 对比以及 Transformer 深度学习预测,适合作为数据分析类、机器学习类、可视化类项目的综合案例。

从最终呈现效果看,它不是单独的一段爬虫脚本,也不是简单画几张图,而是一个有数据、有页面、有模型、有结果、有解释的完整项目。前端可以看到区县地图、趋势曲线、统计图和预测结果,后端可以通过数据库组织数据,建模部分则把传统时间序列方法和深度学习方法放在同一任务下进行对比。

1 项目数据来源页面展示

2 历史气象数据采集结果

二、项目整体流程

我在设计这个项目时,先把流程拆成四个层次:数据层、分析层、模型层和展示层。数据层负责采集重庆各区县 2016 年至 2025 年的日度气象信息,包含日期、最高温、最低温、天气状况、风向风力、空气质量等字段。分析层主要使用 pandasMySQL 查询和 Pyecharts 图表完成统计汇总。模型层分别构建 ARIMASARIMA Transformer,用来完成短期温度预测。展示层则使用 Flask ECharts 组织成可交互的数据大屏。

这套流程的好处是层次清楚,后期扩展也比较方便。数据源更换时,只需要调整采集和解析逻辑;增加新的分析图表时,可以基于已有数据库直接写聚合查询;如果要替换预测模型,也可以沿用同一套训练集、测试集和回测方式,便于比较不同模型的表现。

在实际开发中,数据质量处理占了很大比例。天气数据看起来字段简单,但不同月份的返回格式、编码方式、缺失值、行政区名称简称与全称不一致等问题都会影响后续展示。项目中对日期、降水类型、空气质量、区县名称等字段都做了规范化处理,保证地图和统计图能够正常渲染。

3 MySQL 数据库存储示例

三、数据采集与预处理实现

数据采集部分使用 Python 完成。采集程序先获取重庆各区县对应的区域编号,再根据年份和月份拼接历史天气数据地址。由于不同年份的数据组织方式并不完全一致,程序中加入了年份判断逻辑,避免只适配某一种固定链接格式。请求过程中还加入了超时控制、编码识别、失败重试和随机延时,尽量提高长时间采集的稳定性。

爬取后的原始数据不能直接进入分析环节。项目中对日期字段统一转成标准时间格式,对温度字段提取最高温和最低温,对天气文本进行降水等级映射,对 AQI 字段中的空值和异常值进行补齐,同时生成是否降水、是否降雪、是否雾霾、是否高温、是否寒冷等派生标签。这样做以后,原本分散的文本型天气描述就可以进入统计分析和可视化展示。

为了兼顾备份和查询效率,数据同时保存为 CSV 文件和 MySQL 表。CSV 方便后期离线查看,MySQL 则适合接入后端接口,为大屏和图表提供结构化数据。数据库表字段控制得比较清晰,既保留了原始天气信息,又增加了后续分析需要的分类字段。

四、区域维度可视化:把重庆区县差异直接画出来

区域地图是这个项目里比较直观的一部分。重庆不同区县在地形、产业结构、人口密度和生态环境上差异明显,只用表格很难看出空间格局。项目把区县名称统一映射到标准行政区划名称后,借助 ECharts 地图组件生成了多张空间分布图,包括 AQI 均值、晴天占比、降水日占比、高温日占比、寒冷日占比和空气质量优良占比等。

从地图效果上可以明显看到,主城及周边区域在空气质量指标上更容易出现高值,部分山地和生态条件较好的区县则整体表现更优。高温日分布也呈现出明显的区域差异,主城及低海拔区域更容易形成连续高温,而渝东北、渝东南部分区县受海拔和地形影响,高温比例相对较低。

这类图表非常适合用于项目展示,因为它能把重庆气象差异这件事变得一眼可见。对于数据分析项目来说,地图不仅是装饰,更是一种很有效的信息表达方式。

4 重庆各区县近十年 AQI 空间分布

5 重庆各区县晴天日占比地图

6 重庆各区县高温日占比地图

7 重庆各区县空气质量优良占比地图

五、时间趋势分析

除了空间差异,时间趋势也是气象数据最值得看的部分。项目按照日期维度统计了重庆近十年的气温变化和 AQI 变化,并进一步按月份、季度和年份做聚合。温度序列呈现出非常明显的季节性,每年夏季达到高点,冬季回落;AQI 则在不同季节表现出波动特征,与气象扩散条件和区域排放情况都有关系。

月度平均气温图可以清楚地展示重庆一年中的温度节律,季度箱线图则进一步呈现出不同季节的离散程度。对于数据分析项目来说,单纯给出平均值是不够的,趋势、极值、分布和排名要结合起来看,才能把项目内容做得更完整。

在区县排名部分,项目统计了近十年最热区县、最冷区县、空气质量最好和最差的区域,以及昼夜温差等指标。这些统计结果可以作为数据故事的切入点,也能让项目从会画图进一步变成能解释现象

8 近十年气温趋势可视化

9 近十年 AQI 趋势可视化

10 月度平均气温变化展示

11 近十年最热区县排名

六、统计分布分析

在基础趋势之外,项目还对 AQI 等级、天气类型、风向、风力和降雨等级进行了统计。饼图和柱状图虽然是常见图表,但在这个项目中用得比较合适,因为气象事件本身具有明显的类别属性。比如天气类型占比可以反映重庆多云、降雨、晴天等情况的长期结构;AQI 等级占比则可以展示空气质量整体处于什么水平。

这些统计图不追求把所有细节堆满,而是服务于展示和理解。用户打开页面后,可以先通过地图看空间差异,再通过折线图看时间变化,最后通过饼图、柱状图和热力图补充天气结构。多个维度组合起来,整个可视化部分就不再单薄。

12 AQI 等级占比统计

13 天气类型分布占比统计

七、交互式数据大屏

为了让项目更像一个可以使用的系统,我把多张图表整合到了 Web 可视化大屏中。后端使用 Flask 提供数据接口,前端使用 ECharts 进行图表渲染,大屏中包含指标卡片、区县地图、趋势曲线、排名图、饼图和统计表等模块。相比单独打开 HTML 图表,大屏的展示感更强,也更适合课程答辩、项目汇报和资源展示。

大屏页面的设计重点是信息聚合。顶部展示关键统计指标,中间放置地图和主要趋势图,两侧补充排名和类别占比。这样布局以后,用户不需要逐个打开文件,就能在一个页面中看到数据采集成果、区域差异和气象变化规律。

在实际项目中,大屏还可以继续扩展。比如加入日期筛选、区县联动、预测结果切换、模型对比面板,或者把最新数据接入定时任务,实现自动更新。当前版本已经具备比较完整的展示框架,后续改成更复杂的数据服务也比较顺畅。

14 系统可视化大屏总览

15 可视化大屏模块展示

八、ARIMA SARIMA

预测部分先从传统时间序列模型开始。ARIMA 的思路比较清晰,适合用来处理单变量时间序列预测任务。项目中先对平均气温序列进行可视化,再进行平稳性检验和参数搜索,通过滚动回测观察未来七天的预测效果。这个环节的价值在于,它提供了一个可解释性较强的预测基线。

ARIMA 模型在短期预测中表现相对稳定,能够捕捉气温序列的部分连续变化趋势。考虑到气温存在季节性,项目进一步加入 SARIMA 进行对比。SARIMA ARIMA 的基础上增加了季节项,理论上更适合处理具有周期波动的气象序列。通过二者对比,可以看到传统统计模型在不同历史窗口和季节设定下的表现差异。

在展示文章里,模型部分不需要把每一个公式都展开,重点放在建模流程和预测效果上会更合适:先看时间序列,接着完成参数选择,然后输出评估指标和未来预测曲线。这样既能体现项目技术深度,又不会让展示内容变成纯数学推导。

16 平均气温时间序列展示

17 ARIMA 模型评估指标展示

18 ARIMA 模型预测效果展示

19 ARIMA 未来七天预测展示

20 SARIMA 模型评估展示

21 SARIMA 预测结果展示

九、Transformer

在传统模型之外,项目还加入了 Transformer。这个模型最早在自然语言处理任务中应用较多,但它的自注意力机制同样可以用于时间序列预测。气温序列虽然只有一个主要预测目标,但其中包含季节性、局部波动、长期趋势和短期突变,单纯依靠线性模型并不总是足够。

项目中的 Transformer 采用 Seq2Seq 思路,把历史窗口内的温度和时间特征输入模型,再预测未来一段时间的温度变化。为了增强时间感知能力,模型中加入了年周期、周周期和趋势特征,使其能够更好地理解当前处于一年中的哪个阶段。训练过程中通过损失曲线观察收敛情况,再使用预测曲线、散点图和评估指标检查效果。

从结果展示来看,Transformer 对局部波动的跟随能力更强,预测曲线与真实曲线的贴合度较好。论文结果中显示,传统模型已经可以达到不错的短期预测水平,Transformer 进一步提升了整体表现。对于项目展示来说,这部分能够很好地体现传统时间序列 + 深度学习的组合思路。

22 Transformer 训练损失变化

23 Transformer 预测曲线展示

24 Transformer 预测值与真实值散点图

25 Transformer 模型评估指标展示

26 Transformer 未来七天预测展示

十、项目可以展示的核心内容

这个项目适合重点展示四类内容。第一类是数据采集能力,包括区域编号获取、历史数据抓取、编码处理、字段解析和增量保存。第二类是数据治理能力,包括缺失值处理、字段映射、降水强度转换、区县名称标准化和派生标签构建。第三类是可视化能力,包括地图、折线图、柱状图、饼图、箱线图和大屏页面。第四类是预测建模能力,包括 ARIMASARIMA Transformer 的建模流程、回测结果和未来预测展示。

如果用于课程设计或毕业设计展示,这个项目的完整度比较高:前面有数据来源,中间有数据库和可视化,后面有预测模型,最后还有可运行页面。相比只做单一算法,它更容易讲清楚项目价值;相比只做前端大屏,它又有足够的数据分析和模型支撑。

后续还可以继续扩展几个方向。比如把降水量、湿度、风力等更多气象指标纳入多变量预测;把模型封装成接口,让前端可以选择不同模型;增加定时任务自动更新最新天气数据;加入极端高温预警、空气质量提醒等业务场景。这样项目就能从展示型系统进一步升级为可持续运行的数据应用。

十一、技术栈与运行方式

从技术栈来看,项目主要使用 Python 完成数据采集、清洗、统计分析和模型训练。数据采集部分用 requests 获取页面内容,配合正则表达式和编码识别完成字段提取;数据处理部分主要依赖 pandas;数据库写入和查询使用 MySQL 相关驱动;可视化图表由 Pyecharts ECharts 承担;Web 服务端使用 Flask 组织接口;深度学习预测部分使用 PyTorch 搭建 Transformer 模型。

运行时可以按照准备数据库、执行采集脚本、完成数据清洗、启动后端服务、打开可视化页面、运行模型训练与预测脚本的顺序展开。对于只想看效果的用户,可以直接使用已经整理好的样例数据和页面;对于需要二次开发的用户,则可以从爬虫、图表、大屏、模型四个模块分别切入。

资源整理时建议保留三类材料:第一类是项目源码和运行说明,方便复现环境;第二类是处理后的数据文件和数据库表结构,方便快速查看分析结果;第三类是论文、演示截图和预测结果图,方便答辩、汇报或发布展示。这样整理后,项目不仅能运行,也更容易被别人理解和接手。

十二、项目总结

整体来看,这个重庆气象分析与预测项目把数据采集、数据清洗、数据库管理、EDA 分析、Web 大屏和预测模型串成了一条完整链路。它既能展示 Python 数据处理能力,也能展示可视化设计、后端接口、时间序列建模和深度学习应用。对于想做数据分析类项目的同学来说,这种结构比较容易形成完整作品;对于需要项目资源、二次开发或部署调试的朋友,也可以基于现有版本继续扩展。

项目中最有价值的地方不是某一张图或某一个模型,而是完整流程的打通。数据从公开页面进入本地数据库,再经过清洗、统计、建模和页面展示,最终形成可以被查看、解释和演示的成果。这种端到端的实现方式,才是数据项目真正能站住脚的关键。

每文一语

把零散数据整理成系统,把复杂问题拆成流程,把每一次调试都当成作品变好的机会。

赞(0)
未经允许不得转载:171主机测评 » 基于 ARIMA + Transformer 的重庆市气象分析与预测
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址