Files
jupyter/体测单位/体质检测数据处理.ipynb
T
2024-12-24 22:56:49 +08:00

104 KiB

体质检测数据处理

基础数据管理

体测数据按编号汇总

In [ ]:
import json
import time
import csv

filename = '../item.json'
item = {}
bh = set()
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
re_ta = {}
dict1 = {}
list1 = []
list2 = []
rq = '20240612'
filename = f'data/places_result_{rq}.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)
        bh.add(line[2])
        
#print(list1)
for result in list1:
    user = str(result[2])
        
    m_item = str(result[3])    
    re_ta.setdefault(user,{})    
    
    item_name = item[m_item]['name']
    re_ta[user].setdefault(item_name,{})  
    score = int(result[4])/item[m_item]['divisor']    
    re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
print(len(re_ta))


items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
title = ['编号','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
list1 = []
for k, v in re_ta.items():
    list2 = []
    list2.append(str(k))
    for item in items:
        if item in v.keys():
            list2.append(v[item]['成绩'])            
        elif item =='name':
            list2.append(v[item])
        else:
            list2.append('') 
    list1.append(list2)
filename = f'data/长炼医院体测情况表({rq}).xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
wb.save(filename)

体测项目标准导入

In [ ]:
import openpyxl
import json

tcbz ={
    'HeightWeigh':'身高体重',
    'StepExperiment':'台阶指数',
    'Lung':'肺活量',
    'Proneness':'坐位体前屈',
    'PowerfullGrip':'握力',
    'OneMinutePushUp':'一分钟仰卧起坐',
    'PushUp':'俯卧撑',
    'VerticalJump':'纵跳',
    'ReactionTime':'选择反应时',
    'FootStand':'单脚站立'
}
wb = openpyxl.load_workbook('data/体质检测标准.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
dict1 = {}
dict3 = {}
for k, v in tcbz.items():
    dict3[v] = k
sheet = wb.active
data1 =list(sheet.values)
del data1[0]
for item in data1:
    sex = item[0][6:]
    if sex =='男':
        age_sex = 'M'+item[0][:5]
    else:
        age_sex = 'F'+item[0][:5]
    dict1.setdefault(age_sex,{})
    if item[1] in dict3.keys():
        xm = dict3[item[1]]
    dict1[age_sex].setdefault(xm,[])
    dict1[age_sex][xm].append(item[3]/item[4])
dict2 = {}
#print(dict1)
for k, v in dict1.items():
    i1 = int(k[1:3])
    i2 = int(k[-2:])
    m_sex = k[:1]
    for i in range(i1,i2+1):
        dict2[m_sex+str(i)] = k
dict3 = {}
dict3['person'] = dict2
dict3['criteria'] = dict1
filename = 'data/体质检测标准.json'
with open(filename, 'w') as fl:
    json.dump(dict3, fl, ensure_ascii=False)
print('ok')

身高标准导入

In [ ]:
import openpyxl
import json

tcbz ={
    'HeightWeigh':'身高体重',
    'StepExperiment':'台阶指数',
    'Lung':'肺活量',
    'Proneness':'坐位体前屈',
    'PowerfullGrip':'握力',
    'OneMinutePushUp':'一分钟仰卧起坐',
    'PushUp':'俯卧撑',
    'VerticalJump':'纵跳',
    'ReactionTime':'选择反应时',
    'FootStand':'单脚站立'
}
wb = openpyxl.load_workbook('data/体质检测标准_BMI.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
dict1 = {}
dict3 = {}
for k, v in tcbz.items():
    dict3[v] = k
sheet = wb.active
data1 =list(sheet.values)
del data1[0]
for item in data1:
    min_age = int(item[1]/12)
    max_age = int((item[2]+1)/12) - 1
    sex = item[0]
    height = int(item[3])
    if sex ==0:
        age_sex = 'M'+str(min_age)+'~'+str(max_age)
    else:
        age_sex = 'F'+str(min_age)+'~'+str(max_age)
    dict1.setdefault(age_sex,{})
    
    dict1[age_sex].setdefault(height,[])
    dict1[age_sex][height].append(item[5]/1000)
dict2 = {}
#print(dict1)
for k, v in dict1.items():
    i1 = int(k[1:3])
    i2 = int(k[-2:])
    m_sex = k[:1]
    for i in range(i1,i2+1):
        dict2[m_sex+str(i)] = k
dict3 = {}
dict3['person'] = dict2
dict3['criteria'] = dict1
filename = 'data/体质检测标准_BMI.json'
with open(filename, 'w') as fl:
    json.dump(dict3, fl, ensure_ascii=False)
print('ok')

生成项目信息

In [ ]:
import json

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
    del item[k]['divisor']
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/体质检测项目信息.json'
with open(filename, 'w') as fl:
    json.dump(item, fl, ensure_ascii=False)
print('ok')

计算分数

In [ ]:
import json
import time
import csv

filename = 'data/体质检测标准.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
person = dict1['person']
criteria = dict1['criteria']
data = {'name':'张三','sex':'M','age':37,'item':'StepExperiment','result':46}
info = data['sex']+str(data['age'])
bz = person[info]
mx = criteria[bz][data['item']]
result = data['result']
score = -1
print(mx)
for bz1 in mx:
    if result < bz1:
        print(bz1)
        score = mx.index(bz1,0)
        break
    else:
        score = 5
#if score == -1:
 #   score = 5
print(score)

计算BMI分数

In [ ]:
import json
import time
import csv

filename = 'data/体质检测标准_BMI.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
person = dict1['person']
criteria = dict1['criteria']
data = {'name':'张三','sex':'M','age':37,'item':'HeightWeight','result':'177.7,97.0'}
info = data['sex']+str(data['age'])

bz = person[info]
print(bz)
result = data['result']
print(result)
height = int(float(result.split(',')[0]))
weight = float(result.split(',')[1])
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
print(score)

体测报告生成

转换报告格式

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

filename = 'data/places_result_20241104.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_天津石化2024.json'

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

生成完善得分

In [7]:
import json
import time

filename = '../item1.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_长炼医院人员2024(湖南青年).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_长炼医院人员2024(湖南青年).json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print('ok!')        
ok!

生成报告

In [8]:
import requests
import json
import openpyxl


headers = {
    "Content-Type": "application/json; charset=UTF-8"
    }
filename = 'data/result_长炼医院人员2024(湖南青年).json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list1 = []
file_path ='./长炼医院2024(湖南青年)/'
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)
78
In [ ]:
import requests
import json
import openpyxl


headers = {
    "Content-Type": "application/json; charset=UTF-8"
    }
filename = 'data/result_东营工程设计院2024_all.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:
      
    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 [19]:
import os,sys,shutil
import json
import glob
from pathlib import Path

fi_path = '/home/songyi/pdf-typescript/长炼医院2024'
new_path = 'file/长炼医院2024'
old = []
dict2 = {}

filename = 'data/result_长炼医院人员2024(汇总).json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fls = glob.glob(f'{fi_path}/*.pdf')
print(len(fls))
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(fn)
302
/home/songyi/pdf-typescript/长炼医院2024/0240049-陈晓辉.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001134-李和平.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526128-黎戬.pdf
/home/songyi/pdf-typescript/长炼医院2024/1984143-彭超.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526130-吴书鹏.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526186-周子瑄.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498058-柳聪.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001147-黄紫暄.pdf
/home/songyi/pdf-typescript/长炼医院2024/3125602-王凤.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526182-李基博.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983629-黄喜阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983174-叶可.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001041-陈峥嵘.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983626-彭定荣.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001122-赵进.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001149-张嘉欣.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498083-陆杨.pdf
/home/songyi/pdf-typescript/长炼医院2024/1989523-周松林.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983534-蔡维.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245716-杨熙哲.pdf
/home/songyi/pdf-typescript/长炼医院2024/3125625-宋霰.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002091-黄琪.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526143-廖成思.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002144-乔林臻.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002035-李南烽.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983832-李刚.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985478-刘志辉.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985639-陈强.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464129-谢倩.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985328-张建.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983771-李振宇.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526134-刘晋炀.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437585-贺常霏.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526199-徐敬.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983569-谢俊杰.pdf
/home/songyi/pdf-typescript/长炼医院2024/3413868-徐韩.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464103-彭旭涛.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464145-陈毅.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002037-饶军.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002116-胡敏.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001997-于明浩.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001145-戴玮兵.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001043-谢玉婷.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983740-万双华.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437581-李成伟.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001076-荣贇.pdf
/home/songyi/pdf-typescript/长炼医院2024/3358823-黎贤贞智.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001128-欧阳雅馨.pdf
/home/songyi/pdf-typescript/长炼医院2024/3413865-孟繁荣.pdf
/home/songyi/pdf-typescript/长炼医院2024/3535865-王明珠.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437567-朱雨晴.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001036-陈怀至.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001993-陈杰.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464097-孙颖.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464138-陈兰鑫.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001718-巴银花儿.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001115-吴梦瑶.pdf
/home/songyi/pdf-typescript/长炼医院2024/3170676-常硕.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001010-邱亮.pdf
/home/songyi/pdf-typescript/长炼医院2024/1989522-钟建东.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001133-彭宇博.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001096-温家祥.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983844-彭鑫.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985485-张瑞.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983866-倪博.pdf
/home/songyi/pdf-typescript/长炼医院2024/1993388-蒋莉.pdf
/home/songyi/pdf-typescript/长炼医院2024/3170724-张翔.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001020-贾俊.pdf
/home/songyi/pdf-typescript/长炼医院2024/1989709-卞伟.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001092-钟兴阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983770-黄刚.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001114-曾子坤.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985926-宁佐强.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437574-胡颖.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983836-陈文辉.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526185-方劲松.pdf
/home/songyi/pdf-typescript/长炼医院2024/3281543-谢崴.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983837-罗文武.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985666-李思.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526180-李今朝.pdf
/home/songyi/pdf-typescript/长炼医院2024/3281536-王智浩.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498029-汤思煜.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001860-李晨阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983800-郭丽梅.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002023-梁军.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437557-周念.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001053-刘志刚.pdf
/home/songyi/pdf-typescript/长炼医院2024/3497994-黄博轩.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002043-邓余斌.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983785-胡湘.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001144-黄英杰.pdf
/home/songyi/pdf-typescript/长炼医院2024/3535506-田子豪.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983775-胡向民.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985551-吴敏.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526176-万航.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001119-汤艳.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464081-刘权.pdf
/home/songyi/pdf-typescript/长炼医院2024/3358822-黎明.pdf
/home/songyi/pdf-typescript/长炼医院2024/1987904-李佳.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985913-毛智勇.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464205-胡雨丹.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001012-吴磊.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526187-夏堃喻.pdf
/home/songyi/pdf-typescript/长炼医院2024/3413857-仇乐.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464122-眭永波.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526177-周晏本.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983661-李静.pdf
/home/songyi/pdf-typescript/长炼医院2024/3160188-冯军.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498042-赵天宇.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983797-周辉灿.pdf
/home/songyi/pdf-typescript/长炼医院2024/3139284-全世夷.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498031-吴义.pdf
/home/songyi/pdf-typescript/长炼医院2024/3319096-毛润政.pdf
/home/songyi/pdf-typescript/长炼医院2024/3358812-邵昌睿.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001130-许竹新.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985287-陈宝林.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985440-吴阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001069-李鑫.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001032-吴志祚.pdf
/home/songyi/pdf-typescript/长炼医院2024/3319086-唐子涵.pdf
/home/songyi/pdf-typescript/长炼医院2024/3503272-董晨阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498000-陈旭.pdf
/home/songyi/pdf-typescript/长炼医院2024/3319099-肖博文.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498059-李慧慧.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001028-李蓝蓝.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001034-严雅珂.pdf
/home/songyi/pdf-typescript/长炼医院2024/1989710-谭珂屿.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002056-江汇涛.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245723-祝恒兴.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526154-陈柳.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001141-张俊凡.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983622-胡诗学.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526170-杨龙姣.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001093-李欣怡.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001078-张薇.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001058-杨红.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983830-刘军.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245709-姚佩.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002036-胡杰.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983180-张毅.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983143-吴巍.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983100-余益波.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245733-高帆.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985907-毛卫群.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526135-高斯阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002159-丁杰涛.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983171-王复兴.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983109-谈志亮.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526127-郭倩颖.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983652-向彭.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464069-于业晟.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526189-施陈心.pdf
/home/songyi/pdf-typescript/长炼医院2024/1986007-李明权.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464134-陈亮.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002100-彭晨雨.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001072-薛苗.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001121-张蕾.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002004-刘敏明.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001040-向安平.pdf
/home/songyi/pdf-typescript/长炼医院2024/3503276-熊东.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001023-彭一夫.pdf
/home/songyi/pdf-typescript/长炼医院2024/1992225-叶忠良.pdf
/home/songyi/pdf-typescript/长炼医院2024/3358818-鲁轩熠.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985356-黄超.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983119-经永华.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985324-谢清峰.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498065-刘雍涵.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983530-鲁世俊.pdf
/home/songyi/pdf-typescript/长炼医院2024/3281551-黄杰.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001070-黄辅君.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983108-张新芬.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526165-刘至清.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001073-翟秋霞.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985891-王定鲜.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526156-袁子灿.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001074-陈佳.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464077-冯晓阳.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983635-刘飞.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001031-高浩然.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498028-刘明泽.pdf
/home/songyi/pdf-typescript/长炼医院2024/3427189-段威.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002115-张丽军.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983159-李华锐.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983759-闵敢.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001132-李颖.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001079-袁丽雯.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983322-张健.pdf
/home/songyi/pdf-typescript/长炼医院2024/3125613-李青.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002114-唐景柳.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001029-邓韧泰.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498091-花慧.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985673-刘国东.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001146-方娜.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002122-周瑜.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245719-王宁.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001048-谢浩.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983777-谢林.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985611-丁敏.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002176-张嫚.pdf
/home/songyi/pdf-typescript/长炼医院2024/1986235-郑小芳.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001120-薛美佳.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001046-汤茜.pdf
/home/songyi/pdf-typescript/长炼医院2024/3139304-王卓见.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983107-沈高峰.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245735-黎金龙.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983846-廖念.pdf
/home/songyi/pdf-typescript/长炼医院2024/3319087-孟凡澄.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464084-吴煜文.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983106-罗鸣.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983823-甘龙.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001057-彭菲.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001052-陈祥宇.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001059-罗嘉俊.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002039-胡荣华.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464198-陈世博.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001098-刘夏俐.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001143-卢章凌.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001084-周博.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526193-李可.pdf
/home/songyi/pdf-typescript/长炼医院2024/3281545-贺凯.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526179-李博.pdf
/home/songyi/pdf-typescript/长炼医院2024/1989539-唐韵辅.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983557-涂彬.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001039-王鹏.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983831-黄波.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498023-戴汉林.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983779-高建华.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001065-涂俐.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983863-张勇.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985621-杨大为.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985698-李开俊.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245725-贺飞.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001044-李德文.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001870-龚斯壮.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245717-汪洋.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002166-张梦圆.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498020-倪炜强.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001050-马一文.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001027-向雅婷.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002126-蔡安逸.pdf
/home/songyi/pdf-typescript/长炼医院2024/3281530-吴征宇.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983683-李杜娟.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983630-龚付金.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498004-江载舟.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001045-李尉铭.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001049-曾洪.pdf
/home/songyi/pdf-typescript/长炼医院2024/3125609-张哲.pdf
/home/songyi/pdf-typescript/长炼医院2024/3319101-袁楚云.pdf
/home/songyi/pdf-typescript/长炼医院2024/3281544-谢思遥.pdf
/home/songyi/pdf-typescript/长炼医院2024/1989487-彭华明.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526147-黄天舒.pdf
/home/songyi/pdf-typescript/长炼医院2024/3394214-唐金滔.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001001-梅小龙.pdf
/home/songyi/pdf-typescript/长炼医院2024/1993242-何东海.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002067-黄建生.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498061-马璐.pdf
/home/songyi/pdf-typescript/长炼医院2024/3503275-邓野.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001033-邹雪平.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464164-刘雨薇.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498033-陈雅玲.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983595-侯代磊.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001095-江欢.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001087-阳涛.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001051-任藩韬.pdf
/home/songyi/pdf-typescript/长炼医院2024/1961098-武文娟.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001091-黄南.pdf
/home/songyi/pdf-typescript/长炼医院2024/3170725-赵雨龙.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983758-任珍琦.pdf
/home/songyi/pdf-typescript/长炼医院2024/3358815-陈海.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001042-杨宇凡.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983767-刘林波.pdf
/home/songyi/pdf-typescript/长炼医院2024/3245700-刘细.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983799-彭宇.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001038-彭健霖.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498055-陶汝.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464200-马婷.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983868-彭国强.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002151-李美玲.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983176-李关亮.pdf
/home/songyi/pdf-typescript/长炼医院2024/1993413-汤愉.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464165-向嘉伟.pdf
/home/songyi/pdf-typescript/长炼医院2024/1987427-谢小飞.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498044-张坚发.pdf
/home/songyi/pdf-typescript/长炼医院2024/3160187-邹尚辰.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001060-郭凌宇.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437569-李湘川.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498089-邹竞莹.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983965-文智.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498080-颜艳萍.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002063-杨杰.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001148-张兰心.pdf
/home/songyi/pdf-typescript/长炼医院2024/3526138-于润韬.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437554-刘毅.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985838-郭汨.pdf
/home/songyi/pdf-typescript/长炼医院2024/3498063-游胜利.pdf
/home/songyi/pdf-typescript/长炼医院2024/1985615-喻永强.pdf
/home/songyi/pdf-typescript/长炼医院2024/3464148-黎泓松.pdf
/home/songyi/pdf-typescript/长炼医院2024/1983262-杨淼君.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001085-刘海燕.pdf
/home/songyi/pdf-typescript/长炼医院2024/0001112-汤超.pdf
/home/songyi/pdf-typescript/长炼医院2024/0002124-唐睿.pdf
/home/songyi/pdf-typescript/长炼医院2024/3437578-黄晓平.pdf

生成体测报告打印明细表

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

fi_path = '/home/songyi/pdf-typescript/长炼医院2024'

filename = 'data/result_长炼医院人员2024(汇总).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/长炼医院2024年体测报告明细表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename) 
print('ok')
ok

检查报告错误人员

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

fi_path = '/home/songyi/pdf-typescript/北海炼化2024'

filename = 'data/result_北海炼化2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
print(len(dict1))
fls = glob.glob(f'{fi_path}/*.pdf')
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)

体质检测数据管理

数据导入Mycrm

导入系统人员信息

In [ ]:
import json
import time
import csv

list1 = []
filename = 'data/person_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)
dict1 = {}
for result in list1:
    code = str(result[4])
    if int(result[1]) == 0:
        sex = '男'
    else:
        sex = '女'
    
    m_item = str(result[3])    
    dict1.setdefault(code,{})    
    dict1[code]['name'] = result[0]
    dict1[code]['sex'] = sex
    dict1[code]['birth'] = result[2]
filename = 'data/天津石化人员清单.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False) 
print(len(dict1))    

导入测试项目item

In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

filename = '../item.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
data_list = []
for k, v in dict1.items():
    data_list.append((int(k),v['name'])) 
conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
sql = 'insert into shijiazhuang_item (id,name) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')

导入一级部门

In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
filename = 'data/result_石家庄.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()
for k, v in dict1.items():
    #if 'sub_unit' not in v.keys():
    #    print(k,v['name'])
    unit.add(v['unit'])
print(unit)    
i = 1
dict2 = {}
for item in unit:
    dict2[item] = i
    i+=1
data_list = []
for k,  v in dict2.items():
    data_list.append((v,k)) 
    
sql = 'insert into shijiazhuang_unit (id,name) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')

导入二级部门

In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
unit = set()
for k, v in dict1.items():
    #if 'sub_unit' not in v.keys():
    #    print(k,v['name'])
    unit.add(v['unit'])
print(unit)    
i = 1
dict2 = {}
for item in unit:
    dict2[item] = i
    i+=1
data_list = []
dict3 = {}
for k,  v in dict1.items():
    dict3.setdefault(v['unit'],set())
    dict3[v['unit']].add(v['sub_unit'])
i = 1    
for k, v in dict3.items():
    unit_id = dict2[k]
    for item in v:
        data_list.append((i,item,unit_id))
        i+=1
sql = 'insert into tianjin_sub_unit (id,name,unit_id) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')

生成部门JSON文件

In [ ]:
import json
import csv

dict1 = {}
filename = 'data/shijiazhuang_unit_20230517.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)
    list1 = []
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append({'id':int(line[0]),'name':line[1]})
dict1['unit'] = list1

filename = 'data/sub_unit_134.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)
    list1 = []
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append({'id':int(line[0]),'name':line[1],'unit_id':int(line[2])})
dict1['sub_unit'] = list1
print(dict1)

filename = 'data/天津石化部门.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False) 
print(len(dict1))    
In [ ]:
import json
import csv

dict1 = {}
filename = 'data/shijiazhuang_unit_20230517.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)
    list1 = []
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append({'id':int(line[0]),'name':line[1]})
        dict1[int(line[0])] = line[1]


filename = 'data/石家庄石化部门.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl, ensure_ascii=False) 
print(len(dict1))    

导入人员信息

In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
filename = 'data/天津石化人员清单.json'
with open(filename,'r') as fl:
    person = json.load(fl)
    
filename = 'data/石家庄石化部门.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

i = 1
dict2 = {}
for item in unit:
    dict2[item] = i
    i+=1
data_list = []
dict3 = {}
dict4 = {}
for k,  v in dict1.items():
    dict3.setdefault(v['unit'],set())
    dict3[v['unit']].add(v['sub_unit'])    
i = 1    
for k, v in dict3.items():
    unit_id = dict2[k]
    for item in v:
        data_list.append((i,item,unit_id))
        i+=1
for item in data_list:
    sub_id = item[0]
    dict4[sub_id] = {'name':item[1],'unit':item[2]}
dict5 = {}
for k, v in dict1.items():
    id_unit = dict2[v['unit']]
    sub_name = v['sub_unit']
    id_sub = 0
    for k1, v1 in dict4.items():
        if v1['name'] == sub_name and v1['unit'] == id_unit:
            id_sub = int(k1)
    if id_sub >0:
        dict5[k] = {'unit':id_unit,'sub_unit':id_sub}
    else:
        print(k,'not fund')
data_list = []
for k, v in dict5.items():
    id = int(k)
    name = person[k]['name']
    sex = person[k]['sex']
    birth = person[k]['birth']
    phone = ''
    note = ''
    unit = v['sub_unit']
    data_list.append((id,name,sex,birth,unit))
sql = 'insert into tianjin_person (id,name,sex,birth,unit_id) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')   
    
In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
    
filename = 'data/石家庄石化部门.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
dict3 = {}
for k,v in dict1.items():
    dict3[v] = int(k)
filename = 'data/result_石家庄.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
data_list = []
for k, v in dict2.items():
    id = int(k)
    name = dict2[k]['name']
    sex = dict2[k]['sex']
    birth = dict2[k]['birth']    
    unit = dict3[dict2[k]['unit']]
    data_list.append((id,name,sex,birth,unit))
sql = 'insert into shijiazhuang_person (id,name,sex,birth,unit_id) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')   

导入测试成绩及得分

二级部门导入

In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

filename = '../item.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
for k, v in dict1.items():
    dict2[v['name']] = int(k)

filename = 'data/天津石化部门.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
unit = {}
for item in dict1['unit']:
    unit[item['name']] = item['id']

sub_unit = {}
for item in dict1['sub_unit']:
    sub_unit.setdefault(item['unit_id'],[])
    sub_unit[item['unit_id']].append({'id':item['id'],'name':item['name']})
    
filename = 'data/天津石化人员名单.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
person = {}
for k, v in dict1.items():
    person[k] = {'unit':v['unit'],'sub_unit':v['sub_unit']}

    
conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
data_list = []
filename = 'data/result_天津.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k, v in dict1.items():
    for item in v.keys():
        if item in dict2.keys():
            item_id = dict2[item]
            if v[item]['得分'] == '\\N':
                score = None
            else:
                score = int(v[item]['得分'])
            unit_name = person[k]['unit']  
            sub_unit_name = person[k]['sub_unit']
            unit_id = unit[unit_name]
            for items in sub_unit[unit_id]:
                if items['name'] ==sub_unit_name:
                    sub_id = items['id'] 
            data_list.append((v[item]['成绩'],score,int(k),item_id,unit_id,sub_id))
         
sql = 'insert into tianjin_records (performance,score,avatar_id_id,item_id_id,unit_id_id,sub_unit_id_id) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')           
    

一级部门导入

In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

filename = '../item.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
for k, v in dict1.items():
    dict2[v['name']] = int(k)

filename = 'data/石家庄石化部门.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
dict3 = {}
for k,v in dict1.items():
    dict3[v] = int(k)
    

conn = psycopg2.connect(database="mycrm", user="postgres", password="songyi", host="localhost", port="5432")
cursor = conn.cursor()
data_list = []
filename = 'data/result_石家庄.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k, v in dict1.items():
    for item in v.keys():
        if item in dict2.keys():
            item_id = dict2[item]            
            if v[item]['得分'] == '':
                score = None
            else:
                score = int(v[item]['得分'])
            unit_name = v['unit']
            unit_id = dict3[unit_name]
            data_list.append((v[item]['成绩'],score,int(k),item_id,unit_id))
sql = 'insert into shijiazhuang_records (performance,score,avatar_id_id,item_id_id,unit_id_id) values %s'
ex.execute_values(cursor, sql, data_list, page_size=10000)
#conn.commit()
cursor.close()
conn.close()
print('ok!')
In [ ]:
import json
import psycopg2
from psycopg2 import extras as ex

filename = '../item.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
for k, v in dict1.items():
    dict2[v['name']] = int(k)

filename = 'data/天津石化部门.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
unit = {}
for item in dict1['unit']:
    unit[item['name']] = item['id']
print(unit)

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

清理报告数据

In [1]:
import json
import openpyxl


filename = 'data/result_长炼医院人员2024(汇总).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 ='./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_长炼医院人员2024(汇总).json'
with open(filename,'w') as fl:
    json.dump(dict2,fl , ensure_ascii=False) 
print(len(dict2))        
301

计算平均成绩

In [2]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]
filename = 'data/data_长炼医院人员2024(汇总).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)}人')
平均成绩:2.7497分,男性:223人
平均成绩:2.9819分,女性:78人
平均成绩:2.8099分,总体:301人

计算测试等级

In [3]:
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分人数:91人,男性:79人,女性:12人
256~332分人数:143人,男性:100人,女性:43人
333~367分人数:47人,男性:30人,女性:17人
368~500分人数:20人,男性:14人,女性:6人
301
ok

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

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

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

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

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

In [6]:
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岁平均成绩:2.69分,人数:92人,男性:62人
25~29岁平均成绩:2.72分,人数:62人,男性:36人
30~34岁平均成绩:2.75分,人数:32人,男性:27人
35~39岁平均成绩:3.04分,人数:37人,男性:33人
40~44岁平均成绩:2.94分,人数:21人,男性:17人
45~49岁平均成绩:2.89分,人数:33人,男性:25人
50~54岁平均成绩:3.1分,人数:17人,男性:16人
55~69岁平均成绩:2.85分,人数:7人,男性:7人

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

In [9]:
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岁平均成绩:2.59分,人数:62人
25~29岁平均成绩:2.52分,人数:36人
30~34岁平均成绩:2.65分,人数:27人
35~39岁平均成绩:3.02分,人数:33人
40~44岁平均成绩:2.95分,人数:17人
45~49岁平均成绩:2.81分,人数:25人
50~54岁平均成绩:3.13分,人数:16人
55~80岁平均成绩:2.85分,人数:7人

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

In [29]:
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岁平均成绩:2.88分,人数:30人
25~29岁平均成绩:2.98分,人数:26人
30~34岁平均成绩:3.28分,人数:5人
35~39岁平均成绩:3.24分,人数:4人
40~44岁平均成绩:2.88分,人数:4人
45~49岁平均成绩:3.14分,人数:8人
50~54岁平均成绩:2.67分,人数:1人
55~80岁平均成绩:0分,人数:0人

计算各项目成绩

In [8]:
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 3.65 279
肺活量 3.37 268
握力 1.77 284
坐位体前屈 2.78 249
纵跳 2.82 245
俯卧撑 2.31 145
一分钟仰卧起坐 2.98 56
单脚站立 2.59 205
选择反应时 2.83 270
台阶指数 2.88 213

按照部门计算平均成绩

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

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

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

计算部门等级

In [ ]:
import json

items = ['优秀','良好','合格','不合格'] 

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['不合格'])

计算部门成绩

In [ ]:
import json

items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数'] 
filename = 'data/data_北海炼化2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)

filename = 'data/北海炼化人员2024.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'])

问卷数据处理分析

常用参数及自定义函数

In [ ]:
import json

questions = [
  [1],
  [-1, 2],
  [-1, 2],
  [-1, 8],
  [-1, 3],
  [1],
  [-1],
  [-1, 7],
  [2],
  [2],
  [2],
  [2, 3],
  [2],
  [2],
  [3],
  [3],
  [3],
  [3],
  [3],
  [4],
  [4],
  [4],
  [4],
  [4],
  [4],
  [4],
  [4],
  [5],
  [5],
  [5],
  [5],
  [5],
  [5],
  [5],
  [5],
  [6],
  [6],
  [6],
  [6],
  [6],
  [6],
  [7],
  [7],
  [7],
  [7],
  [7],
  [7],
  [8],
  [8],
  [8],
  [8],
  [8],
  [8],
  [9],
  [9],
  [9],
  [9],
  [9],
  [9],
  [9]
]

kinds = [
  '平和',
  '气虚',
  '阳虚',
  '阴虚',
  '痰湿',
  '湿热',
  '血瘀',
  '气郁',
  '特禀'
]

def tcm_calc(arr):
  qa = [8, 8, 7, 8, 8, 6, 7, 7, 7]
  # 成绩数组
  s = [0] * 9
  # 遍历五进制
  for i in range(len(questions)):
    m = arr[i] - 1
    for v in questions[i]:
      if v < 0:
        s[-v - 1] += 4 - m
      else:
        s[v - 1] += m
  return [int((v / qa[i]) * 25) for i, v in enumerate(s)]

def tcm_kind(score):
  kind = 0
  near = False
  max_kind = 0
  max_score = 0
  for i in range(1, 9):
    if score[i] > max_score:
      max_kind = i
      max_score = score[i]
  if score[0] >= 60 and max_score < 40:
    if max_score >= 30:
      near = True
      kind = max_kind
  else:
    kind = max_kind
  return {
    "kind": kind,
    "near": near
  }
list2 = ['成就感','愉快心境','放松程度','压力应对','体力充沛','情感充沛度']
list3 = [[5,7],[7,4],[7,4],[7,4],[8,1],[6,1]] 
list4 = ['颈椎','胸椎','腰椎','骶尾椎']
list5 = [[0,10,10],[10,17,7],[17,24,6],[24,26,2]]

计算中医体质

In [ ]:
import openpyxl

filename = 'data/result_北海炼化2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
i = 1
list2 = []
for k, v in dict1.items():
    if 'tcm' in v.keys():
        list1 = []
        tcm =v['tcm']
        for item in tcm:
            list1.append(item)
        score = tcm_calc(list1)

        result = tcm_kind(score)
        kind = result['kind']
        near = result['near']
        #print(i,k,kinds[kind], near, score)
        #i+=1
        list3 = []
        list3.append(k)
        list3.append(kinds[kind])
        list3.append(near)
        for item in score:
            list3.append(item)
        list2.append(list3)
print(list2)
filename = 'data/北海炼化中医情况明细表2024.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

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

计算心理

In [50]:
list2 = ['成就感','愉快心境','放松程度','压力应对','体力充沛','情感充沛度']
list3 = [[5,7],[7,4],[7,4],[7,4],[8,1],[6,1]]
qb = [
      1, 1, 1, 1, 1,
      4, 3, 2, 3, 2, 4, 3,
      4, 3, 2, 4, 4, 2, 4,
      3, 2, 2, 4, 3, 3, 2,
      5, 5, 5, 5, 5, 5, 5, 5,
      6, 6, 6, 6, 6, 6
    ]
filename = 'data/result_北海炼化2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
list4 = []
for k, v in dict1.items():
    if 'psy' in v.keys():
        list5 = []
        psy=v['psy']
        for i in range(26,40):
            new_valve = psy[i]-1
            psy[i] = new_valve
        dict3 = {}
        
        i = 0
        for item in qb:
            dict3.setdefault(item,0)
            dict3[item] +=psy[i]
            i+=1
        #print(dict3)
        list5.append(k)
        for i in range(0,6):
            score = int(dict3[i+1]/list3[i][0]/list3[i][1]*100)
            list5.append(score)
        list4.append(list5)
filename = 'data/北海炼化心理情况明细表2024.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

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

计算脊柱

In [63]:
list4 = ['颈椎','胸椎','腰椎','骶尾椎']
list5 = [[0,10,10],[10,17,7],[17,24,6],[24,26,2]]
filename = 'data/result_北海炼化2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list6 = []
for k, v in dict1.items():
    if 'spine' in v.keys():
        list7 = []
        spine = v['spine']
        list7.append(k)
        for i in range(0,4):
            score = 0
            for ii in range(list5[i][0],list5[i][1]):
                score+= spine[ii]
            #print(k,list4[i],int(score/list5[i][2]*100)-100)
            list7.append(int(score/list5[i][2]*100)-100)
        list6.append(list7)
filename = 'data/北海炼化脊柱情况明细表2024.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

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

导出脊柱明细表

In [64]:
list4 = ['颈椎','胸椎','腰椎','骶尾椎']
list5 = [[0,10,10],[10,17,7],[17,24,6],[24,26,2]]
filename = 'data/result_北海炼化2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
list6 = []
for k, v in dict1.items():
    if 'spine' in v.keys():
        list7 = []
        spine = v['spine']
        list7.append(k)
        list7.append(v['name'])
        list7.append(v['sex'])
        list7.append(v['age'])
        for i in range(0,4):
            score = 0
            for ii in range(list5[i][0],list5[i][1]):
                score+= spine[ii]
            #print(k,list4[i],int(score/list5[i][2]*100)-100)
            list7.append(int(score/list5[i][2]*100)-100)
        for item in v['spine']:
            list7.append(item)
        list6.append(list7)
filename = 'data/北海炼化脊柱情况明细表2024.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

for row in list6:
    sheet.append(row)
    
wb.save(filename)
print('ok')     
ok
In [ ]: