zoukankan      html  css  js  c++  java
  • 算月综合AQI指数

    # author:xgx
    # create time: 2018/12/11

    import pandas as pd
    import os
    import numpy as np

    def i_so2(para):
    """
    :param para: so2一个月的日均值, 数组
    :return: so2的单项指数
    """
    para = para.dropna()
    para = np.sort(para)
    # 计算单项月平均
    # 规定月有效值不能小于27个,考虑到情况复杂,这里取15
    if len(para) < 15:
    final_i = np.nan
    else:
    cia = para.mean()
    cia_item = cia / 60
    k = 1 + (len(para) - 1)*0.98
    s = int(k)
    xs = para[s - 1]
    xs_1 = para[s]
    mp = xs + (xs_1 - xs)*(k-s)
    cid_per = mp
    cid_per_item = cid_per/150
    final_i = max(cia_item, cid_per_item)
    return final_i


    def i_no2(para):
    """
    :param para: no2一个月的日均值
    :return: no2的单项指数
    """
    para = para.dropna()
    para = np.sort(para)
    # 计算单项月平均
    if len(para) < 15:
    final_i = np.nan
    else:
    cia = para.mean()
    cia_item = cia / 40
    k = 1 + (len(para) - 1)*0.98
    s = int(k)
    xs = para[s - 1]
    xs_1 = para[s]
    mp = xs + (xs_1 - xs)*(k-s)
    cid_per = mp
    cid_per_item = cid_per/80
    final_i = max(cia_item, cid_per_item)
    return final_i


    def i_pm10(para):
    """
    :param para: pm10一个月的日均值
    :return: pm10的单项指数
    """
    para = para.dropna()
    para = np.sort(para)
    # 计算单项日平均
    if len(para) < 15:
    final_i = np.nan
    else:
    cia = para.mean()
    cia_item = cia / 70
    k = 1 + (len(para) - 1)*0.95
    s = int(k)
    xs = para[s - 1]
    xs_1 = para[s]
    mp = xs + (xs_1 - xs)*(k-s)
    cid_per = mp
    cid_per_item = cid_per/150
    final_i = max(cia_item, cid_per_item)
    return final_i


    def i_pm25(para):
    """
    :param para: pm25一个月的日均值
    :return: pm25的单项指数
    """
    para = para.dropna()
    para = np.sort(para)
    # 计算单项日平均
    if len(para) < 15:
    final_i = np.nan
    else:
    cia = para.mean()
    cia_item = cia / 35
    k = 1 + (len(para) - 1)*0.95
    s = int(k)
    xs = para[s - 1]
    xs_1 = para[s]
    mp = xs + (xs_1 - xs)*(k-s)
    cid_per = mp
    cid_per_item = cid_per/75
    final_i = max(cia_item, cid_per_item)
    return final_i


    def i_co(para):
    """
    :param para: co一个月的日均值
    :return: co的单项指数
    """
    para = para.dropna()
    para = np.sort(para)
    if len(para) < 15:
    final_i = np.nan
    else:
    k = 1 + (len(para) - 1) * 0.95
    s = int(k)
    xs = para[s - 1]
    xs_1 = para[s]
    mp = xs + (xs_1 - xs) * (k - s)
    cid_per = mp
    cid_per_item = cid_per / 4
    final_i = cid_per_item
    return final_i


    def i_o3(para):
    """
    :param para: o3一个月的日均值
    :return: o3的单项指数
    """
    para = para.dropna()
    para = np.sort(para)
    if len(para) < 15:
    final_i = np.nan
    else:
    k = 1 + (len(para) - 1) * 0.90
    s = int(k)
    # print(para)
    # print(s)
    xs = para[s - 1]
    xs_1 = para[s]
    mp = xs + (xs_1 - xs) * (k - s)
    cid_per = mp
    cid_per_item = cid_per / 160
    final_i = cid_per_item
    return final_i


    def i_total(data):
    # print(data)
    so2 = i_so2(data['SO2'])
    no2 = i_no2(data['NO2'])
    pm10 = i_pm10(data['PM10'])
    pm25 = i_pm25(data['PM2.5'])
    co = i_co(data['CO'])
    o3 = i_o3(data['O3_8h'])
    dict_temp = {'SO2': so2, 'NO2': no2, 'PM10': pm10,
    'PM2.5': pm25, 'CO': co, 'O3_8h': o3}
    i_max = np.max(list(dict_temp.values()))
    # print(dict_temp.values())
    i_sum = np.nansum(list(dict_temp.values()))
    max_name = []
    for k, v in dict_temp.items():
    if v == i_max:
    max_name.append(k)
    ttime = str(data['日期'].values[0])[:7]
    # print(ttime )
    df_0 = pd.DataFrame({'i_sum': i_sum, 'i_max': i_max,'max_name': max_name, 'so2': so2, 'no2': no2, 'pm25': pm25,
    'pm10': pm10,'co': co, 'o3': o3, 'time': ttime })
    label = [ 'i_sum', 'i_max', 'max_name', 'so2', 'no2', 'pm25', 'pm10', 'co', 'o3', 'time']
    data_final = df_0[label]
    return data_final

    def main(file_dir):
    file_list=os.listdir(file_dir)
    for file in file_list:
    data=pd.read_excel(file_dir+'/'+file) data.
    set_index('日期', drop=False,inplace=True) key
    =lambda x:x.month key_1
    =lambda x:x.year df
    = pd.DataFrame()
    for name, group in data.groupby(key_1):
    # print(group)
    for name_1, group_1 in group.groupby(key):
    # print(group_1)
    data_quality = i_total(group_1) df
    = df.append(data_quality)
    # break
    df.reset_index(inplace=True) df.
    drop('index',axis=1,inplace=True)
    print(df) df.
    to_excel(r'/data01/home/gzblue/xgx/weizhan/abazhou_new'+'/'+file)
    # break



    if __name__ == '__main__':
    file_dir=r'/data01/home/gzblue/xgx/weizhan/abazzhou'
    pd.set_option('display.max_columns', None) pd.
    set_option('display.max_rows', None)
    main(file_dir)
  • 相关阅读:
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
  • 原文地址:https://www.cnblogs.com/avivi/p/11354295.html
Copyright © 2011-2022 走看看