Files
jupyter/体测单位/镇海.ipynb
T
2024-09-29 10:22:23 +08:00

56 KiB

体质测试

体测人员导入

In [81]:
import openpyxl
import json
from datetime import date

wb = openpyxl.load_workbook('data/镇海体质监测报名.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}

for n in range(2, sheet.max_row+1):
    code = int(sheet.cell(n, 1).value)
    person.setdefault(code, {})
    dict1 = {}
    dict1['name'] = sheet.cell(n, 2).value
    dict1['sex'] = sheet.cell(n, 3).value
    dict1['unit'] = sheet.cell(n, 7).value
    if sheet.cell(n, 5).value is not None:
        dict1['gh'] = sheet.cell(n, 5).value
    dict1['birth'] = str(sheet.cell(n, 6).value).replace('/','-').split(' ')[0] 
    if sheet.cell(n, 4).value is not None:
        dict1['phone'] = str(sheet.cell(n,4).value)
    person[code] = dict1
filename = 'data/镇海.json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print('ok')
ok

生成读卡系统文件

In [4]:
import json

filename = 'data/镇海.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
for k, v in dict1.items():
    dict2 = {}
    #if dict1['sex'] =='男':
    #    sex = 1
    
    dict2 = {'id':k,'name':v['name'],'gender':v['sex'],'birth':v['birth'],'unit':v['unit']}
    list1.append(dict2)
json_data = json.dumps(list1,ensure_ascii=False, indent=4)  

# 将 json 数据写入文件
with open("data/data_镇海.json", "w",encoding = 'utf-8') as file:
    file.write(json_data)   
print('ok')
ok

获取人员测试成绩

In [58]:
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_20240922.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]['unit'] = dict1[user]['unit']
        #re_ta[user]['sub_unit'] = dict1[user]['sub_unit']
        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))
1365
1365

导出测试人员信息

In [57]:
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)
    
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]['unit'])    
    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/镇海体测情况(20240922手工).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

统计未体测人员明细表

In [41]:
import json
import openpyxl

filename = 'data/result_镇海.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/镇海1.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)

list1 = []

i = 1
for k, v in dict2.items():    
    if k not in dict1.keys():
        list2 = [i,k,v['name'],v['unit']]
        i+=1
        list1.append(list2)
#print(list1)
filename = f'data/镇海未测试人员名单(截至20240922).xlsx'
title = ['序号','员工编号','姓名','部门']
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)    
wb.save(filename)

清理重复人员

In [39]:
import json

filename = 'data/镇海.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
print(len(dict1))
dict2 = {}
for k, v in dict1.items():
    if 'phone' in v.keys():
        dict2.setdefault(k,{})
        dict2[k]['name'] = v['name']
        dict2[k]['phone'] = v['phone']

list1 = []
for k, v in dict2.items():
    i = 0
    for k1, v1 in dict1.items():
        if v['name']== v1['name'] and v['phone'] == v1['phone'] and k1 != k:
            list1.append(max(int(k),int(k1)))
for item in set(list1):
    del dict1[str(item)]
print(len(dict1))
filename = 'data/镇海1.json'

with open(filename,'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False) 
1462
1406

转换报告格式

In [59]:
import json
import datetime
import csv
from datetime import date

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
item['1']['en'] = 'lung'
item['2']['en'] = 'grip'
item['3']['en'] = 'flexion'
item['4']['en'] = 'jump'
item['5']['en'] = 'pushup'
item['6']['en'] = 'balance'
item['7']['en'] = 'reaction'
item['8']['en'] = 'step'
item['9']['en'] = 'situp'
item['10']['en'] = 'height'
item['11']['en'] = 'weight'


re_ta = {}
dict1 = {}
list1 = []
filename = 'data/镇海.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

filename = 'data/places_result_20240922.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)
#f_item = ['lung','grip','flexion','jump','balance','reaction','step','situp']
#m_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step']
for result in list1:
    user = str(result[2])
    rq = date.fromisoformat(result[6].replace('/','-'))
    if user in dict1.keys():
        l_xm = []
        m_item = str(result[3])    
        re_ta.setdefault(user,{})    
        re_ta[user]['name'] = dict1[user]['name']
        re_ta[user]['sex'] = dict1[user]['sex']
        if dict1[user]['sex'] == '男':
            l_xm = ['weight','height','lung','grip','flexion','jump','pushup','balance','reaction','step']
        else:
            l_xm = ['weight','height','lung','grip','flexion','jump','balance','reaction','step','situp']
        re_ta[user]['unit'] = dict1[user]['unit']
        #birth = date.fromisoformat(dict1[user]['birth'].replace('/','-'))
        birth = date.fromisoformat(dict1[user]['birth'])
        #nian = int(birth[0].strip())
        #yue = int(birth[1].strip())
        #ri = int(birth[2].strip())
        #print(k,nian,yue,ri)
        item_name = item[m_item]['en']        
        if item_name in l_xm:            
            days = (rq-birth).days        
            re_ta[user]['age'] = int(days/365)
            re_ta[user]['month'] = int(days/365*12)
            re_ta[user]['rq'] = result[6]


            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_镇海1.json'

with open(filename,'w') as fl:
    json.dump(re_ta, fl, ensure_ascii=False) 
print(len(re_ta))
1365
1365

生成完善得分

In [60]:
import json
import time

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict3 = json.load(fl) 
for k,v in dict3.items():
    item[k] = v
item['1']['en'] = 'lung'
item['2']['en'] = 'grip'
item['3']['en'] = 'flexion'
item['4']['en'] = 'jump'
item['5']['en'] = 'pushup'
item['6']['en'] = 'balance'
item['7']['en'] = 'reaction'
item['8']['en'] = 'step'
item['9']['en'] = 'situp'
item['10']['en'] = 'height'
item['11']['en'] = 'weight'

filename = 'data/体质检测标准 (1).json'    
with open(filename,'r') as fl:
    dict1 = json.load(fl)



def cal_score(data1):
    #data = {'name':'张三','sex':'M','age':37,'item':'StepExperiment','result':46}     
    person = dict1['person']
    criteria = dict1['criteria']
    if data1['age'] >59:
        data1['age'] = 59
    if data1['age'] <20:
        data1['age'] = 20
    info = data1['sex']+str(data1['age'])
    bz = person[info]
    mx = criteria[bz][data1['item']]
    result = data1['result']    
    if data1['item'] == 'reaction':
        for bz1 in mx:
            if result > bz1:
                #print(bz1)
                score = mx.index(bz1,0)
                break
            else:
                score = 5
    else:
        for bz1 in mx:
            if result < bz1:
                #print(bz1)
                score = mx.index(bz1,0)
                break
            else:
                score = 5
    return(score)
filename = 'data/体质检测标准_BMI.json'
with open(filename,'r') as fl:
    dict4 = json.load(fl) 
    
def cal_bmi(data1):
   # data = {'name':'张三','sex':'M','age':37,'item':'HeightWeight','result':'177.7,97.0'}
    person = dict4['person']
    criteria = dict4['criteria']
    if data1['age'] > 59:
        data1['age'] = 59
    if data1['age'] <20:
        data1['age'] = 20
    info = data1['sex']+str(data1['age'])
    bz = person[info]
    #print(bz)
    result = data1['result']
    #print(data1['code'],result)
    height = int(float(result.split(',')[0]))
    weight = float(result.split(',')[1])
    if str(height) not in criteria[bz]:
        score = 1
    else:   
        mx = criteria[bz][str(height)]
        if weight < mx[0]:
            score = 1
        elif weight < mx[1]:
            score = 3
        elif weight < mx[2]:
            score = 5    
        elif weight <= mx[3]:
            score = 3  
        elif weight > mx[3]:
            score = 1
    return score
    
    

#list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','height','weight']
list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp']
filename = 'data/result_镇海1.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl) 
for k, v in dict2.items():
    #print(k)
    if v['sex'] == '男':
        sex = 'M'
    else:
        sex = 'F'            
    if 'height' in v.keys() and 'weight' in v.keys():
        bmi_data = v['height']['成绩'].split()[0]+','+ v['weight']['成绩'].split()[0]
        data1 = {'code':k,'sex':sex,'age':v['age'],'item':'HeightWeight','result':bmi_data}
        dict2[k]['bmi'] = {}
        dict2[k]['bmi']['成绩'] = bmi_data
        dict2[k]['bmi']['score'] = cal_bmi(data1)
    for item_en in list_item:
        if item_en in v.keys():            
            data1 = {'code':k,'sex':sex,'age':v['age'],'item':item_en,'result':float(v[item_en]['成绩'].split()[0])}
            dict2[k][item_en]['score'] = cal_score(data1)
            #print(k,v[item_en]['成绩'],cal_score(data1))

filename = f'data/result_镇海2.json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print('ok!')        
ok!

生成报告

In [61]:
import requests
import json
import openpyxl


headers = {
    "Content-Type": "application/json; charset=UTF-8"
    }
filename = 'data/result_镇海2.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
file_path ='./镇海石化/'
list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']
i=0
list2 = []
for  k, v in dict1.items():
    list1 = []
    mydata = {}
    
    id = str(k).rjust(4,"0")
    mydata['path'] = file_path+id+'-'+ v['name']+'.pdf'
    mydata['title'] = '中国石化镇海炼化公司'
    mydata['subtitle'] = v['unit']
    mydata['id'] = id
    mydata['name'] = v['name']
    if v['sex'] == '男':
        mydata['gender'] = 'male'
    else:
        mydata['gender'] = 'female'
    
    mydata['month'] = v['month']
    mydata['fits'] = {}
    survey_list = ['tcm','psy','spine']
    for item in survey_list:
        if item in  v.keys():
            mydata.setdefault('surveys',{})
            mydata['surveys'][item] = v[item]
            
    
    #mydata['fits'] = {}
    for item in list_item:
        if item in v.keys():
            mydata.setdefault('fits',{})
            if item in ['lung','pushup','step','situp']:
                mark = v[item]['成绩'].split()[0].split('.')[0]
            else:
                mark = v[item]['成绩'].split()[0]
            mydata['fits'][item] = {'mark':mark,'score':v[item]['score']}
    #if len(mydata['fits']) >2 or len(mydata['surveys']) >0:
    if len(mydata['fits']) >2 :    
        list1.append(mydata)
        list2.append([k,v['name']])
        i+=1
        x = requests.post('http://localhost:3003', data = json.dumps(list1), headers=headers)
        #print(id,v['name'],x.text)
        #print(mydata)
        #x.close()
print(i)
1365

统计报告人员信息

In [88]:
import json
import glob
from pathlib import Path
import openpyxl

filename = 'data/镇海.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fi_path = '/home/songyi/python/mycrm/flask/pdf/files/345321'
fls = glob.glob(f'{fi_path}/*.pdf')
dict2 = {}
for fn in fls:
    
    fi_name =Path(fn).stem.split('-')[0]
    #fi_name =Path(fn).stem
    code = int(fi_name)
    dict2[str(code)] = dict1[str(code)]
filename = 'data/镇海体测人员.json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print(len(dict2)) 
list1 = []
for k, v in dict2.items():  
    list2 = []
    if 'gh' in v.keys():
        gh = v['gh']
    else:
        gh = ''
    if 'phone' in v.keys():
        phone = v['phone']
    else:
        phone = ''
    list2 = [k,v['name'],v['sex'],v['birth'],v['unit'],gh,phone]
    list1.append(list2)
#print(list1)
filename = 'data/镇海参加测试人员名单.xlsx'
title = ['序号','员工编号','姓名','部门']
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)    
wb.save(filename)
1365

核验报告人员信息

In [94]:
import openpyxl
import json
from datetime import date

wb = openpyxl.load_workbook('data/镇海炼化参加测试人员名单.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}

for n in range(2, sheet.max_row+1):
    code = int(sheet.cell(n, 1).value)
    person.setdefault(code, {})
    dict1 = {}
    dict1['name'] = sheet.cell(n, 2).value
    dict1['sex'] = sheet.cell(n, 3).value
    dict1['unit'] = sheet.cell(n, 5).value
    if sheet.cell(n, 6).value is not None:
        dict1['gh'] = sheet.cell(n, 6).value
    dict1['birth'] = str(sheet.cell(n, 4).value).replace('/','-').split(' ')[0] 
    if sheet.cell(n, 7).value is not None:
        dict1['phone'] = str(sheet.cell(n,7).value)
    if len(str(sheet.cell(n,7).value))<11:
        print(code,sheet.cell(n, 2).value)
    person[code] = dict1
filename = 'data/镇海炼化参加测试人员.json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print(len(person))
71 方法泉
125 徐荟杰
704 陈鼎
1365

生成查询信息

In [98]:
import openpyxl
import os,sys,shutil
import json
import math
import glob
import random
from pathlib import Path
import pymongo

myclient = pymongo.MongoClient('mongodb://localhost:27017/')
mydb = myclient["baogao"]
mycol = mydb["pdf"]

place_id = 345321

fi_path = '/home/songyi/python/mycrm/flask/pdf/files'
fls = glob.glob(f'{fi_path}/{str(place_id)}/*.pdf')

filename = 'data/镇海炼化参加测试人员.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
for fn in fls:
    dict2 = {}
    fi_name =Path(fn).stem.split('-')[0]
    #fi_name =Path(fn).stem
    code = int(fi_name)
    dxm = dict1[str(code)]['gh']
    dict2 = {'place_id':place_id,'code':dxm,'fn':Path(fn).name}
    list2.append(dict2)
    i +=1
x = mycol.insert_many(list2)
print('ok') 
ok

根据工号生成查询信息

In [96]:
import json
filename = 'data/镇海炼化参加测试人员.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
list2 = []
set1 = set()
for k, v in dict1.items():
    if 'gh' in v.keys():
        gh = v['gh']
        if gh not in list1:
            list1.append(v['gh'])
        else:
            list2.append(gh)
print(list2)
[]

体测报告按部门分类

In [99]:
import os,sys,shutil
import json
import glob
from pathlib import Path

fi_path = '/home/songyi/pdf-typescript/镇海石化'
new_path = 'file/镇海石化'
old = []
dict2 = {}

filename = 'data/镇海炼化参加测试人员.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fls = glob.glob(f'{fi_path}/*.pdf')
for fn in fls:
    fi_name =Path(fn).stem.split('-')[0]
    code = int(fi_name)
    unit_path = Path(new_path,dict1[str(code)]['unit'])
    unit_path.mkdir(parents = True, exist_ok = True)
    n_name = Path(unit_path,Path(fn).stem+'.pdf')
    if not os.path.exists(n_name):
        shutil.copyfile(fn,n_name)

生成体测报告打印明细表

In [100]:
import os,sys,shutil
import json
import glob
from pathlib import Path
import openpyxl

fi_path = '/home/songyi/pdf-typescript/镇海石化'

filename = 'data/镇海炼化参加测试人员.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fls = glob.glob(f'{fi_path}/*.pdf')
list1 = []
title = ['测试编号','姓名','性别','部门']
for fn in fls:
    list2 = []
    fi_name =Path(fn).stem.split('-')[0]    
    code = int(fi_name)
    sex = dict1[str(code)]['sex']
    unit = dict1[str(code)]['unit']
    list2 = [fi_name,Path(fn).stem.split('-')[1],sex,unit]
    
    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) 
print('ok')
ok

体质测试综合报告数据分析

清理报告数据

In [101]:
import json
import openpyxl


filename = 'data/result_镇海2.json'
with open(filename,'r',encoding = 'utf-8') as fl:
    dict1 = json.load(fl)

    
#items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
items = {}
items['lung'] = '肺活量'
items['grip'] ='握力'
items['flexion'] ='坐位体前屈'
items['jump'] ='纵跳'
items['pushup'] ='俯卧撑'
items['balance'] ='单脚站立'
items['reaction'] ='选择反应时'
items['step'] ='台阶指数'
items['situp'] ='一分钟仰卧起坐'
items['bmi'] ='BMI'


list1 = []
#fiie_path ='./138/'
list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']
i=1
list2 = []
dict2 = {}
for  k, v in dict1.items():
    list1 = []
    mydata = {}
    
    id = str(k).rjust(8,"0")
    mydata['unit'] = v['unit']
    mydata['name'] = v['name']
    mydata['sex'] = v['sex']
    mydata['month'] = v['month']
    age = int(v['month']/12)
    if age <20:
        mydata['age'] = 20
    else:
        mydata['age'] = int(v['month']/12)
    
    mydata['fits'] = {}
    score = 0
    for item in list_item:
        if item in v.keys():
            if item in ['lung','pushup','step','situp']:
                mark = v[item]['成绩'].split()[0].split('.')[0]
            else:
                mark = v[item]['成绩'].split()[0]
            mydata['fits'][items[item]] = {'mark':mark,'score':v[item]['score']}
            score = score + v[item]['score']
    mydata['score'] = round(score/len(mydata['fits']),2)
    if len(mydata['fits']) >2:
        dict2[str(k)] = mydata
filename = f'data/data_镇海.json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print('ok!')        
ok!

计算平均成绩

In [63]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]
filename = 'data/data_镇海.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/(f+m),4)}分,总体:{(f+m)}人')
平均成绩:3.1739分,男性:1074人
平均成绩:3.3303分,女性:291人
平均成绩:3.2072分,总体:1365人

计算测试等级

In [64]:
import json

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

#filename = 'data/data_长炼医院.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}人')
print(len(dict1))
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:134人,男性:118人,女性:16人
256~332分人数:585人,男性:472人,女性:113人
333~367分人数:431人,男性:333人,女性:98人
368~500分人数:215人,男性:151人,女性:64人
1365
ok

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

In [65]:
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 {'良好': 29, '合格': 60, '优秀': 22, '不合格': 8}
25-29 {'良好': 24, '合格': 32, '不合格': 3, '优秀': 14}
30-34 {'不合格': 3, '优秀': 6, '合格': 11, '良好': 15}
35-39 {'合格': 5, '不合格': 2, '良好': 13, '优秀': 6}
40-44 {'良好': 6, '合格': 1, '优秀': 1, '不合格': 0}
45-49 {'良好': 8, '合格': 4, '优秀': 12, '不合格': 0}
50-54 {'良好': 3, '不合格': 0, '合格': 0, '优秀': 2}
55-80 {'优秀': 1, '合格': 0, '良好': 0, '不合格': 0}

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

In [66]:
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 {'良好': 97, '合格': 177, '优秀': 38, '不合格': 53}
25-29 {'良好': 57, '合格': 97, '不合格': 21, '优秀': 21}
30-34 {'不合格': 15, '优秀': 13, '合格': 43, '良好': 29}
35-39 {'合格': 57, '不合格': 11, '良好': 45, '优秀': 22}
40-44 {'良好': 27, '合格': 18, '优秀': 12, '不合格': 2}
45-49 {'良好': 26, '合格': 28, '优秀': 17, '不合格': 1}
50-54 {'良好': 33, '不合格': 10, '合格': 29, '优秀': 16}
55-80 {'优秀': 12, '合格': 23, '良好': 19, '不合格': 5}

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

In [67]:
nld = [[16,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,69]]

with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 0
    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
    if i ==0:
        print(f'{di}~{gao}岁平均成绩:0分,人数:0人,男性:{m}人')
    else:
        print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i}人,男性:{m}人')
16~24岁平均成绩:3.11分,人数:484人,男性:365人
25~29岁平均成绩:3.16分,人数:269人,男性:196人
30~34岁平均成绩:3.15分,人数:135人,男性:100人
35~39岁平均成绩:3.3分,人数:161人,男性:135人
40~44岁平均成绩:3.39分,人数:67人,男性:59人
45~49岁平均成绩:3.48分,人数:96人,男性:72人
50~54岁平均成绩:3.29分,人数:93人,男性:88人
55~69岁平均成绩:3.27分,人数:60人,男性:59人

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

In [68]:
import json

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 = 0
    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
    if i ==0:
        print(f'{di}~{gao}岁平均成绩:0分,人数:{i}人') 
    else:
        print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i}人')
20~24岁平均成绩:3.08分,人数:365人
25~29岁平均成绩:3.1分,人数:196人
30~34岁平均成绩:3.1分,人数:100人
35~39岁平均成绩:3.27分,人数:135人
40~44岁平均成绩:3.39分,人数:59人
45~49岁平均成绩:3.4分,人数:72人
50~54岁平均成绩:3.27分,人数:88人
55~80岁平均成绩:3.25分,人数:59人

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

In [69]:
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 = 0
    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
    if i ==0:
        print(f'{di}~{gao}岁平均成绩:0分,人数:{i}人') 
    else:
        print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i}人')
20~24岁平均成绩:3.21分,人数:119人
25~29岁平均成绩:3.32分,人数:73人
30~34岁平均成绩:3.32分,人数:35人
35~39岁平均成绩:3.44分,人数:26人
40~44岁平均成绩:3.4分,人数:8人
45~49岁平均成绩:3.73分,人数:24人
50~54岁平均成绩:3.71分,人数:5人
55~80岁平均成绩:4.0分,人数:1人

计算各项目成绩

In [70]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
for item in items:
    score = 0
    n = 0
    for k, v in dict1.items():        
        if item in v['fits'].keys():
            n = n + 1
            score =score + int(v['fits'][item]['score'])
    print(item,round(score/n,2),n)
BMI 4.0 1364
肺活量 3.52 1364
握力 3.25 1361
坐位体前屈 2.93 1346
纵跳 3.4 1316
俯卧撑 3.65 1047
一分钟仰卧起坐 4.27 240
单脚站立 2.6 1356
选择反应时 2.88 1317
台阶指数 2.5 1286

按照部门计算平均成绩

In [71]:
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)
采购中心 3.39 20
炼油三部 3.2 30
烯烃一部 3.21 156
炼油五部 3.26 72
公用工程二部 3.26 72
合成材料部 3.12 55
质管中心 3.24 56
储运一部 3.1 82
氢能制造部 3.18 59
电气中心 3.14 45
公用工程一部 3.12 81
仪表和计量中心 3.29 81
港储部 3.13 36
炼油二部 3.28 60
消防支队 3.35 25
烯烃二部 3.03 42
炼油一部 3.29 42
事务中心 3.17 35
公司机关 3.3 102
化学制品部 3.31 43
项目管理部 3.38 19
新材料研究院 3.31 15
炼油四部 3.08 27
油库中心 3.22 25
炼油六部 3.08 34
储运二部 3.12 13
宣传部 3.11 1
财务部 3.0 1
生产部 3.04 3
发展部 2.78 4
项目部 2.7 2
炼油七部 3.25 26
公用工程五部 2.8 1
In [ ]: