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)
  • 相关阅读:
    用.NET Compact Framework创建图像按钮
    .netCF中后台多线程与UI界面交互的冻结问题
    参考网站
    PPC全屏(C#)(转)
    推荐一个.net cf的开源网站
    在Windows Mobile中应用智能设备框架(Smart Device Framework)
    使用飞信框架(Remotesoft DOTNET Linker)使.net程序脱离.net框架运行
    .NET CF 能不能快一点?
    jquery中文指导:15天学会jquery]]
    .NET CF开发的源代码级优化器(C#)(Alpha)
  • 原文地址:https://www.cnblogs.com/avivi/p/11354295.html
Copyright © 2011-2022 走看看