空气质量指数计算例题练习(一)

  • 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​−BPLo​IAQIHi​−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版本改进

  1. 读取已经获取的JSON数据文件
  2. 并将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

  1. 读取已经获取的JSON数据文件
  2. 并将其转换成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)空气质量指数计算例题练习(一)相关推荐

  1. python空气质量指数计算_Python入门案例(八):空气质量指数(AQI)计算

    一.空气质量指数计算V1.0 主要知识点:分支结构.函数.异常处理# -*- coding:utf-8 -*- """ @author:Angel @file:AQI_V ...

  2. 2021.08.09【普及组】模拟赛C组比赛总结

    文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...

  3. (八)空气质量指数计算7.0-----beautifulsoup4解析处理html、获取所有城市空气质量

    案例描述 • 为了能有效地提取并利用网络信息并工作提高效率,出现了网络爬虫 • 利用网络爬虫实时获取城市的空气质量 • 利用beautifulsoup4获取所有城市的空气质量 案例解析 首先获取所有的 ...

  4. python空气质量指数计算_Python的学习笔记案例8--空气质量指数计算5.0

    之前都是使用提前准备好的文件来获取数据,时效性很差. 为了更有效.更快地获取并利用网络信息并工作提高效率,出现了网络爬虫. 利用网络爬虫实时获取城市的空气质量指数. 什么是网络爬虫? 自动抓取互联网信 ...

  5. python空气质量指数计算_空气质量指数数据分析可视化

    目录 1 数据描述 2 数据预处理 应用日期计算函数 应用匹配查找函数 逻辑判断函数 Python缺失值处理 3 数据分析及可视化 3.1描述统计 3.2 热力图 一.待分析的大数据描述 本例选取的数 ...

  6. 本博客导读(2021/08/09更新)

    文章目录 1. 简介 1.1 博客精神 1.2 写作目的 1.3 技术方向 1.4 博主 1.5 版权说明 2 推荐内容 2.1 主要代表作 2.2 其他推荐内容 3. 程序类 3.1 C#程序设计 ...

  7. python空气质量指数计算_现在,哪个城市的空气最好闻?空气质量指数分布图——Python实例...

    我们要做如下两张图. 空气质量指数AQI的分布图. PM2.5的分布图. 一.获取空气质量指数AQI和PM2.5浓度数据 刚开始想找这个网站,可网页打开的速度太慢,导致代码执行一度停滞. 网站提供的实 ...

  8. python空气质量指数计算_历史空气质量指数查询示例代码

    #!/usr/bin/python # encoding:utf-8 import urllib2, json, urllib # 2.历史空气质量指数查询 data = {} data[" ...

  9. (八)空气质量指数计算1.0

    案例描述 空气质量指数计算方法 空气质量分指数计算方法 (individual air quality index (IAQI):单项污染物的空气质量指数) 空气质量指数计算方法 (airqualit ...

最新文章

  1. 使用Python,OpenCV从图像中删除轮廓
  2. 两个关于.NET读取EXCEL文件的问题,记下来,很有用!
  3. PS基础教程[3]如何去除照片上的水印
  4. Statistical language model 统计语言模型
  5. Python中OpenCV2. VS. CV1
  6. Hello world开始
  7. OpenCL_Barrier同步
  8. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍
  9. H264解码之读取本地H264文件
  10. openv Mat 之 forEach 操作
  11. AAAI 2021论文:利用深度元学习对城市销量进行预测
  12. fastapi+tortoise-orm测试
  13. html js动态时间轴,jQuery时间轴插件timeline.js
  14. 清除此计算机中wps云盘,Win10专业版系统怎么把电脑上的WPS网盘彻底删掉?
  15. DICOM医学图像处理:AETitle在C-FIND和C-MOVE请求中的设置问题
  16. Codeforces Round #548 (Div. 2) C. Edgy Trees(思维+dfs)
  17. [pyecharts学习笔记]——页面组件 Page(顺序多图,将多个图将汇总到一个页面)
  18. 关于Python的一些要点
  19. Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709
  20. 试论and连接并列主语时的主谓一致

热门文章

  1. ERD Online 4.0.11 在线数据库建模、元数据协作平台(免费、私有部署)
  2. Windows SDK for Windows 7安装流程
  3. 在Windows 7下删除注册表项时,权限不足
  4. PID原理的详细分析及调节过程
  5. C++面试题目及面试经验
  6. 深度学习(二)---深度神经网络训练三部曲
  7. vuequilleditor编辑器的使用,字体无法对齐的问题
  8. Today今天便利店的梦想:准独角兽的雄心与挑战
  9. PHPstudy设计简单登录界面
  10. 华为HCSP认证值得一考吗?