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 )
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
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
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 )
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
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