Files
jupyter/体测单位/天津石化.ipynb
T
2023-10-25 07:45:59 +00:00

87 KiB

第一次体测

体测人员导入

In [ ]:
import openpyxl
import json


wb = openpyxl.load_workbook('data/天津石化员工检测花名册 (20221014).xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}

for n in range(2, sheet.max_row+1):
    code = int(sheet.cell(n, 6).value)
    person.setdefault(code, {})
    dict1 = {}
    dict1['name'] = sheet.cell(n, 3).value
    dict1['sex'] = sheet.cell(n, 4).value
    dict1['unit'] = sheet.cell(n, 1).value
    dict1['sub_unit'] = sheet.cell(n, 2).value
    if sheet.cell(n,5).value is not None:
        dict1['id_num'] = sheet.cell(n,5).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)

filename = 'data/天津石化人员231113_1.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)

for k, v in dict2.items():
    if k not in dict1.keys():
        dict1.setdefault(k,{})
        dict1[k]['name'] = dict2[k]['name']
        dict1[k]['sex'] = dict2[k]['sex']
        dict1[k]['unit'] = dict2[k]['name']
        dict1[k]['sub_unit'] = dict2[k]['sub_unit']
filename = 'data/天津石化人员名单.json'
with open(filename, 'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False)
print('ok')

获取人员测试成绩

In [ ]:
import json
import time
import csv

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
#SQL语句为:
#SELECT a.item_id,a.performance,a.score,a.date AS DATE1,a.avatar_id,b.unit,b.name,a.date_joined FROM places_result AS a,_tianjin AS b WHERE a.place_id=134 AND a.avatar_id=b.id

re_ta = {}
dict1 = {}
list1 = []
#print("\n运动项目信息:")
filename = '体测单位/data/20230428_134.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[4])
    m_item = str(result[0])    
    re_ta.setdefault(user,{})    
    re_ta[user]['name'] = str(result[6])
    re_ta[user]['unit'] = str(result[5])    
    item_name = item[m_item]['name']
    re_ta[user].setdefault(item_name,{})  
    score = int(result[1])/item[m_item]['divisor']    
    re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
    re_ta[user][item_name]['得分'] =result[2]
filename = 'data/result_天津.json'
with open(filename,'w') as fl:
    json.dump(re_ta, fl) 
print('ok')

导出测试成绩

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(8,'0'))
    list2.append(v['name'])    
    list2.append(dict2[k]['sex'])
    list2.append(dict2[k]['unit'])
    list2.append(dict2[k]['sub_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/天津石化体测情况表(截至20221122).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

导出测试成绩(带得分)

In [ ]:
import json
import openpyxl

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

del dict1['1730253']
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict2 = 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(dict2[k]['name'])    
    list2.append(dict2[k]['sex'])
    list2.append(dict2[k]['unit'])    
    list2.append(dict2[k]['sub_unit']) 
    for item in items:
        if item in dict1[k].keys():
            list2.append(dict1[k][item]['成绩'])
            list2.append(dict1[k][item]['得分'])   
        elif item =='name':
            list2.append(dict1[k][item])
        else:
            list2.append('') 
            list2.append('') 
    list1.append(list2)
filename = 'data/天津石化体测情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)
print('ok')    

按照日期进行报告分类

按照体测明细分类

In [ ]:
import json
import time
import csv
import os,sys,shutil
import glob

dict1 = {}
list1 = []
filename = 'data/134_2210.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)
for result in list1:
    user = str(result[4])
    dict1.setdefault(user,'2022-10-01')
    m_date = result[7]
    if m_date> dict1[user]:
        dict1[user] = m_date

m_path = 'file/134'

fls = glob.glob(f'file/new/*.pdf')
for fn in fls:
    #old = os.path.basename(fn).split('.')[0].rjust(8,'0') 
    old = os.path.basename(fn).split('.')[0]
    mrq = str(dict1[old]).split(' ')[0].replace('-', '', 2)
    if not os.path.exists(m_path + '/new/' + mrq):
        os.mkdir(m_path + '/new/' + mrq)
    n_name = f'{m_path}/new/{mrq}/{str(old).rjust(8,"0")}_{mrq}.pdf'
    if not os.path.exists(n_name):
        shutil.copyfile(fn,n_name)
print('ok!')

按照报告生成日期分类

In [ ]:
import json
import time
import csv
import os,sys,shutil
import glob

dict1 = {}
list1 = []

m_path = 'file/134'
mrq = '20221028'
if not os.path.exists(m_path + '/' + mrq):
    os.mkdir(m_path + '/' + mrq)
fls = glob.glob(f'file/new/*.pdf')
for fn in fls:
    #old = os.path.basename(fn).split('.')[0].rjust(8,'0') 
    old = os.path.basename(fn).split('.')[0]    
    n_name = f'{m_path}/{mrq}/{str(old).rjust(8,"0")}_{mrq}.pdf'
    if not os.path.exists(n_name):
        shutil.copyfile(fn,n_name)
print('ok!')

按照部门报告分组

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

fi_path = './file'
old = []
dict2 = {}


filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

for k, v in dict1.items():
    m_name = v['name']
    m_depart = v['unit']    
    dict2[int(k)] = [m_name,m_depart]



fls = glob.glob(f'./file/*.pdf')

for fn in fls:
    old.append(os.path.basename(fn).split('.')[0])
    #print(fn)


for n in old:    
    o_name = f'{fi_path}/{n}.pdf'
    if not os.path.exists(f'{fi_path}/new/{dict2[int(n)][1]}'):
        os.mkdir(f'{fi_path}/new/{dict2[int(n)][1]}') 
    n_name = f'{fi_path}/new/{dict2[int(n)][1]}/{str(n).rjust(5,"0")}-{dict2[int(n)][0]}.pdf'
    if not os.path.exists(n_name):
        shutil.copyfile(o_name,n_name)
        print(n_name)
In [ ]:
import os,sys,shutil
import json
import math
import glob
from pathlib import Path

fi_path = './file'
old = []
dict2 = {}


filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

for k, v in dict1.items():
    m_name = v['name']
    m_depart = v['unit']    
    dict2[int(k)] = [m_name,m_depart]



fls = glob.glob(f'./file/*.pdf')

for fn in fls:
    old.append(os.path.basename(fn).split('.')[0])

for n in old:    
    o_name = f'{fi_path}/{n}.pdf'
    new_path = Path('file/new',dict1[n]['unit'],dict1[n]['sub_unit'])
    new_path.mkdir(parents = True, exist_ok = True)
    n_name = Path(new_path,f'{str(n).rjust(7,"0")}-{dict2[int(n)][0]}.pdf')
    if not os.path.exists(n_name):
        shutil.copyfile(o_name,n_name)
        print(n_name)
    
print('ok')

统计报告人员信息表

In [ ]:
import json
import openpyxl
import os
import glob

filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
m_path ='./file'
fls = glob.glob(f'file/*.pdf')
list1 = []
for fn in fls:
    list2 = []
    code = os.path.basename(fn).split('.')[0]
    list2 = [code.rjust(7,"0"),dict1[code]['name'],dict1[code]['unit'],dict1[code]['sub_unit']]
    list1.append(list2)
title = ['编号','姓名','单位/部门','车间/科室',]    
filename = 'data/天津石化体测情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

PDF文件压缩

In [ ]:
import fitz
from pdf2image import convert_from_path, convert_from_bytes
import os,sys
import tempfile
from pdf2image.exceptions import (
    PDFInfoNotInstalledError,
    PDFPageCountError,
    PDFSyntaxError
)
import img2pdf  
import glob
import shutil

def covert2pic(old_fn):
    if os.path.exists('.pdf'):       # 临时文件,需为空
         shutil.rmtree('.pdf')
    os.mkdir('.pdf')
    with tempfile.TemporaryDirectory() as path:
        images_from_path = convert_from_path(old_fn, dpi=100,fmt='jpg', output_folder='.pdf')

def pic2pdf(new_fn):
    fl1=glob.glob('.pdf/*.jpg')
    fl1.sort()
    a4inpt = (img2pdf.mm_to_pt(210),img2pdf.mm_to_pt(297))
    layout_fun = img2pdf.get_layout_fun(a4inpt)
    with open(new_fn,"wb") as f:
        f.write(img2pdf.convert(fl1,layout_fun=layout_fun))
    print(f'{new_fn}转换成功!')
    


def pdfz(sor, obj, zoom):    
    covert2pic(zoom)
    pic2pdf(obj)
    
fi_path = 'file/134/20221122/'
fl = glob.glob(f'{fi_path}*.pdf')

for fn in fl:
    new_fn = fi_path+'new/'+os.path.basename(fn)
    covert2pic(fn)
    pic2pdf(new_fn)
    shutil.rmtree('.pdf')
print('ok!')

统计未测试人员名单

In [ ]:
import json
import openpyxl

title = ['编号','姓名','性别','单位/部门','车间/科室']
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
filename = 'data/result_天津.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)

list1 = []
for k, v in dict1.items():
    list2 = []
    if k not in dict2.keys():        
        list2 = [k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit'],dict1[k]['sub_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 os,sys,shutil
import glob
import time

fi_path = 'file/'
fls = glob.glob(f'{fi_path}*.pdf')
m_date = time.strptime('2022-10-28','%Y-%m-%d')
for fn in fls:
    c_time = time.gmtime(os.path.getctime(fn))
    if c_time > m_date:
        n_name = f'{fi_path}new/{os.path.basename(fn)}'
        if not os.path.exists(n_name):
            shutil.copyfile(fn,n_name)
        print(n_name)
In [ ]:
import json
import openpyxl

title = ['编号','姓名','性别','单位/部门','车间/科室']
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
filename = 'data/result_天津.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
print(len(dict2),len(dict1),)

心理测试情况统计

In [ ]:
import json
import openpyxl

title = ['编号','姓名','性别','单位/部门','车间/科室']
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
filename = 'data/134_xinli.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[4])
list3 = []
for k, v in dict1.items():
    list2 = []
    if k not in list1:        
        list2 = [k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit'],dict1[k]['sub_unit'],] 
        list3.append(list2)
filename = 'data/天津石化未参加心理测试人数统计表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list3:
    sheet.append(row)
    
wb.save(filename)
print('ok!')
In [ ]:
import json
import openpyxl

title = ['编号','姓名','性别','单位/部门','车间/科室']
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
filename = 'data/134_xinli.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        print(line[4])

体检报告统计分析

excel数据导入

In [ ]:
import openpyxl
import json
import re

wb = openpyxl.load_workbook('data/体检结果(模板)化工.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
dict1 = {}

for n in range(11, sheet.max_row+1):
    code = sheet.cell(n, 1).value
    name = sheet.cell(n, 8).value
    txt = sheet[f'DT{str(n)}'].value 
    txt = re.sub(r'\n', "", txt)
    txt = re.sub(r'\t', "", txt)
    txt = re.sub(r'二、尊敬的顾客您好,您本次体检的建议信息如下:', "", txt)
    ss = r'三、温馨提示: 鉴于医学技术发展的局限性,个体间可能存在的生物差异性以及您选择的检查项目的局限性,任何一次医学检查的手段和方法都不具备绝对的特异性和灵敏度,对于疾病筛检仍有其盲点,因此,我们建议您对本次检查的异常结果进行随诊复查和其他相关检查,以获得更可靠的医学证据建立准确地医学判断。'
    txt1 = re.sub(r'三、温馨提示.*', "", txt,re.S)
    dict1.setdefault(code, {})
    dict1[code]['name'] = name
    dict1[code]['xb'] = sheet.cell(n, 9).value
    #dict1[code]['birth'] = sheet.cell(n, 10).value
    dict1[code]['report'] = txt1
filename = 'data/体检结果.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False) 
print('ok')

体检结果分解

In [ ]:
import openpyxl
import json
import re

mo1 = r'[0-9]、'
mo2 = '【.*】'
filename = 'data/体检结果.json'
list3 = []
with open(filename,'r') as fl:
    dict1 = json.load(fl)
for k, v in dict1.items():
    
    ss = v['report']
    list1 = re.split(mo1,ss)
    if len(list1) ==1:
        continue
    else:
        list1.remove('')
        #print(list1)
        for item in list1:
            list2 = re.search( mo2, item)
            xm =list2.group()
            
            txt = item.replace(xm,'').strip()
            list3.append([k,v['name'],v['xb'],xm,txt])
filename = 'data/症状表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

for row in list3:
    sheet.append(row)
    
wb.save(filename)
print('ok!')

天津人员制卡

In [ ]:
import binascii
import openpyxl
gbs = 'C2EDC1A2D1C7'
bs = binascii.a2b_hex(gbs)
#print('bs', bs)
#print('decode-bs:', bs.decode('gb2312'))

s = '马立亚'
gbcode = s.encode('gb2312') # 先转成 bytes格式
#print('gbcode:', gbcode)
gbs = "".join([hex(ch)[2:] for ch in gbcode])  #
#print('gbs:', gbs)

wb = openpyxl.load_workbook('data/联合六车间体质测定人员名单.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}
list1 = []
for n in range(3, sheet.max_row+1):
    name = sheet.cell(n, 3).value
    code = sheet.cell(n, 2).value
    gbcode = code.encode('gbk')
    code = "".join([hex(ch)[2:] for ch in gbcode])
    gbcode = name.encode('gbk')
    name = "".join([hex(ch)[2:] for ch in gbcode])
    #for s in code:
    #    print(ord(s))
    
    list1.append([sheet.cell(n, 1).value,sheet.cell(n, 2).value,sheet.cell(n, 3).value,code.ljust(32,'0'),name.ljust(32,'0')])
    print(code.ljust(32,'0'),name.ljust(32,'0'))

filename = 'data/联合六车间体质测定人员制卡名单.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

for row in list1:
    sheet.append(row)
    
wb.save(filename)
print('ok!')

因素分析

清除修改测试项目

In [ ]:
import json
import openpyxl


filename = 'data/天津石化人员231113.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
code = '1734094'
items = ['身高','体重']
for item in items:
    del dict1[code][item]
with open(filename, 'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False)
print('ok')

人员情况导入

In [ ]:
import openpyxl
import json


wb = openpyxl.load_workbook('data/员工个人基础信息20230113.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}

for n in range(4, 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, 6).value
    dict1['sub_unit'] = sheet.cell(n, 7).value
    if sheet.cell(n,10).value is not None:
        dict1['daoban'] = '是'
    else:
        dict1['daoban'] = '否'
    dict1['age'] = sheet.cell(n, 13).value
    dict1['gl'] = sheet.cell(n, 14).value
    dict1['jhgl'] = sheet.cell(n, 15).value                         
    person[code] = dict1
filename = 'data/天津石化人员231113.json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print('ok')

人员体测得分导入合并

In [ ]:
import json
import openpyxl

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

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

filename = 'data/天津石化人员231113.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
for k, v in dict2.items():
    if k in dict1.keys():
        for item in dict1[k].keys():
            dict2[k][item] = dict1[k][item]
filename = 'data/天津石化人员231113.json'
with open(filename, 'w') as fl:
    json.dump(dict2, fl, ensure_ascii=False)
print('ok')
            

筛选体测人员,计算得分

In [ ]:
import json

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

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

filename = 'data/天津石化人员231113.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
dict3 = {}
for k, v in dict2.items():
    if k in dict1.keys():
        dict3[k] = dict2[k]
        i = 0
        score =0
        for item in dict2[k].keys():            
            if item in items:
                score = score + int(dict2[k][item]['得分'])
                i+=1
        dict3[k]['score'] = score
        dict3[k]['item_num'] = i
        dict3[k]['avg'] = round(score/i,2)
filename = 'data/天津石化线上测试结果.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
for k, v in dict2.items():
    if k in dict1.keys():
        dict3[k] = dict2[k]
        dict3[k]['zhongyi'] = dict1[k]['中医体质']
        
filename = 'data/天津石化人员231113_1.json'
with open(filename, 'w') as fl:
    json.dump(dict3, fl, ensure_ascii=False)
print('ok')

因素分析

倒班因素分析

In [ ]:
import json
import openpyxl

filename = 'data/天津石化人员231113_1.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()

for k, v in dict1.items():
    unit.add(dict1[k]['unit'])
#print(unit)
dict2 = {}
for k, v in dict1.items():
    dict2.setdefault(v['unit'],{})
    dict2[v['unit']].setdefault('是',{})
    dict2[v['unit']].setdefault('否',{})
    dict2[v['unit']]['是'].setdefault('num',0)
    dict2[v['unit']]['否'].setdefault('num',0)
    dict2[v['unit']]['是'].setdefault('score',0)
    dict2[v['unit']]['否'].setdefault('score',0)
    dict2[v['unit']]['是'].setdefault('zhongyi',0)
    dict2[v['unit']]['否'].setdefault('zhongyi',0) 
    dict2[v['unit']]['是'].setdefault('pianpo',0)
    dict2[v['unit']]['否'].setdefault('pianpo',0) 
    if 'avg' in v.keys():
        dict2[v['unit']][v['daoban']]['num'] = dict2[v['unit']][v['daoban']]['num'] + 1
        dict2[v['unit']][v['daoban']]['score'] = dict2[v['unit']][v['daoban']]['score'] + v['avg']
    if 'zhongyi' in v.keys() :
        dict2[v['unit']][v['daoban']]['zhongyi'] = dict2[v['unit']][v['daoban']]['zhongyi'] + 1
    if 'zhongyi' in v.keys()  and v['zhongyi']!='平和':
        dict2[v['unit']][v['daoban']]['pianpo'] = dict2[v['unit']][v['daoban']]['pianpo'] + 1
        
    
for k, v in dict2.items():    
    if v['是']['num'] > 0:
        dict2[k]['是']['avg'] = round(v['是']['score']/v['是']['num'],2)
    else:
        dict2[k]['是']['avg'] = 0
    if v['否']['num'] > 0:
        dict2[k]['否']['avg'] = round(v['否']['score']/v['否']['num'],2)
    else:
        dict2[k]['否']['avg'] = 0
list1 = []        
for k, v in dict2.items():
    list2 = []
    unit = k
    for k1, v1 in v.items():
        daoban = k1
        num = v1['num']
        avg = v1['avg']
        zhongyi = v1['zhongyi']
        pianpo = v1['pianpo']
        list2 = [k,daoban,num,avg,zhongyi,pianpo]
        list1.append(list2)
    
filename = 'data/天津倒班因素分析表.xlsx'    
wb = openpyxl.Workbook()
sheet = wb.active

for row in list1:
    sheet.append(row)
    
wb.save(filename)
print('ok!')

工龄因素分析

In [ ]:
import json
import openpyxl

filename = 'data/天津石化人员231113_1.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()

for k, v in dict1.items():
    unit.add(dict1[k]['unit'])
#print(unit)
dict2 = {}
for k, v in dict1.items():
    gld = int(int(v['gl'])/10)
    dict2.setdefault(gld,{})
    dict2[gld].setdefault(v['sex'],{})
    dict2[gld][v['sex']].setdefault('num',0)
    dict2[gld][v['sex']].setdefault('score',0)
    dict2[gld][v['sex']].setdefault('zhongyi',0)
    dict2[gld][v['sex']].setdefault('pianpo',0) 
    if 'avg' in v.keys():
        dict2[gld][v['sex']]['num'] = dict2[gld][v['sex']]['num'] + 1
        dict2[gld][v['sex']]['score'] = dict2[gld][v['sex']]['score'] + v['avg']
    if 'zhongyi' in v.keys() :
        dict2[gld][v['sex']]['zhongyi'] = dict2[gld][v['sex']]['zhongyi'] + 1
    if 'zhongyi' in v.keys()  and v['zhongyi']!='平和':
        dict2[gld][v['sex']]['pianpo'] = dict2[gld][v['sex']]['pianpo'] + 1
nl = {}
nl[0] = '工龄0-9年'
nl[1] = '工龄10-19年'
nl[2] = '工龄20-29年'
nl[3] = '工龄30-39年'
nl[4] = '工龄40-49年'
nl[5] = '工龄50年以上'
list1 = []        
for k, v in nl.items():
    list2 = []
    gld = v
    for k1, v1 in dict2[k].items():
        num = v1['num']
        score = v1['score']
        zhongyi = v1['zhongyi']
        pianpo = v1['pianpo']
        list2 = [k,daoban,num,avg,zhongyi,pianpo]
        list1.append(list2)
In [ ]:
import json
import openpyxl

filename = 'data/天津石化人员231113_1.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()

for k, v in dict1.items():
    unit.add(dict1[k]['unit'])
#print(unit)
dict2 = {}
for k, v in dict1.items():
    gld = int(int(v['gl'])/10)
    dict2.setdefault(gld,{})    
    dict2[gld].setdefault('num',0)
    dict2[gld].setdefault('score',0)
    dict2[gld].setdefault('zhongyi',0)
    dict2[gld].setdefault('pianpo',0) 
    if 'avg' in v.keys():
        dict2[gld]['num'] = dict2[gld]['num'] + 1
        dict2[gld]['score'] = dict2[gld]['score'] + v['avg']
    if 'zhongyi' in v.keys() :
        dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1
    if 'zhongyi' in v.keys()  and v['zhongyi']!='平和':
        dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1
print(dict2)
nl = {}
nl[0] = '工龄0-9年'
nl[1] = '工龄10-19年'
nl[2] = '工龄20-29年'
nl[3] = '工龄30-39年'
nl[4] = '工龄40-49年'
nl[5] = '工龄50年以上'
list1 = []        
for k, v in nl.items():
    list2 = []
    gld = v
    
    num = dict2[k]['num']
    score = dict2[k]['score']
    if num > 0:
        avg = round(score/num,2)
    else:
        avg = 0
    zhongyi = dict2[k]['zhongyi']
    pianpo = dict2[k]['pianpo']
    list2 = [gld,num,avg,zhongyi,pianpo]
    list1.append(list2)
filename = 'data/天津倒班因素分析表(工龄).xlsx'    
wb = openpyxl.Workbook()
sheet = wb.active

for row in list1:
    sheet.append(row)
    
wb.save(filename)
print('ok!')

年龄因素分析

In [ ]:
import json
import openpyxl

filename = 'data/天津石化人员231113_1.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()

for k, v in dict1.items():
    unit.add(dict1[k]['unit'])
#print(unit)
dict2 = {}
for k, v in dict1.items():
    gld = int(int(v['age'])/10)
    dict2.setdefault(gld,{})    
    dict2[gld].setdefault('num',0)
    dict2[gld].setdefault('score',0)
    dict2[gld].setdefault('zhongyi',0)
    dict2[gld].setdefault('pianpo',0) 
    if 'avg' in v.keys():
        dict2[gld]['num'] = dict2[gld]['num'] + 1
        dict2[gld]['score'] = dict2[gld]['score'] + v['avg']
    if 'zhongyi' in v.keys() :
        dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1
    if 'zhongyi' in v.keys()  and v['zhongyi']!='平和':
        dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1
nl = {}

nl[2] = '20-29岁'
nl[3] = '30-39岁'
nl[4] = '40-49岁'
nl[5] = '50-59岁'
nl[6] = '60岁及以上'
list1 = []        
for k, v in nl.items():
    list2 = []
    gld = v
    
    num = dict2[k]['num']
    score = dict2[k]['score']
    if num > 0:
        avg = round(score/num,2)
    else:
        avg = 0
    zhongyi = dict2[k]['zhongyi']
    pianpo = dict2[k]['pianpo']
    list2 = [gld,num,avg,zhongyi,pianpo]
    list1.append(list2)
filename = 'data/天津倒班因素分析表(年龄).xlsx'    
wb = openpyxl.Workbook()
sheet = wb.active

for row in list1:
    sheet.append(row)
    
wb.save(filename)
print('ok!')

倒班时间因素分析

In [ ]:
import json
import openpyxl

filename = 'data/天津石化人员231113_1.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()

for k, v in dict1.items():
    unit.add(dict1[k]['unit'])
#print(unit)
dict2 = {}
for k, v in dict1.items():
    if v['daoban'] == '是':
        
        gld = int(int(v['gl'])/10)
        dict2.setdefault(gld,{})    
        dict2[gld].setdefault('num',0)
        dict2[gld].setdefault('score',0)
        dict2[gld].setdefault('zhongyi',0)
        dict2[gld].setdefault('pianpo',0) 
        if 'avg' in v.keys():
            dict2[gld]['num'] = dict2[gld]['num'] + 1
            dict2[gld]['score'] = dict2[gld]['score'] + v['avg']
        if 'zhongyi' in v.keys() :
            dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1
        if 'zhongyi' in v.keys()  and v['zhongyi']!='平和':
            dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1
print(dict2)
nl = {}
nl[0] = '倒班工龄0-9年'
nl[1] = '倒班工龄10-19年'
nl[2] = '倒班工龄20-29年'
nl[3] = '倒班工龄30-39年'
nl[4] = '倒班工龄40-49年'
list1 = []        
for k, v in nl.items():
    list2 = []
    gld = v
    
    num = dict2[k]['num']
    score = dict2[k]['score']
    if num > 0:
        avg = round(score/num,2)
    else:
        avg = 0
    zhongyi = dict2[k]['zhongyi']
    pianpo = dict2[k]['pianpo']
    list2 = [gld,num,avg,zhongyi,pianpo]
    list1.append(list2)
filename = 'data/天津倒班因素分析表(倒班工龄).xlsx'    
wb = openpyxl.Workbook()
sheet = wb.active

for row in list1:
    sheet.append(row)
    
wb.save(filename)
print('ok!')

第二次体测

体测人员导入

In [ ]:
import openpyxl
import json


wb = openpyxl.load_workbook('data/天津石化员工检测花名册(20230915).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
    dict1['sub_unit'] = sheet.cell(n, 6).value
    dict1['birth'] = sheet.cell(n,4).value
    person[code] = dict1
filename = 'data/天津石化人员名单2023.json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print('ok')

生产读卡系统文件

In [ ]:
import json

filename = 'data/天津石化人员名单2023.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/data1.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/天津石化人员名单2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

filename = 'data/places_result_20231017.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_天津2023.json'

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

导出测试人员信息

In [ ]:
import json
import openpyxl

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

filename = 'data/result_天津2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/天津石化人员名单2023.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'])
    list2.append(dict2[k]['sub_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/天津石化体测情况(截至20231017).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)

统计各部门测试情况

In [ ]:
import json

filename = 'data/result_天津2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/天津石化人员名单2023.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)

dict3 = {}
for k, v in dict2.items():
    unit = v['unit']
    #sub_unit = v['sub_unit']
    dict3.setdefault(unit,{})
    dict3[unit].setdefault('人数',0)
    #dict3[unit].setdefault(sub_unit,0)
    #dict3[unit][sub_unit] = dict3[unit][sub_unit] + 1
    dict3[unit]['人数'] = dict3[unit]['人数'] + 1

title =['单位','体测人数']
list1 = []
for k,v in dict1.items():    
    unit = v['unit']
    #sub_unit = v['sub_unit']
    #dict3[unit][sub_unit] = dict3[unit][sub_unit] - 1
    dict3[unit]['人数'] = dict3[unit]['人数'] - 1
for k, v in dict3.items():
    list2 = [k,v['人数']]
    list1.append(list2)

filename = 'data/天津部门未测试情况(截至20231013).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_天津2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/天津石化人员名单2023.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
unit_name = '炼油部'
rq = '20231008'
list1 = []

i = 1
for k, v in dict2.items():
    unit = v['unit']
    if unit == unit_name and k not in dict1.keys():
        list2 = [i,k,v['name'],unit,v['sub_unit']]
        i+=1
        list1.append(list2)
filename = f'data/天津石化{unit_name}未测试人员名单(截至{rq}).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 openpyxl

filename = 'data/result_天津2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()
for k, v in dict1.items():
    unit.add(v['unit'])
rq = '20231013'
filename = 'data/天津石化人员名单2023.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
for unit_name in unit:
    list1 = []

    i = 1
    for k, v in dict2.items():
        unit = v['unit']
        if unit == unit_name and k not in dict1.keys():
            list2 = [i,k,v['name'],unit,v['sub_unit']]
            i+=1
            list1.append(list2)
    filename = f'data/天津石化{unit_name}未测试人员名单(截至{rq}).xlsx'
    title = ['序号','员工编号','姓名','部门','车间(科室)']
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.append(title)
    for row in list1:
        sheet.append(row)    
    wb.save(filename)
    wb.close
    print(f'{unit_name}未测试人员名单(截至{rq})生产成功!')

    

统计未体测人员明细表

In [ ]:
import json
import openpyxl

filename = 'data/result_天津2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/天津石化人员名单2023.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'],unit,v['sub_unit']]
        i+=1
        list1.append(list2)
filename = f'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 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/天津石化人员名单2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

filename = 'data/places_result_20231017.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('/','-'))
        #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_天津231017.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_天津231017.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_天津231017.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_天津231017.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
fiie_path ='./134/'
list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']
i=1
list2 = []
for  k, v in dict1.items():
    list1 = []
    mydata = {}
    
    id = str(k).rjust(8,"0")
    mydata['path'] = fiie_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'] = {}
    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'][item] = {'mark':mark,'score':v[item]['score']}
    if len(mydata['fits']) >2:
        
        list1.append(mydata)
        list2.append([k,v['name']])
        i+=1
        #x = requests.post('http://192.168.31.163:3003', data = json.dumps(list1), headers=headers)
        print(id,v['name'],x.text)
        #x.close()
print(i)

核对报告人数

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

fi_path = '/home/songyi/pdf-typescript-old2/134'

fls = glob.glob(f'{fi_path}/*.pdf')

filename = 'data/result_天津231017.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
for fn in fls:
    fi_name =Path(fn).stem.split('-')[0]
    code = int(fi_name)
    list1.append(str(code))
for k, v in dict1.items():
    if k not in list1:
        print(k,v['name'])

报告按部门分类

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

fi_path = '/home/songyi/pdf-typescript-old2/134'
new_path = 'file/134'
old = []
dict2 = {}

filename = 'data/天津石化人员名单2023.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)
        #print(n_name)

生成体测报告打印明细表

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

fi_path = '/home/songyi/pdf-typescript-old2/134'

filename = 'data/天津石化人员名单2023.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fls = glob.glob(f'{fi_path}/*.pdf')
list1 = []
for fn in fls:
    list2 = []
    fi_name =Path(fn).stem.split('-')[0]    
    code = int(fi_name)
    unit = dict1[str(code)]['unit']
    list2 = [fi_name,Path(fn).stem.split('-')[1],unit]
    
    list1.append(list2)
print(list1)
filename = 'data/天津石化体测报告打印明细表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename) 
print('ok')

体测数据分析

清理报告数据

In [46]:
import json
import openpyxl


filename = 'data/result_天津231017.json'
with open(filename,'r') 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 ='./134/'
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_天津231017.json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print('ok!')        
ok!

计算测试等级

In [47]:
import json

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

filename = 'data/data_天津231017.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))
0~255分人数:2524人,男性:2056人,女性:468人
256~332分人数:2214人,男性:1400人,女性:814人
333~367分人数:495人,男性:274人,女性:221人
368~500分人数:150人,男性:58人,女性:92人
5383

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

In [48]:
nld = [[20,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 = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1):
            score = score+v['score']
            i+=1
            if v['sex'] == '男':
                m = m +1
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人,男性:{m}人')
20~24岁平均成绩:2.47分,人数:1044人,男性:706人
25~29岁平均成绩:2.57分,人数:540人,男性:372人
30~34岁平均成绩:2.59分,人数:240人,男性:165人
35~39岁平均成绩:2.63分,人数:475人,男性:328人
40~44岁平均成绩:2.68分,人数:411人,男性:245人
45~49岁平均成绩:2.67分,人数:883人,男性:466人
50~54岁平均成绩:2.57分,人数:1213人,男性:929人
55~69岁平均成绩:2.48分,人数:577人,男性:577人

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

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 = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1) and v['sex'] == '男':
            score = score+v['score']
            i+=1
            
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')
20~24岁平均成绩:2.38分,人数:706人
25~29岁平均成绩:2.5分,人数:372人
30~34岁平均成绩:2.46分,人数:165人
35~39岁平均成绩:2.49分,人数:328人
40~44岁平均成绩:2.56分,人数:245人
45~49岁平均成绩:2.47分,人数:466人
50~54岁平均成绩:2.47分,人数:929人
55~80岁平均成绩:2.48分,人数:577人

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

In [50]:
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 = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1) and v['sex'] == '女':
            score = score+v['score']
            i+=1
            
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')
20~24岁平均成绩:2.65分,人数:338人
25~29岁平均成绩:2.72分,人数:168人
30~34岁平均成绩:2.84分,人数:75人
35~39岁平均成绩:2.93分,人数:147人
40~44岁平均成绩:2.83分,人数:166人
45~49岁平均成绩:2.89分,人数:417人
50~54岁平均成绩:2.88分,人数:284人
55~80岁平均成绩:0.0分,人数:0人

计算平均成绩

In [51]:
import json

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

计算测试等级

In [52]:
import json


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

for k1, v1 in dict2.items():
    di = v1[0]
    gao = v1[1]
    i = 0    
    m = 0
    f = 0
    for k,v in dict1.items():
        if int(v['score']*100) in range(di,gao+1):
            dict1[k]['level'] = k1
            i+=1
            if v['sex'] == '男':
                m = m +1
            else:
                f = f+1
    print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')
#filename = 'data/result_石家庄.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:2524人,男性:2056人,女性:468人
256~332分人数:2214人,男性:1400人,女性:814人
333~367分人数:495人,男性:274人,女性:221人
368~500分人数:150人,男性:58人,女性:92人
ok
Warning:
Output truncated. This notebook contains too many cells to display efficiently.