Python案例—AQI 空气质量指数
程序员文章站
2022-05-19 13:16:01
...
"""
作者:Z_Howe
版本:1.0
功能:计算空气质量指数(Air Quality Index)
日期:2019/1/29
"""
def cal_linear(iaqi_lo, iaqi_hi, bp_lo, bp_hi, cp):
"""
范围缩放
"""
iaqi = (iaqi_hi - iaqi_lo) * (cp - bp_lo) / (bp_hi - bp_lo) + iaqi_lo
return iaqi
def cal_pm_iaqi(pm_val):
"""
PM2.5的iaqi计算函数
"""
if 0 <= pm_val < 36:
iaqi1 = cal_linear(0, 50, 0, 35, pm_val)
elif 36 <= pm_val < 76:
iaqi1 = cal_linear(50, 100, 35, 75, pm_val)
elif 76 <= pm_val < 116:
iaqi1 = cal_linear(100, 150, 75, 115, pm_val)
elif 116 <= pm_val < 151:
iaqi1 = cal_linear(150, 200, 115, 150, pm_val)
elif 151 <= pm_val < 251:
iaqi1 = cal_linear(200, 300, 150, 250, pm_val)
elif 251 <= pm_val < 351:
iaqi1 = cal_linear(300, 400, 250, 350, pm_val)
elif 351 <= pm_val < 501:
iaqi1 = cal_linear(400, 500, 350, 500, pm_val)
return iaqi1
def cal_co_iaqi(co_val):
"""
CO的iaqi计算函数
"""
if 0 <= co_val < 3:
iaqi2 = cal_linear(0, 50, 0, 2, co_val)
elif 3 <= co_val < 5:
iaqi2 = cal_linear(50, 100, 2, 4, co_val)
elif 5 <= co_val < 15:
iaqi2 = cal_linear(100, 150, 4, 14, co_val)
elif 15 <= co_val < 25:
iaqi2 = cal_linear(150, 200, 14, 24, co_val)
elif 25 <= co_val < 37:
iaqi2 = cal_linear(200, 300, 24, 36, co_val)
elif 37 <= co_val < 49:
iaqi2 = cal_linear(300, 400, 36, 48, co_val)
elif 49 <= co_val < 61:
iaqi2 = cal_linear(400, 500, 48, 60, co_val)
return iaqi2
def cal_aqi(param_list):
"""
空气质量指数计算
"""
pm_value = param_list[0]
co_value = param_list[1]
pm_iaqi = cal_pm_iaqi(pm_value)
co_iaqi = cal_co_iaqi(co_value)
iaqi_list = []
iaqi_list.append(pm_iaqi)
iaqi_list.append(co_iaqi)
aqi = max(iaqi_list)
return aqi
def main():
"""
主函数
"""
print('请输入以下信息,用空格分隔')
input_str = input('(1)PM2.5[501以内] (2)CO[60以内]:')
str_list = input_str.split(' ')
param_list = []
param_list.append(float(str_list[0]))
param_list.append(float(str_list[1]))
# 调用AQI计算函数
aqi_val = cal_aqi(param_list)
print('空气质量指数为{}'.format(aqi_val))
if __name__ == '__main__':
main()
"""
作者:Z_Howe
版本:2.0
功能:计算空气质量指数(Air Quality Index)
新增功能:读取已经获取的JSON数据文件,并将AQI前5的数据输出到文件
日期:2019/1/29
文件待收集...
· JSON(JavaScript Object Notation)是一种轻量级数据交换格式
· 可以对复杂数据进行表达和存储,易于阅读和理解
· 规则:
1.数据保存在键值对中
2.键值对之间由逗号分隔
3.花括号用于保存键值对数据组成的对象
4.方括号用于保存键值对数据组成的数组
· 采用对象、数组方式组织起来的键值对可以表示任何结构的数据
· JSON格式是互联网上主要使用的复杂数据格式之一
· JSON库是处理JSON格式的Python标准库
·两个过程:
· 编码(encoding),将Python数据类型转换成JSON格式的过程
· 解码(decoding),从JSON格式中解析数据对应到Python数据类型的过程
dumps() 将Python数据类型转换为JSIN格式(需要两个变量)
loads() 将JSON格式字符串转换为Python数据类型(需要两个变量)
dump() 与dumps()功能一致,输出到文件(需要两个变量)
load() 与loads()功能一致,从文件输入(需要两个变量)
举个JSON格式例子:
[
{
"aqi":47
"area":"北京"
},
{
"aqi":63
"area":"上海"
}
]
"""
import json
def process_json_file(filepath):
"""
解析json文件
"""
f = open(filepath, mode='r', encoding='utf-8')
city_list = json.load(f)
return city_list
def main():
"""
主函数
"""
file_path = input('请输入json文件路径:')
city_list = process_json_file(file_path)
city_list.sort(key=lambda city: city['aqi'])
top5_list = city_list[:5]
f = open('top5_aqi.json', mode='w', encoding='utf-8')
json.dump(top5_list, f, ensure_ascii=False)
f.close()
if __name__ == '__main__':
main()
上一篇: 到底什么是框架?
下一篇: 空气质量监测管理系统