基于Python的沧州地区空气质量数据分析及可视化

83 阅读11分钟

一、项目背景与研究意义

1. 为什么要做这个系统?

  • 现实痛点:传统空气质量获取方式存在 “三缺”—— 缺历史数据对比(如本周与上周 PM2.5 变化)、缺多维度分析(如不同区域污染物分布)、缺可视化呈现(纯文字数值可读性差);
  • 用户需求:无论是普通市民(想知道 “今天是否适合户外活动”)、环保志愿者(需统计区域空气质量变化),还是相关部门(需参考数据制定治理方案),都需要一套能 “查数据、看趋势、懂分析” 的工具;
  • 技术适配:Python 在数据爬取(BeautifulSoup)、分析(Pandas)、可视化(Matplotlib/DataV)方面有成熟生态,MySQL 轻量开源,适合存储海量空气质量数据,二者结合能低成本实现系统功能。

2. 系统能解决什么问题?

  • 普通用户:提供沧州各区域实时空气质量查询、历史数据趋势图(如月度 AQI 变化)、污染物类型分析(如 PM2.5、可吸入颗粒占比);
  • 管理员 / 环保人员:支持数据批量爬取(自动获取官方平台数据)、数据管理(增删改查)、大屏可视化展示(用于汇报或公共展示);
  • 社会价值:通过数据透明化提升公众环保意识,为沧州地区空气质量治理提供数据支撑。

二、系统开发技术栈

系统采用 “轻量高效、开源可控” 的技术选型,核心技术如下:

技术类别选用技术核心作用
开发语言Python主导系统开发,兼顾数据爬取(BeautifulSoup)、后端逻辑(如用户权限校验)、数据可视化(Matplotlib)
开发工具PyCharm提供代码自动提示、版本控制(Git)、调试功能,提升开发效率;与 Python 生态无缝衔接
数据库MySQL存储系统核心数据,包括用户信息(账号密码)、空气质量数据(日期、AQI、污染物类型)、城市区域数据等;支持多表关联查询,轻量易维护
可视化组件DataV + MatplotlibDataV 用于大屏展示(如区域空气质量分布热力图),Matplotlib 用于生成趋势图(如年度 PM2.5 变化折线图)
辅助库Pandas + BeautifulSoupPandas 用于数据清洗(如处理爬取的非结构化数据),BeautifulSoup 用于解析网页源码,实现空气质量数据自动爬取

技术优势总结:Python 生态覆盖 “爬取 - 分析 - 可视化” 全流程,MySQL 降低存储成本,整体技术栈学习成本低、维护难度小,适合个人或小团队开发。

三、系统需求分析与可行性

1. 核心功能需求

系统面向 “普通用户” 和 “管理员” 两类角色,功能模块划分清晰:

角色核心功能具体描述
普通用户注册登录通过账号密码登录,支持密码重置;注册时需填写基本信息(姓名、联系方式)
空气质量查询按 “城市区域”“日期” 筛选,查看实时 AQI、首要污染物、空气质量等级
数据可视化查看查看历史趋势图(如近 30 天 PM2.5 变化)、污染物占比图(如细颗粒与可吸入颗粒比例)
天气资讯浏览查看管理员发布的空气质量相关资讯(如 “沙尘天气防护指南”)
管理员用户管理对普通用户进行增删改查(如禁用违规账号、修改用户信息)
数据管理城市区域管理(添加 / 删除沧州下属区域,如新华区、运河区)、空气状况管理(手动录入或批量导入数据)、空气质量数据爬取(自动从官方平台获取数据)
系统管理发布天气资讯、维护 “关于我们” 页面、配置系统参数(如数据爬取频率)
大屏可视化生成空气质量大屏(展示沧州各区域实时数据、月度排名、污染物 TOP3)

2. 可行性分析

从 “技术、时间、经济、操作” 四方面验证项目可行性:

  • 技术可行性:Python、MySQL 均为成熟技术,本人在大学期间系统学习过 Python 编程,熟悉 PyCharm 使用;遇到问题可通过 Stack Overflow、CSDN 等社区解决,技术门槛可突破;
  • 时间可行性:项目从开题到开发完成约 3 个月,按 “需求分析→设计→编码→测试” 分阶段推进,时间充裕;
  • 经济可行性:所有技术工具均为开源免费(PyCharm 社区版、MySQL 社区版),无需购买商业软件;开发设备仅需个人电脑,无额外硬件成本;
  • 操作可行性:界面设计遵循 “简洁易用” 原则,参考主流 APP 操作习惯(如筛选条件放在顶部、图表点击可查看详情);普通用户无需专业知识,管理员仅需简单培训即可上手。

四、系统设计:结构与数据库

1. 系统整体结构

系统采用 “模块化” 设计,整体分为 5 大模块,模块间低耦合、高内聚:

  1. 用户模块:负责注册、登录、个人中心管理;
  2. 数据管理模块:负责城市区域、空气状况、空气质量数据的增删改查;
  3. 数据爬取模块:自动爬取官方平台空气质量数据,避免手动录入的繁琐;
  4. 可视化模块:分为 “个人查询可视化”(趋势图、占比图)和 “大屏可视化”(用于公共展示);
  5. 系统管理模块:负责天气资讯发布、系统参数配置、用户权限管理。

系统功能结构图如下(简化版):

沧州空气质量数据分析系统
├─ 用户模块(注册登录、个人中心)
├─ 数据管理模块
│  ├─ 城市区域管理(增删改查)
│  ├─ 空气状况管理(录入/导入数据)
│  └─ 空气质量管理(爬取/管理数据)
├─ 可视化模块
│  ├─ 个人可视化(趋势图、占比图)
│  └─ 大屏可视化(区域分布、排名)
├─ 资讯模块(天气资讯浏览/发布)
└─ 系统管理模块(用户管理、参数配置)

2. 数据库设计

数据库共设计 9 张核心表,覆盖系统所有数据存储需求。关键表结构如下:

(1)用户表(yonghu)

存储普通用户信息,核心字段:

字段名数据类型说明约束
idint主键自增、非空
yonghuzhanghaovarchar(200)用户账号唯一、非空
mimavarchar(200)密码非空(加密存储)
yonghuxingmingvarchar(200)用户姓名非空
lianxifangshivarchar(200)联系方式非空

(2)空气质量表(kongqizhiliang)

存储核心空气质量数据,核心字段:

字段名数据类型说明约束
idint主键自增、非空
riqivarchar(200)日期非空(格式:YYYY-MM-DD)
yubaoshichangvarchar(200)预报时长非空(如 “24 小时”)
zlzsvarchar(200)质量指数(AQI)非空
kqzlvarchar(200)空气质量等级非空(如 “优、良、轻度污染”)
sywrwvarchar(200)首要污染物非空(如 “PM2.5、PM10”)

(3)城市区域表(chengshiquyu)

存储沧州下属区域信息,核心字段:

字段名数据类型说明约束
idint主键自增、非空
chengshiquyuvarchar(200)区域名称非空(如 “新华区、运河区”)

其他表(如天气资讯表 news、系统配置表 config)结构类似,均围绕 “存储核心数据、支持业务逻辑” 设计,表间通过主键关联(如空气质量表关联城市区域表的 id 字段,实现 “按区域查询数据”)。

五、系统核心功能实现

1. 数据爬取模块:自动获取空气质量数据

传统方式需手动录入数据,效率低且易出错。系统通过 Python 的 BeautifulSoup 库实现 “自动爬取”:

  • 爬取流程:指定官方空气质量网站 URL → 解析网页源码(提取日期、AQI、污染物类型) → 数据清洗(处理空值或格式错误) → 存入 MySQL 数据库;

  • 关键代码逻辑

    import requests
    from bs4 import BeautifulSoup
    import pymysql
    
    # 1. 请求网页
    url = "http://xxx.xxx.xxx/cz_air_quality"  # 官方空气质量网站URL
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 2. 提取数据(示例:提取日期和AQI)
    date_list = soup.find_all("div", class_="date")  # 日期标签
    aqi_list = soup.find_all("div", class_="aqi")    # AQI标签
    
    # 3. 存入MySQL
    db = pymysql.connect(host="localhost", user="root", password="123456", db="air_quality")
    cursor = db.cursor()
    for date, aqi in zip(date_list, aqi_list):
        sql = "INSERT INTO kongqizhiliang(riqi, zlzs) VALUES ('%s', '%s')" % (date.text, aqi.text)
        cursor.execute(sql)
    db.commit()
    db.close()
    

  • 优势:支持定时爬取(通过 Python 的 schedule 库),无需人工干预,确保数据实时更新。

2. 可视化模块:大屏展示与个人查询

(1)大屏可视化(管理员端)

使用 DataV 组件库实现,核心展示内容:

  • 区域空气质量分布:沧州各区域空气质量等级(优 / 良 / 轻度污染)用不同颜色标注(绿色 = 优,黄色 = 良,红色 = 污染);
  • 年度趋势图:近 12 个月 AQI 变化折线图,直观展示空气质量改善或恶化趋势;
  • 污染物 TOP3:饼图展示当前主要污染物占比(如 PM2.5 占 60%,PM10 占 30%,其他 10%);
  • 实现效果:大屏支持自动刷新(每 5 分钟更新一次数据),适配不同屏幕尺寸,可用于环保部门汇报或公共场所展示。

(2)个人查询可视化(用户端)

用户按 “区域 + 日期” 筛选后,系统通过 Matplotlib 生成可视化图表:

  • 趋势图:如 “新华区近 30 天 PM2.5 变化” 折线图,标注峰值和谷值;
  • 占比图:如 “运河区今日污染物类型占比” 柱状图,清晰展示各污染物贡献度;
  • 交互性:图表支持放大缩小,点击数据点可查看详细数值(如 “2024-05-01 PM2.5=35μg/m³,等级优”)。

3. 用户管理模块:权限控制与数据安全

  • 注册登录:用户注册时需填写 “账号 + 密码 + 联系方式”,密码通过 MD5 加密存储(避免明文泄露);登录时校验账号密码,支持 “记住账号” 功能;
  • 管理员权限:仅管理员可进入 “数据管理”“系统管理” 模块,普通用户无权限操作;权限控制通过 Python 的装饰器实现(如 @admin_required,未登录或非管理员则跳转登录页);
  • 数据安全:对敏感操作(如删除数据)添加二次确认(“确定要删除这条数据吗?”),避免误操作;数据库定期备份(通过 Python 脚本实现),防止数据丢失。

六、系统测试

为确保系统稳定运行,采用 “黑盒测试 + 白盒测试” 结合的方式,核心测试用例如下:

测试模块测试用例预期结果实际结果
用户注册输入完整信息(账号:test123,密码:123456,姓名:张三)注册成功,跳转登录页;数据库 yonghu 表新增一条记录符合预期
数据爬取执行爬取脚本,目标 URL 为沧州官方空气质量网站爬取 10 条数据,存入 kongqizhiliang 表,无空值或格式错误符合预期
空气质量查询筛选 “新华区 + 2024-05”显示新华区 2024 年 5 月每天的 AQI、首要污染物;生成趋势图符合预期
数据删除管理员删除一条错误的空气质量数据数据从数据库中删除,页面刷新后不再显示符合预期

测试结论:系统核心功能(注册登录、数据爬取、查询、可视化)均正常运行,无严重 BUG;界面交互流畅,数据准确性高,满足设计需求。

七、运行截图

八、源码与资料获取

本文仅展示平台核心功能与关键代码,完整开发资料包含:

全套源码(后端 SSM 工程 + 前端小程序代码 + MySQL 脚本);
详细开发文档(环境搭建步骤、接口说明、数据库设计图);
测试用例与性能测试报告;
论文完整文档(含目录、参考文献、图表)。
👉 获取方式:关注 CSDN 博主,查看置顶文章;备注 “源码获取”,即可免费领取完整资料!

如果本文对你的毕设或项目开发有帮助,欢迎点赞 + 收藏 + 关注,后续会持续分享管理系统类、校园类项目开发技巧!