(2021-08-09)空气质量指数计算例题练习(一)
空气质量指数计算例题练习(一)
- 1 计算方法
- 1.1 空气质量分指数及对应的污染物项目浓度限值
- 1.2 空气质量分指数计算方法
- 1.3 空气质量指数计算方法
- 2 方法实现步骤
- 2.1 线性缩放函数
- 2.2 PM值对应IAQI值计算
- 2.3 CO值对应IAQI值计算
- 2.4 AQI计算
- 2.5 主程序
- 2.6 v1.0版总结
- 3 v2.0版本改进
- 3.1 JSON简要知识
- 3.1.1 JSON格式
- 3.1.2 JSON库
- 3.2 JSON数据文件的读取
- 4 另一种数据格式CSV
- 4.1 规则
- 4.2 用法
- 4.3 csv模块
- 4.3.1 csv模块中所包含的函数
- 4.3.2 csv模块操作
- 4.4 实例
- 5 CSV和json的综合
- 5.1 os模块
- 5.2 文件解码读取操作
- 5.3 判断文件格式,并调用相应函数
1 计算方法
1.1 空气质量分指数及对应的污染物项目浓度限值
1.2 空气质量分指数计算方法
空气质量分指数individual air quality index (IAQI):单项污染物的空气质量指数。
污染物项目P的空气质量分指数按式(1)计算:
IAQIP=IAQIHi−IAQILoBPHi−BPLo(CP−BPLo)+IAQILo(1)IAQI_P=\frac{IAQI_{Hi}-IAQI_{Lo}}{BP_{Hi}-BP_{Lo}}(C_P-BP_{Lo})+IAQI_{Lo} \tag{1}IAQIP=BPHi−BPLoIAQIHi−IAQILo(CP−BPLo)+IAQILo(1)
式中:
IAQIPIAQI_PIAQIP——污染物项目P的空气质量分指数;
CPC_PCP ——污染物项目P的质量浓度值;
BPHiBP_{Hi}BPHi——表1中与CPC_PCP相近的污染物浓度限值的高位值;
BPLoBP_{Lo}BPLo——表1中与CPC_PCP相近的污染物浓度限值的低位值;
IAQIHiIAQI_{Hi}IAQIHi——表1中与BPHiBP_{Hi}BPHi对应的空气质量分指数;
IAQILoIAQI_{Lo}IAQILo——表1中与BPLoBP_{Lo}BPLo对应的空气质量分指数。
该公式相当于做了线性缩放,从 [ BPL, BPH ] 到 [ IAQIL, IAQIH ]
1.3 空气质量指数计算方法
空气质量指数air quality index(AQI):定量描述空气质量状况的无量纲指数。
AQI=max{IAQI1,IAQI2,IAQI3,...,IAQIn}(2)AQI=max\left\{IAQI_1,IAQI_2,IAQI_3,...,IAQI_n\right\} \tag{2}AQI=max{IAQI1,IAQI2,IAQI3,...,IAQIn}(2)
2 方法实现步骤
2.1 线性缩放函数
def cal_liner(iaqi_h, iaqi_l, bp_h, bp_l, cp):'''线性缩放函数'''iaqi_p = (iaqi_h - iaqi_l)/(bp_h - bp_l)*(cp-bp_l) + iaqi_lreturn iaqi_p
2.2 PM值对应IAQI值计算
def cal_pm(pm_val):if 0 <= pm_val < 36:pm_iaqi = cal_liner(50, 0, 35, 0, pm_val)elif 36 <= pm_val < 76:pm_iaqi = cal_liner(100, 50, 75, 35, pm_val)elif 76 <= pm_val<116:pm_iaqi = cal_liner(150, 100, 115, 75, pm_val)elif 116 <= pm_val<151:pm_iaqi = cal_liner(200, 150, 150, 115, pm_val)else:passreturn pm_iaqi
2.3 CO值对应IAQI值计算
def cal_co(co_val):if 0 <= co_val < 3:co_iaqi = cal_liner(50, 0, 3, 0, co_val)elif 3 <= co_val <5:co_iaqi = cal_liner(100, 50, 4, 2, co_val)else:passreturn co_iaqi
2.4 AQI计算
def cal_aqi(param_list):pm_val = param_list[0]co_val = param_list[1]pm_iaqi = cal_pm(pm_val)co_iaqi = cal_co(co_val)iaqi_list = []iaqi_list.append(pm_iaqi)iaqi_list.append(co_iaqi)aqi = max(iaqi_list)return aqi
2.5 主程序
def main():print('请输入以下信息,用空格分割')input_str = input('PM2.5 CO : ')str_list = input_str.split(' ')pm_val = float(str_list[0])co_val = float(str_list[1])param_list = []param_list.append(pm_val)param_list.append(co_val)aqi_final = cal_aqi(param_list)print('空气质量指数为:{}'.format(aqi_final))
2.6 v1.0版总结
此为第一版计算程序,均为常规语法,需要理清的是各函数的设置,将其分离开来,练练手;
其实这个文档也是来练Markdown的,很好玩。
3 v2.0版本改进
- 读取已经获取的JSON数据文件
- 并将AQI前5的数据输出到文件
3.1 JSON简要知识
3.1.1 JSON格式
- JSON(JavaScript Object Notation)是一种轻量级数据交换格式
- 可以对复杂数据进行表达和存储,易于阅读和理解
- 规则
1 .数据保存在键值对中
2 .键值对之间由逗号分隔
3 .花括号用于保存键值对数据组成的对象
4 .方括号用于保存键值对数据组成的数组,之间用逗号分隔 - 采用对象、数组方式组织起来的键值对可以表示任何结构的数据
例:[ {key1:value1,key2:value2},
{key3:value3,key4:value4},… ] - 值的表示方法
值value可以是双引号括起来的字符串(string)、数值(number)、True、False、Null、对象(object)或者数组(array),这些结构可以嵌套。
string:“string”;
number:1265.12;
object:{id:“123”,name:“chen”};
array:[“name”,12323,“2009-11-12”];
boolean:true,false;
null:null;
3.1.2 JSON库
- JSON库是处理JSON格式的Python标准库
- 两个过程:
1 .编码(encoding),将Python数据类型转换成JSON格式的过程
2 .解码(decoding),从JSON格式中解析数据对应到Python数据类型的过程
表1 JSON库方法
函数 | 含义 |
---|---|
dumps() | 将python数据类型转换为JSON格式 |
loads() | 将JSON格式字符串转换为Python数据类型 |
dump() | 与dumps()功能一致,输出到文件 |
load() | 与loads()功能一致,从文件读入 |
表2 JSON解码为Python转换对应表
JSON | Python | JSON | Python |
---|---|---|---|
object | dict | number(real) | float |
array | list | true | True |
string | str | false | False |
number(int) | int | null | None |
表3 Python解码为JSON转换对应表
Python | JSON | Python | JSON |
---|---|---|---|
dict | object | None | null |
list | array | True | true |
str | string | False | false |
int,float | number |
3.2 JSON数据文件的读取
def read_json_file(filepath):"""解码json文件"""f = open(filepath, mode='r', encoding='utf-8')city_list = json.load(f)return city_list
主程序
此处sort排序可以学一学,使用lambda函数,第一回看的奇怪,其实就是按照value值进行排序,只不过是使用lambda匿名函数来取value。选取字典键’aqi‘对应的值来排序
def main():"""主函数"""filepath = input('请输入json文件名称:')city_list = read_json_file(filepath)# 使用lambda函数来排序,得到aqi排行前五的城市city_list.sort(key=lambda cities: cities['aqi'])top5_list = city_list[:5]# 将前五城市数据的python类型转换为JSONf = open('top5_aqi.json', mode='w', encoding='utf-8')json.dump(top5_list, f, ensure_ascii=False)f.close()
json文件
[{"aqi":47,"area":"北京","pm2_5":32,"pm2_5_24h":33,"position_name":"万寿西宫","primary_pollutant":null,"quality":"优","station_code":"1001A","time_point":"2017-07-29T14:00:00Z"},{"aqi":63,"area":"北京","pm2_5":37,"pm2_5_24h":20,"position_name":"定陵","primary_pollutant":"颗粒物(PM10)","quality":"良","station_code":"1002A","time_point":"2017-07-29T14:00:00Z"},{"aqi":57,"area":"北京","pm2_5":40,"pm2_5_24h":36,"position_name":"东四","primary_pollutant":"细颗粒物(PM2.5)","quality":"良","station_code":"1003A","time_point":"2017-07-29T14:00:00Z"},{"aqi":44,"area":"北京","pm2_5":24,"pm2_5_24h":30,"position_name":"天坛","primary_pollutant":null,"quality":"优","station_code":"1004A","time_point":"2017-07-29T14:00:00Z"},{"aqi":46,"area":"北京","pm2_5":28,"pm2_5_24h":38,"position_name":"农展馆","primary_pollutant":null,"quality":"优","station_code":"1005A","time_point":"2017-07-29T14:00:00Z"},{"aqi":58,"area":"北京","pm2_5":41,"pm2_5_24h":32,"position_name":"官园","primary_pollutant":"细颗粒物(PM2.5)","quality":"良","station_code":"1006A","time_point":"2017-07-29T14:00:00Z"},{"aqi":54,"area":"北京","pm2_5":38,"pm2_5_24h":28,"position_name":"海淀区万柳","primary_pollutant":"细颗粒物(PM2.5)","quality":"良","station_code":"1007A","time_point":"2017-07-29T14:00:00Z"},{"aqi":102,"area":"北京","pm2_5":76,"pm2_5_24h":38,"position_name":"顺义新城","primary_pollutant":"细颗粒物(PM2.5)","quality":"轻度污染","station_code":"1008A","time_point":"2017-07-29T14:00:00Z"},{"aqi":80,"area":"北京","pm2_5":48,"pm2_5_24h":21,"position_name":"怀柔镇","primary_pollutant":"臭氧1小时","quality":"良","station_code":"1009A","time_point":"2017-07-29T14:00:00Z"},{"aqi":77,"area":"北京","pm2_5":46,"pm2_5_24h":20,"position_name":"昌平镇","primary_pollutant":"颗粒物(PM10)","quality":"良","station_code":"1010A","time_point":"2017-07-29T14:00:00Z"},{"aqi":60,"area":"北京","pm2_5":43,"pm2_5_24h":32,"position_name":"奥体中心","primary_pollutant":"细颗粒物(PM2.5)","quality":"良","station_code":"1011A","time_point":"2017-07-29T14:00:00Z"},{"aqi":50,"area":"北京","pm2_5":35,"pm2_5_24h":27,"position_name":"古城","primary_pollutant":null,"quality":"优","station_code":"1012A","time_point":"2017-07-29T14:00:00Z"},{"aqi":58,"area":"北京","pm2_5":40,"pm2_5_24h":29,"position_name":null,"primary_pollutant":"颗粒物(PM2.5),颗粒物(PM10)","quality":"良","station_code":null,"time_point":"2017-07-29T14:00:00Z"}
]
4 另一种数据格式CSV
- 读取已经获取的JSON数据文件
- 并将其转换成CSV文件
4.1 规则
- 开头是不留空,以行为单位;
- 可含或不含列名,含列名则居文件第一行;
- 一行数据不跨行,无空行;
- 以半角逗号(即,)作分隔符,列为空也要表达其存在;
- 列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来;
- 文件读写时引号,逗号操作规则互逆;
- 不支持数字,不支持特殊字符。
4.2 用法
- CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用;
- “CSV”并不是一种单一的、定义明确的格式;
- 可泛指:
1.纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
2.由记录组成(典型的是每行一条记录);
3.每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
4.每条记录都有同样的字段序列。
4.3 csv模块
4.3.1 csv模块中所包含的函数
import csv
# dir()函数可以得到一个列表
for i in dir(csv):print(i)
执行以下代码,可以看到其许多内置函数:
Dialect
DictReader
DictWriter
Error
QUOTE_ALL
QUOTE_MINIMAL
QUOTE_NONE
QUOTE_NONNUMERIC
Sniffer
StringIO
_Dialect
__all__
__builtins__
__cached__
__doc__
__file__
__loader__
__name__
__package__
__spec__
__version__
excel
excel_tab
field_size_limit
get_dialect
list_dialects
re
reader
register_dialect
unix_dialect
unregister_dialect
writer
4.3.2 csv模块操作
常用两类方法:csv的读和写
reader()返回了一个迭代对象,它将迭代给定csvfile中的行。从csv文件读取的每一行都作为字符串列表返回。
writer()返回一个编写器对象,负责将用户的数据转换为给定的类文件对象上的分隔字符串。
csv.reader(csvfile,dialect ='excel',** fmtparams )
csv.writer(csvfile,dialect ='excel',** fmtparams )
使用with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭文件。不需要close()语句。
with open('filename') as somefile:for line in somefile:print(line)
4.4 实例
将json转换为CSV
第一步仍是解码json文件,排序;
第二步是按照排序后的键,取为第一行;
第三步是将字典遍历出来,取其值,依次放入行即可。
实现如下:
def main():"""主函数"""filepath = input('请输入json文件名称:')city_list = read_json_file(filepath)city_list.sort(key=lambda cities: cities['aqi'])lines = []# 列名lines.append(list(city_list[0].keys()))# 将value值取出放入列表中for city in city_list:lines.append(list(city.values()))f = open('aqi.csv', 'w', encoding='utf-8', newline='')writer = csv.writer(f)for line in lines:writer.writerow(line)f.close()
5 CSV和json的综合
5.1 os模块
os模块提供了与系统、目录操作相关的功能,不受平台的限制。
函数 | 含义 |
---|---|
os.remove() | 删除文件 |
os.makedirs() | 创建多层目录 |
os.rmdir() | 删除单级目录 |
os.rename() | 重命名文件 |
os.path.isfile() | 判断是否为文件 |
os.path.isdir() | 判断是否为目录 |
os.path.join() | 连接目录,如 path1 连接 path2为path1/path2 |
os.path.splitext() | 将文件分割成文件名与扩展名,如分割tmp.txt为 tmp 和 .txt |
5.2 文件解码读取操作
def read_json_file(filepath):"""解码json文件"""with open(filepath, mode='r', encoding='utf-8') as f:city_list = json.load(f)print(city_list)def read_csv_file(filepath):"""处理csv文件"""with open(filepath, mode='r', encoding='utf-8', newline='') as f:reader = csv.reader(f)for row in reader:print(', '.join(row))
5.3 判断文件格式,并调用相应函数
使用os模块。
def main():"""主函数"""filepath = input('请输入文件名称:')filename, file_ext = os.path.splitext(filepath)if file_ext == '.json':# json文件read_json_file(filepath)elif file_ext == '.csv':# csv文件read_csv_file(filepath)else:print('不支持的文件格式!')
(2021-08-09)空气质量指数计算例题练习(一)相关推荐
- python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算
一.空气质量指数计算V1.0 主要知识点:分支结构.函数.异常处理# -*- coding:utf-8 -*- """ @author:Angel @file:AQI_V ...
- 2021.08.09【普及组】模拟赛C组比赛总结
文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...
- (八)空气质量指数计算7.0-----beautifulsoup4解析处理html、获取所有城市空气质量
案例描述 • 为了能有效地提取并利用网络信息并工作提高效率,出现了网络爬虫 • 利用网络爬虫实时获取城市的空气质量 • 利用beautifulsoup4获取所有城市的空气质量 案例解析 首先获取所有的 ...
- python空气质量指数计算_Python的学习笔记案例8--空气质量指数计算5.0
之前都是使用提前准备好的文件来获取数据,时效性很差. 为了更有效.更快地获取并利用网络信息并工作提高效率,出现了网络爬虫. 利用网络爬虫实时获取城市的空气质量指数. 什么是网络爬虫? 自动抓取互联网信 ...
- python空气质量指数计算_空气质量指数数据分析可视化
目录 1 数据描述 2 数据预处理 应用日期计算函数 应用匹配查找函数 逻辑判断函数 Python缺失值处理 3 数据分析及可视化 3.1描述统计 3.2 热力图 一.待分析的大数据描述 本例选取的数 ...
- 本博客导读(2021/08/09更新)
文章目录 1. 简介 1.1 博客精神 1.2 写作目的 1.3 技术方向 1.4 博主 1.5 版权说明 2 推荐内容 2.1 主要代表作 2.2 其他推荐内容 3. 程序类 3.1 C#程序设计 ...
- python空气质量指数计算_现在,哪个城市的空气最好闻?空气质量指数分布图——Python实例...
我们要做如下两张图. 空气质量指数AQI的分布图. PM2.5的分布图. 一.获取空气质量指数AQI和PM2.5浓度数据 刚开始想找这个网站,可网页打开的速度太慢,导致代码执行一度停滞. 网站提供的实 ...
- python空气质量指数计算_历史空气质量指数查询示例代码
#!/usr/bin/python # encoding:utf-8 import urllib2, json, urllib # 2.历史空气质量指数查询 data = {} data[" ...
- (八)空气质量指数计算1.0
案例描述 空气质量指数计算方法 空气质量分指数计算方法 (individual air quality index (IAQI):单项污染物的空气质量指数) 空气质量指数计算方法 (airqualit ...
最新文章
- 使用Python,OpenCV从图像中删除轮廓
- 两个关于.NET读取EXCEL文件的问题,记下来,很有用!
- PS基础教程[3]如何去除照片上的水印
- Statistical language model 统计语言模型
- Python中OpenCV2. VS. CV1
- Hello world开始
- OpenCL_Barrier同步
- java 获取键盘点击_Java中获取键盘输入值的三种方法介绍
- H264解码之读取本地H264文件
- openv Mat 之 forEach 操作
- AAAI 2021论文:利用深度元学习对城市销量进行预测
- fastapi+tortoise-orm测试
- html js动态时间轴,jQuery时间轴插件timeline.js
- 清除此计算机中wps云盘,Win10专业版系统怎么把电脑上的WPS网盘彻底删掉?
- DICOM医学图像处理:AETitle在C-FIND和C-MOVE请求中的设置问题
- Codeforces Round #548 (Div. 2) C. Edgy Trees(思维+dfs)
- [pyecharts学习笔记]——页面组件 Page(顺序多图,将多个图将汇总到一个页面)
- 关于Python的一些要点
- Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
- 试论and连接并列主语时的主谓一致