Files
jupyter/体测单位/镇海.ipynb
T
2024-11-06 15:41:52 +08:00

73 KiB

体质测试

体测人员导入

In [39]:
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)
    person[code] = dict1
filename = 'data/镇海(合并).json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print('ok')
ok

生成读卡系统文件

In [ ]:
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')

获取人员测试成绩

In [40]:
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 [ ]:
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('')
    list2.append(dict2[k]['gwxl'])
    list2.append(dict2[k]['gzz'])
    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_镇海.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 [ ]:
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) 

转换报告格式

In [41]:
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_镇海(合并).json'

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

生成完善得分

In [42]:
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_镇海(合并).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_镇海(合并).json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print('ok!')        
ok!

生成体测成绩明细表

In [ ]:
import json
import openpyxl

items = ['lung','grip','flexion','jump','pushup','situp','balance','reaction','step']
bmi = ['height','weight']
title = ['编号','姓名','性别','单位/部门','身高','体重','bmi','肺活量','','握力','','坐位体前屈','','纵跳','','俯卧撑','','一分钟仰卧起坐','','单脚站立','','选择反应时','','台阶指数']

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

list1 = []
for k, v in dict1.items():    #print(k,dict2[str(k)]['name'])
    list2 = []
    list2.append(str(k).rjust(5,'0'))
    list2.append(dict1[k]['name'])    
    list2.append(dict1[k]['sex'])
    list2.append(dict1[k]['unit'])
    i = 0
    if 'bmi' in dict1[k].keys():
        list2.append(dict1[k]['height']['成绩'])
        list2.append(dict1[k]['weight']['成绩'])
        list2.append(dict1[k]['bmi']['score'])
        i+=1
    else:
        list2.append('') 
        list2.append('') 
        list2.append('') 
           
        
    for item in items:
        if item in dict1[k].keys():
            list2.append(dict1[k][item]['成绩'])
            list2.append(dict1[k][item]['score']) 
            i+=1
        elif item =='name':
            list2.append(dict1[k][item])
        else:
            list2.append('') 
            list2.append('') 
    if i>2:
        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')       

生成报告

In [ ]:
import requests
import json
import openpyxl


headers = {
    "Content-Type": "application/json; charset=UTF-8"
    }
filename = 'data/result_镇海(合并).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)

统计报告人员信息

In [ ]:
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)

补充报告人员信息

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


filename = 'data/镇海体测人员.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
wb = openpyxl.load_workbook('data/镇海炼化参加测试人员名单(分析用).xlsx')
sheet = wb.active
for n in range(2, sheet.max_row+1):
    if sheet.cell(n, 12).value is not None:
        code = int(sheet.cell(n, 1).value)
        if sheet.cell(n, 12).value is not None:
            dict1[str(code)]['gwlb'] = sheet.cell(n, 12).value
        dict1[str(code)]['gwxl'] = sheet.cell(n, 9).value
        dict1[str(code)]['gzz'] = sheet.cell(n, 11).value

with open(filename, 'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False)        
print('ok!')        

核验报告人员信息

In [ ]:
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))

生成查询信息

In [ ]:
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') 

根据工号生成查询信息

In [ ]:
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 [ ]:
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 [ ]:
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')

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

清理报告数据

In [43]:
import json
import openpyxl


filename = 'data/result_镇海(合并).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 [ ]:
import json
import openpyxl


filename = 'data/result_镇海2.json'
with open(filename,'r',encoding = 'utf-8') as fl:
    dict1 = json.load(fl)
filename = 'data/镇海体测人员.json'
with open(filename,'r',encoding = 'utf-8') as fl:
    dict3 = 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():
    if dict3[k]['gzz'] == '倒班':
        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(len(dict2))        

计算平均成绩

In [44]:
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 [45]:
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 [46]:
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 [47]:
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 [48]:
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 [49]:
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 [50]:
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 [51]:
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 [52]:
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
    if n>0:
        print(item,round(score/n,2),n)
    else:
        print(item,0,n)
采购中心 3.39 20
炼油三部 3.2 30
烯烃一部 3.21 156
炼油五部 3.25 73
公用工程二部 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.26 113
化学制品部 3.31 43
项目管理部 3.38 19
新材料研究院 3.31 15
炼油四部 3.08 27
油库中心 3.22 25
炼油六部 3.08 34
储运二部 3.12 13
炼油七部 3.25 26

按照部门计算平均成绩(男性)

In [54]:
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'] and v['sex'] == '男':
            score = score + v['score']
            n = n +1 
    if n>0:
        print(item,round(score/n,2),n)
    else:
        print(item,0,n)
采购中心 3.22 12
炼油三部 3.09 23
烯烃一部 3.2 128
炼油五部 3.3 56
公用工程二部 3.24 57
合成材料部 3.05 44
质管中心 3.19 43
储运一部 3.06 67
氢能制造部 3.15 46
电气中心 3.13 36
公用工程一部 3.1 63
仪表和计量中心 3.23 64
港储部 3.1 28
炼油二部 3.24 49
消防支队 3.4 21
烯烃二部 2.98 35
炼油一部 3.26 36
事务中心 3.06 28
公司机关 3.22 87
化学制品部 3.26 34
项目管理部 3.31 9
新材料研究院 3.29 12
炼油四部 3.06 23
油库中心 3.19 18
炼油六部 3.08 27
储运二部 3.06 11
炼油七部 3.21 17

计算部门成绩

In [58]:
import json

items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数'] 
filename = 'data/data_镇海(合并).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():
    unit = v['unit']
    dict3.setdefault(unit,{})
    for item in items:
        dict3[unit].setdefault(item,{})
        dict3[unit][item].setdefault('score',0)
        dict3[unit][item].setdefault('count',0)
    for k1,v1 in v['fits'].items():
        if k1 in items:
            dict3[unit][k1]['score']+=v1['score']
            dict3[unit][k1]['count']+=1

for k, v in dict3.items():
    print(k)
    for k1, v1 in v.items():
        print(k1,v1['score'],v1['count'])
采购中心
BMI 86 20
肺活量 72 20
握力 59 20
坐位体前屈 63 20
纵跳 71 20
俯卧撑 47 12
一分钟仰卧起坐 35 8
单脚站立 47 20
选择反应时 68 20
台阶指数 62 20
炼油三部
BMI 116 30
肺活量 99 30
握力 91 30
坐位体前屈 84 30
纵跳 92 29
俯卧撑 92 22
一分钟仰卧起坐 29 7
单脚站立 78 30
选择反应时 85 29
台阶指数 86 29
烯烃一部
BMI 584 156
肺活量 547 156
握力 517 156
坐位体前屈 461 153
纵跳 541 147
俯卧撑 454 123
一分钟仰卧起坐 84 21
单脚站立 401 156
选择反应时 430 151
台阶指数 363 145
炼油五部
BMI 297 73
肺活量 261 73
握力 240 73
坐位体前屈 208 72
纵跳 265 72
俯卧撑 206 56
一分钟仰卧起坐 48 12
单脚站立 184 73
选择反应时 210 69
台阶指数 173 69
公用工程二部
BMI 296 72
肺活量 238 72
握力 243 72
坐位体前屈 212 71
纵跳 226 69
俯卧撑 204 55
一分钟仰卧起坐 54 12
单脚站立 189 72
选择反应时 206 68
台阶指数 191 68
合成材料部
BMI 217 55
肺活量 186 55
握力 178 53
坐位体前屈 149 55
纵跳 180 55
俯卧撑 164 44
一分钟仰卧起坐 43 10
单脚站立 137 55
选择反应时 146 54
台阶指数 129 55
质管中心
BMI 248 56
肺活量 197 56
握力 177 56
坐位体前屈 149 55
纵跳 172 52
俯卧撑 141 39
一分钟仰卧起坐 49 11
单脚站立 136 56
选择反应时 151 50
台阶指数 141 51
储运一部
BMI 324 82
肺活量 278 82
握力 263 82
坐位体前屈 219 80
纵跳 239 78
俯卧撑 218 64
一分钟仰卧起坐 45 10
单脚站立 201 81
选择反应时 227 81
台阶指数 209 78
氢能制造部
BMI 231 59
肺活量 214 59
握力 190 59
坐位体前屈 180 59
纵跳 188 58
俯卧撑 160 45
一分钟仰卧起坐 52 13
单脚站立 160 59
选择反应时 145 55
台阶指数 147 58
电气中心
BMI 185 45
肺活量 158 44
握力 137 45
坐位体前屈 132 44
纵跳 130 42
俯卧撑 129 36
一分钟仰卧起坐 24 6
单脚站立 109 45
选择反应时 136 44
台阶指数 92 42
公用工程一部
BMI 307 81
肺活量 286 81
握力 268 81
坐位体前屈 226 80
纵跳 262 77
俯卧撑 223 63
一分钟仰卧起坐 64 16
单脚站立 194 81
选择反应时 211 77
台阶指数 173 73
仪表和计量中心
BMI 323 81
肺活量 302 81
握力 273 81
坐位体前屈 242 79
纵跳 302 81
俯卧撑 231 63
一分钟仰卧起坐 51 12
单脚站立 221 81
选择反应时 230 79
台阶指数 186 80
港储部
BMI 142 36
肺活量 133 36
握力 119 36
坐位体前屈 100 36
纵跳 114 36
俯卧撑 98 28
一分钟仰卧起坐 15 4
单脚站立 86 36
选择反应时 94 35
台阶指数 88 33
炼油二部
BMI 250 60
肺活量 211 60
握力 196 60
坐位体前屈 169 60
纵跳 203 57
俯卧撑 184 49
一分钟仰卧起坐 47 11
单脚站立 163 60
选择反应时 183 59
台阶指数 145 58
消防支队
BMI 99 25
肺活量 81 25
握力 87 25
坐位体前屈 76 25
纵跳 92 25
俯卧撑 87 20
一分钟仰卧起坐 14 3
单脚站立 70 25
选择反应时 69 25
台阶指数 72 25
烯烃二部
BMI 154 42
肺活量 149 42
握力 133 42
坐位体前屈 114 42
纵跳 132 41
俯卧撑 115 34
一分钟仰卧起坐 32 7
单脚站立 102 42
选择反应时 105 41
台阶指数 95 41
炼油一部
BMI 176 42
肺活量 140 42
握力 141 42
坐位体前屈 127 41
纵跳 129 37
俯卧撑 133 36
一分钟仰卧起坐 16 5
单脚站立 117 42
选择反应时 116 41
台阶指数 103 36
事务中心
BMI 149 35
肺活量 115 35
握力 103 35
坐位体前屈 106 34
纵跳 105 34
俯卧撑 83 27
一分钟仰卧起坐 30 6
单脚站立 99 34
选择反应时 100 33
台阶指数 72 30
公司机关
BMI 439 113
肺活量 405 113
握力 361 113
坐位体前屈 335 112
纵跳 394 111
俯卧撑 332 86
一分钟仰卧起坐 88 19
单脚站立 297 107
选择反应时 322 107
台阶指数 232 104
化学制品部
BMI 171 43
肺活量 158 43
握力 149 43
坐位体前屈 132 42
纵跳 150 42
俯卧撑 131 34
一分钟仰卧起坐 32 7
单脚站立 104 43
选择反应时 116 42
台阶指数 114 41
项目管理部
BMI 85 19
肺活量 68 19
握力 57 19
坐位体前屈 60 19
纵跳 57 18
俯卧撑 29 7
一分钟仰卧起坐 44 10
单脚站立 57 18
选择反应时 59 19
台阶指数 46 18
新材料研究院
BMI 61 15
肺活量 56 15
握力 47 15
坐位体前屈 48 15
纵跳 56 15
俯卧撑 39 12
一分钟仰卧起坐 14 3
单脚站立 45 15
选择反应时 43 15
台阶指数 37 15
炼油四部
BMI 103 27
肺活量 83 27
握力 86 27
坐位体前屈 75 27
纵跳 77 27
俯卧撑 83 23
一分钟仰卧起坐 12 3
单脚站立 78 27
选择反应时 84 27
台阶指数 61 26
油库中心
BMI 113 25
肺活量 90 25
握力 67 23
坐位体前屈 73 25
纵跳 66 23
俯卧撑 54 15
一分钟仰卧起坐 32 7
单脚站立 70 25
选择反应时 71 24
台阶指数 50 21
炼油六部
BMI 139 33
肺活量 118 34
握力 109 34
坐位体前屈 93 33
纵跳 109 32
俯卧撑 93 27
一分钟仰卧起坐 29 7
单脚站立 78 34
选择反应时 86 33
台阶指数 67 32
储运二部
BMI 45 13
肺活量 49 13
握力 45 13
坐位体前屈 39 12
纵跳 41 13
俯卧撑 37 11
一分钟仰卧起坐 8 2
单脚站立 33 13
选择反应时 35 13
台阶指数 29 13
炼油七部
BMI 112 26
肺活量 102 26
握力 92 26
坐位体前屈 75 25
纵跳 82 25
俯卧撑 59 16
一分钟仰卧起坐 33 8
单脚站立 68 26
选择反应时 71 26
台阶指数 52 25

计算部门等级

In [57]:
import json

items = ['优秀','良好','合格','不合格'] 
filename = 'data/data_镇海(合并).json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)


dict3 = {}
for k, v in dict1.items():
    unit = v['unit']
    dict3.setdefault(unit,{})
    for item in items:
        dict3[unit].setdefault(item,0)

for k, v in dict1.items():
    unit = v['unit']
    #dict3.setdefault(unit,{})
    #for item in items:
    #dict3[unit].setdefault(v['level'],0)
    dict3[unit][v['level']] +=1
for k, v in dict3.items():
    print(k,v['优秀'],v['良好'],v['合格'],v['不合格'])
采购中心 5 7 8 0
炼油三部 3 9 18 0
烯烃一部 31 36 74 15
炼油五部 15 22 26 10
公用工程二部 10 29 28 5
合成材料部 3 20 25 7
质管中心 8 24 17 7
储运一部 8 23 38 13
氢能制造部 10 16 27 6
电气中心 1 20 21 3
公用工程一部 12 22 34 13
仪表和计量中心 18 25 32 6
港储部 6 5 24 1
炼油二部 7 25 26 2
消防支队 6 10 7 2
烯烃二部 7 10 15 10
炼油一部 7 12 22 1
事务中心 6 10 14 5
公司机关 22 38 42 11
化学制品部 9 13 19 2
项目管理部 3 8 8 0
新材料研究院 2 8 5 0
炼油四部 3 6 14 4
油库中心 4 11 7 3
炼油六部 3 9 17 5
储运二部 1 4 7 1
炼油七部 5 9 10 2
In [ ]: