Files
jupyter/体测单位/体质检测数据处理.ipynb
T
2024-12-05 10:54:06 +08:00

86 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 [ ]:
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_天津石化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!')        

生成报告

In [17]:
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)
738
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 [ ]:
import os,sys,shutil
import json
import glob
from pathlib import Path

fi_path = '/home/songyi/pdf-typescript/中石化石油工程设计有限公司1'
new_path = 'file/中石化石油工程设计有限公司1'
old = []
dict2 = {}

filename = 'data/东营工程设计院2024.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fls = glob.glob(f'{fi_path}/*.pdf')
for fn in fls:
    fi_name =Path(fn).stem.split('-')[0]
    code = int(fi_name)
    unit_path = Path(new_path,dict1[str(code)]['unit'])
    unit_path.mkdir(parents = True, exist_ok = True)
    n_name = Path(unit_path,Path(fn).stem+'.pdf')
    if not os.path.exists(n_name):
        shutil.copyfile(fn,n_name)

生成体测报告打印明细表

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

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

filename = 'data/中安联合.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl)
fls = glob.glob(f'{fi_path}/*.pdf')
list1 = []
title = ['测试编号','姓名','性别','部门']
for fn in fls:
    list2 = []
    fi_name =Path(fn).stem.split('-')[0]    
    code = int(fi_name)
    sex = dict1[str(code)]['sex']
    unit = dict1[str(code)]['unit']
    list2 = [fi_name,Path(fn).stem.split('-')[1],sex,unit]
    
    list1.append(list2)

filename = 'data/中安联合体测报告明细表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename) 
print('ok')

检查报告错误人员

In [25]:
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)
739
518
275
809

体质检测数据管理

数据导入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 [35]:
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))        
4059

计算平均成绩

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.9551分,男性:598人
平均成绩:3.1705分,女性:140人
平均成绩:2.996分,总体:738人

计算测试等级

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分人数:130人,男性:116人,女性:14人
256~332分人数:368人,男性:306人,女性:62人
333~367分人数:170人,男性:125人,女性:45人
368~500分人数:70人,男性:51人,女性:19人
738
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 {'不合格': 2, '良好': 6, '优秀': 0, '合格': 8}
25-29 {'良好': 11, '不合格': 2, '合格': 13, '优秀': 2}
30-34 {'合格': 8, '良好': 3, '优秀': 4, '不合格': 1}
35-39 {'优秀': 2, '良好': 7, '合格': 10, '不合格': 6}
40-44 {'优秀': 1, '良好': 4, '合格': 1, '不合格': 0}
45-49 {'合格': 20, '优秀': 5, '良好': 8, '不合格': 3}
50-54 {'合格': 2, '良好': 6, '优秀': 5, '不合格': 0}
55-80 {'优秀': 0, '合格': 0, '良好': 0, '不合格': 0}

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

In [7]:
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 {'不合格': 26, '良好': 9, '优秀': 2, '合格': 35}
25-29 {'良好': 20, '不合格': 25, '合格': 48, '优秀': 3}
30-34 {'合格': 24, '良好': 5, '优秀': 2, '不合格': 5}
35-39 {'优秀': 11, '良好': 23, '合格': 29, '不合格': 10}
40-44 {'优秀': 6, '良好': 3, '合格': 17, '不合格': 1}
45-49 {'合格': 37, '优秀': 6, '良好': 16, '不合格': 4}
50-54 {'合格': 73, '良好': 31, '优秀': 12, '不合格': 28}
55-80 {'优秀': 9, '合格': 43, '良好': 18, '不合格': 17}

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

In [8]:
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.73分,人数:88人,男性:72人
25~29岁平均成绩:2.92分,人数:124人,男性:96人
30~34岁平均成绩:3.02分,人数:52人,男性:36人
35~39岁平均成绩:3.1分,人数:98人,男性:73人
40~44岁平均成绩:3.21分,人数:33人,男性:27人
45~49岁平均成绩:3.09分,人数:99人,男性:63人
50~54岁平均成绩:3.04分,人数:157人,男性:144人
55~69岁平均成绩:2.97分,人数:87人,男性:87人

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

In [10]:
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.68分,人数:72人
25~29岁平均成绩:2.86分,人数:96人
30~34岁平均成绩:2.94分,人数:36人
35~39岁平均成绩:3.12分,人数:73人
40~44岁平均成绩:3.15分,人数:27人
45~49岁平均成绩:3.06分,人数:63人
50~54岁平均成绩:2.98分,人数:144人
55~80岁平均成绩:2.97分,人数:87人

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

In [9]:
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.94分,人数:16人
25~29岁平均成绩:3.13分,人数:28人
30~34岁平均成绩:3.19分,人数:16人
35~39岁平均成绩:3.07分,人数:25人
40~44岁平均成绩:3.49分,人数:6人
45~49岁平均成绩:3.15分,人数:36人
50~54岁平均成绩:3.64分,人数:13人
55~80岁平均成绩:0分,人数:0人

计算各项目成绩

In [11]:
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.6 738
肺活量 3.38 728
握力 2.55 737
坐位体前屈 2.73 699
纵跳 2.53 692
俯卧撑 3.29 523
一分钟仰卧起坐 3.82 109
单脚站立 2.73 726
选择反应时 3.32 737
台阶指数 2.79 540

按照部门计算平均成绩

In [12]:
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)
炼油二部 2.96 136
公用工程部 2.99 53
储运部 2.9 101
炼油一部 3.0 122
炼油三部 2.92 74
物资采购中心 3.17 16
科技发展部 3.0 9
设备工程部 3.1 19
检验计量中心 3.02 39
财务资产部 3.4 12
党群工作部 3.33 6
恒大化工 2.98 39
发展计划部 3.23 8
安全环保部 2.98 16
生产技术部(总调度室) 3.03 17
党委组织部(人力资源部) 3.15 12
电气仪表中心 2.94 37
综合管理部 3.21 14
本部 3.34 8

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

In [14]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
depart = []
for k, v in dict1.items():
    if v['unit'] not in depart:
        depart.append(v['unit'])

for item in depart:
    score = 0
    n = 0
    for k, v in dict1.items():
        if item == v['unit'] and v['sex'] == '女':
            score = score + v['score']
            n = n +1 
    if n>0:
        print(item,round(score/n,2),n)
    else:
        print(item,0,n)
炼油二部 3.17 13
公用工程部 3.33 11
储运部 2.98 6
炼油一部 3.21 15
炼油三部 2.82 6
物资采购中心 3.05 5
科技发展部 2.67 1
设备工程部 3.72 2
检验计量中心 2.97 19
财务资产部 3.46 10
党群工作部 3.67 2
恒大化工 2.98 26
发展计划部 3.61 5
安全环保部 3.25 2
生产技术部(总调度室) 3.67 1
党委组织部(人力资源部) 3.3 7
电气仪表中心 3.28 2
综合管理部 3.42 7
本部 0 0

计算部门等级

In [15]:
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['不合格'])
炼油二部 14 29 67 26
公用工程部 8 11 25 9
储运部 8 25 42 26
炼油一部 7 27 69 19
炼油三部 5 11 43 15
物资采购中心 3 3 9 1
科技发展部 1 0 7 1
设备工程部 2 5 10 2
检验计量中心 4 11 18 6
财务资产部 3 3 5 1
党群工作部 2 1 3 0
恒大化工 3 9 20 7
发展计划部 1 3 3 1
安全环保部 1 5 7 3
生产技术部(总调度室) 2 4 9 2
党委组织部(人力资源部) 0 5 6 1
电气仪表中心 1 9 19 8
综合管理部 4 4 4 2
本部 1 5 2 0

计算部门成绩

In [16]:
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'])
炼油二部
BMI 444 136
肺活量 478 134
握力 365 136
坐位体前屈 345 130
纵跳 347 133
俯卧撑 352 106
一分钟仰卧起坐 50 12
单脚站立 356 134
选择反应时 432 136
台阶指数 284 102
公用工程部
BMI 199 53
肺活量 190 53
握力 133 53
坐位体前屈 138 51
纵跳 127 52
俯卧撑 120 39
一分钟仰卧起坐 33 9
单脚站立 134 53
选择反应时 186 53
台阶指数 101 38
储运部
BMI 351 101
肺活量 321 99
握力 281 101
坐位体前屈 245 91
纵跳 220 91
俯卧撑 238 80
一分钟仰卧起坐 10 4
单脚站立 237 97
选择反应时 324 100
台阶指数 163 57
炼油一部
BMI 408 122
肺活量 414 121
握力 313 122
坐位体前屈 329 117
纵跳 298 115
俯卧撑 327 97
一分钟仰卧起坐 40 10
单脚站立 336 120
选择反应时 393 122
台阶指数 275 97
炼油三部
BMI 262 74
肺活量 246 72
握力 186 74
坐位体前屈 188 72
纵跳 169 70
俯卧撑 206 63
一分钟仰卧起坐 15 5
单脚站立 185 73
选择反应时 217 74
台阶指数 183 59
物资采购中心
BMI 60 16
肺活量 50 16
握力 41 16
坐位体前屈 54 16
纵跳 45 16
俯卧撑 44 11
一分钟仰卧起坐 21 5
单脚站立 44 16
选择反应时 55 16
台阶指数 36 14
科技发展部
BMI 31 9
肺活量 30 9
握力 23 9
坐位体前屈 21 9
纵跳 26 9
俯卧撑 19 7
一分钟仰卧起坐 3 1
单脚站立 22 9
选择反应时 38 9
台阶指数 25 8
设备工程部
BMI 87 19
肺活量 63 19
握力 45 19
坐位体前屈 49 18
纵跳 45 18
俯卧撑 50 14
一分钟仰卧起坐 9 2
单脚站立 54 19
选择反应时 64 19
台阶指数 32 13
检验计量中心
BMI 153 39
肺活量 124 39
握力 80 38
坐位体前屈 109 35
纵跳 68 32
俯卧撑 50 14
一分钟仰卧起坐 48 13
单脚站立 111 37
选择反应时 130 39
台阶指数 61 23
财务资产部
BMI 50 12
肺活量 44 12
握力 30 12
坐位体前屈 33 11
纵跳 34 12
俯卧撑 7 2
一分钟仰卧起坐 22 6
单脚站立 51 12
选择反应时 42 12
台阶指数 16 6
党群工作部
BMI 28 6
肺活量 16 6
握力 14 6
坐位体前屈 21 6
纵跳 17 6
俯卧撑 15 4
一分钟仰卧起坐 10 2
单脚站立 21 6
选择反应时 21 6
台阶指数 17 6
恒大化工
BMI 157 39
肺活量 121 38
握力 89 39
坐位体前屈 87 35
纵跳 91 34
俯卧撑 35 10
一分钟仰卧起坐 69 19
单脚站立 105 39
选择反应时 121 39
台阶指数 86 29
发展计划部
BMI 34 8
肺活量 24 8
握力 18 8
坐位体前屈 24 8
纵跳 21 8
俯卧撑 6 3
一分钟仰卧起坐 22 5
单脚站立 29 8
选择反应时 30 8
台阶指数 18 6
安全环保部
BMI 50 16
肺活量 49 15
握力 43 16
坐位体前屈 47 16
纵跳 41 16
俯卧撑 38 12
一分钟仰卧起坐 7 2
单脚站立 39 16
选择反应时 62 16
台阶指数 36 13
生产技术部(总调度室)
BMI 63 17
肺活量 56 17
握力 46 17
坐位体前屈 43 17
纵跳 37 16
俯卧撑 44 13
一分钟仰卧起坐 5 1
单脚站立 54 17
选择反应时 62 17
台阶指数 39 15
党委组织部(人力资源部)
BMI 44 12
肺活量 39 12
握力 29 12
坐位体前屈 31 11
纵跳 23 9
俯卧撑 17 5
一分钟仰卧起坐 24 6
单脚站立 36 11
选择反应时 47 12
台阶指数 23 9
电气仪表中心
BMI 145 37
肺活量 107 36
握力 89 37
坐位体前屈 86 35
纵跳 92 35
俯卧撑 106 30
一分钟仰卧起坐 9 2
单脚站立 92 37
选择反应时 133 37
台阶指数 64 28
综合管理部
BMI 56 14
肺活量 49 14
握力 31 14
坐位体前屈 40 13
纵跳 29 12
俯卧撑 14 5
一分钟仰卧起坐 19 5
单脚站立 47 14
选择反应时 57 14
台阶指数 31 10
本部
BMI 32 8
肺活量 36 8
握力 20 8
坐位体前屈 18 8
纵跳 22 8
俯卧撑 34 8
一分钟仰卧起坐 0 0
单脚站立 27 8
选择反应时 30 8
台阶指数 19 7

问卷数据处理分析

常用参数及自定义函数

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_all.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/东营工程设计院中医情况明细表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

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

计算心理

In [ ]:
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_青海all_2.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k, v in dict1.items():
    if 'psy' in v.keys():
        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)
        print(k)
        for i in range(0,6):
            score = int(dict3[i+1]/list3[i][0]/list3[i][1]*100)
            print(list2[i],score)

计算脊柱

In [ ]:
list4 = ['颈椎','胸椎','腰椎','骶尾椎']
list5 = [[0,10,10],[10,17,7],[17,24,6],[24,26,2]]
filename = 'data/result_青海all_2.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k, v in dict1.items():
    if 'spine' in v.keys():
        spine = v['spine']
        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)