Files
jupyter/体测单位/沧州炼化.ipynb
T
2025-11-24 14:21:24 +08:00

513 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "ce7a7798-b8b7-4564-9e17-3e9c2d4565d8",
"metadata": {},
"source": [
"## 体测人员导入"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "270e8c57-36d3-476c-8c50-4d8bc38a918a",
"metadata": {},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"from datetime import date\n",
"\n",
"wb = openpyxl.load_workbook('data/沧州炼化人员.xlsx')\n",
"sheet = wb.active\n",
"# sheets = wb.sheetnames\n",
"person = {}\n",
"\n",
"for n in range(2, sheet.max_row+1):\n",
" code = int(sheet.cell(n, 2).value)\n",
" person.setdefault(str(code), {})\n",
" dict1 = {}\n",
" dict1['name'] = sheet.cell(n, 4).value\n",
" dict1['sex'] = sheet.cell(n, 5).value\n",
" dict1['birth'] = str(sheet.cell(n, 6).value).replace('/','-').split(' ')[0] \n",
" dict1['unit'] = sheet.cell(n, 3).value\n",
" if sheet.cell(n, 7).value is not None:\n",
" dict1['phone'] = str(sheet.cell(n, 7).value)\n",
" person[str(code)] = dict1\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(person, fl, ensure_ascii=False)\n",
"print(len(person),'ok')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6c5f1858-e01e-4cf0-85b1-2019a37c3b37",
"metadata": {},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"from datetime import date\n",
"\n",
"wb = openpyxl.load_workbook('data/沧州炼化人员.xlsx')\n",
"sheet = wb.active\n",
"# sheets = wb.sheetnames\n",
"person = {}\n",
"\n",
"for n in range(2, sheet.max_row+1):\n",
" code = sheet.cell(n, 2).value\n",
" person.setdefault(str(code), {})\n",
" dict1 = {}\n",
" dict1['name'] = sheet.cell(n, 4).value\n",
" dict1['sex'] = sheet.cell(n, 5).value\n",
" dict1['birth'] = str(sheet.cell(n, 6).value).replace('/','-').split(' ')[0] \n",
" dict1['unit'] = sheet.cell(n, 3).value\n",
" if sheet.cell(n, 7).value is not None:\n",
" dict1['phone'] = str(sheet.cell(n, 7).value)\n",
" person[str(code)] = dict1\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename, 'w') as fl:\n",
" json.dump(person, fl, ensure_ascii=False)\n",
"print(len(person),'ok')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "829d9460-a14e-4689-a7c4-d00bbd8c2e32",
"metadata": {},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"from datetime import date\n",
"\n",
"wb = openpyxl.load_workbook('data/沧州炼化人员.xlsx')\n",
"sheet = wb.active\n",
"# sheets = wb.sheetnames\n",
"person = {}\n",
"list1 = []\n",
"list2 = []\n",
"for n in range(2, sheet.max_row+1):\n",
" code = sheet.cell(n, 2).value\n",
" if code not in list1:\n",
" list1.append(code)\n",
" else:\n",
" list2.append(code)\n",
"list3 = []\n",
"for n in range(2, sheet.max_row+1):\n",
" code = sheet.cell(n, 2).value\n",
" if code in list2:\n",
" list4 = [code,sheet.cell(n, 4).value,sheet.cell(n, 3).value]\n",
" list3.append(list4)\n",
"print(list3)\n",
"filename = 'data/沧州炼化编号重复人员.xlsx'\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"\n",
"for row in list3:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)"
]
},
{
"cell_type": "markdown",
"id": "b4f7023f-127c-4c47-a8e2-78922fbcd975",
"metadata": {},
"source": [
"## 生成读卡系统文件"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7b6c8cb8-50ab-4b59-ac9a-6afb3db61476",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"list1 = []\n",
"for k, v in dict1.items():\n",
" dict2 = {}\n",
" #if dict1['sex'] =='男':\n",
" # sex = 1\n",
" \n",
" dict2 = {'id':k,'name':v['name'],'gender':v['sex'],'birth':v['birth'],'unit':v['unit']}\n",
" list1.append(dict2)\n",
"json_data = json.dumps(list1,ensure_ascii=False, indent=4) \n",
"\n",
"# 将 json 数据写入文件\n",
"with open(\"data/card_沧州炼化人员.json\", \"w\",encoding = 'utf-8') as file:\n",
" file.write(json_data) \n",
"print(len(list1),'ok')"
]
},
{
"cell_type": "markdown",
"id": "f9ef800a-b760-4933-b7a4-c69edef593d0",
"metadata": {},
"source": [
"## 获取人员测试成绩"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ccb2fe86-c588-4373-85df-37adda55c694",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import datetime\n",
"import csv\n",
"from datetime import date\n",
"import my_module1 as My\n",
"\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl) \n",
"filename = 'data/marks_20251121.csv'\n",
"re_ta = My.get_result(filename,dict1)\n",
"\n",
"\n",
"filename = 'data/result_沧州炼化.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(re_ta, fl, ensure_ascii=False) \n",
"print(len(re_ta))"
]
},
{
"cell_type": "markdown",
"id": "0748c41c-bb8e-49e4-a88d-814928e9b956",
"metadata": {},
"source": [
"## 导入手工数据"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9054c821-24a6-4ec3-82b4-1af2fbfd5090",
"metadata": {},
"outputs": [],
"source": [
"import openpyxl\n",
"import json\n",
"from datetime import date\n",
"\n",
"wb = openpyxl.load_workbook('data/沧州俯卧撑手工成绩.xlsx')\n",
"sheet = wb.active\n",
"filename = 'data/result_沧州炼化.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl) \n",
"\n",
"for n in range(2, sheet.max_row+1):\n",
" code = str(sheet.cell(n, 1).value)\n",
" item = 'pushup'\n",
" mark = str(sheet.cell(n, 2).value)\n",
" rq = str(sheet.cell(n, 3).value)\n",
" if code in dict2.keys():\n",
" dict2[code]['rq'] = rq\n",
" dict2[code].setdefault(item,{})\n",
" dict2[code][item]['成绩'] = mark\n",
" else:\n",
" print(code)\n",
" \n",
"filename = 'data/result_沧州炼化-1.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict2, fl, ensure_ascii=False) \n",
"print(len(re_ta)) "
]
},
{
"cell_type": "markdown",
"id": "a446935a-db14-41d5-9420-d1a5ddd0e548",
"metadata": {},
"source": [
"## 统计各部门测试情况"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "503c30bb-c537-43f6-b3c7-a1eeff4c313f",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"\n",
"filename = 'data/result_沧州炼化.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"\n",
"dict3 = {}\n",
"for k, v in dict2.items():\n",
" unit = v['unit']\n",
" #sub_unit = v['sub_unit']\n",
" dict3.setdefault(unit,{})\n",
" dict3[unit].setdefault('人数',0)\n",
" dict3[unit].setdefault('体测人数',0)\n",
" #dict3[unit].setdefault(sub_unit,0)\n",
" #dict3[unit][sub_unit] = dict3[unit][sub_unit] + 1\n",
" dict3[unit]['人数'] = dict3[unit]['人数'] + 1\n",
"\n",
"title =['单位','体测人数']\n",
"list1 = []\n",
"for k,v in dict1.items(): \n",
" unit = v['unit']\n",
" #sub_unit = v['sub_unit']\n",
" #dict3[unit][sub_unit] = dict3[unit][sub_unit] - 1\n",
" dict3[unit].setdefault('体测人数',0)\n",
" dict3[unit]['体测人数'] = dict3[unit]['体测人数'] + 1\n",
"for k, v in dict3.items():\n",
" list2 = [k,v['人数'],v['体测人数']]\n",
" list1.append(list2)\n",
"\n",
"filename = 'data/沧州炼化部门测试情况(截至20251114).xlsx'\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"sheet.append(title)\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)"
]
},
{
"cell_type": "markdown",
"id": "e04d391d-57cb-4ece-a77b-b940950f6717",
"metadata": {},
"source": [
"## 统计未体测人员明细表"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "57de7845-76f2-4cdc-88a9-eb869acb28a5",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"filename = 'data/result_沧州炼化.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
"\n",
"list1 = []\n",
"\n",
"i = 1\n",
"for k, v in dict2.items(): \n",
" if k not in dict1.keys():\n",
" list2 = [i,k,v['name'],v['unit']]\n",
" i+=1\n",
" list1.append(list2)\n",
"#print(list1)\n",
"filename = f'data/沧州炼化未测试人员名单(截至20251114).xlsx'\n",
"title = ['序号','员工编号','姓名','部门']\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"sheet.append(title)\n",
"for row in list1:\n",
" sheet.append(row) \n",
"wb.save(filename)"
]
},
{
"cell_type": "markdown",
"id": "9d39b9e8-7932-4f99-88da-0becf48d73e0",
"metadata": {},
"source": [
"## 统计体测人员项目数"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c2ca861f-54ca-4312-bf24-20dbc2f3f2e6",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"\n",
"filename = 'data/result_沧州炼化-1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"xm = ['bmi','lung','grip','flexion','jump','pushup','balance','reaction','step','situp']\n",
"for k,v in dict1.items():\n",
" list1 = []\n",
" for item in v.keys():\n",
" if item in xm:\n",
" list1.append(item)\n",
" if len(list1) <3:\n",
" print(k,v['name'],v['unit'],v['phone'],len(list1))"
]
},
{
"cell_type": "markdown",
"id": "57a9f492-6971-4572-9e9e-8086a49dc6ce",
"metadata": {},
"source": [
"## 导出测试人员信息"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e014e1f8-e13d-4bb1-a64a-606a3e44a876",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import openpyxl\n",
"\n",
"items = ['lung','grip','flexion','jump','pushup','situp','balance','reaction','step']\n",
"title = ['编号','姓名','性别','单位','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n",
"\n",
"filename = 'data/result_沧州炼化-1.json'\n",
"with open(filename,'r') as fl:\n",
" dict1 = json.load(fl)\n",
"\n",
"filename = 'data/沧州炼化人员.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl)\n",
" \n",
"list1 = []\n",
"for k, v in dict1.items():\n",
" list2 = []\n",
" list2.append(str(k).rjust(5,'0'))\n",
" list2.append(v['name']) \n",
" list2.append(dict2[k]['sex'])\n",
" list2.append(dict2[k]['unit'])\n",
" list2.append(dict2[k]['birth'])\n",
" if 'phone' in v.keys():\n",
" list2.append(dict2[k]['phone'])\n",
" else:\n",
" list2.append('')\n",
" \n",
" if 'bmi' in v.keys():\n",
" height = v['bmi']['成绩'].split(',')[0]\n",
" weight = v['bmi']['成绩'].split(',')[1]\n",
" list2.append(height)\n",
" list2.append(weight)\n",
" else:\n",
" list2.append('')\n",
" list2.append('')\n",
" for item in items:\n",
" if item in v.keys():\n",
" list2.append(v[item]['成绩']) \n",
" elif item =='name':\n",
" list2.append(v[item])\n",
" else:\n",
" list2.append('')\n",
" \n",
" list1.append(list2)\n",
"filename = 'data/沧州炼化体测情况表(2025年)-1.xlsx'\n",
"wb = openpyxl.Workbook()\n",
"sheet = wb.active\n",
"sheet.append(title)\n",
"for row in list1:\n",
" sheet.append(row)\n",
" \n",
"wb.save(filename)"
]
},
{
"cell_type": "markdown",
"id": "6465528e-449f-460a-8b14-25bf9182466e",
"metadata": {},
"source": [
"## 生成测试得分"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8a6b5e16-d53e-4cb2-8e61-f4ae8e769e46",
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import time\n",
"import my_module as My\n",
"\n",
"#list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','height','weight']\n",
"list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp']\n",
"filename = 'data/result_沧州炼化-1.json'\n",
"with open(filename,'r') as fl:\n",
" dict2 = json.load(fl) \n",
"for k, v in dict2.items():\n",
" print(k,v['name'])\n",
" if v['sex'] == '男':\n",
" sex = 'M'\n",
" else:\n",
" sex = 'F' \n",
" if 'bmi' in v.keys():\n",
" #bmi_data = v['height']['成绩'].split()[0]+','+ v['weight']['成绩'].split()[0]\n",
" bmi_data = v['bmi']['成绩']\n",
" data1 = {'code':k,'sex':sex,'age':v['age'],'item':'HeightWeight','result':bmi_data}\n",
" dict2[k]['bmi'] = {}\n",
" dict2[k]['bmi']['成绩'] = bmi_data\n",
" dict2[k]['bmi']['score'] = My.cal_bmi(data1)\n",
" for item_en in list_item:\n",
" if item_en in v.keys(): \n",
" data1 = {'code':k,'sex':sex,'age':v['age'],'item':item_en,'result':float(v[item_en]['成绩'].split()[0])}\n",
" #print(k,v['name'])\n",
" dict2[k][item_en]['score'] = My.cal_score(data1)\n",
" #print(k,v[item_en]['成绩'],cal_score(data1))\n",
"\n",
"filename = f'data/result_沧州炼化-1.json'\n",
"with open(filename,'w') as fl:\n",
" json.dump(dict2,fl , ensure_ascii=False) \n",
"print('ok!') "
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "28cfc27d-9904-459a-bb5c-b562dfb36ba6",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}