基于 Flask + MySQL 的天气预报数据可视化分析系统

天气预报数据可视化分析系统 - 系统文档

📋 目录


项目概述

项目简介

本系统是一个基于 Flask + MySQL 的天气预报数据可视化分析系统,提供天气数据的采集、存储、分析和可视化展示功能。系统整合了多个天气数据源,支持实时天气查询、历史天气查询、7天天气预报分析等功能,并通过多种图表和地图展示天气数据。

主要特性

  • ✅ 用户认证系统(注册/登录/信息管理)
  • ✅ 实时天气数据展示(中国地图可视化)
  • ✅ 7天天气预报分析(多指标折线图)
  • ✅ 历史天气查询(2022-2024年数据)
  • ✅ 数据自动爬取(API + 网页爬虫)
  • ✅ 多维度数据分析(温度、湿度、风力、能见度等)
  • ✅ 响应式前端设计(Bootstrap 4)

系统架构

架构图

复制代码
┌─────────────────────────────────────────────────────────────┐
│                         用户界面层                              │
│  ┌──────────┬──────────┬──────────┬──────────┬──────────┐  │
│  │  首页    │ 天气地图 │ 天气分析 │ 历史天气 │ 用户管理 │  │
│  └──────────┴──────────┴──────────┴──────────┴──────────┘  │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                         Flask 应用层                          │
│  ┌─────────────────────────────────────────────────────┐   │
│  │               路由控制器 (app.py)                    │   │
│  │  /login /register /home /map /search /lishi /user  │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                       业务逻辑层                              │
│  ┌──────────┬──────────┬──────────┬──────────┬──────────┐  │
│  │  home/   │  lishi/  │  map/    │ search/  │spider/  │  │
│  │  首页数据 │历史查询  │地图数据  │天气分析  │数据爬取  │  │
│  └──────────┴──────────┴──────────┴──────────┴──────────┘  │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                       数据访问层                              │
│  ┌─────────────────────────────────────────────────────┐   │
│  │            MySQL 数据库 (tianqi)                     │   │
│  │  users, weatherdata, weatherdata7, lishiweathers    │   │
│  └─────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                       数据源层                                │
│  ┌──────────────────┬──────────────────────────────────┐  │
│  │   和风天气API     │   weather.tianqi.com (网页爬取)  │  │
│  │   实时/7天预报    │   历史天气数据                  │  │
│  └──────────────────┴──────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

目录结构

复制代码
code/
├── app.py                      # Flask主应用文件
├── requirements.txt            # Python依赖包
├── home/                       # 首页数据处理模块
│   ├── bar.py                  # 饼图数据处理
│   ├── biaoqian.py             # 标签数据统计
│   ├── line.py                 # 折线图数据处理
│   ├── utils.py                # 数据库连接工具
│   └── __init__.py
├── lishi/                      # 历史天气查询模块
│   ├── search.py               # 历史天气搜索
│   ├── utils.py                # 数据库连接工具
│   └── __init__.py
├── map/                        # 地图数据模块
│   └── utils.py                # 城市温度数据查询
├── search/                     # 天气分析查询模块
│   ├── line.py                 # 折线图数据查询
│   ├── table.py                # 表格数据查询
│   ├── utils.py                # 数据库连接工具
│   └── __init__.py
├── spider/                     # 数据爬取模块
│   ├── fenxi.py                # 7天天气预报爬取
│   ├── lishi.py                # 历史天气数据爬取
│   ├── map.py                  # 当前天气爬取
│   ├── china.json              # 中国城市编码
│   ├── city.json               # 城市编码映射
│   └── province_city.json      # 省市对应关系
├── static/                     # 静态资源文件
│   ├── css/                    # 样式文件
│   ├── js/                     # JavaScript文件
│   ├── img/                    # 图片资源
│   ├── pug/                    # Pug模板文件
│   └── vendor/                 # 第三方库
├── templates/                  # HTML模板文件
│   ├── home.html               # 首页
│   ├── login.html              # 登录页
│   ├── register.html           # 注册页
│   ├── map.html                # 天气地图页
│   ├── search.html             # 天气分析页
│   ├── lishi.html              # 历史天气页
│   └── user.html               # 用户管理页
├── userUtils/                  # 用户工具模块
│   └── query.py                # 用户数据库查询
└── 天气系统数据库/             # 数据库文件
    ├── users.sql               # 用户表SQL
    ├── lishiweathrs.sql        # 历史天气表SQL
    ├── 天气数据.sql            # 当前天气数据SQL
    └── 天气数据.zip            # 压缩数据文件

技术栈

后端技术

技术 版本 用途
Python 3.x 主要开发语言
Flask 8.0.3 Web后端框架
PyMySQL - MySQL数据库连接
Requests - HTTP请求库
BeautifulSoup4 - HTML解析
Pandas - 数据处理

前端技术

技术 版本 用途
Bootstrap 4.x 响应式UI框架
jQuery 3.6.0 JavaScript库
ECharts - 数据可视化图表
Chart.js - 图表展示
DataTables - 表格插件
Font Awesome - 图标库

数据库

技术 版本 用途
MySQL 5.7.40 关系型数据库

外部API

API 用途
和风天气API 获取实时天气和7天预报数据

功能模块

1. 用户系统模块

功能说明
  • 用户注册
  • 用户登录
  • 用户信息管理
  • 密码修改
相关文件
  • 后端 : app.py (路由), userUtils/query.py (数据库操作)
  • 前端 : templates/login.html, templates/register.html, templates/user.html
数据库表
  • users 表:存储用户基本信息

2. 首页仪表板模块

功能说明
  • 天气统计卡片展示
  • 风速最高的10个城市(饼图)
  • 湿度最高的10个城市(饼图)
  • 温度最高的10个城市(折线图)
  • 温度最低的10个城市(折线图)
  • 天气状况标签统计(晴天、阴天、雨天、雪天)
相关文件
  • 后端 : app.py (路由), home/bar.py, home/line.py, home/biaoqian.py
  • 前端 : templates/home.html
API接口
复制代码
GET /home
→ 返回首页所需的所有图表数据

3. 天气地图模块

功能说明
  • 中国地图可视化展示
  • 各省份当前温度热力图
  • 鼠标悬停显示省份详情
相关文件
  • 后端 : app.py (路由), map/utils.py
  • 前端 : templates/map.html, static/js/map/china.js
API接口
复制代码
GET /map
→ 返回省份温度数据
格式: {省份: 温度, ...}

4. 天气分析模块

功能说明
  • 城市搜索功能
  • 7天天气预报展示
  • 多指标折线图:
    • 最高温度趋势
    • 最低温度趋势
    • 能见度趋势
    • 湿度趋势
  • 详细天气数据表格
相关文件
  • 后端 : app.py (路由), search/line.py, search/table.py
  • 前端 : templates/search.html
API接口
复制代码
POST /search
参数: {city: "城市名"}
→ 返回7天天气预报数据

5. 历史天气模块

功能说明
  • 历史天气查询(2022-2024年数据)
  • 按城市和日期模糊搜索
  • 分页展示查询结果
  • 数据导出功能
相关文件
  • 后端 : app.py (路由), lishi/search.py
  • 前端 : templates/lishi.html
API接口
复制代码
POST /lishi
参数: {city: "城市名", date: "日期"}
→ 返回历史天气数据列表

6. 数据爬取模块

功能说明
  • 实时天气数据爬取
  • 7天天气预报爬取
  • 历史天气数据爬取
  • 城市编码管理
相关文件
  • 后端 : spider/map.py, spider/fenxi.py, spider/lishi.py
  • 数据 : spider/china.json, spider/city.json, spider/province_city.json
爬取策略

实时天气爬取 (map.py)

  • 数据源: 和风天气API
  • API Key:
  • 存储表: weatherdata

7天预报爬取 (fenxi.py)

  • 数据源: 和风天气API
  • 数据字段: 城市、观测时间、最高/最低温度、天气状况、风力、降水量、紫外线、湿度、能见度、云量
  • 存储表: weatherdata7

历史天气爬取 (lishi.py)

  • 数据源: weather.tianqi.com
  • 技术方案: BeautifulSoup + 正则表达式解析HTML
  • 数据范围: 2022年1月 - 2024年2月
  • 存储表: lishiweathers

数据库设计

数据库信息

  • 数据库名 : tianqi
  • 字符集 : utf8
  • 引擎: InnoDB

数据表结构

1. users 表(用户表)
字段名 类型 说明 约束
id INT 用户ID 主键, 自增
username VARCHAR(255) 用户名 -
email VARCHAR(255) 邮箱 唯一
password VARCHAR(255) 密码 -
mima VARCHAR(255) 密码(备用字段) -
2. weatherdata 表(当前天气数据)
字段名 类型 说明
城市 VARCHAR 城市名称
时间 DATETIME 观测时间
温度 FLOAT 当前温度(℃)
体感温度 FLOAT 体感温度(℃)
天气情况 VARCHAR 天气描述
风力等级 VARCHAR 风力等级
湿度 FLOAT 湿度(%)
能见度 FLOAT 能见度(km)
3. weatherdata7 表(7天预报数据)
字段名 类型 说明
城市 VARCHAR 城市名称
观测时间 DATE 预报日期
最高温度 FLOAT 最高温度(℃)
最低温度 FLOAT 最低温度(℃)
白天天气状况 VARCHAR 白天天气描述
晚间天气状况 VARCHAR 晚间天气描述
白天风力 VARCHAR 白天风力描述
夜间风力 VARCHAR 夜间风力描述
降水量 FLOAT 降水量(mm)
紫外线 VARCHAR 紫外线指数
湿度 FLOAT 湿度(%)
能见度 FLOAT 能见度(km)
云量 FLOAT 云量(%)
4. lishiweathers 表(历史天气数据)
字段名 类型 说明 约束
id INT 记录ID 主键, 自增
城市 VARCHAR(255) 城市名称 -
日期 DATE 日期 -
最高温度 FLOAT 最高温度(℃) -
最低温度 FLOAT 最低温度(℃) -
天气 VARCHAR(255) 天气描述 -
风向 VARCHAR(255) 风向描述 -

数据量统计

  • lishiweathers表: 约129,052条记录(2022-2024历史数据)
  • weatherdata表: 数百条记录(实时天气数据)
  • weatherdata7表: 数千条记录(7天预报数据)

API接口文档

基础信息

  • Base URL : http://localhost:5000
  • 数据格式: JSON
  • 认证方式: Session

接口列表

1. 用户认证
用户注册
复制代码
POST /register
Content-Type: application/json

Request Body:
{
  "username": "用户名",
  "email": "邮箱@example.com",
  "password": "密码"
}

Response:
{
  "success": true,
  "message": "注册成功"
}
用户登录
复制代码
POST /login
Content-Type: application/json

Request Body:
{
  "email": "邮箱@example.com",
  "password": "密码"
}

Response:
成功: 重定向到 /home
失败: 返回登录页
用户登出
复制代码
GET /
Response: 重定向到登录页

2. 首页数据
获取首页数据
复制代码
GET /home

Response:
{
  "highTempCities": ["北京", "上海", ...],
  "lowTempCities": ["哈尔滨", ...],
  "highWindCities": ["乌鲁木齐", ...],
  "highHumidityCities": ["深圳", ...],
  "weatherLabels": {
    "晴天": 120,
    "阴天": 45,
    "雨天": 30,
    "雪天": 5
  }
}

3. 天气地图
获取地图数据
复制代码
GET /map

Response:
{
  "北京": 25,
  "上海": 28,
  "广东": 30,
  ...
}

4. 天气分析
查询城市天气分析
复制代码
POST /search
Content-Type: application/x-www-form-urlencoded

Request Body:
city=北京

Response:
{
  "highTemps": [25, 26, 24, ...],
  "lowTemps": [18, 19, 17, ...],
  "visibility": [10, 12, 8, ...],
  "humidity": [60, 65, 55, ...],
  "tableData": [
    {
      "观测时间": "2024-03-11",
      "最高温度": 25,
      "最低温度": 18,
      ...
    },
    ...
  ]
}

5. 历史天气
查询历史天气
复制代码
POST /lishi
Content-Type: application/x-www-form-urlencoded

Request Body:
city=北京&date=2022-01

Response:
[
  {
    "城市": "北京",
    "日期": "2022-01-01",
    "最高温度": 6,
    "最低温度": 7,
    "天气": "晴",
    "风向": "东北风 1级"
  },
  ...
]

6. 用户管理
获取用户信息
复制代码
GET /get_user_info

Response:
{
  "username": "用户名",
  "email": "邮箱@example.com",
  "mima": "密码"
}
更新用户信息
复制代码
POST /update_user_info
Content-Type: application/x-www-form-urlencoded

Request Body:
nickname=新用户名&mima=新密码

Response:
{
  "message": "更新成功"
}
修改密码
复制代码
POST /update_password
Content-Type: application/x-www-form-urlencoded

Request Body:
password=新密码

Response: 成功提示

部署指南

环境要求

  • Python 3.7+
  • MySQL 5.7+
  • 操作系统: Windows / Linux / macOS

安装步骤

1. 安装Python依赖
bash 复制代码
pip install -r requirements.txt

需要的依赖包:

复制代码
blinker==1.8.2
certifi==2024.2.2
charset-normalizer==3.3.2
click==8.1.7
colorama==0.4.6
Flask==8.0.3
pymysql
requests
beautifulsoup4
pandas
2. 数据库配置
sql 复制代码
-- 创建数据库
CREATE DATABASE IF NOT EXISTS tianqi DEFAULT CHARACTER SET utf8;

-- 导入SQL文件
USE tianqi;
source 天气系统数据库/users.sql;
source 天气系统数据库/天气数据.sql;
source 天气系统数据库/lishiweathrs.sql;
3. 修改数据库连接配置

修改以下文件中的数据库连接信息:

  • home/utils.py
  • lishi/utils.py
  • map/utils.py
  • search/utils.py
python 复制代码
db = pymysql.connect(
    host='localhost',      # 数据库主机
    user='root',           # 数据库用户名
    password='123456',     # 数据库密码
    database='tianqi'      # 数据库名
)
4. 运行应用
bash 复制代码
python app.py

应用将在 http://localhost:5000 启动


使用说明

快速开始

1. 注册账号
  • 访问 http://localhost:5000
  • 点击注册链接
  • 填写用户名、邮箱和密码
  • 完成注册后自动登录
2. 首页概览
  • 查看天气统计卡片
  • 观察各城市的温度、湿度、风力排名
  • 浏览天气状况分布标签
3. 天气地图
  • 点击"天气地图"菜单
  • 查看中国各省份的实时温度分布
  • 鼠标悬停查看详细数据
4. 天气分析
  • 点击"天气分析"菜单
  • 输入城市名称进行搜索
  • 查看7天天气预报折线图
  • 浏览详细天气数据表格
5. 历史天气
  • 点击"历史天气"菜单
  • 输入城市和日期(支持模糊查询)
  • 使用分页功能浏览大量历史数据
  • 可以跳转到指定页码
6. 用户管理
  • 点击"用户管理"菜单
  • 查看和修改个人信息
  • 修改登录密码

数据爬取

如需手动爬取最新天气数据:

python 复制代码
# 爬取实时天气
python spider/map.py

# 爬取7天预报
python spider/fenxi.py

# 爬取历史天气(注意:需要较长的时间)
python spider/lishi.py

注意事项

  1. 和风天气API限制

    • 免费版API有调用次数限制
    • 请合理控制爬取频率
    • API Key需要定期检查是否有效
  2. 历史天气爬取

    • 历史天气数据量大,爬取时间较长
    • 建议分批次爬取
    • 遵守网站使用条款,避免对目标服务器造成压力
  3. 数据库备份

    • 定期备份数据库
    • 重要数据建议保存SQL转储文件

系统特色

1. 多维度数据展示

  • 系统整合了温度、湿度、风力、能见度等多个天气指标
  • 通过折线图、饼图、热力图等多种图表形式展示数据

2. 历史数据丰富

  • 包含2022年至2024年超过12万条历史天气记录
  • 支持快速模糊查询和分页浏览

3. 可视化效果

  • 使用ECharts绘制专业的数据图表
  • 中国地图可视化直观展示区域天气分布

4. 用户体验

  • 响应式设计适配多种设备
  • 友好的用户界面和交互设计
  • 快速的查询和加载速度

技术亮点

1. 数据源多样化

  • 集成API接口和网页爬虫两种数据获取方式
  • 互补获取实时数据和历史数据

2. 模块化设计

  • 代码按功能模块清晰划分
  • 易于维护和扩展

3. 前后端分离

  • 前端使用jQuery实现AJAX交互
  • 后端提供RESTful API接口

4. 数据可视化

  • 多种图表库协同工作(ECharts、Chart.js)
  • 数据展示直观美观

常见问题

Q1: 系统无法连接数据库?

A: 检查以下事项:

  • MySQL服务是否启动
  • 数据库连接配置是否正确
  • 用户名密码是否正确
  • 数据库是否存在

Q2: 爬虫获取数据失败?

A: 可能原因:

  • 网络连接问题
  • API调用次数超限
  • 目标网站反爬虫机制
  • 解决方法:检查网络、更换API Key、设置请求头

Q3: 图表不显示?

A: 检查:

  • 浏览器控制台是否有JavaScript错误
  • ECharts/Chart.js库是否正确加载
  • 数据格式是否正确

Q4: 如何添加更多城市?

A : 在 spider/city.json 中添加城市编码,然后运行相应的爬虫脚本

Q5: 历史数据查询太慢?

A: 优化方案:

  • 为查询字段添加数据库索引
  • 使用分页限制返回数据量
  • 优化SQL查询语句

版本历史

版本 日期 说明
1.0.0 2024 初始版本发布

许可证

本项目仅供学习和研究使用。


联系方式

如有问题或建议,欢迎反馈。


文档最后更新: 2026年3月11日

相关推荐
浩瀚之水_csdn2 小时前
【框架】flask路由深度解析
后端·python·flask
qq_437100662 小时前
echarts图表相关 电量进度图
前端·flask·echarts
十五年专注C++开发2 小时前
Qt中mysql和达梦数据库的驱动编译详细步骤
qt·mysql·达梦数据库·数据库驱动
_OP_CHEN2 小时前
【MySQL数据库基础】(五)MySQL 数据类型深度解析:选对类型 = 性能拉满!
linux·开发语言·数据库·sql·mysql·数据类型·c/c++
chuxinweihui2 小时前
MySQL复合查询
数据库·mysql
被AI抢饭碗的人2 小时前
MYSQL基础(二)
数据库·mysql
优秀的老黄2 小时前
MySQL配置从库
linux·数据库·mysql
源码之屋2 小时前
毕业设计源码:python网易云音乐数据分析可视化平台 Flask+ECharts 多维度数据可视化分析 人工智能 大数据 机器学习 (建议收藏)✅
人工智能·python·信息可视化·django·毕业设计·echarts·课程设计
编码者卢布2 小时前
【Azure Container App】Debug Console的调试工具试验(二)-- lsof/ util-linux / netcat / wget
linux·flask·azure