コード例 #1
0
ファイル: main.py プロジェクト: klmtldh/python_oas
def analysis_noarrange(sql):
    dfsql = kl_class.dfMysql()
    df = dfsql.select_mysql(sql)
    df_section_noarrange = df[(df['开始时间'].isnull())|(df['结束时间'].isnull())]
    df_section_noarrange = df_section_noarrange.fillna('未填写')
    pdf = kl_class.parsingDf()
    return pdf.df_iter( df_section_noarrange )
コード例 #2
0
ファイル: main.py プロジェクト: klmtldh/python_oas
def analysis_item(sql,item):
    dfsql = kl_class.dfMysql()
    df = dfsql.select_mysql(sql)
    df=df.applymap(str)
    pdf = kl_class.parsingDf()
    df_item, df_item_text = pdf.df_item(df,item)
    pdf.df_fig(df_item,'bar')
    return df_item,df_item_text
コード例 #3
0
ファイル: main.py プロジェクト: klmtldh/python_oas
def analysis_null(sql):
    dfsql = kl_class.dfMysql()
    df = dfsql.select_mysql(sql)
    columns_list = list(df)
    pdf = kl_class.parsingDf()
    df_null, df_null_text = pdf.null_item(df)
    pdf.df_fig(df_null,'bar')
    return len(df),columns_list,df_null,df_null_text
コード例 #4
0
ファイル: main.py プロジェクト: klmtldh/python_oas
def analysis_section(sql,flag,s_date,e_date=datetime.date.today()):
    dfsql = kl_class.dfMysql()
    df = dfsql.select_mysql(sql)
    start_date = pd.to_datetime(s_date).date()
    end_date = pd.to_datetime(e_date).date()
    df_section_end = df[(df['开始时间'] >= start_date)
                        & (df['结束时间'] <= end_date)
                        & (df['是否完成整改'] == flag)
                    ]
    df_section_end = df_section_end.fillna('未填写')
    pdf = kl_class.parsingDf()
    return pdf.df_iter( df_section_end )
コード例 #5
0
ファイル: km_ss_person.py プロジェクト: klmtldh/python_oas
def redundant_vacancies(sql_person, sql_value):
    # 连接数据库,读取人员信息和人员配置信息
    dfsql = kl_class.dfMysql()
    df_person = dfsql.select_mysql(sql_person)
    df_person['年龄'] = pandas_age(df_person['出生年月(2020-1-1)'])
    df_person['工龄'] = pandas_age(df_person['参加工作起始年(2020-1-1)'])

    df_value = dfsql.select_mysql(sql_value)

    # 统一人员配置数据
    df_value = df_value[['单位', '机构名称', '科室', '岗位', '定编']]
    df_value.rename(columns={'机构名称': '部门'}, inplace=True)

    # 解决告警问题,一是要copy,二是要用loc引用
    df_value1 = df_value.copy()
    df_value1.loc[:, ['定编']] = df_value1.loc[:, ['定编']].astype('int')

    # 对人员表进行透视
    for i in range(len(df_person)):
        if pd.isna(df_person.loc[i, '所队(县区级单位)']):
            df_person.loc[i, '单位'] = df_person.loc[i, '地市级单位']
        else:
            df_person.loc[i, '单位'] = df_person.loc[i, '所队(县区级单位)']
    df_person.fillna('无', inplace=True)
    df_person_talbe = pd.pivot_table(
        df_person,
        index=['单位', '部门', '科室', '岗位'],
        values=['姓名'],
        aggfunc=len,
        fill_value=0,
        margins=True,
        # margins_name='总数'
    )
    df_person_talbe.reset_index(inplace=True)
    df_person_talbe.columns = ['单位', '部门', '科室', '岗位', '在岗数']
    df_value1.fillna('无', inplace=True)
    df_person_talbe.fillna('无', inplace=True)
    df_table = pd.merge(df_value1,
                        df_person_talbe,
                        how='left',
                        on=['单位', '部门', '科室', '岗位'])
    df_table.fillna(0, inplace=True)
    df_table['缺员'] = df_table['定编'] - df_table['在岗数']

    text = "昆明供电局安全监管部(应急指挥中心)定编{0}人,\
实际{1}人,缺员{2}人。".format(df_table['定编'].sum(), df_table['在岗数'].sum(),
                       df_table['缺员'].sum())
    pdf = kl_class.parsingDf()

    # 党员
    # df_person_party=df_person['政治面貌'].value_counts()
    # df_person_party = kl_class.sort_list(df_person_party, ['党员', '群众'])
    # text_person_party = pdf.series_tex(df_person_party, '名')

    # 性别
    df_person_sex = df_person['性别'].value_counts()
    df_person_sex = kl_class.sort_list(df_person_sex, ['男', '女'])
    text_person_sex = pdf.series_tex(df_person_sex, '名')

    # 年龄
    df_person_age = pd.cut(df_person['年龄'].astype('int'),
                           bins=[0, 30, 40, 50, 100],
                           labels=["30岁以下", "30-39岁", "40-49岁", "50岁以上"])
    df_person_age_count = df_person_age.value_counts()
    df_person_age_count = kl_class.sort_list(
        df_person_age_count, ["30岁以下", "30-39岁", "40-49岁", "50岁以上"])

    text_person_age_count = pdf.series_tex(df_person_age_count, '名')

    #工龄
    df_person_wage = pd.cut(
        df_person['工龄'].astype('int'),
        bins=[0, 5, 10, 20, 30, 50],
        labels=["5年以下", "5-9年", "10-19年", "20-29年", "30年以上"])
    df_person_wage_count = df_person_wage.value_counts()
    df_person_wage_count = kl_class.sort_list(
        df_person_wage_count, ["5年以下", "5-9年", "10-19年", "20-29年", "30年以上"])

    text_person_wage_count = pdf.series_tex(df_person_wage_count, '名')

    # 文化程度
    text_list = []
    list_columns = ['初始学历', '所学专业(初始)', '职称']
    s_list = [
        '男', '女', '党员', '群众', '研究生', '本科', '大专', '高级工程师', '工程师', '助理工程师', '经理',
        '副经理', '主管', '安全监察专责(A)', '安全监察专责(B)', '风险体系管理专责(A)', '风险体系管理专责(B)',
        '应急管理专责', '班长', '安全监察员'
    ]
    for item in list_columns:
        df_person_x = df_person[item].value_counts()
        df_person_x = kl_class.sort_list(df_person_x, s_list)
        text_person_x = pdf.series_tex(df_person_x, '名')
        text_list.append(text_person_x)

    text = text + text_person_sex + text_person_age_count + '工龄:' + text_person_wage_count + ''.join(
        text_list)

    df_person = df_person[['姓名', '单位', '部门', '科室', '岗位', '性别', '年龄']]
    df_person.fillna('无', inplace=True)
    df_person = kl_class.sort_list(df_person, s_list, '岗位')
    list_d = [
        '昆明供电局',
        '官渡供电局',
        '五华供电局',
        '盘龙供电局',
        '西山供电局',
        '呈贡供电局',
        '东川供电局',
        '昆明安宁供电局',
        '云南电网有限责任公司昆明晋宁供电局',
        '云南电网有限责任公司昆明宜良供电局',
        '云南电网有限责任公司昆明富民供电局',
        '云南电网有限责任公司昆明嵩明供电局',
        '云南电网有限责任公司昆明石林供电局',
        '云南电网有限责任公司昆明寻甸供电局',
        '云南电网有限责任公司昆明禄劝供电局',
    ]

    list_b = [
        '安全监管部(应急指挥中心)',
        '系统运行部',
        '科技创新及数字化中心',
        '规划建设管理中心(质监分站)',
        '供电服务中心',
        '综合服务中心(涉电分中心)',
        '物流服务中心',
        '带电作业中心',
        '通信管理所',
        '输电管理所',
        '变电运行一所',
        '变电运行二所',
        '变电修试所',
        '安全监管部',
    ]

    list_k = [
        '无',
        '安全监察科',
        '应急与保供电管理科',
        '安全督查大队',
        '安全监察班',
        '综合室',
        '安生室',
        '计划安全室',
        '质量安全室',
        '科技室',
    ]
    list_sort = [list_d, list_b, list_k]
    column = ['单位', '部门', '科室']
    for i in range(len(column)):
        cat_order = CategoricalDtype(list_sort[i], ordered=True)

        df_person[column[i]] = df_person[column[i]].astype(cat_order)

    df_person = df_person.sort_values(column,
                                      axis=0,
                                      ascending=[True, True, True])

    df_person.reset_index(drop=True, inplace=True)

    return df_table, text, df_person
