Files
jupyter/体测单位/镇海.ipynb
T
2024-09-30 17:53:41 +08:00

54 KiB

体质测试

体测人员导入

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

生成读卡系统文件

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

导出测试人员信息

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

生成完善得分

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

生成报告

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

统计报告人员信息

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

报告按照工作制分类

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

计算平均成绩

In [137]:
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.2405分,男性:313人
平均成绩:3.4483分,女性:92人
平均成绩:3.2877分,总体:405人

计算测试等级

In [138]:
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分人数:27人,男性:24人,女性:3人
256~332分人数:155人,男性:131人,女性:24人
333~367分人数:146人,男性:104人,女性:42人
368~500分人数:77人,男性:54人,女性:23人
405
ok

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

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

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

In [140]:
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 {'合格': 8, '良好': 3, '优秀': 3}
25-29 {'良好': 24, '合格': 33, '优秀': 6, '不合格': 6}
30-34 {'合格': 21, '优秀': 5, '良好': 15, '不合格': 7}
35-39 {'良好': 19, '合格': 28, '不合格': 4, '优秀': 13}
40-44 {'良好': 12, '合格': 8, '优秀': 7}
45-49 {'合格': 10, '优秀': 4, '良好': 7, '不合格': 1}
50-54 {'良好': 16, '不合格': 4, '优秀': 9, '合格': 11}
55-80 {'优秀': 7, '合格': 12, '良好': 8, '不合格': 2}

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

In [141]:
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.24分,人数:18人,男性:14人
25~29岁平均成绩:3.18分,人数:92人,男性:69人
30~34岁平均成绩:3.19分,人数:73人,男性:48人
35~39岁平均成绩:3.33分,人数:79人,男性:64人
40~44岁平均成绩:3.43分,人数:34人,男性:27人
45~49岁平均成绩:3.45分,人数:34人,男性:22人
50~54岁平均成绩:3.38分,人数:45人,男性:40人
55~69岁平均成绩:3.3分,人数:30人,男性:29人

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

In [142]:
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.21分,人数:14人
25~29岁平均成绩:3.13分,人数:69人
30~34岁平均成绩:3.1分,人数:48人
35~39岁平均成绩:3.3分,人数:64人
40~44岁平均成绩:3.44分,人数:27人
45~49岁平均成绩:3.28分,人数:22人
50~54岁平均成绩:3.34分,人数:40人
55~80岁平均成绩:3.28分,人数:29人

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

In [143]:
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.37分,人数:4人
25~29岁平均成绩:3.31分,人数:23人
30~34岁平均成绩:3.36分,人数:25人
35~39岁平均成绩:3.48分,人数:15人
40~44岁平均成绩:3.4分,人数:7人
45~49岁平均成绩:3.77分,人数:12人
50~54岁平均成绩:3.71分,人数:5人
55~80岁平均成绩:4.0分,人数:1人

计算各项目成绩

In [144]:
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.07 404
肺活量 3.59 405
握力 3.13 403
坐位体前屈 2.98 400
纵跳 3.48 394
俯卧撑 3.8 308
一分钟仰卧起坐 4.58 78
单脚站立 2.78 397
选择反应时 3.02 388
台阶指数 2.6 381

按照部门计算平均成绩

In [145]:
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.28 24
炼油二部 3.21 8
事务中心 3.19 32
公司机关 3.31 83
储运一部 3.29 26
仪表和计量中心 3.31 22
项目管理部 3.36 17
港储部 3.0 7
电气中心 3.18 5
公用工程二部 3.26 13
炼油五部 3.56 16
消防支队 3.14 6
新材料研究院 3.21 11
合成材料部 3.47 9
氢能制造部 3.19 4
油库中心 3.3 17
炼油三部 3.46 8
质管中心 3.2 11
烯烃一部 3.41 21
化学制品部 3.51 5
炼油六部 3.17 6
炼油一部 3.24 10
宣传部 3.11 1
财务部 3.0 1
生产部 3.04 3
发展部 2.78 4
项目部 2.7 2
炼油四部 3.25 4
烯烃二部 3.13 6
炼油七部 2.89 1
储运二部 3.44 2
In [ ]: