Files
jupyter/体测单位/东营石油工程设计院.ipynb
T
2023-04-12 23:29:15 +08:00

27 KiB

导入人员信息

In [ ]:
import openpyxl
import json


wb = openpyxl.load_workbook('data/student_20140922(东营工程设计院监测花名册2023年) .xlsx')
sheet = wb.active
# sheets = wb.sheetnames
person = {}

for n in range(2, sheet.max_row+1):
    if sheet.cell(n,1).value is not None:
        code = int(sheet.cell(n, 4).value)
        person.setdefault(code, {})
        dict1 = {}
        dict1['name'] = sheet.cell(n, 6).value
        if sheet.cell(n, 7).value ==1:
            sex = '男'
        else:
            sex = '女'
        dict1['sex'] = sex
        dict1['unit'] = sheet.cell(n, 3).value


        person[code] = dict1
filename = 'data/东营工程设计院人员名单.json'
with open(filename, 'w') as fl:
    json.dump(person, fl, ensure_ascii=False)
print('ok')

获取人员测试成绩

In [ ]:
import json
import time
import csv

filename = '../item.json'
item = {}
unit = {}
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for k,v in dict1.items():
    item[k] = v
re_ta = {}
dict1 = {}
list1 = []
#print("\n运动项目信息:")
filename = 'data/141.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append(line)
#print(list1)
for result in list1:
    user = str(result[4])
    m_item = str(result[0])    
    re_ta.setdefault(user,{})    
    re_ta[user]['name'] = str(result[6])
    re_ta[user]['unit'] = str(result[5])    
    item_name = item[m_item]['name']
    re_ta[user].setdefault(item_name,{})  
    score = int(result[1])/item[m_item]['divisor']    
    re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
    re_ta[user][item_name]['得分'] =result[2]
filename = 'data/result_东营石油工程设计院.json'
with open(filename,'w') as fl:
    json.dump(re_ta, fl) 
print('ok')

导出测试成绩

In [ ]:
import json
import openpyxl

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

filename = 'data/东营工程设计院人员名单.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl)
    
list1 = []
for k, v in dict1.items():
    list2 = []
    list2.append(str(k).rjust(5,'0'))
    list2.append(v['name'])    
    list2.append(dict2[k]['sex'])
    list2.append(dict2[k]['unit'])    
    
    for item in items:
        if item in v.keys():
            list2.append(v[item]['成绩'])            
        elif item =='name':
            list2.append(v[item])
        else:
            list2.append('') 
    list1.append(list2)
filename = 'data/东营石油工程设计院体测情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(title)
for row in list1:
    sheet.append(row)
    
wb.save(filename)
In [ ]:
import json
import openpyxl
import csv

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

list1 = []
#print("\n运动项目信息:")
filename = 'data/141.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)
dict3 = {}
for result in list1:
    user = result[2]
    if user in dict2.keys():
        dict3.setdefault(user,{})  
        dict3[user]['name'] = dict2[user]['name']
        dict3[user]['unit'] = dict2[user]['unit']

print(len(dict3))
list1 = []
for k, v in dict3.items():
    list2 = [k,v['name'],v['unit']]
    list1.append(list2)
filename = 'data/东营工程设计院参加测试人员情况表.xlsx'
wb = openpyxl.Workbook()
sheet = wb.active

for row in list1:
    sheet.append(row)
    
wb.save(filename)   
    

体测报告更名按部门分组

In [ ]:
import os,sys,shutil
import json
import math
import openpyxl
wb = openpyxl.load_workbook('data/东营工程设计院参加测试人员情况表.xlsx')
sheet = wb.active
# sheets = wb.sheetnames
dict1 = {}
list_bh = []
depart = []
for n in range(1,sheet.max_row+1):
    dict1.setdefault(sheet.cell(n, 1).value,{})    
    m_depart = sheet.cell(n, 3).value
    dict1[sheet.cell(n, 1).value]['unit'] = m_depart
    dict1[sheet.cell(n, 1).value]['name'] = sheet.cell(n, 2).value
    if m_depart not in depart:
        depart.append(m_depart)
old = []

        
fi_path = 'file/141'


# 创建部门办公室    
m_path = 'file/141/new'
for pn in depart:
    if not os.path.exists(m_path + '/' + pn):
        os.mkdir(m_path + '/' + pn)
fl=os.listdir(fi_path)
for fn in fl:
    if os.path.isfile(fi_path + '/' + fn):
        ofn = int(fn.split('.')[0])
        old.append(ofn) 
old.sort()
for n in old:    
    o_name = f'{fi_path}/{n}.pdf'
    unit = dict1[str(n)]['unit']
    name = dict1[str(n)]['name']
    n_name = f'{m_path}/{unit}/{str(n).rjust(5,"0")}-{name}.pdf'
    #print(o_name,n_name)
    if not os.path.exists(n_name):
        shutil.copyfile(o_name,n_name)
        print(n_name)

体测报告分析

获取人员信息

In [ ]:
import json
import pymysql
import datetime

dict1 = {}
dict2 = {}
dict3 = {}

db = pymysql.connect(host = "localhost",user = "songyi",password = "yylzs",database = "ydyb" )
cursor = db.cursor()
sql = "SELECT b.avatar_id, a.name ,a.sex,a.birth FROM people as a,places_people as b WHERE a.id =b.people_id AND  b.place_id = 141"
cursor.execute(sql)
results = cursor.fetchall()
for result in results:
    bh = result[0]
    
    name = str(result[1]).strip()
    dict2.setdefault(bh,{})
    dict2[bh]['name'] = name
    dict2[bh]['sex'] = result[2]
    #dict2[bh]['birth'] = result[3]
    #print(result[3])
    days = (datetime.date(2023, 3, 6)-result[3]).days
    dict2[bh]['age'] = round(days/365)

filename = 'data/东营工程设计院人员信息.json'
with open(filename, 'w') as fl:
    json.dump(dict2, fl, ensure_ascii=False)
print('ok')

获取人员及体测成绩

In [ ]:
import json
import time
import csv

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

re_ta = {}
dict1 = {}
list1 = []
#print("\n运动项目信息:")
filename = 'data/141.csv'
with open(filename,'r',newline='') as csv_file:
    fl = csv.reader(csv_file,delimiter=',')
    header = next(fl)    
    for line in fl:
        #line = re.sub('[\r\n\f ]{1,}', '', line)
        list1.append(line)
#print(list1)
for result in list1:
    user = str(result[4])
    m_item = str(result[0])    
    re_ta.setdefault(user,{})    
    re_ta[user]['name'] = str(result[6])
    re_ta[user]['unit'] = str(result[5])    
    item_name = item[m_item]['name']
    re_ta[user].setdefault(item_name,{})  
    score = int(result[1])/item[m_item]['divisor']    
    re_ta[user][item_name]['成绩'] = f'{score} {item[m_item]["unit"]}'
    re_ta[user][item_name]['得分'] =result[2]
filename = 'data/result_东营设计院.json'
with open(filename,'w') as fl:
    json.dump(re_ta, fl) 
print('ok')

汇总人员信息及成绩

In [ ]:
import json


items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
filename = 'data/result_东营设计院.json'

with open(filename,'r') as fl:
    dict1 = json.load(fl) 

filename = 'data/东营工程设计院人员信息.json'
with open(filename,'r') as fl:
    dict2 = json.load(fl) 
for k,v in dict1.items():
    print(k)
    score = 0
    i = 0
    for k1,v1 in v.items():
        
        
        if k1 in items:
            score = score + int(v1['得分'])
            i+=1
    
    dict1[k]['age'] = dict2[k]['age']
    dict1[k]['sex'] = dict2[k]['sex']
    dict1[k]['score'] = round(score/i,2)
            
filename = 'data/result_东营设计院.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')

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

In [ ]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,59],[60,69]]
filename = 'data/result_东营设计院.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
for item in nld:
    di = item[0]
    gao = item[1]
    i = 1
    score = 0
    m = 0
    f = 0
    for k,v in dict1.items():
        if v['age'] in range(di,gao+1):
            score = score+v['score']
            i+=1
            if v['sex'] == 0:
                m = m +1
            
    print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人,男性:{m}人')

计算平均成绩及等级

In [ ]:
import json

nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,59],[60,69]]
filename = 'data/result_东营设计院.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 

i = 1
score = 0

m = 0
f = 0
for k,v in dict1.items():
    if v['sex'] == 0:
        m = m+v['score']
    else:
        f = f+v['score']
    score = score + v['score']

print(f'平均成绩:{round(score/336,2)}分,男性:{round(m/203,2)}分,女性:{round(f/133,2)}')

计算测试等级

In [28]:
import json

filename = 'data/result_东营设计院.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
dict2 = {}
dict2['不合格'] = [0,255]
dict2['合格'] = [256,332]
dict2['良好'] = [333,367]
dict2['优秀'] = [368,500]
filename = 'data/result_东营设计院.json'
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
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'] == 0:
                m = m +1
            else:
                f = f+1
    print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')
filename = 'data/result_东营设计院.json'
with open(filename,'w') as fl:
    json.dump(dict1, fl) 
print('ok')
0~255分人数:58人,男性:54人,女性:4人
256~332分人数:149人,男性:96人,女性:53人
333~367分人数:95人,男性:43人,女性:52人
368~500分人数:34人,男性:10人,女性:24人
ok

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

In [30]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,59],[60,69]]
filename = 'data/result_东营设计院.json'
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'] == 0:
                dict3[age][v['level']] = dict3[age][v['level']]+1
            
for k, v in dict3.items():
    print(k,v)
20-24 {'合格': 9, '良好': 3, '不合格': 6, '优秀': 0}
25-29 {'不合格': 12, '合格': 20, '优秀': 1, '良好': 5}
30-34 {'合格': 14, '良好': 8, '不合格': 11, '优秀': 1}
35-39 {'良好': 7, '优秀': 3, '合格': 16, '不合格': 8}
40-44 {'良好': 9, '合格': 11, '优秀': 1, '不合格': 4}
45-49 {'良好': 5, '优秀': 2, '合格': 6, '不合格': 3}
50-54 {'良好': 3, '合格': 14, '优秀': 2, '不合格': 3}
55-59 {'不合格': 7, '合格': 6, '优秀': 0, '良好': 2}
60-69 {'良好': 1}

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

In [31]:
nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,59],[60,69]]
filename = 'data/result_东营设计院.json'
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'] == 1:
                dict3[age][v['level']] = dict3[age][v['level']]+1
            
for k, v in dict3.items():
    print(k,v)
20-24 {'合格': 3, '良好': 4, '不合格': 1, '优秀': 1}
25-29 {'不合格': 0, '合格': 6, '优秀': 2, '良好': 9}
30-34 {'合格': 15, '良好': 7, '不合格': 2, '优秀': 3}
35-39 {'良好': 13, '优秀': 6, '合格': 10, '不合格': 0}
40-44 {'良好': 10, '合格': 5, '优秀': 6, '不合格': 0}
45-49 {'良好': 4, '优秀': 3, '合格': 4, '不合格': 0}
50-54 {'良好': 3, '合格': 9, '优秀': 2, '不合格': 1}
55-59 {'不合格': 0, '合格': 1, '优秀': 1, '良好': 2}
60-69 {'良好': 0}

按照部门计算平均成绩

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

for item in depart:
    score = 0
    n = 0
    for k, v in dict1.items():
        if item == v['unit']:
            score = score + v['score']
            n = n +1 
    print(item,round(score/n,2),n)
        
管道工程设计所 3.19 19
建筑设计所 3.03 15
机械设备所 3.31 24
油气工艺设计所 2.96 18
工程勘察公司 3.12 33
水处理及热力工程设计所 2.85 25
自控通信所 3.13 20
海洋工程设计所 3.04 26
电力设计所 3.07 19
智能化研究中心 3.04 28
HSE管理部 3.44 1
项目管理中心 3.1 17
节能环保工程技术中心 3.1 18
技术发展中心 2.7 10
工程监理公司 3.16 7
工程造价中心 2.94 9
档案管理中心 3.15 8
国际工程管理部 3.11 6
党群工作部 3.78 1
市场开发部 2.8 7
综合服务中心 2.96 12
技术质量部 3.67 2
财务资产部 2.93 9
综合管理部 2.94 2

计算各项目成绩

In [40]:
with open(filename,'r') as fl:
    dict1 = json.load(fl) 
items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']
for item in items:
    score = 0
    n = 0
    for k, v in dict1.items():
        if item in v.keys():
            n = n + 1
            score =score + int(v[item]['得分'])
    print(item,round(score/n,2))
体重 3.53
肺活量 3.57
握力 2.15
坐位体前屈 2.64
纵跳 2.8
俯卧撑 3.19
一分钟仰卧起坐 4.27
单脚站立 2.94
选择反应时 3.75
台阶指数 2.56
In [ ]: