【python】全国空气质量分析系统

文章目录

【python】全国空气质量分析系统

用户需求

需求分析

成果展示

数据入库

数据入库代码

GUI设计

“选择城市”按钮相关模块的实现

“查询”按钮相关模块的实现

用户需求

需求分析

想要实现这个系统的话,大致分为三步:(不得不说,这个期末大作业真的太狠了)

数据入库:下载历史数据,用python把它导入到数据库中

数据分析:针对数据库数据,实现数据的可视化

GUI设计:最后的结果需要做一个界面出来供用户使用

成果展示

先来看看最后做出来的效果

数据入库

在网址全国空气质量历史数据下载数据。全国城市空气质量数据主要统计了2014年5月13日年至今各个城市各个站点的空气质量数据,包括对PM2.5,PM10,SO2,NO2,O3,CO,AQI数据的统计。未经处理前的数据按日期存放,每一个数据文件(.csv)以当天的日期命名。该数据文件统计了当天全国各个站点检测到的PM2.5,PM10,SO2,NO2,O3,CO,AQI数据。

在进行数据分析之前,我们需要将数据导入到数据库中并作一些简单的处理。在python的基础上导入sqlite3(用pip install sqlite3安装)并用它将数据导入数据库中。原始的数据每个文件的第一列是具体的某一日,第二列是具体的某一小时,第三列是统计的空气质量类型,第四列至最后一列是每个站点的编号。如图:

为了将多个这样的数据文件整合到一起,我们保留日期和小时,利用站点列表文件(站点列表-2020.05.08起.csv)将站点编码换成具体的中文名称放到第3列,同时将当前站点所在的城市放在第5列,后面的5至19列换成14个空气质量数据类型。所以,最后的数据库每一行就代表某一站点某一天某一时刻14个空气数据的具体数值。如此建表对后面的数据分析也有帮助。

数据入库代码

数据库的实现主要包括3个部分:初始化数据库,站点编号与名称的提取,数据入库。主函数如下:

首先初始化一个数据库,如果数据库中没有一个叫sites的表的话,就建一个:

站点编号替换(函数city_sites):站点编号和对应的名称都在“站点列表-2020.05.08起.csv”中,所以读取该文件中每一行的文字,新建空的列表用来存放站点编码(code)和名称及该站点所在城市(name_city),最后将这两个列表封装成一个字典(city),即可得到站点编号(code)所对应的中文名称和所在的城市(name_city)。

数据入库:在数据入库时,先写一个遍历函数(import_city_aqi)用来遍历目录文件,找到文件后才开始处理(函数process):

在函数process中,先利用for循环将站点编号全部换成站点的名称,再把站点名称和所在城市封装成一个字典。然后将数据文件的每一行根据日期(day)、时间(hour)、和站点名称(site)来存放fields里的数据。

最后,将数据插入到新建的表中:

如此,我们便完成了数据入库的操作。最后得到的数据库如下所示(数据库文件.db用SQliteSpy打开):

GUI设计

在这里用PySimpleGUI库设计GUI界面。设计思路:

用户可以自由地选择城市,在选择了城市后,可以查询该城市某一个具体站点的数据,也可以查询该城市所有站点的数据,因此需要两个联动的下拉选项框和一个选择城市的按钮。

对于用户想要查询的内容,也有一个下拉选项框,内容包括:日平均AQI, 月平均AQI, 年平均AQI, 全国城市空气质量日排行榜, 全国城市空气质量月排行榜, 全国城市空气质量年排行榜。其中日平均AQI,月平均AQI和年平均AQI是针对选择的城市或站点而言,一旦确定查询后,有一个数据输出框 显示数据内容,同时也有图表的展示。因此需要一个查询的按钮和一个数据输出框。全国城市空气质量日/月/年排行榜是针对具体的某一日/月/年而言,所以选定该选项后,设计一个可以跳出的文本输入框用来输入具体的日/月/年。之后,在数据输出框输出该日/月/年的排行,并在中国地图上显示。

对于GUI的界面主题,选择低调而又显眼,简单又不失优雅的紫色和蓝色。

GUI界面的代码如下:

效果:

“选择城市”按钮相关模块的实现

如果选择城市按钮被触发,返回用户当前所选择的城市(current_city),并更新观测站点选项框(Win[‘SITE’]),使得该框只出现当前城市的站点,而不是显示所有的站点。如此便实现了两个下拉框之间的联动。

效果:

“查询”按钮相关模块的实现

当日/月/年平均AQI被选择时,在show_aqi函数中根据当前选择的城市和站点从数据库中获取数据,显示在数据输出窗口并绘制相对应的图表:

在show_aqi中要完成的是数据库中相关数据的索引提取以及将提取的数据用图表显示(函数draw_charts)。如果选择的是城市全部站点,则选择数据库中的city列,如果是某一站点,则选择该站点下的数据:

如果是日/月/年的排行榜查询,那么就让用户输入一个具体的日期/月份/年份然后在show_order函数中选择数据并输出以及绘制中国地图上的数据。

效果如下:

输入一个具体的日/月/年后,点击ok之后,就会运行show_order函数,提取相关的排行榜数据,在draw_map

中绘制数据的地图显示。绘制地图需要用到pyecharts库,但是pyecharts绘制的图像是html文件,画图的结果不会像matplotlib一样直接显示,而是生成一个html文件,需要在网页打开。所以,为了让客户点击ok后可以直接打开图像,不需要手动打开,在这里利用webbrowser打开最后的html文件:

综上,一个勉勉强强的全国空气质量系统就完成了。

python空气质量提醒代码_【python】全国空气质量分析系统相关推荐

  1. python成语接龙代码_#python# 成语接龙(一)

    本来想写一个机器人成语接龙的,太复杂了,弄一个可以找到所有的可以"一招制敌"的成语,就是没办法再被接龙的成语. 第一步是找一个带拼音的成语字库,网上找了半天,没找到合适的,发现搜狗 ...

  2. python田字格函数简化代码_[Python]使用生成器来简化代码

    原本只是大概知道生成器是什么,但一直不知道怎么用,或是什么情景下用,后来才发现: 在需要一边读数据一边处理任务时,如果直接为每个任务都写一个函数,那么读数据的部分就要在每个函数都重复一遍 直接将所有任 ...

  3. python写一些小代码_#python#自己写的一段小代码

    代码如下: __author__ = 'Administrator' DEFAULT_TENANT_ID = 1234 DEFAULT_ROLE_ID = 1234 TENANT_ID = int(i ...

  4. python成语接龙代码_#python# 成语接龙(二)

    寻找可以"一招制敌"的成语.# encoding=utf8 import matplotlib.pyplot as plt def get_idioms(file): " ...

  5. python 归一化feed-dict程序代码_深度学习-中国大学mooc-题库零氪

    第一讲 人工智能导论 2.29日考勤 1.以下关于深度学习和机器学习的关系,描述正确的是: A.机器学习的范畴包含深度学习: B.深度学习的范畴包含机器学习: C.二者没有关系: D.二者等同. 第三 ...

  6. python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

    因为是示例为主,我们将方程组限制在二元一次方程组:x,y两个变量,两个方程.类似这样: 每个方程有两个变量,x和y,形式为:ax+by+c=d 由于这次有了两个方程,我们提取参数的代码就适合提炼为一个 ...

  7. python怎么测试c代码_如何正确测试python中的C-API,C-API返回错误代码

    我的设置 我正在使用Python中的pytest和ctypes测试C库中的函数.C库中的每个函数调用一个嵌入式linux PCI板上的函数,然后C库函数返回一个整数,该整数映射到一组返回代码.如果函数 ...

  8. python执行一段代码_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...

    最近的"平安经"可谓是引起了不小的风波啊. 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG. 为此明哥就研究了一下,如何在你执行任意 Python 代码 ...

  9. python函数模块关键代码_从零开始学Python(六):函数,模块和类的使用

    从这章开始,我们不在使用sublime文本编译器进行编码了,主要是我们每次运行的使用还得去命令行执行pyhon ***.py命令查看结果,操作比较麻烦.推荐大家使用Pycharm(具体安装使用教程大家 ...

  10. python有趣的简单代码_简单代码一学就会,Python生成GIF动图

    文/IT可达鸭 图/IT可达鸭.网络 前言 最近在写技术文档的时候,发现一个问题.对于每个技术步骤,都需要一个截图,这样下来整篇文档都是截图,显得不是特别的专业. 为了解决这个问题,我想到一个方法,就 ...

最新文章

  1. 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例
  2. 组件化开发思想||全局组件注册语法||组件注册注意事项
  3. [云炬创业基础笔记]第二章创业者测试21
  4. Java Object类中的finalize()方法
  5. 【三分钟讲清区块链/比特币】之三:加密货币的本质
  6. 数据可视化【十】绘制地图
  7. 同時啟動多個Tomcat服務器
  8. HTTP Header 详解【转】
  9. Python os 标准库使用
  10. BLOCK_TYPE_US_VALID(pHead-nBlockUse)
  11. python汉化界面_python如何设置中文界面
  12. 今日头条数据分析师分享有感
  13. linux 关闭虚拟内存,Linux关于虚拟内存
  14. ubuntu 20.04 设定固定IP地址碰到的坑
  15. 淘客外卖返利 优惠券 小程序公众号 电影票话费分销淘宝客CPS系统
  16. 光驱启动以及联想笔记本电脑如何设置从光驱启动
  17. Apache Beam开发指南
  18. Ubuntu 微信QQ企业微信不能输入中文
  19. 【English】十大词性之感叹词(感叹句)
  20. Matlab实现——严格对角占优三对角方程组求解(高斯赛尔德Gauss-Seidel迭代、超松弛)

热门文章

  1. [接口测试]POST请求提交数据的三种方式及Postman实现
  2. 智慧消防三维地理信息应急指挥平台
  3. Ubuntu和本机之间复制粘贴
  4. 用数据说话:北京房价数据背后的数据
  5. 生成的分子图像是否可以识别为SMILES,然后再将识别后的SMILES转换为图像?
  6. 使用Substrate开发区块链存证dApp
  7. php 正则格式化图片,php利用正则表达式格式化电话号码的方法
  8. 计算机系统安全启动,怎么关闭安全启动_关闭bios安全启动的方法图文步骤
  9. 计算机每天早上自动开机,win10设置每天自动开机(电脑可以设置自动开机时间)...
  10. 新手学Windows XP