Files
jupyter/体测单位/燕山石化.ipynb
T
2023-05-28 00:11:39 +08:00

65 KiB

导入人员信息

In [ ]:
import openpyxl
import json


wb = openpyxl.load_workbook('data/燕山石化人员情况表.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}

for n in range(2, sheet.max_row+1):
    if sheet.cell(n,1).value is not None:
        code = int(sheet.cell(n, 1).value)
        person.setdefault(code, {})
        dict1 = {}
        dict1['name'] = sheet.cell(n, 2).value
        if sheet.cell(n, 7).value ==1:
            sex = '男'
        else:
            sex = '女'
        dict1['sex'] = sheet.cell(n, 3).value
        birth = str(sheet.cell(n, 6).value).split()[0]
        dict1['birth'] = birth
        if sheet.cell(n,5).value is not None:
            dict1['phone'] = sheet.cell(n, 5).value
        if sheet.cell(n,7).value is not None:
            dict1['id_num'] = sheet.cell(n, 7).value
        if sheet.cell(n,8).value is not None:
            dict1['SAP'] = sheet.cell(n, 8).value
        if sheet.cell(n,9).value is not None:
            dict1['工作单位'] = sheet.cell(n, 9).value
        if sheet.cell(n,10).value is not None:
            dict1['车间'] = sheet.cell(n, 10).value
        else:
            dict1['车间'] =''
        if sheet.cell(n,11).value is not None:
            dict1['班组'] = sheet.cell(n, 11).value
        else:
            dict1['班组'] =''
        if sheet.cell(n,12).value is not None:
            dict1['工作性质'] = sheet.cell(n, 11).value
        person[code] = dict1
#jianyuan = [6484,7110,6441,6541,6543,6549,6555,6600,2958,2981,3033,3231,3249,3287,3228,7741,7749,7794,7799,7806,7837,7863,7870,7880,7894,7895,7904,7936,7947,7953,7958,7968,7969,7974,8086,8114]

print(len(person))
#for k in jianyuan:
#    if k in person.keys():
#        del person[k]
print(len(person))
#bianwai =[449,6839]
#for i in range(7139,7200):
#    bianwai.append(i)
#for k in bianwai:
#    if k in person.keys():
#        del person[k]
print(len(person))
filename = 'data/燕山石化人员名单.json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print('ok')

每日成绩导入

In [ ]:
import json
import time
import csv

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
re_ta = {}
dict1 = {}
list1 = []
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

filename = 'data/places_result_20230517.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append(line)
#print(list1)
for result in list1:
    user = str(result[2])
    if user in dict1.keys():        
        m_item = str(result[3])    
        re_ta.setdefault(user,{})    
        re_ta[user]['name'] = dict1[user]['name']
        re_ta[user]['sex'] = dict1[user]['sex'] 
        re_ta[user]['部门'] = dict1[user]['工作单位']
        item_name = item[m_item]['name']
        re_ta[user].setdefault(item_name,{})  
        score = int(result[4])/item[m_item]['divisor']    
        re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
print(len(re_ta))
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
for k in re_ta.keys():
    if k in dict2.keys():
        print(k,dict2[k]['name'],'已测试!')
for k, v in re_ta.items():
    if k not in dict2.keys():
        dict2[k] = v
    else:
        for k1,v1 in v.items():
            dict2[k][k1] = v1
filename = 'data/result_燕山石化(20230517).json'
with open(filename,'w') as fl:
    json.dump(re_ta, fl, ensure_ascii=False) 
print(len(re_ta))
filename = 'data/result_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(dict2, fl, ensure_ascii=False) 
print(len(dict2))

每日成绩导出

In [ ]:
import json
import openpyxl

items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
title = ['编号','姓名','性别','单位','车间','班组','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']

filename = 'data/result_燕山石化(20230517).json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
    
list1 = []
for k, v in dict1.items():
    list2 = []
    list2.append(str(k).rjust(5,'0'))
    list2.append(v['name'])    
    list2.append(dict2[k]['sex'])
    list2.append(dict2[k]['工作单位'])    
    list2.append(dict2[k]['车间'])
    list2.append(dict2[k]['班组'])
    for item in items:
        if item in v.keys():
            list2.append(v[item]['成绩'])            
        elif item =='name':
            list2.append(v[item])
        else:
            list2.append('') 
    list1.append(list2)
filename = 'data/燕山石化体测情况表(20230517).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

总成绩导出

In [ ]:
import json
import openpyxl

items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
title = ['编号','姓名','性别','单位','车间','班组','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']

filename = 'data/result_燕山石化-all.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
    
list1 = []
for k, v in dict1.items():
    list2 = []
    list2.append(str(k).rjust(5,'0'))
    list2.append(v['name'])    
    list2.append(dict2[k]['sex'])
    list2.append(dict2[k]['工作单位'])    
    list2.append(dict2[k]['车间'])
    list2.append(dict2[k]['班组'])
    for item in items:
        if item in v.keys():
            list2.append(v[item]['成绩'])            
        elif item =='name':
            list2.append(v[item])
        else:
            list2.append('') 
    list1.append(list2)
filename = 'data/燕山石化体测情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

统计部门测试人数

In [ ]:
import json
import openpyxl

filename = 'data/result_燕山石化(20230516).json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
dict2 = {}
for k, v in dict1.items():
    unit = v['部门']
    dict2.setdefault(unit,0)
    dict2[unit] = dict2[unit] + 1
print(dict2)
title =['单位','体测人数']
list1 = [] 
for k, v in dict2.items():
    list2 = []
    list2 = [k,v]
    list1.append(list2)
filename = 'data/燕山石化部门测试人数情况表(20230516).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

每日未测试人员情况表

In [ ]:
import json
import openpyxl


title = ['编号','姓名','性别','单位','车间','班组']
filename = 'data/result_燕山石化(20230417).json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
list1 = []
for k, v in dict2.items():
    list2 = []
    if k not in dict1.keys():
        list2.append(str(k).rjust(5,'0'))
        list2.append(v['name'])    
        list2.append(dict2[k]['sex'])
        list2.append(dict2[k]['工作单位'])    
        list2.append(dict2[k]['车间'])
        list2.append(dict2[k]['班组'])
        list1.append(list2)
filename = 'data/燕山石化未体测人员名单(20230417).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)        

汇总未测试人员情况表

In [ ]:
import json
import openpyxl


title = ['编号','姓名','性别','单位','车间','班组']
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
# 筛选重名剔除名单
chongming = []
filename = 'data/燕山石化重名人员测试情况(20230515).xlsx'
wb = openpyxl.load_workbook(filename)
sheet = wb.active
for n in range(1, sheet.max_row+1,2):
    if sheet.cell(n,1).value is not None:
        code1 = int(sheet.cell(n, 1).value)
        code2 = int(sheet.cell(n+1, 1).value)
        bz1 = sheet.cell(n, 4).value
        bz2 = sheet.cell(n+1, 4).value
        if bz1 =='否' and bz2 =='否':
            chongming.append(max(code1,code2))
        else:
            chongming.append(code1)
            chongming.append(code2)

filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
list1 = []
for k, v in dict2.items():
    list2 = []
    if k not in dict1.keys() and int(k) not in chongming:
        list2.append(str(k).rjust(5,'0'))
        list2.append(v['name'])    
        list2.append(dict2[k]['sex'])
        list2.append(dict2[k]['工作单位'])    
        list2.append(dict2[k]['车间'])
        list2.append(dict2[k]['班组'])
        list1.append(list2)
filename = 'data/燕山石化未体测人员名单(截至20230516).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
wb.save(filename)

统计测试项目不足人员

In [73]:
import json
import openpyxl

items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
title = ['编号','姓名','性别','单位','车间','班组','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
dict3 = {}
for k, v in dict1.items():
    list1 = []
    for item in v.keys():
        if item in items:
            list1.append(item)
    dict3[k] = list1
list1 = []
for k, v in dict3.items():
    if len(v)<4 and '身高' in v and '体重' in v or ((len(v)<3 and '身高' not in v and '体重' not in v)):
        list2 = []
        xm = ','.join(v)
        list2.append(k)
        list2.append(dict2[k]['name'])
        list2.append(dict2[k]['工作单位'])
        list2.append(xm)
        list1.append(list2)
print(list1)
filename = 'data/燕山石化测试项目不足人员.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
#sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)       
[]

汇总成绩导入

In [ ]:
import json
import time
import csv

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
re_ta = {}
dict1 = {}
list1 = []
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

filename = 'data/places_result_20230526.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append(line)
#print(list1)
for result in list1:
    user = str(result[2])
    if user in dict1.keys():        
        m_item = str(result[3])    
        re_ta.setdefault(user,{})    
        re_ta[user]['name'] = dict1[user]['name']
        re_ta[user]['sex'] = dict1[user]['sex'] 
        re_ta[user]['部门'] = dict1[user]['工作单位']
        item_name = item[m_item]['name']
        re_ta[user].setdefault(item_name,{})  
        score = int(result[4])/item[m_item]['divisor']    
        re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
print(len(re_ta))

filename = 'data/result_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(re_ta, fl, ensure_ascii=False) 
print(len(re_ta))

统计测试人数

In [ ]:
import json
import time
import csv

person = set()
filename = 'data/places_result_20230526.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append(line)
#print(list1)
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

for result in list1:
    user = str(result[2])
    if user in dict1.keys():
        person.add(user)

print(len(person))

统计重复人员信息

In [ ]:
import json
import time
import csv


list1 = []
list2 = set()
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
filename = 'data/result_燕山石化-all.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl) 

for k,v in dict1.items():
    name = v['name']
    if name in list1:
        list2.add(name)
    list1.append(name)
list3 = []
for item in list2:
    for k,v in dict1.items():
        if v['name'] == item:
            list3.append([k,v['name'],v['sex'],v['birth']])
filename = 'data/燕山石化重名人员名单.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
#sheet.append(title)
for row in list3:
    sheet.append(row)
    
wb.save(filename)        

重复人员测试情况

In [ ]:
import json
import time
import csv


list1 = []
list2 = set()
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl) 


list3 = []

filename = 'data/燕山石化重名人员名单.xlsx'
wb = openpyxl.load_workbook(filename)
sheet = wb.active
# sheets = wb.sheetnames


for n in range(1, sheet.max_row+1):
    if sheet.cell(n,1).value is not None:
        code = int(sheet.cell(n, 1).value)
        name = dict1[str(code)]['name']
        unit = dict1[str(code)]['工作单位']
        if str(code) in dict2.keys():
            ce = '是'
        else:
            ce = '否'
        list3.append([code,name,unit,ce])
filename = 'data/燕山石化重名人员测试情况(20230516).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
#sheet.append(title)
for row in list3:
    sheet.append(row)
    
wb.save(filename)        

统计部门测试情况

In [ ]:
import json
import openpyxl
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict3 = json.load(fl)
dict2 = {}
for k, v in dict1.items():
    unit = v['工作单位']
    dict2.setdefault(unit,0)
    dict2[unit] = dict2[unit] + 1
dict4 = {}
for k, v in dict3.items():
    unit = v['部门']
    dict4.setdefault(unit,0)
    dict4[unit] = dict4[unit] + 1
list1 = []
for k, v in dict2.items():
    list2 = []
    list2.append(k)
    list2.append(v)
    if k in dict4.keys():
        list2.append(dict4[k])
    else:
        list2.append(0)
    list1.append(list2)
print(list1)
filename = 'data/燕山石化部门测试情况(截止5月6日).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
#sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)       
In [ ]:
#C2EDC1A2D1C7
gbs = 'C2EDC1A2D1C7'
import binascii
bs = binascii.a2b_hex(gbs)
print('bs', bs)
print('decode-bs:', bs.decode('gb2312'))
In [ ]:
s = '马立亚'
gbcode = s.encode('gb2312') # 先转成 bytes格式
print('gbcode:', gbcode)
gbs = "".join([hex(ch)[2:] for ch in gbcode])  #
print('gbs:', gbs)

数据分析

获取清理后数据

In [106]:
import json
import time
import csv

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
filename = 'data/燕山石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

re_ta = {}
list1 = []
#print("\n运动项目信息:")
filename = 'data/places_result_20230527.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append(line)
#print(list1)
for result in list1:
    user = str(result[2])
    if user in dict1.keys():        
        m_item = str(result[3])    
        re_ta.setdefault(user,{})    
        re_ta[user]['name'] = dict1[user]['name']
        re_ta[user]['unit'] = dict1[user]['工作单位']
        re_ta[user]['sex'] = dict1[user]['sex']
        re_ta[user]['birth'] = dict1[user]['birth'].replace('-','/')
        item_name = item[m_item]['name']
        re_ta[user].setdefault(item_name,{})  
        score = int(result[4])/item[m_item]['divisor']    
        re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
        re_ta[user][item_name]['得分'] =result[5]
filename = 'data/result_燕山石化1.json'
print(len(re_ta))
liwai = []
for k, v in re_ta.items():
    if (len(v)<8 and '身高' in v and '体重' in v) or (len(v)<7 and '身高' not in v and '体重' not in v) :
        liwai.append(k)
print(liwai)
for k in liwai:
    del re_ta[k]
print(len(re_ta))
filename = 'data/result_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(re_ta, fl) 
print('ok')
print(len(re_ta))
7734
['3520', '7790', '3125', '4025', '3231', '5690', '4551']
7727
ok
7727

计算人员年龄

In [107]:
import json
import datetime

filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
for k, v in dict1.items():    
    birth = v['birth'].split()[0].split('/')    
    nian = int(birth[0].strip())
    yue = int(birth[1].strip())
    ri = int(birth[2].strip())
    #print(k,nian,yue,ri)
    days = (datetime.date(2023, 5, 18)-datetime.date(nian,yue,ri)).days
    v['age'] = round(days/365)
filename = 'data/result_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')    
ok
In [99]:
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
for k,v in dict1.items():
    if v['age'] < 19:
        print(k,v['name'],v['age'] )

汇总人员信息及成绩

In [108]:
import json


items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']

filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    score = 0
    i = 0    
    for k1,v1 in v.items():  
        if k1 in items:
            score = score + int(v1['得分'])
            i+=1
    dict1[k]['score'] = round(score/i,2)            
filename = 'data/result_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
ok

计算测试等级

In [109]:
import json

filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]

for k1, v1 in dict2.items():
    di = v1[0]
    gao = v1[1]
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if int(v['score']*100) in range(di,gao+1):
            dict1[k]['level'] = k1
            i+=1
            if v['sex'] == '男':
                m = m +1
            else:
                f = f+1
    print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')
filename = 'data/result_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:3667人,男性:3136人,女性:531人
256~332分人数:3117人,男性:2033人,女性:1084人
333~367分人数:745人,男性:383人,女性:362人
368~500分人数:198人,男性:74人,女性:124人
ok

根据年龄汇总人员信息及成绩

In [110]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,69]]
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1):
            score = score+v['score']
            i+=1
            if v['sex'] == '男':
                m = m +1
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人,男性:{m}人')
20~24岁平均成绩:2.4分,人数:429人,男性:312人
25~29岁平均成绩:2.58分,人数:400人,男性:245人
30~34岁平均成绩:2.6分,人数:309人,男性:210人
35~39岁平均成绩:2.7分,人数:553人,男性:317人
40~44岁平均成绩:2.57分,人数:1339人,男性:844人
45~49岁平均成绩:2.55分,人数:1687人,男性:1071人
50~54岁平均成绩:2.53分,人数:1920人,男性:1559人
55~69岁平均成绩:2.43分,人数:1090人,男性:1068人