コード例 #6
0
def redundant_vacancies(sql_person, sql_value):
    #连接数据库,读取人员信息和人员配置信息
    dfsql = kl_class.dfMysql()
    df_person = dfsql.select_mysql(sql_person)
    df_value = dfsql.select_mysql(sql_value)

    #统一人员配置数据
    df_value = df_value[['科室或班组名称', '岗位名称', '职数']]
    df_value.rename(columns={'科室或班组名称': '科室', '岗位名称': '工作岗位'}, inplace=True)
    #df_value['职数']=df_value['职数'].astype('int')
    df_value1 = df_value.copy()
    df_value1.loc[:, ['职数']] = df_value1.loc[:, ['职数']].astype('int')

    #对人员表进行透视
    df_person_talbe = pd.pivot_table(df_person,
                                     index=['科室', '工作岗位'],
                                     columns=['岗位状态'],
                                     values=['姓名'],
                                     aggfunc=len,
                                     fill_value=0,
                                     margins=True,
                                     margins_name='总数')
    df_person_talbe.reset_index(inplace=True)
    df_person_talbe.columns = ['科室', '工作岗位', '借入', '借出', '在岗', '总数']

    df_table = pd.merge(df_value1,
                        df_person_talbe,
                        how='left',
                        on=['科室', '工作岗位'])
    df_table['缺员'] = df_table['职数'] - df_table['总数']

    text = "昆明供电局安全监管部(应急指挥中心)定员{0}人,\
实际{1}人,缺员{2}人,其中:在岗{3}人,借入{4}人,借出{5}人。".format(
        df_table['职数'].sum(), df_table['总数'].sum(), df_table['缺员'].sum(),
        df_table['在岗'].sum(), df_table['借入'].sum(), df_table['借出'].sum())
    pdf = kl_class.parsingDf()

    #党员
    df_person_party = df_person['政治面貌'].value_counts()
    df_person_party = kl_class.sort_list(df_person_party, ['党员', '群众'])
    text_person_party = pdf.series_tex(df_person_party, '名')

    #性别
    df_person_sex = df_person['性别'].value_counts()
    df_person_sex = kl_class.sort_list(df_person_sex, ['男', '女'])
    text_person_sex = pdf.series_tex(df_person_sex, '名')

    #年龄
    df_person_age = pd.cut(df_person['年龄'].astype('int'),
                           bins=[0, 30, 40, 50, 100],
                           labels=["30岁以下", "30-39岁", "40-49岁", "50岁以上"])
    df_person_age_count = df_person_age.value_counts()
    df_person_age_count = kl_class.sort_list(
        df_person_age_count, ["30岁以下", "30-39岁", "40-49岁", "50岁以上"])

    text_person_age_count = pdf.series_tex(df_person_age_count, '名')

    #工龄
    df_person_wage = pd.cut(
        df_person['工龄'].astype('int'),
        bins=[0, 5, 10, 20, 30, 50],
        labels=["5年以下", "5-9年", "10-19年", "20-29年", "30年以上"])
    df_person_wage_count = df_person_wage.value_counts()
    df_person_wage_count = kl_class.sort_list(
        df_person_wage_count, ["5年以下", "5-9年", "10-19年", "20-29年", "30年以上"])

    text_person_wage_count = pdf.series_tex(df_person_wage_count, '名')

    #文化程度
    text_list = []
    list_columns = ['民族', '文化程度', '职称']
    s_list = [
        '男', '女', '党员', '群众', '研究生', '本科', '大专', '高级工程师', '工程师', '助理工程师', '经理',
        '副经理', '主管', '安全监察专责(A)', '安全监察专责(B)', '风险体系管理专责(A)', '风险体系管理专责(B)',
        '应急管理专责', '班长', '安全监察员'
    ]
    for item in list_columns:
        df_person_x = df_person[item].value_counts()
        df_person_x = kl_class.sort_list(df_person_x, s_list)
        text_person_x = pdf.series_tex(df_person_x, '名')
        text_list.append(text_person_x)

    text=text+text_person_party\
         +text_person_sex+text_person_age_count\
         +'工龄:'+text_person_wage_count+''.join(text_list)

    df_person = df_person[[
        '姓名', '科室', '工作岗位', '兼任职务', '联系电话', '政治面貌', '工号', '性别', '岗位状态'
    ]]
    df_person.fillna('无', inplace=True)
    df_person = kl_class.sort_list(df_person, s_list, '工作岗位')
    df_person.reset_index(drop=True, inplace=True)

    return df_table, text, df_person