欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()
相关标签: Python