根据年龄汇总人员信息及成绩(男)

In [111]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1) and v['sex'] == '男':
            score = score+v['score']
            i+=1
            
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')
20~24岁平均成绩:2.31分,人数:312人
25~29岁平均成绩:2.44分,人数:245人
30~34岁平均成绩:2.43分,人数:210人
35~39岁平均成绩:2.5分,人数:317人
40~44岁平均成绩:2.43分,人数:844人
45~49岁平均成绩:2.38分,人数:1071人
50~54岁平均成绩:2.44分,人数:1559人
55~80岁平均成绩:2.41分,人数:1068人

根据年龄汇总人员信息及成绩(女)

In [112]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]
filename = 'data/result_燕山石化.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1) and v['sex'] == '女':
            score = score+v['score']
            i+=1
            
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')
20~24岁平均成绩:2.63分,人数:117人
25~29岁平均成绩:2.8分,人数:155人
30~34岁平均成绩:2.95分,人数:99人
35~39岁平均成绩:2.95分,人数:236人
40~44岁平均成绩:2.79分,人数:495人
45~49岁平均成绩:2.84分,人数:616人
50~54岁平均成绩:2.94分,人数:361人
55~80岁平均成绩:2.91分,人数:22人

计算平均成绩

In [113]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]
#filename = 'data/result_石家庄.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
i = 1
m = 0
f = 0
score = 0
t_score = 0
for k,v in dict1.items():
    if v['sex'] == '男':
        m = m +1
        score = score+v['score']
print(f'平均成绩:{round(score/m,4)}分,男性:{m}人')
t_score = t_score + score
score = 0
for k,v in dict1.items():
    if v['sex'] == '女':
        f = f +1
        score = score+v['score']
print(f'平均成绩:{round(score/f,4)}分,女性:{f}人')
t_score = t_score + score
print(f'平均成绩:{round(t_score/7727,4)}分,总体:7727人')
平均成绩:2.4206分,男性:5626人
平均成绩:2.859分,女性:2101人
平均成绩:2.5398分,总体:7727人

计算测试等级

In [114]:
import json


with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]

for k1, v1 in dict2.items():
    di = v1[0]
    gao = v1[1]
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if int(v['score']*100) in range(di,gao+1):
            dict1[k]['level'] = k1
            i+=1
            if v['sex'] == '男':
                m = m +1
            else:
                f = f+1
    print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')
#filename = 'data/result_石家庄.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:3667人,男性:3136人,女性:531人
256~332分人数:3117人,男性:2033人,女性:1084人
333~367分人数:745人,男性:383人,女性:362人
368~500分人数:198人,男性:74人,女性:124人
ok

计算各年龄段测试等级(女)

In [115]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]

with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]
dict3 = {}
for item in nld:
    di = item[0]
    gao = item[1]
    age = f'{di}-{gao}'
    dict3.setdefault(age,{})
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1):            
            dict3[age].setdefault(v['level'],0)
            if v['sex'] == '女':
                dict3[age][v['level']] = dict3[age][v['level']]+1
            
for k, v in dict3.items():
    print(k,v)
20-24 {'不合格': 44, '合格': 65, '良好': 5, '优秀': 3}
25-29 {'不合格': 43, '良好': 35, '合格': 74, '优秀': 3}
30-34 {'不合格': 17, '合格': 58, '良好': 19, '优秀': 5}
35-39 {'不合格': 44, '合格': 128, '良好': 52, '优秀': 12}
40-44 {'良好': 72, '不合格': 146, '合格': 241, '优秀': 36}
45-49 {'不合格': 167, '合格': 316, '优秀': 38, '良好': 95}
50-54 {'不合格': 65, '合格': 193, '良好': 77, '优秀': 26}
55-80 {'合格': 9, '不合格': 5, '优秀': 1, '良好': 7}

计算各年龄段测试等级(男)

In [116]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]

with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]
dict3 = {}
for item in nld:
    di = item[0]
    gao = item[1]
    age = f'{di}-{gao}'
    dict3.setdefault(age,{})
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1):            
            dict3[age].setdefault(v['level'],0)
            if v['sex'] == '男':
                dict3[age][v['level']] = dict3[age][v['level']]+1
            
for k, v in dict3.items():
    print(k,v)
20-24 {'不合格': 204, '合格': 96, '良好': 11, '优秀': 1}
25-29 {'不合格': 140, '良好': 19, '合格': 84, '优秀': 2}
30-34 {'不合格': 111, '合格': 81, '良好': 15, '优秀': 3}
35-39 {'不合格': 161, '合格': 124, '良好': 27, '优秀': 5}
40-44 {'良好': 63, '不合格': 462, '合格': 302, '优秀': 17}
45-49 {'不合格': 606, '合格': 389, '优秀': 11, '良好': 65}
50-54 {'不合格': 853, '合格': 567, '良好': 117, '优秀': 22}
55-80 {'合格': 390, '不合格': 599, '优秀': 13, '良好': 66}

按照部门计算平均成绩

In [117]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
depart = []
for k, v in dict1.items():
    if v['unit'] not in depart:
        depart.append(v['unit'])

for item in depart:
    score = 0
    n = 0
    for k, v in dict1.items():
        if item == v['unit']:
            score = score + v['score']
            n = n +1 
    print(item,round(score/n,2),n)
        
热电厂工会 2.41 681
炼油厂工会 2.48 1006
有机化工厂工会 2.57 446
储运厂工会 2.37 983
合成橡胶厂工会 2.46 713
检验计量中心工会 2.62 632
烯烃厂工会 2.59 410
化学品厂工会 2.4 368
合成树脂厂 2.46 443
生产运行保障中心 2.56 371
高科公司工会 2.69 304
机关工会 2.84 378
行政事务中心(离退中心)工会 2.76 524
教育培训中心工会 2.73 72
物装中心工会 2.67 182
消防中心工会 2.81 214

计算各项目成绩

In [118]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
for item in items:
    score = 0
    n = 0
    for k, v in dict1.items():
        if item in v.keys():
            n = n + 1
            score =score + int(v[item]['得分'])
    print(item,round(score/n,2),n)
体重 3.41 7724
肺活量 2.96 7651
握力 2.36 7677
坐位体前屈 2.78 6752
纵跳 1.89 7302
俯卧撑 1.99 4557
一分钟仰卧起坐 3.81 1680
单脚站立 1.7 7561
选择反应时 2.76 7579
台阶指数 2.77 5257

生成倒班人员信息表

In [119]:
import openpyxl
import json


wb = openpyxl.load_workbook('data/燕山石化人员情况表.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
daoban = {}

with open(filename,'r') as fl:
    dict1 = json.load(fl) 

for n in range(2, sheet.max_row+1):
    if sheet.cell(n,1).value is not None:
        code = int(sheet.cell(n, 1).value)
        if sheet.cell(n, 12).value == '倒班' and str(code) in dict1.keys():
            daoban[str(code)] = dict1[str(code)]

filename = 'data/daoban_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(daoban, fl, ensure_ascii=False) 
print(len(daoban))        
3478

倒班人员构成

In [120]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]

for k1, v1 in dict2.items():
    di = v1[0]
    gao = v1[1]
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if int(v['score']*100) in range(di,gao+1):
            dict1[k]['level'] = k1
            i+=1
            if v['sex'] == '男':
                m = m +1
            else:
                f = f+1
    print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')
filename = 'data/daoban_燕山石化.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:1933人,男性:1675人,女性:258人
256~332分人数:1263人,男性:906人,女性:357人
333~367分人数:228人,男性:140人,女性:88人
368~500分人数:54人,男性:30人,女性:24人
ok

倒班人员年龄段成绩

In [121]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]

with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1) and v['sex'] == '男':
            score = score+v['score']
            i+=1
            
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')
20~24岁平均成绩:2.31分,人数:184人
25~29岁平均成绩:2.41分,人数:96人
30~34岁平均成绩:2.33分,人数:99人
35~39岁平均成绩:2.36分,人数:113人
40~44岁平均成绩:2.35分,人数:527人
45~49岁平均成绩:2.32分,人数:616人
50~54岁平均成绩:2.35分,人数:739人
55~80岁平均成绩:2.32分,人数:377人
In [122]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]

with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1) and v['sex'] == '女':
            score = score+v['score']
            i+=1
            
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')
20~24岁平均成绩:2.57分,人数:69人
25~29岁平均成绩:2.67分,人数:32人
30~34岁平均成绩:2.73分,人数:18人
35~39岁平均成绩:2.62分,人数:43人
40~44岁平均成绩:2.63分,人数:228人
45~49岁平均成绩:2.7分,人数:295人
50~54岁平均成绩:2.71分,人数:42人
55~80岁平均成绩:0.0分,人数:0人

倒班人员测试等级

In [123]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]

for k1, v1 in dict2.items():
    di = v1[0]
    gao = v1[1]
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if int(v['score']*100) in range(di,gao+1):
            dict1[k]['level'] = k1
            i+=1
            if v['sex'] == '男':
                m = m +1
            else:
                f = f+1
    print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')
#filename = 'data/result_石家庄.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:1933人,男性:1675人,女性:258人
256~332分人数:1263人,男性:906人,女性:357人
333~367分人数:228人,男性:140人,女性:88人
368~500分人数:54人,男性:30人,女性:24人
ok

倒班人员平均成绩

In [125]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]
#filename = 'data/result_石家庄.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
i = 1
m = 0
f = 0
score = 0
t_score = 0
for k,v in dict1.items():
    if v['sex'] == '男':
        m = m +1
        score = score+v['score']
print(f'平均成绩:{round(score/m,4)}分,男性:{m}人')
t_score = t_score + score
score = 0
for k,v in dict1.items():
    if v['sex'] == '女':
        f = f +1
        score = score+v['score']
print(f'平均成绩:{round(score/f,4)}分,女性:{f}人')
t_score = t_score + score
print(f'平均成绩:{round(t_score/(m+f),4)}分,总体:{m+f}人')
平均成绩:2.3453分,男性:2751人
平均成绩:2.6869分,女性:727人
平均成绩:2.4167分,总体:3478人

计算倒班员工各项目成绩

In [126]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
for item in items:
    score = 0
    n = 0
    for k, v in dict1.items():
        if item in v.keys():
            n = n + 1
            score =score + int(v[item]['得分'])
    print(item,round(score/n,2),n)
体重 3.29 3478
肺活量 2.8 3438
握力 2.34 3449
坐位体前屈 2.74 2993
纵跳 1.7 3288
俯卧撑 1.94 2198
一分钟仰卧起坐 3.65 535
单脚站立 1.44 3390
选择反应时 2.65 3418
台阶指数 2.82 2179
In [ ]: