{ "cells": [ { "cell_type": "markdown", "id": "e764be85-0ddf-4055-abd6-de2990e75db8", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [], "toc-hr-collapsed": true }, "source": [ "# 第一次体测" ] }, { "cell_type": "markdown", "id": "ae533fe9-e20e-4e44-b9bb-030c4fa4e714", "metadata": { "tags": [] }, "source": [ "## 体测人员导入" ] }, { "cell_type": "code", "execution_count": null, "id": "1144aaac-92a0-4bcf-aba7-096f7dd3ad3b", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/天津石化员工检测花名册 (20221014).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, 6).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 3).value\n", " dict1['sex'] = sheet.cell(n, 4).value\n", " dict1['unit'] = sheet.cell(n, 1).value\n", " dict1['sub_unit'] = sheet.cell(n, 2).value\n", " if sheet.cell(n,5).value is not None:\n", " dict1['id_num'] = sheet.cell(n,5).value\n", " person[code] = dict1\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "93b9bfba-5404-4c9b-ac8f-48a3bf296669", "metadata": {}, "source": [ "## 合并人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "d5171966-95ae-47ae-a75e-db08de772348", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "for k, v in dict2.items():\n", " if k not in dict1.keys():\n", " dict1.setdefault(k,{})\n", " dict1[k]['name'] = dict2[k]['name']\n", " dict1[k]['sex'] = dict2[k]['sex']\n", " dict1[k]['unit'] = dict2[k]['name']\n", " dict1[k]['sub_unit'] = dict2[k]['sub_unit']\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "5e648b69-40bf-4494-9079-e4e2b6ab8866", "metadata": {}, "source": [ "## 获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "a57ebb22-543c-4804-8d44-89984058ec1d", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import time\n", "import csv\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " item[k] = v\n", "#SQL语句为:\n", "#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\n", "\n", "re_ta = {}\n", "dict1 = {}\n", "list1 = []\n", "#print(\"\\n运动项目信息:\")\n", "filename = '体测单位/data/20230428_134.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " user = str(result[4])\n", " m_item = str(result[0]) \n", " re_ta.setdefault(user,{}) \n", " re_ta[user]['name'] = str(result[6])\n", " re_ta[user]['unit'] = str(result[5]) \n", " item_name = item[m_item]['name']\n", " re_ta[user].setdefault(item_name,{}) \n", " score = int(result[1])/item[m_item]['divisor'] \n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", " re_ta[user][item_name]['得分'] =result[2]\n", "filename = 'data/result_天津.json'\n", "with open(filename,'w') as fl:\n", " json.dump(re_ta, fl) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "55d961e5-a512-44b2-808e-7c55d7000d52", "metadata": {}, "source": [ "## 导出测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "38397ad4-2bb3-4b5e-8ece-9ea11e801890", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','性别','单位/部门','车间/科室','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\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", "for k, v in dict1.items():\n", " list2 = []\n", " list2.append(str(k).rjust(8,'0'))\n", " list2.append(v['name']) \n", " list2.append(dict2[k]['sex'])\n", " list2.append(dict2[k]['unit'])\n", " list2.append(dict2[k]['sub_unit'])\n", " \n", " for item in items:\n", " if item in v.keys():\n", " list2.append(v[item]['成绩'])\n", " \n", " elif item =='name':\n", " list2.append(v[item])\n", " else:\n", " list2.append('') \n", " \n", " list1.append(list2)\n", "filename = 'data/天津石化体测情况表(截至20221122).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": "239ceb76-f690-4dae-991c-62c38d617c85", "metadata": {}, "source": [ "## 导出测试成绩(带得分)" ] }, { "cell_type": "code", "execution_count": null, "id": "27529013-f3de-4e23-980d-f62203e4df88", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','性别','单位/部门','车间/科室','身高','','体重','','肺活量','','握力','','坐位体前屈','','纵跳','','俯卧撑','','一分钟仰卧起坐','','单脚站立','','选择反应时','','台阶指数']\n", "filename = 'data/result_天津.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "del dict1['1730253']\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(): #print(k,dict2[str(k)]['name'])\n", " list2 = []\n", " list2.append(str(k).rjust(5,'0'))\n", " list2.append(dict2[k]['name']) \n", " list2.append(dict2[k]['sex'])\n", " list2.append(dict2[k]['unit']) \n", " list2.append(dict2[k]['sub_unit']) \n", " for item in items:\n", " if item in dict1[k].keys():\n", " list2.append(dict1[k][item]['成绩'])\n", " list2.append(dict1[k][item]['得分']) \n", " elif item =='name':\n", " list2.append(dict1[k][item])\n", " else:\n", " list2.append('') \n", " list2.append('') \n", " list1.append(list2)\n", "filename = 'data/天津石化体测情况表.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)\n", "print('ok') " ] }, { "cell_type": "markdown", "id": "1c7b219f-43cd-4bf0-971f-2c398f8db8ed", "metadata": {}, "source": [ "## 按照日期进行报告分类" ] }, { "cell_type": "markdown", "id": "3d57ff66-69c3-4c13-811b-f1e13b404077", "metadata": {}, "source": [ "### 按照体测明细分类" ] }, { "cell_type": "code", "execution_count": null, "id": "29c0f15b-1345-4b46-ac1d-b45ddede9641", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import time\n", "import csv\n", "import os,sys,shutil\n", "import glob\n", "\n", "dict1 = {}\n", "list1 = []\n", "filename = 'data/134_2210.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "for result in list1:\n", " user = str(result[4])\n", " dict1.setdefault(user,'2022-10-01')\n", " m_date = result[7]\n", " if m_date> dict1[user]:\n", " dict1[user] = m_date\n", "\n", "m_path = 'file/134'\n", "\n", "fls = glob.glob(f'file/new/*.pdf')\n", "for fn in fls:\n", " #old = os.path.basename(fn).split('.')[0].rjust(8,'0') \n", " old = os.path.basename(fn).split('.')[0]\n", " mrq = str(dict1[old]).split(' ')[0].replace('-', '', 2)\n", " if not os.path.exists(m_path + '/new/' + mrq):\n", " os.mkdir(m_path + '/new/' + mrq)\n", " n_name = f'{m_path}/new/{mrq}/{str(old).rjust(8,\"0\")}_{mrq}.pdf'\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "ae2b17bd-38b9-4809-affb-01441a5581eb", "metadata": {}, "source": [ "### 按照报告生成日期分类" ] }, { "cell_type": "code", "execution_count": null, "id": "eb24c1be-b5d3-4e61-a432-854a887746d4", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import time\n", "import csv\n", "import os,sys,shutil\n", "import glob\n", "\n", "dict1 = {}\n", "list1 = []\n", "\n", "m_path = 'file/134'\n", "mrq = '20221028'\n", "if not os.path.exists(m_path + '/' + mrq):\n", " os.mkdir(m_path + '/' + mrq)\n", "fls = glob.glob(f'file/new/*.pdf')\n", "for fn in fls:\n", " #old = os.path.basename(fn).split('.')[0].rjust(8,'0') \n", " old = os.path.basename(fn).split('.')[0] \n", " n_name = f'{m_path}/{mrq}/{str(old).rjust(8,\"0\")}_{mrq}.pdf'\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "d9061d26-b09b-4bff-af24-a14adda3d83f", "metadata": {}, "source": [ "## 按照部门报告分组" ] }, { "cell_type": "code", "execution_count": null, "id": "7ea2541f-461f-4eb5-860d-4b56d6be74ab", "metadata": {}, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import math\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = './file'\n", "old = []\n", "dict2 = {}\n", "\n", "\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "for k, v in dict1.items():\n", " m_name = v['name']\n", " m_depart = v['unit'] \n", " dict2[int(k)] = [m_name,m_depart]\n", "\n", "\n", "\n", "fls = glob.glob(f'./file/*.pdf')\n", "\n", "for fn in fls:\n", " old.append(os.path.basename(fn).split('.')[0])\n", " #print(fn)\n", "\n", "\n", "for n in old: \n", " o_name = f'{fi_path}/{n}.pdf'\n", " if not os.path.exists(f'{fi_path}/new/{dict2[int(n)][1]}'):\n", " os.mkdir(f'{fi_path}/new/{dict2[int(n)][1]}') \n", " n_name = f'{fi_path}/new/{dict2[int(n)][1]}/{str(n).rjust(5,\"0\")}-{dict2[int(n)][0]}.pdf'\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(o_name,n_name)\n", " print(n_name)" ] }, { "cell_type": "code", "execution_count": null, "id": "63eb8a23-4876-4be6-8800-1a67df8773ff", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import math\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = './file'\n", "old = []\n", "dict2 = {}\n", "\n", "\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "for k, v in dict1.items():\n", " m_name = v['name']\n", " m_depart = v['unit'] \n", " dict2[int(k)] = [m_name,m_depart]\n", "\n", "\n", "\n", "fls = glob.glob(f'./file/*.pdf')\n", "\n", "for fn in fls:\n", " old.append(os.path.basename(fn).split('.')[0])\n", "\n", "for n in old: \n", " o_name = f'{fi_path}/{n}.pdf'\n", " new_path = Path('file/new',dict1[n]['unit'],dict1[n]['sub_unit'])\n", " new_path.mkdir(parents = True, exist_ok = True)\n", " n_name = Path(new_path,f'{str(n).rjust(7,\"0\")}-{dict2[int(n)][0]}.pdf')\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(o_name,n_name)\n", " print(n_name)\n", " \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "e4590323-6645-450a-8055-756a5bf35b34", "metadata": {}, "source": [ "## 统计报告人员信息表" ] }, { "cell_type": "code", "execution_count": null, "id": "ed681a0d-4ee8-48ec-ab05-23da7156a44e", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "import os\n", "import glob\n", "\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "m_path ='./file'\n", "fls = glob.glob(f'file/*.pdf')\n", "list1 = []\n", "for fn in fls:\n", " list2 = []\n", " code = os.path.basename(fn).split('.')[0]\n", " list2 = [code.rjust(7,\"0\"),dict1[code]['name'],dict1[code]['unit'],dict1[code]['sub_unit']]\n", " list1.append(list2)\n", "title = ['编号','姓名','单位/部门','车间/科室',] \n", "filename = 'data/天津石化体测情况表.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": "838ec7d3-137c-4ccd-9f16-7b6312d1ffa6", "metadata": {}, "source": [ "## PDF文件压缩" ] }, { "cell_type": "code", "execution_count": null, "id": "a6ab0943-b018-4dd6-9176-85a762f9f60c", "metadata": { "tags": [] }, "outputs": [], "source": [ "import fitz\n", "from pdf2image import convert_from_path, convert_from_bytes\n", "import os,sys\n", "import tempfile\n", "from pdf2image.exceptions import (\n", " PDFInfoNotInstalledError,\n", " PDFPageCountError,\n", " PDFSyntaxError\n", ")\n", "import img2pdf \n", "import glob\n", "import shutil\n", "\n", "def covert2pic(old_fn):\n", " if os.path.exists('.pdf'): # 临时文件,需为空\n", " shutil.rmtree('.pdf')\n", " os.mkdir('.pdf')\n", " with tempfile.TemporaryDirectory() as path:\n", " images_from_path = convert_from_path(old_fn, dpi=100,fmt='jpg', output_folder='.pdf')\n", "\n", "def pic2pdf(new_fn):\n", " fl1=glob.glob('.pdf/*.jpg')\n", " fl1.sort()\n", " a4inpt = (img2pdf.mm_to_pt(210),img2pdf.mm_to_pt(297))\n", " layout_fun = img2pdf.get_layout_fun(a4inpt)\n", " with open(new_fn,\"wb\") as f:\n", " f.write(img2pdf.convert(fl1,layout_fun=layout_fun))\n", " print(f'{new_fn}转换成功!')\n", " \n", "\n", "\n", "def pdfz(sor, obj, zoom): \n", " covert2pic(zoom)\n", " pic2pdf(obj)\n", " \n", "fi_path = 'file/134/20221122/'\n", "fl = glob.glob(f'{fi_path}*.pdf')\n", "\n", "for fn in fl:\n", " new_fn = fi_path+'new/'+os.path.basename(fn)\n", " covert2pic(fn)\n", " pic2pdf(new_fn)\n", " shutil.rmtree('.pdf')\n", "print('ok!')\n", "\n" ] }, { "cell_type": "markdown", "id": "a0cc9662-4171-4c2a-828d-f58c327ec8c1", "metadata": {}, "source": [ "## 统计未测试人员名单" ] }, { "cell_type": "code", "execution_count": null, "id": "daef91be-1b58-4fb1-b182-64f43c07c90f", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "title = ['编号','姓名','性别','单位/部门','车间/科室']\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "filename = 'data/result_天津.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", " if k not in dict2.keys(): \n", " list2 = [k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit'],dict1[k]['sub_unit'],] \n", " list1.append(list2)\n", "filename = 'data/天津石化未参加体测人数统计表.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)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "72c693e1-dd7c-40fa-8948-4fd6fbea8ddc", "metadata": {}, "source": [ "## 区分新文件" ] }, { "cell_type": "code", "execution_count": null, "id": "9d06d4f0-364b-438c-844b-7d5badaf3496", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import glob\n", "import time\n", "\n", "fi_path = 'file/'\n", "fls = glob.glob(f'{fi_path}*.pdf')\n", "m_date = time.strptime('2022-10-28','%Y-%m-%d')\n", "for fn in fls:\n", " c_time = time.gmtime(os.path.getctime(fn))\n", " if c_time > m_date:\n", " n_name = f'{fi_path}new/{os.path.basename(fn)}'\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", " print(n_name)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "32b61559-4495-4fbe-8eb6-2614e6225b5c", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "title = ['编号','姓名','性别','单位/部门','车间/科室']\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "filename = 'data/result_天津.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "print(len(dict2),len(dict1),)" ] }, { "cell_type": "markdown", "id": "47015abe-4cb8-436b-afa5-9ffd78d4a628", "metadata": {}, "source": [ "## 心理测试情况统计" ] }, { "cell_type": "code", "execution_count": null, "id": "c21efc40-2639-4b22-851f-925cd3f12d3a", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "title = ['编号','姓名','性别','单位/部门','车间/科室']\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "filename = 'data/134_xinli.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line[4])\n", "list3 = []\n", "for k, v in dict1.items():\n", " list2 = []\n", " if k not in list1: \n", " list2 = [k,dict1[k]['name'],dict1[k]['sex'],dict1[k]['unit'],dict1[k]['sub_unit'],] \n", " list3.append(list2)\n", "filename = 'data/天津石化未参加心理测试人数统计表.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list3:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok!')" ] }, { "cell_type": "code", "execution_count": null, "id": "6b8ae75d-71a3-4cbe-a216-03c28d78156c", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "title = ['编号','姓名','性别','单位/部门','车间/科室']\n", "filename = 'data/天津石化人员名单.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "filename = 'data/134_xinli.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " print(line[4])" ] }, { "cell_type": "markdown", "id": "20e98f0d-61ea-43a5-8993-9656fed23099", "metadata": {}, "source": [ "## 体检报告统计分析" ] }, { "cell_type": "markdown", "id": "0436a3a2-6230-43b3-beae-bc89e789b285", "metadata": {}, "source": [ "### excel数据导入" ] }, { "cell_type": "code", "execution_count": null, "id": "7bb2e3aa-591d-4fce-983a-cde5d4c30e56", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import re\n", "\n", "wb = openpyxl.load_workbook('data/体检结果(模板)化工.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "dict1 = {}\n", "\n", "for n in range(11, sheet.max_row+1):\n", " code = sheet.cell(n, 1).value\n", " name = sheet.cell(n, 8).value\n", " txt = sheet[f'DT{str(n)}'].value \n", " txt = re.sub(r'\\n', \"\", txt)\n", " txt = re.sub(r'\\t', \"\", txt)\n", " txt = re.sub(r'二、尊敬的顾客您好,您本次体检的建议信息如下:', \"\", txt)\n", " ss = r'三、温馨提示: 鉴于医学技术发展的局限性,个体间可能存在的生物差异性以及您选择的检查项目的局限性,任何一次医学检查的手段和方法都不具备绝对的特异性和灵敏度,对于疾病筛检仍有其盲点,因此,我们建议您对本次检查的异常结果进行随诊复查和其他相关检查,以获得更可靠的医学证据建立准确地医学判断。'\n", " txt1 = re.sub(r'三、温馨提示.*', \"\", txt,re.S)\n", " dict1.setdefault(code, {})\n", " dict1[code]['name'] = name\n", " dict1[code]['xb'] = sheet.cell(n, 9).value\n", " #dict1[code]['birth'] = sheet.cell(n, 10).value\n", " dict1[code]['report'] = txt1\n", "filename = 'data/体检结果.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "227a1c0b-fc78-4951-97ab-5664b59edd1d", "metadata": {}, "source": [ "### 体检结果分解" ] }, { "cell_type": "code", "execution_count": null, "id": "b38aef28-5d1b-4762-9c7e-70a531594fa4", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "import re\n", "\n", "mo1 = r'[0-9]、'\n", "mo2 = '【.*】'\n", "filename = 'data/体检结果.json'\n", "list3 = []\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "for k, v in dict1.items():\n", " \n", " ss = v['report']\n", " list1 = re.split(mo1,ss)\n", " if len(list1) ==1:\n", " continue\n", " else:\n", " list1.remove('')\n", " #print(list1)\n", " for item in list1:\n", " list2 = re.search( mo2, item)\n", " xm =list2.group()\n", " \n", " txt = item.replace(xm,'').strip()\n", " list3.append([k,v['name'],v['xb'],xm,txt])\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)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "964526bc-9c9c-4b63-9300-67b02d2608f5", "metadata": {}, "source": [ "## 天津人员制卡" ] }, { "cell_type": "code", "execution_count": null, "id": "83f02525-fd26-41ba-8b6a-c3cd584825e6", "metadata": { "tags": [] }, "outputs": [], "source": [ "import binascii\n", "import openpyxl\n", "gbs = 'C2EDC1A2D1C7'\n", "bs = binascii.a2b_hex(gbs)\n", "#print('bs', bs)\n", "#print('decode-bs:', bs.decode('gb2312'))\n", "\n", "s = '马立亚'\n", "gbcode = s.encode('gb2312') # 先转成 bytes格式\n", "#print('gbcode:', gbcode)\n", "gbs = \"\".join([hex(ch)[2:] for ch in gbcode]) #\n", "#print('gbs:', gbs)\n", "\n", "wb = openpyxl.load_workbook('data/联合六车间体质测定人员名单.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "list1 = []\n", "for n in range(3, sheet.max_row+1):\n", " name = sheet.cell(n, 3).value\n", " code = sheet.cell(n, 2).value\n", " gbcode = code.encode('gbk')\n", " code = \"\".join([hex(ch)[2:] for ch in gbcode])\n", " gbcode = name.encode('gbk')\n", " name = \"\".join([hex(ch)[2:] for ch in gbcode])\n", " #for s in code:\n", " # print(ord(s))\n", " \n", " list1.append([sheet.cell(n, 1).value,sheet.cell(n, 2).value,sheet.cell(n, 3).value,code.ljust(32,'0'),name.ljust(32,'0')])\n", " print(code.ljust(32,'0'),name.ljust(32,'0'))\n", "\n", "filename = 'data/联合六车间体质测定人员制卡名单.xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok!')\n" ] }, { "cell_type": "markdown", "id": "638bbe8e-3770-40e1-b884-ceeeec5a053c", "metadata": {}, "source": [ "## 因素分析" ] }, { "cell_type": "markdown", "id": "9e25a7f2-0571-438b-9aa4-e3337d9fd840", "metadata": {}, "source": [ "### 清除修改测试项目" ] }, { "cell_type": "code", "execution_count": null, "id": "6e6f6a63-b297-42e8-a9ba-b2636fda5d09", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "\n", "filename = 'data/天津石化人员231113.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "code = '1734094'\n", "items = ['身高','体重']\n", "for item in items:\n", " del dict1[code][item]\n", "with open(filename, 'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "f96b3aeb-bf37-4a8b-bf18-d0ae8f7df653", "metadata": {}, "source": [ "### 人员情况导入" ] }, { "cell_type": "code", "execution_count": null, "id": "4d77ec9b-c561-4355-98af-b18c42c1f3ca", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/员工个人基础信息20230113.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "\n", "for n in range(4, sheet.max_row+1):\n", " code = int(sheet.cell(n, 1).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 2).value\n", " dict1['sex'] = sheet.cell(n, 3).value\n", " dict1['unit'] = sheet.cell(n, 6).value\n", " dict1['sub_unit'] = sheet.cell(n, 7).value\n", " if sheet.cell(n,10).value is not None:\n", " dict1['daoban'] = '是'\n", " else:\n", " dict1['daoban'] = '否'\n", " dict1['age'] = sheet.cell(n, 13).value\n", " dict1['gl'] = sheet.cell(n, 14).value\n", " dict1['jhgl'] = sheet.cell(n, 15).value \n", " person[code] = dict1\n", "filename = 'data/天津石化人员231113.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "a5c58b77-69b6-4d76-8927-6e734556e848", "metadata": {}, "source": [ "### 人员体测得分导入合并" ] }, { "cell_type": "code", "execution_count": null, "id": "db473c01-7e1a-48c4-a0d7-e44cdeb9e24b", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/result_天津.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员231113.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "for k, v in dict2.items():\n", " if k in dict1.keys():\n", " for item in dict1[k].keys():\n", " dict2[k][item] = dict1[k][item]\n", "filename = 'data/天津石化人员231113.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(dict2, fl, ensure_ascii=False)\n", "print('ok')\n", " " ] }, { "cell_type": "markdown", "id": "cc53ec68-cfc4-449a-9905-095a079dc8ab", "metadata": {}, "source": [ "### 筛选体测人员,计算得分" ] }, { "cell_type": "code", "execution_count": null, "id": "224cdee4-153f-424a-aaaa-92ef58943edb", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/result_天津.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员231113.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "dict3 = {}\n", "for k, v in dict2.items():\n", " if k in dict1.keys():\n", " dict3[k] = dict2[k]\n", " i = 0\n", " score =0\n", " for item in dict2[k].keys(): \n", " if item in items:\n", " score = score + int(dict2[k][item]['得分'])\n", " i+=1\n", " dict3[k]['score'] = score\n", " dict3[k]['item_num'] = i\n", " dict3[k]['avg'] = round(score/i,2)\n", "filename = 'data/天津石化线上测试结果.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "for k, v in dict2.items():\n", " if k in dict1.keys():\n", " dict3[k] = dict2[k]\n", " dict3[k]['zhongyi'] = dict1[k]['中医体质']\n", " \n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(dict3, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "dd014e41-18f2-44e7-9f20-1190df4e7b45", "metadata": {}, "source": [ "### 因素分析" ] }, { "cell_type": "markdown", "id": "c63bca31-f003-49e9-a20d-1931c050c740", "metadata": {}, "source": [ "#### 倒班因素分析" ] }, { "cell_type": "code", "execution_count": null, "id": "2a964412-8408-4039-a788-8cc1fc7cd518", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "unit = set()\n", "\n", "for k, v in dict1.items():\n", " unit.add(dict1[k]['unit'])\n", "#print(unit)\n", "dict2 = {}\n", "for k, v in dict1.items():\n", " dict2.setdefault(v['unit'],{})\n", " dict2[v['unit']].setdefault('是',{})\n", " dict2[v['unit']].setdefault('否',{})\n", " dict2[v['unit']]['是'].setdefault('num',0)\n", " dict2[v['unit']]['否'].setdefault('num',0)\n", " dict2[v['unit']]['是'].setdefault('score',0)\n", " dict2[v['unit']]['否'].setdefault('score',0)\n", " dict2[v['unit']]['是'].setdefault('zhongyi',0)\n", " dict2[v['unit']]['否'].setdefault('zhongyi',0) \n", " dict2[v['unit']]['是'].setdefault('pianpo',0)\n", " dict2[v['unit']]['否'].setdefault('pianpo',0) \n", " if 'avg' in v.keys():\n", " dict2[v['unit']][v['daoban']]['num'] = dict2[v['unit']][v['daoban']]['num'] + 1\n", " dict2[v['unit']][v['daoban']]['score'] = dict2[v['unit']][v['daoban']]['score'] + v['avg']\n", " if 'zhongyi' in v.keys() :\n", " dict2[v['unit']][v['daoban']]['zhongyi'] = dict2[v['unit']][v['daoban']]['zhongyi'] + 1\n", " if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n", " dict2[v['unit']][v['daoban']]['pianpo'] = dict2[v['unit']][v['daoban']]['pianpo'] + 1\n", " \n", " \n", "for k, v in dict2.items(): \n", " if v['是']['num'] > 0:\n", " dict2[k]['是']['avg'] = round(v['是']['score']/v['是']['num'],2)\n", " else:\n", " dict2[k]['是']['avg'] = 0\n", " if v['否']['num'] > 0:\n", " dict2[k]['否']['avg'] = round(v['否']['score']/v['否']['num'],2)\n", " else:\n", " dict2[k]['否']['avg'] = 0\n", "list1 = [] \n", "for k, v in dict2.items():\n", " list2 = []\n", " unit = k\n", " for k1, v1 in v.items():\n", " daoban = k1\n", " num = v1['num']\n", " avg = v1['avg']\n", " zhongyi = v1['zhongyi']\n", " pianpo = v1['pianpo']\n", " list2 = [k,daoban,num,avg,zhongyi,pianpo]\n", " list1.append(list2)\n", " \n", "filename = 'data/天津倒班因素分析表.xlsx' \n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "2ccc4f6c-9cde-42d5-b41d-5b35ad86f042", "metadata": { "tags": [] }, "source": [ "#### 工龄因素分析" ] }, { "cell_type": "code", "execution_count": null, "id": "695b4933-b8c3-4be6-a024-742a982f0abb", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "unit = set()\n", "\n", "for k, v in dict1.items():\n", " unit.add(dict1[k]['unit'])\n", "#print(unit)\n", "dict2 = {}\n", "for k, v in dict1.items():\n", " gld = int(int(v['gl'])/10)\n", " dict2.setdefault(gld,{})\n", " dict2[gld].setdefault(v['sex'],{})\n", " dict2[gld][v['sex']].setdefault('num',0)\n", " dict2[gld][v['sex']].setdefault('score',0)\n", " dict2[gld][v['sex']].setdefault('zhongyi',0)\n", " dict2[gld][v['sex']].setdefault('pianpo',0) \n", " if 'avg' in v.keys():\n", " dict2[gld][v['sex']]['num'] = dict2[gld][v['sex']]['num'] + 1\n", " dict2[gld][v['sex']]['score'] = dict2[gld][v['sex']]['score'] + v['avg']\n", " if 'zhongyi' in v.keys() :\n", " dict2[gld][v['sex']]['zhongyi'] = dict2[gld][v['sex']]['zhongyi'] + 1\n", " if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n", " dict2[gld][v['sex']]['pianpo'] = dict2[gld][v['sex']]['pianpo'] + 1\n", "nl = {}\n", "nl[0] = '工龄0-9年'\n", "nl[1] = '工龄10-19年'\n", "nl[2] = '工龄20-29年'\n", "nl[3] = '工龄30-39年'\n", "nl[4] = '工龄40-49年'\n", "nl[5] = '工龄50年以上'\n", "list1 = [] \n", "for k, v in nl.items():\n", " list2 = []\n", " gld = v\n", " for k1, v1 in dict2[k].items():\n", " num = v1['num']\n", " score = v1['score']\n", " zhongyi = v1['zhongyi']\n", " pianpo = v1['pianpo']\n", " list2 = [k,daoban,num,avg,zhongyi,pianpo]\n", " list1.append(list2)" ] }, { "cell_type": "code", "execution_count": null, "id": "181ff60b-3372-441a-8cd7-29e8de66ceb8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "unit = set()\n", "\n", "for k, v in dict1.items():\n", " unit.add(dict1[k]['unit'])\n", "#print(unit)\n", "dict2 = {}\n", "for k, v in dict1.items():\n", " gld = int(int(v['gl'])/10)\n", " dict2.setdefault(gld,{}) \n", " dict2[gld].setdefault('num',0)\n", " dict2[gld].setdefault('score',0)\n", " dict2[gld].setdefault('zhongyi',0)\n", " dict2[gld].setdefault('pianpo',0) \n", " if 'avg' in v.keys():\n", " dict2[gld]['num'] = dict2[gld]['num'] + 1\n", " dict2[gld]['score'] = dict2[gld]['score'] + v['avg']\n", " if 'zhongyi' in v.keys() :\n", " dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1\n", " if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n", " dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1\n", "print(dict2)\n", "nl = {}\n", "nl[0] = '工龄0-9年'\n", "nl[1] = '工龄10-19年'\n", "nl[2] = '工龄20-29年'\n", "nl[3] = '工龄30-39年'\n", "nl[4] = '工龄40-49年'\n", "nl[5] = '工龄50年以上'\n", "list1 = [] \n", "for k, v in nl.items():\n", " list2 = []\n", " gld = v\n", " \n", " num = dict2[k]['num']\n", " score = dict2[k]['score']\n", " if num > 0:\n", " avg = round(score/num,2)\n", " else:\n", " avg = 0\n", " zhongyi = dict2[k]['zhongyi']\n", " pianpo = dict2[k]['pianpo']\n", " list2 = [gld,num,avg,zhongyi,pianpo]\n", " list1.append(list2)\n", "filename = 'data/天津倒班因素分析表(工龄).xlsx' \n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "f8fa3027-c88a-43a1-88c8-c6e9b7e94f91", "metadata": {}, "source": [ "#### 年龄因素分析" ] }, { "cell_type": "code", "execution_count": null, "id": "d5ab1a99-cb3e-4905-8c05-a6122ea09913", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "unit = set()\n", "\n", "for k, v in dict1.items():\n", " unit.add(dict1[k]['unit'])\n", "#print(unit)\n", "dict2 = {}\n", "for k, v in dict1.items():\n", " gld = int(int(v['age'])/10)\n", " dict2.setdefault(gld,{}) \n", " dict2[gld].setdefault('num',0)\n", " dict2[gld].setdefault('score',0)\n", " dict2[gld].setdefault('zhongyi',0)\n", " dict2[gld].setdefault('pianpo',0) \n", " if 'avg' in v.keys():\n", " dict2[gld]['num'] = dict2[gld]['num'] + 1\n", " dict2[gld]['score'] = dict2[gld]['score'] + v['avg']\n", " if 'zhongyi' in v.keys() :\n", " dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1\n", " if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n", " dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1\n", "nl = {}\n", "\n", "nl[2] = '20-29岁'\n", "nl[3] = '30-39岁'\n", "nl[4] = '40-49岁'\n", "nl[5] = '50-59岁'\n", "nl[6] = '60岁及以上'\n", "list1 = [] \n", "for k, v in nl.items():\n", " list2 = []\n", " gld = v\n", " \n", " num = dict2[k]['num']\n", " score = dict2[k]['score']\n", " if num > 0:\n", " avg = round(score/num,2)\n", " else:\n", " avg = 0\n", " zhongyi = dict2[k]['zhongyi']\n", " pianpo = dict2[k]['pianpo']\n", " list2 = [gld,num,avg,zhongyi,pianpo]\n", " list1.append(list2)\n", "filename = 'data/天津倒班因素分析表(年龄).xlsx' \n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "42e4ef5b-9aa8-4098-8f33-df9787dd34ab", "metadata": {}, "source": [ "#### 倒班时间因素分析" ] }, { "cell_type": "code", "execution_count": null, "id": "255b5649-fb85-424d-9fad-0f3e1dff2be3", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/天津石化人员231113_1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "unit = set()\n", "\n", "for k, v in dict1.items():\n", " unit.add(dict1[k]['unit'])\n", "#print(unit)\n", "dict2 = {}\n", "for k, v in dict1.items():\n", " if v['daoban'] == '是':\n", " \n", " gld = int(int(v['gl'])/10)\n", " dict2.setdefault(gld,{}) \n", " dict2[gld].setdefault('num',0)\n", " dict2[gld].setdefault('score',0)\n", " dict2[gld].setdefault('zhongyi',0)\n", " dict2[gld].setdefault('pianpo',0) \n", " if 'avg' in v.keys():\n", " dict2[gld]['num'] = dict2[gld]['num'] + 1\n", " dict2[gld]['score'] = dict2[gld]['score'] + v['avg']\n", " if 'zhongyi' in v.keys() :\n", " dict2[gld]['zhongyi'] = dict2[gld]['zhongyi'] + 1\n", " if 'zhongyi' in v.keys() and v['zhongyi']!='平和':\n", " dict2[gld]['pianpo'] = dict2[gld]['pianpo'] + 1\n", "print(dict2)\n", "nl = {}\n", "nl[0] = '倒班工龄0-9年'\n", "nl[1] = '倒班工龄10-19年'\n", "nl[2] = '倒班工龄20-29年'\n", "nl[3] = '倒班工龄30-39年'\n", "nl[4] = '倒班工龄40-49年'\n", "list1 = [] \n", "for k, v in nl.items():\n", " list2 = []\n", " gld = v\n", " \n", " num = dict2[k]['num']\n", " score = dict2[k]['score']\n", " if num > 0:\n", " avg = round(score/num,2)\n", " else:\n", " avg = 0\n", " zhongyi = dict2[k]['zhongyi']\n", " pianpo = dict2[k]['pianpo']\n", " list2 = [gld,num,avg,zhongyi,pianpo]\n", " list1.append(list2)\n", "filename = 'data/天津倒班因素分析表(倒班工龄).xlsx' \n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "\n", "for row in list1:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok!')" ] }, { "cell_type": "markdown", "id": "73524e7f-4262-46d3-a733-74ac18e43855", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "# 第二次体测" ] }, { "cell_type": "markdown", "id": "1be2bf2c-b1c8-494b-bc6b-681b9e75d18d", "metadata": {}, "source": [ "## 体测人员导入" ] }, { "cell_type": "code", "execution_count": null, "id": "25283932-c03a-4a34-a59d-314fc64d8fbd", "metadata": { "tags": [] }, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/天津石化员工检测花名册(20230915).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, 1).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 2).value\n", " dict1['sex'] = sheet.cell(n, 3).value\n", " dict1['unit'] = sheet.cell(n, 5).value\n", " dict1['sub_unit'] = sheet.cell(n, 6).value\n", " dict1['birth'] = sheet.cell(n,4).value\n", " person[code] = dict1\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "b758be8c-c9e2-46d4-b646-88403bb41e29", "metadata": {}, "source": [ "## 生产读卡系统文件" ] }, { "cell_type": "code", "execution_count": null, "id": "c908e5e7-c014-4b8d-a583-a8c2f7115a96", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/天津石化人员名单2023.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/data1.json\", \"w\",encoding = 'utf-8') as file:\n", " file.write(json_data) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "60f4831c-b44e-40d2-ad8a-d79079c071f9", "metadata": {}, "source": [ "## 获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "e26b88fc-c75b-4c1e-82ea-5017370afa9b", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import time\n", "import csv\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " item[k] = v\n", "re_ta = {}\n", "dict1 = {}\n", "list1 = []\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "filename = 'data/places_result_20231017.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " user = str(result[2])\n", " if user in dict1.keys(): \n", " m_item = str(result[3]) \n", " re_ta.setdefault(user,{}) \n", " re_ta[user]['name'] = dict1[user]['name']\n", " re_ta[user]['sex'] = dict1[user]['sex'] \n", " re_ta[user]['unit'] = dict1[user]['unit']\n", " re_ta[user]['sub_unit'] = dict1[user]['sub_unit']\n", " item_name = item[m_item]['name']\n", " re_ta[user].setdefault(item_name,{}) \n", " score = int(result[4])/item[m_item]['divisor'] \n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", "print(len(re_ta))\n", "filename = 'data/result_天津2023.json'\n", "\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": "43bd1127-fa76-4c1e-8890-4bb47b28ecdf", "metadata": {}, "source": [ "## 导出测试人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "0a6ea33d-c112-4ed8-9366-3376e55a5731", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','性别','单位','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/result_天津2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员名单2023.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]['sub_unit'])\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", " list1.append(list2)\n", "filename = 'data/天津石化体测情况(截至20231017).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": "4a53db48-365e-4056-8468-bbc829e83682", "metadata": {}, "source": [ "## 统计各部门测试情况" ] }, { "cell_type": "code", "execution_count": null, "id": "589a5d44-605d-41a1-a981-7ec7258305ed", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/result_天津2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员名单2023.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(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]['人数'] = dict3[unit]['人数'] - 1\n", "for k, v in dict3.items():\n", " list2 = [k,v['人数']]\n", " list1.append(list2)\n", "\n", "filename = 'data/天津部门未测试情况(截至20231013).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": "d8e4038d-8ba0-48e7-b101-d30539cc2c2a", "metadata": {}, "source": [ "## 统计单一部门未体测人员明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "2f7c9847-f283-4a09-b385-2c7559be7c7e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_天津2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "unit_name = '炼油部'\n", "rq = '20231008'\n", "list1 = []\n", "\n", "i = 1\n", "for k, v in dict2.items():\n", " unit = v['unit']\n", " if unit == unit_name and k not in dict1.keys():\n", " list2 = [i,k,v['name'],unit,v['sub_unit']]\n", " i+=1\n", " list1.append(list2)\n", "filename = f'data/天津石化{unit_name}未测试人员名单(截至{rq}).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": "a0754a83-0b8e-4bd8-9deb-b7d70a850f43", "metadata": {}, "source": [ "## 统计所有部门未体测人员明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "e47c361d-a047-4932-b24e-fdcf65cb8a73", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_天津2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "unit = set()\n", "for k, v in dict1.items():\n", " unit.add(v['unit'])\n", "rq = '20231013'\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "for unit_name in unit:\n", " list1 = []\n", "\n", " i = 1\n", " for k, v in dict2.items():\n", " unit = v['unit']\n", " if unit == unit_name and k not in dict1.keys():\n", " list2 = [i,k,v['name'],unit,v['sub_unit']]\n", " i+=1\n", " list1.append(list2)\n", " filename = f'data/天津石化{unit_name}未测试人员名单(截至{rq}).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)\n", " wb.close\n", " print(f'{unit_name}未测试人员名单(截至{rq})生产成功!')\n", "\n", " " ] }, { "cell_type": "markdown", "id": "6246f8b0-d9fc-4c9a-8ffa-07bd8dcdc3ed", "metadata": {}, "source": [ "## 统计未体测人员明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "b7f62515-c45d-4d10-8e94-b5f9a9a98e3f", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_天津2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员名单2023.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", " \n", " if k not in dict1.keys():\n", " list2 = [i,k,v['name'],unit,v['sub_unit']]\n", " i+=1\n", " list1.append(list2)\n", "filename = f'data/天津石化未测试人员名单.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": "ed2a999f-47b9-4f36-88e2-354a0e37243b", "metadata": {}, "source": [ "## 转换报告格式" ] }, { "cell_type": "code", "execution_count": null, "id": "678ce52b-5368-4ec8-8b9e-0567895d856a", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import datetime\n", "import csv\n", "from datetime import date\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " item[k] = v\n", "item['1']['en'] = 'lung'\n", "item['2']['en'] = 'grip'\n", "item['3']['en'] = 'flexion'\n", "item['4']['en'] = 'jump'\n", "item['5']['en'] = 'pushup'\n", "item['6']['en'] = 'balance'\n", "item['7']['en'] = 'reaction'\n", "item['8']['en'] = 'step'\n", "item['9']['en'] = 'situp'\n", "item['10']['en'] = 'height'\n", "item['11']['en'] = 'weight'\n", "\n", "\n", "re_ta = {}\n", "dict1 = {}\n", "list1 = []\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "filename = 'data/places_result_20231017.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#f_item = ['lung','grip','flexion','jump','balance','reaction','step','situp']\n", "#m_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step']\n", "for result in list1:\n", " user = str(result[2])\n", " rq = date.fromisoformat(result[6].replace('/','-'))\n", " if user in dict1.keys():\n", " l_xm = []\n", " m_item = str(result[3]) \n", " re_ta.setdefault(user,{}) \n", " re_ta[user]['name'] = dict1[user]['name']\n", " re_ta[user]['sex'] = dict1[user]['sex']\n", " if dict1[user]['sex'] == '男':\n", " l_xm = ['weight','height','lung','grip','flexion','jump','pushup','balance','reaction','step']\n", " else:\n", " l_xm = ['weight','height','lung','grip','flexion','jump','balance','reaction','step','situp']\n", " re_ta[user]['unit'] = dict1[user]['unit']\n", " birth = date.fromisoformat(dict1[user]['birth'].replace('/','-'))\n", " #nian = int(birth[0].strip())\n", " #yue = int(birth[1].strip())\n", " #ri = int(birth[2].strip())\n", " #print(k,nian,yue,ri)\n", " item_name = item[m_item]['en'] \n", " if item_name in l_xm: \n", " days = (rq-birth).days \n", " re_ta[user]['age'] = int(days/365)\n", " re_ta[user]['month'] = int(days/365*12)\n", " re_ta[user]['rq'] = result[6]\n", "\n", "\n", " re_ta[user].setdefault(item_name,{}) \n", " score = int(result[4])/item[m_item]['divisor'] \n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", "print(len(re_ta))\n", "filename = 'data/result_天津231017.json'\n", "\n", "with open(filename,'w') as fl:\n", " json.dump(re_ta, fl, ensure_ascii=False) \n", "print(len(re_ta))" ] }, { "cell_type": "code", "execution_count": null, "id": "17a9248a-18b3-4696-a895-dde38f7f88a5", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import time\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict3 = json.load(fl) \n", "for k,v in dict3.items():\n", " item[k] = v\n", "item['1']['en'] = 'lung'\n", "item['2']['en'] = 'grip'\n", "item['3']['en'] = 'flexion'\n", "item['4']['en'] = 'jump'\n", "item['5']['en'] = 'pushup'\n", "item['6']['en'] = 'balance'\n", "item['7']['en'] = 'reaction'\n", "item['8']['en'] = 'step'\n", "item['9']['en'] = 'situp'\n", "item['10']['en'] = 'height'\n", "item['11']['en'] = 'weight'\n", "\n", "filename = 'data/体质检测标准 (1).json' \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "\n", "\n", "def cal_score(data1):\n", " #data = {'name':'张三','sex':'M','age':37,'item':'StepExperiment','result':46} \n", " person = dict1['person']\n", " criteria = dict1['criteria']\n", " if data1['age'] >59:\n", " data1['age'] = 59\n", " if data1['age'] <20:\n", " data1['age'] = 20\n", " info = data1['sex']+str(data1['age'])\n", " bz = person[info]\n", " mx = criteria[bz][data1['item']]\n", " result = data1['result'] \n", " if data1['item'] == 'reaction':\n", " for bz1 in mx:\n", " if result > bz1:\n", " #print(bz1)\n", " score = mx.index(bz1,0)\n", " break\n", " else:\n", " score = 5\n", " else:\n", " for bz1 in mx:\n", " if result < bz1:\n", " #print(bz1)\n", " score = mx.index(bz1,0)\n", " break\n", " else:\n", " score = 5\n", " return(score)\n", "filename = 'data/体质检测标准_BMI.json'\n", "with open(filename,'r') as fl:\n", " dict4 = json.load(fl) \n", " \n", "def cal_bmi(data1):\n", " # data = {'name':'张三','sex':'M','age':37,'item':'HeightWeight','result':'177.7,97.0'}\n", " person = dict4['person']\n", " criteria = dict4['criteria']\n", " if data1['age'] > 59:\n", " data1['age'] = 59\n", " if data1['age'] <20:\n", " data1['age'] = 20\n", " info = data1['sex']+str(data1['age'])\n", " bz = person[info]\n", " #print(bz)\n", " result = data1['result']\n", " #print(data1['code'],result)\n", " height = int(float(result.split(',')[0]))\n", " weight = float(result.split(',')[1])\n", " if str(height) not in criteria[bz]:\n", " score = 1\n", " else: \n", " mx = criteria[bz][str(height)]\n", " if weight < mx[0]:\n", " score = 1\n", " elif weight < mx[1]:\n", " score = 3\n", " elif weight < mx[2]:\n", " score = 5 \n", " elif weight <= mx[3]:\n", " score = 3 \n", " elif weight > mx[3]:\n", " score = 1\n", " return score\n", " \n", " \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_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl) \n", "for k, v in dict2.items():\n", " #print(k)\n", " if v['sex'] == '男':\n", " sex = 'M'\n", " else:\n", " sex = 'F' \n", " if 'height' in v.keys() and 'weight' in v.keys():\n", " bmi_data = v['height']['成绩'].split()[0]+','+ v['weight']['成绩'].split()[0]\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'] = 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", " dict2[k][item_en]['score'] = cal_score(data1)\n", " #print(k,v[item_en]['成绩'],cal_score(data1))\n", "\n", "filename = f'data/result_天津231017.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict2,fl , ensure_ascii=False) \n", "print('ok!') " ] }, { "cell_type": "markdown", "id": "c1c98895-27e7-41c8-a43b-a63ebfa1c5e2", "metadata": {}, "source": [ "## 生成报告" ] }, { "cell_type": "code", "execution_count": null, "id": "f6171872-6b48-480a-b2c7-cf368d6cc6d8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import requests\n", "import json\n", "import openpyxl\n", "\n", "\n", "headers = {\n", " \"Content-Type\": \"application/json; charset=UTF-8\"\n", " }\n", "filename = 'data/result_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "fiie_path ='./134/'\n", "list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']\n", "i=1\n", "list2 = []\n", "for k, v in dict1.items():\n", " list1 = []\n", " mydata = {}\n", " \n", " id = str(k).rjust(8,\"0\")\n", " mydata['path'] = fiie_path+id+'-'+ v['name']+'.pdf'\n", " mydata['title'] = '中石化(天津)石油化工\\n有限公司'\n", " mydata['subtitle'] = v['unit']\n", " mydata['id'] = id\n", " mydata['name'] = v['name']\n", " if v['sex'] == '男':\n", " mydata['gender'] = 'male'\n", " else:\n", " mydata['gender'] = 'female'\n", " \n", " mydata['month'] = v['month']\n", " mydata['fits'] = {}\n", " for item in list_item:\n", " if item in v.keys():\n", " if item in ['lung','pushup','step','situp']:\n", " mark = v[item]['成绩'].split()[0].split('.')[0]\n", " else:\n", " mark = v[item]['成绩'].split()[0]\n", " mydata['fits'][item] = {'mark':mark,'score':v[item]['score']}\n", " if len(mydata['fits']) >2:\n", " \n", " list1.append(mydata)\n", " list2.append([k,v['name']])\n", " i+=1\n", " x = requests.post('http://localhost:3003', data = json.dumps(list1), headers=headers)\n", " print(id,v['name'],x.text)\n", " #x.close()\n", "print(i)" ] }, { "cell_type": "markdown", "id": "489fdbe1-30ed-4630-b2fa-d926e41bdcc9", "metadata": {}, "source": [ "## 核对报告人数" ] }, { "cell_type": "code", "execution_count": null, "id": "906fa6c6-3446-4176-a443-fe16e52a8a3a", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript-old2/134'\n", "\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "\n", "filename = 'data/result_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "for fn in fls:\n", " fi_name =Path(fn).stem.split('-')[0]\n", " code = int(fi_name)\n", " list1.append(str(code))\n", "for k, v in dict1.items():\n", " if k not in list1:\n", " print(k,v['name'])" ] }, { "cell_type": "markdown", "id": "cb587095-1a0c-4ab1-b9e5-e9e5b0d52cee", "metadata": {}, "source": [ "## 报告按部门分类" ] }, { "cell_type": "code", "execution_count": null, "id": "3fa6a1a9-63af-4f4e-9d30-b94f4357f7dc", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript/天津石化问卷'\n", "new_path = 'file/天津石化问卷1'\n", "old = []\n", "dict2 = {}\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "for fn in fls:\n", " fi_name =Path(fn).stem.split('-')[0]\n", " code = int(fi_name)\n", " unit_path = Path(new_path,dict1[str(code)]['unit'],dict1[str(code)]['sub_unit'])\n", " unit_path.mkdir(parents = True, exist_ok = True)\n", " n_name = Path(unit_path,Path(fn).stem+'.pdf')\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", " #print(n_name)" ] }, { "cell_type": "code", "execution_count": null, "id": "3f75763f-79bd-4a8c-9612-2eba89ce32f1", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript/134'\n", "new_path = 'file/134_2'\n", "old = []\n", "dict2 = {}\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "for fn in fls:\n", " fi_name =Path(fn).stem.split('-')[0]\n", " code = int(fi_name)\n", " if dict1[str(code)]['sex'] =='男': \n", " unit_path = Path(new_path,dict1[str(code)]['unit'])\n", " unit_path.mkdir(parents = True, exist_ok = True)\n", " n_name = Path(unit_path,Path(fn).stem+'.pdf')\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", " #print(n_name)" ] }, { "cell_type": "markdown", "id": "fdcd8ea1-21ab-48ab-b7cc-0dad65b06bf2", "metadata": {}, "source": [ "## 生成体测报告打印明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "623671be-cef0-4a2c-bf1a-889ab159760f", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "import openpyxl\n", "\n", "fi_path = '/home/songyi/pdf-typescript/134'\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "list1 = []\n", "for fn in fls:\n", " list2 = []\n", " fi_name =Path(fn).stem.split('-')[0] \n", " code = int(fi_name)\n", " unit = dict1[str(code)]['unit']\n", " list2 = [fi_name,Path(fn).stem.split('-')[1],unit]\n", " \n", " list1.append(list2)\n", "print(list1)\n", "filename = 'data/天津石化体测报告打印明细表.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) \n", "print('ok')" ] }, { "cell_type": "code", "execution_count": null, "id": "91fbc553-da7c-4c1e-bcf3-944dc59204b6", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "import openpyxl\n", "\n", "fi_path = '/home/songyi/pdf-typescript/134'\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "list1 = []\n", "for fn in fls:\n", " list2 = []\n", " fi_name =Path(fn).stem.split('-')[0] \n", " code = int(fi_name)\n", " if dict1[str(code)]['sex'] =='男':\n", " unit = dict1[str(code)]['unit']\n", " list2 = [fi_name,Path(fn).stem.split('-')[1],unit]\n", " \n", " list1.append(list2)\n", "print(list1)\n", "filename = 'data/天津石化体测报告打印明细表(第一批).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) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "4a075c1b-41d9-4ff5-8f0a-115127e5e155", "metadata": {}, "source": [ "## 生成体测成绩明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "b363792b-cbc6-46a7-b87f-1e122bcb116e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['lung','grip','flexion','jump','pushup','situp','balance','reaction','step']\n", "bmi = ['height','weight']\n", "title = ['编号','姓名','性别','单位/部门','身高','体重','bmi','肺活量','','握力','','坐位体前屈','','纵跳','','俯卧撑','','一分钟仰卧起坐','','单脚站立','','选择反应时','','台阶指数']\n", "\n", "filename = 'data/result_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = []\n", "for k, v in dict1.items(): #print(k,dict2[str(k)]['name'])\n", " list2 = []\n", " list2.append(str(k).rjust(5,'0'))\n", " list2.append(dict1[k]['name']) \n", " list2.append(dict1[k]['sex'])\n", " list2.append(dict1[k]['unit'])\n", " i = 0\n", " if 'bmi' in dict1[k].keys():\n", " list2.append(dict1[k]['height']['成绩'])\n", " list2.append(dict1[k]['weight']['成绩'])\n", " list2.append(dict1[k]['bmi']['score'])\n", " i+=1\n", " else:\n", " list2.append('') \n", " list2.append('') \n", " list2.append('') \n", " \n", " \n", " for item in items:\n", " if item in dict1[k].keys():\n", " list2.append(dict1[k][item]['成绩'])\n", " list2.append(dict1[k][item]['score']) \n", " i+=1\n", " elif item =='name':\n", " list2.append(dict1[k][item])\n", " else:\n", " list2.append('') \n", " list2.append('') \n", " if i>2:\n", " list1.append(list2)\n", "filename = 'data/天津石化体测情况表.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)\n", "print('ok') " ] }, { "cell_type": "markdown", "id": "5608369a-f33f-4c02-a68f-f4f7bb410069", "metadata": {}, "source": [ "## 生成新格式文件" ] }, { "cell_type": "code", "execution_count": null, "id": "8397633f-fddb-4cfa-b9bd-e38f3fe6772c", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript/天津石化问卷'\n", "new_path = 'file/134_2'\n", "old = []\n", "filename = 'data/result_天津问卷2.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "i =0\n", "for fn in fls:\n", " code =str(int(Path(fn).stem.split('-')[0]))\n", " if code in dict1.keys():\n", " i+=1\n", " #print(i,code,dict1[code]['rq'].replace('-',''))\n", " \n", " n_name = Path(new_path,code.rjust(8,'0')+'_'+dict1[code]['rq'].replace('-','')+'.pdf')\n", " #print(i,n_name)\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "5facc164-841c-4866-8a2c-2d54f72d6a0b", "metadata": {}, "source": [ "## 导入网上问卷内容" ] }, { "cell_type": "code", "execution_count": null, "id": "35d1738a-1ec1-4764-bcbd-c1333fac6bfd", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import csv\n", "import openpyxl\n", "import time\n", "from datetime import date\n", "\n", "dict1 = {}\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict3 = json.load(fl)\n", "\n", "\n", "list1 = []\n", "filename = 'data/Survey_20231218.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " list1.append(line)\n", "#print(list1)\n", "dict2 = {}\n", "\n", "\n", "\n", "\n", "for item in list1:\n", " psy = []\n", " tcm = []\n", " spine = []\n", " for i in range(0,45):\n", " psy.append(0)\n", " for i in range(0,60):\n", " tcm.append(0)\n", " for i in range(0,26):\n", " spine.append(0)\n", " #print(item)\n", " content = json.loads(item[5])\n", " if str(item[4]) not in dict1.keys():\n", " dict1[str(item[4])] = dict3[str(item[4])]\n", " rq = date.fromisoformat(item[6].replace('/','-').split(' ')[0])\n", " #dict1[phone[item[2]]]['rq'] = date.fromisoformat(item[6].replace('/','-').split(' ')[0])\n", " for k, v in content.items():\n", " if 'psy' in k:\n", " i = int(k[3:])\n", " psy[i-1] = int(v)\n", " if 'tcm' in k:\n", " i = int(k[3:])\n", " tcm[i-1] = int(v)\n", " if 'spine' in k:\n", " i = int(k[5:])\n", " spine[i-1] = int(v)\n", " if 'psy' in item[5]:\n", " #for i in range(5,26):\n", " # new_valve = 5-psy[i]\n", " # psy[i] = new_valve\n", " for i in range(26,40):\n", " new_valve = 1+psy[i]\n", " psy[i] = new_valve\n", " psy[44] = []\n", " dict1[str(item[4])]['psy'] = psy\n", " if 'tcm' in item[5]:\n", " dict1[str(item[4])]['tcm'] = tcm\n", " if 'spine' in item[5]:\n", " dict1[str(item[4])]['spine'] = spine\n", " birth = date.fromisoformat(dict3[str(item[4])]['birth'].replace('/','-'))\n", "\n", " days = (rq-birth).days \n", " dict1[str(item[4])]['age'] = int(days/365)\n", " dict1[str(item[4])]['month'] = int(days/365*12)\n", " dict1[str(item[4])]['rq'] = item[6].replace('/','-').split(' ')[0]\n", "#print(dict1)\n", "filename = 'data/result_天津问卷2.json'\n", "\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False) " ] }, { "cell_type": "code", "execution_count": null, "id": "d842c189-dcc2-4e31-9bc2-e272c929e6af", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cc9e1717-f445-49a9-a770-c103da603434", "metadata": { "tags": [] }, "outputs": [], "source": [ "import requests\n", "import json\n", "\n", "\n", "\n", "headers = {\n", " \"Content-Type\": \"application/json; charset=UTF-8\"\n", " }\n", "filename = 'data/result_天津问卷1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "list1 = []\n", "fiie_path ='./天津石化问卷/'\n", "list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']\n", "i = 27\n", "list2 = []\n", "#list1 = []\n", "for k,v in dict1.items(): \n", " list1 = []\n", " mydata = {} \n", " id = k.rjust(8,\"0\")\n", " mydata['path'] = fiie_path+id+'-'+ v['name']+'.pdf'\n", " mydata['title'] = '中石化(天津)石油化工\\n有限公司'\n", " mydata['subtitle'] = v['unit']\n", " mydata['id'] = id\n", " mydata['name'] = v['name']\n", " if v['sex'] == '男':\n", " mydata['gender'] = 'male'\n", " else:\n", " mydata['gender'] = 'female' \n", " mydata['month'] = v['month']\n", " \n", " if 'tcm' in v.keys():\n", " mydata.setdefault('surveys',{})\n", " mydata['surveys']['tcm'] = v['tcm']\n", " if 'psy' in v.keys():\n", " mydata.setdefault('surveys',{})\n", " mydata['surveys']['psy'] = v['psy']\n", " if 'tcm' in v.keys():\n", " mydata.setdefault('surveys',{})\n", " mydata['surveys']['spine'] = v['spine']\n", " \n", " \n", " \n", " list1.append(mydata)\n", " #list2.append([k,dict1[k]['name']])\n", "\n", " x = requests.post('http://localhost:3003', data = json.dumps(list1), headers=headers)\n", " print(id,dict1[k]['name'],x.text)\n", " x.close()\n", " #print(mydata)\n", "#filename = 'data/data_天津问卷.json'\n", "\n", "#with open(filename,'w') as fl:\n", "# json.dump(list1, fl, ensure_ascii=False) " ] }, { "cell_type": "markdown", "id": "72a5c88e-d8b0-473c-b9d1-37c7acbdcf0f", "metadata": {}, "source": [ "## 核对网上问卷人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "ca0780fe-5d74-4d4e-ad1d-38813040c778", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import csv\n", "import openpyxl\n", "\n", "dict1 = {}\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict3 = json.load(fl)\n", "\n", "\n", "list1 = []\n", "filename = 'data/Survey_20231218.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " list1.append(line)\n", "list2 = []\n", "for item in list1:\n", " list3 = []\n", " name = item[3]\n", " code = item[4]\n", " if str(code) in dict3.keys() and name ==dict3[str(code)]['name']:\n", " list3 = [code,name,dict3[str(code)]['sex'],dict3[str(code)]['unit']] \n", " list2.append(list3)\n", "\n", "filename = 'data/天津石化问卷情况表(20231218).xlsx'\n", "wb = openpyxl.Workbook()\n", "sheet = wb.active\n", "sheet.append(title)\n", "for row in list2:\n", " sheet.append(row)\n", " \n", "wb.save(filename)\n", "print('ok') " ] }, { "cell_type": "code", "execution_count": null, "id": "9b469138-1da9-43ca-98e8-8dc6cb3916ce", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import csv\n", "import openpyxl\n", "\n", "dict1 = {}\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict3 = json.load(fl)\n", "\n", "\n", "list1 = []\n", "filename = 'data/Survey_20231218.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " list1.append(line)\n", "list2 = []\n", "\n", "for item in list1:\n", " list3 = []\n", " name = item[3]\n", " code = item[4]\n", " if code in list2:\n", " print(code)\n", " else:\n", " list2.append(code)\n", " " ] }, { "cell_type": "markdown", "id": "08bcbf58-4356-4f30-850f-0d0ff0e2528b", "metadata": {}, "source": [ "# 第三次体测(2024年10月)" ] }, { "cell_type": "markdown", "id": "e439892b-fd46-4264-8f3c-202bc6388384", "metadata": {}, "source": [ "## 体测人员导入" ] }, { "cell_type": "code", "execution_count": null, "id": "2fdbadd7-e9b1-45bf-ae95-52b4d65e03e8", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "\n", "\n", "wb = openpyxl.load_workbook('data/天津石化名单(2024年).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, 1).value)\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " dict1['name'] = sheet.cell(n, 4).value\n", " dict1['sex'] = sheet.cell(n, 6).value\n", " dict1['unit'] = sheet.cell(n, 2).value\n", " dict1['sub_unit'] = sheet.cell(n, 3).value\n", " dict1['birth'] = str(sheet.cell(n, 7).value).replace('/','-').split(' ')[0] \n", " dict1['id'] = sheet.cell(n,5).value\n", " person[code] = dict1\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "df164df9-66b9-44bf-871b-d137f2322648", "metadata": {}, "source": [ "## 生成读卡系统文件" ] }, { "cell_type": "code", "execution_count": null, "id": "ddb84188-aafb-49b3-836d-79d9b13dfe35", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/天津石化人员2024.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/data_天津石化人员2024.json\", \"w\",encoding = 'utf-8') as file:\n", " file.write(json_data) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "8222893c-b6e6-47bf-9daa-81b8b7a1952c", "metadata": {}, "source": [ "## 获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "f922ad6a-e7ff-4ff9-923f-3e7aa8ea112b", "metadata": {}, "outputs": [], "source": [ "import json\n", "import time\n", "import csv\n", "\n", "filename = '../item.json'\n", "item = {}\n", "unit = {}\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for k,v in dict1.items():\n", " item[k] = v\n", "re_ta = {}\n", "dict1 = {}\n", "list1 = []\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "\n", "filename = 'data/places_result_20241104.csv'\n", "with open(filename,'r',newline='') as csv_file:\n", " fl = csv.reader(csv_file,delimiter=',')\n", " header = next(fl) \n", " for line in fl:\n", " #line = re.sub('[\\r\\n\\f ]{1,}', '', line)\n", " list1.append(line)\n", "#print(list1)\n", "for result in list1:\n", " user = str(result[2])\n", " if user in dict1.keys(): \n", " m_item = str(result[3]) \n", " re_ta.setdefault(user,{}) \n", " re_ta[user]['name'] = dict1[user]['name']\n", " re_ta[user]['sex'] = dict1[user]['sex'] \n", " re_ta[user]['unit'] = dict1[user]['unit']\n", " re_ta[user]['sub_unit'] = dict1[user]['sub_unit']\n", " item_name = item[m_item]['name']\n", " re_ta[user].setdefault(item_name,{}) \n", " score = int(result[4])/item[m_item]['divisor'] \n", " re_ta[user][item_name]['成绩'] = f'{score} {item[m_item][\"unit\"]}'\n", "print(len(re_ta))\n", "filename = 'data/result_天津2024.json'\n", "\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": "618e765d-c75d-4a46-9097-557e3c568123", "metadata": {}, "source": [ "## 导出测试人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "f59cf12c-d409-4de8-80f9-8264e4a2d221", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "title = ['编号','姓名','性别','单位','部门','身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/result_天津2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2024.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]['sub_unit'])\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", " list1.append(list2)\n", "filename = 'data/天津石化体测情况(2024年).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": "12837ccf-90a5-43cd-8201-2777aa6d3dd4", "metadata": {}, "source": [ "## 统计各部门测试情况" ] }, { "cell_type": "code", "execution_count": null, "id": "8301201e-43fc-4d24-94a0-9c554ca39dfb", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/result_天津2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2024.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(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]['人数'] = dict3[unit]['人数'] - 1\n", "for k, v in dict3.items():\n", " list2 = [k,v['人数']]\n", " list1.append(list2)\n", "\n", "filename = 'data/天津部门未测试情况(截至20241031).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": "code", "execution_count": null, "id": "efff43f0-a5f8-4de8-9f79-9564bf4fbb63", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/result_天津2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2024.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(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", "\n", "for k, v in dict3.items():\n", " list2 = [k,v['人数']]\n", " list1.append(list2)\n", "\n", "filename = 'data/天津部门人员情况.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": "0e3c4368-a2d7-43c7-805a-7262cf43060c", "metadata": {}, "source": [ "## 部门、车间合并" ] }, { "cell_type": "code", "execution_count": null, "id": "e3eeb600-81a7-4220-bbfd-b0325f2ca06d", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/result_天津石化2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "dict3 = {}\n", "for k, v in dict1.items():\n", " unit = v['unit'].replace(' ','').replace('(','(').replace(')',')')\n", " sub_unit = dict2[k]['sub_unit'].replace(' ','').replace('(','(').replace(')',')')\n", " v['unit'] = unit\n", " v['sub_unit'] = sub_unit\n", "filename = 'data/result_天津2024(部门).json'\n", "\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False) \n", "print(len(dict1))" ] }, { "cell_type": "code", "execution_count": null, "id": "9554ebdf-6a19-4301-8c14-465d6ae4d870", "metadata": { "tags": [] }, "outputs": [], "source": [ "filename = 'data/result_天津2024(部门).json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "set1 = set()\n", "for k,v in dict1.items():\n", " unit = v['unit']+' '+v['sub_unit']\n", " set1.add(unit)\n", "for item in set1:\n", " print(item,len(item))" ] }, { "cell_type": "markdown", "id": "6d673f9e-e91b-40f6-bee6-c4bf59308302", "metadata": {}, "source": [ "## 体测报告按部门、车间分类" ] }, { "cell_type": "code", "execution_count": null, "id": "0f945c49-ac5e-4587-8d8c-96667c327248", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript/天津石化2024'\n", "new_path = 'file/天津石化2024'\n", "old = []\n", "dict2 = {}\n", "\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "for fn in fls:\n", " fi_name =Path(fn).stem.split('-')[0]\n", " code = int(fi_name)\n", " unit_path = Path(new_path,dict1[str(code)]['unit'],dict1[str(code)]['sub_unit'])\n", " unit_path.mkdir(parents = True, exist_ok = True)\n", " n_name = Path(unit_path,Path(fn).stem+'.pdf')\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)" ] }, { "cell_type": "code", "execution_count": null, "id": "5eaa34bb-c5a4-4bb4-8d7b-5116fb6bacc6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "98d2da23-cfd4-461a-890a-4533f0409712", "metadata": {}, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript/天津石化2024'\n", "new_path = 'file/天津石化2024_1'\n", "old = []\n", "filename = 'data/result_天津石化2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "\n", "for fn in fls:\n", " code =str(int(Path(fn).stem.split('-')[0]))\n", " if code in dict1.keys():\n", " \n", " n_name = Path(new_path,dict2[code]['id']+'_'+dict1[code]['rq'].replace('/','')+'.pdf')\n", " #print(i,n_name)\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)\n", "print('ok')" ] }, { "cell_type": "markdown", "id": "5cab4519-5ffa-4ac0-8db7-5674e181fc14", "metadata": {}, "source": [ "## 生成体测报告打印明细表" ] }, { "cell_type": "code", "execution_count": 48, "id": "9dcbc866-2481-4cf6-a563-df4bb6596dfd", "metadata": { "execution": { "iopub.execute_input": "2025-12-03T13:04:55.617841Z", "iopub.status.busy": "2025-12-03T13:04:55.617249Z", "iopub.status.idle": "2025-12-03T13:04:56.054475Z", "shell.execute_reply": "2025-12-03T13:04:56.053478Z", "shell.execute_reply.started": "2025-12-03T13:04:55.617812Z" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ok\n" ] } ], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "import openpyxl\n", "\n", "fi_path = '/home/songyi/pdf-typescript/天津石化2024'\n", "\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "list1 = []\n", "title = ['测试编号','姓名','性别','部门','车间']\n", "for fn in fls:\n", " list2 = []\n", " fi_name =Path(fn).stem.split('-')[0] \n", " code = int(fi_name)\n", " sex = dict1[str(code)]['sex']\n", " unit = dict1[str(code)]['unit']\n", " sub_unit = dict1[str(code)]['sub_unit']\n", " list2 = [fi_name,Path(fn).stem.split('-')[1],sex,unit,sub_unit]\n", " \n", " list1.append(list2)\n", "\n", "filename = 'data/天津石化体测报告明细表(2024年).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) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "0651c618-6504-44b2-83f6-40b2f2fe5cfc", "metadata": {}, "source": [ "## 生成体测成绩明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "e92d76a8-6841-4a1b-8529-caa5e37d624a", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "items = ['lung','grip','flexion','jump','pushup','situp','balance','reaction','step']\n", "bmi = ['height','weight']\n", "title = ['测试编号','员工编号','姓名','性别','单位','部门','身高','体重','bmi','肺活量','','握力','','坐位体前屈','','纵跳','','俯卧撑','','一分钟仰卧起坐','','单脚站立','','选择反应时','','台阶指数']\n", "\n", "filename = 'data/result_天津石化2024.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "filename = 'data/天津石化人员2024.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "\n", "list1 = []\n", "for k, v in dict1.items(): #print(k,dict2[str(k)]['name'])\n", " list2 = []\n", " list2.append(str(k).rjust(5,'0'))\n", " list2.append(dict2[k]['id'])\n", " list2.append(dict1[k]['name']) \n", " list2.append(dict1[k]['sex'])\n", " list2.append(dict1[k]['unit'])\n", " list2.append(dict2[k]['sub_unit'])\n", " i = 0\n", " if 'bmi' in dict1[k].keys():\n", " list2.append(dict1[k]['height']['成绩'])\n", " list2.append(dict1[k]['weight']['成绩'])\n", " list2.append(dict1[k]['bmi']['score'])\n", " i+=1\n", " else:\n", " list2.append('') \n", " list2.append('') \n", " list2.append('') \n", " \n", " \n", " for item in items:\n", " if item in dict1[k].keys():\n", " list2.append(dict1[k][item]['成绩'])\n", " list2.append(dict1[k][item]['score']) \n", " i+=1\n", " elif item =='name':\n", " list2.append(dict1[k][item])\n", " else:\n", " list2.append('') \n", " list2.append('') \n", " if i>2:\n", " list1.append(list2)\n", "filename = 'data/天津石化体测情况表(2024年).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)\n", "print('ok') " ] }, { "cell_type": "markdown", "id": "dd32c384-262d-4137-bb44-2d3a590438f4", "metadata": {}, "source": [ "# 2025年体测" ] }, { "cell_type": "markdown", "id": "cd516502-5515-47f5-85a0-2312d78cdca7", "metadata": {}, "source": [ "## 体测人员导入" ] }, { "cell_type": "code", "execution_count": null, "id": "c101eccb-a2f3-4404-9583-682cec049160", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "from datetime import date\n", "\n", "wb = openpyxl.load_workbook('data/天津石化人员2025.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "person = {}\n", "\n", "for n in range(2, sheet.max_row+1):\n", " code = str(sheet.cell(n, 1).value)\n", " person.setdefault(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, 2).value\n", " dict1['sub_unit'] = sheet.cell(n, 3).value\n", " person[code] = dict1\n", "filename = 'data/天津石化人员2025.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(person, fl, ensure_ascii=False)\n", "print(len(person),'ok')" ] }, { "cell_type": "markdown", "id": "3319058d-0a39-46f7-b493-260e1b529786", "metadata": {}, "source": [ "## 生成读卡系统文件" ] }, { "cell_type": "code", "execution_count": null, "id": "85bae94e-f480-4c0b-a120-e516e6a5c14d", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/天津石化人员2025.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']+'-'+v['sub_unit']}\n", " list1.append(dict2)\n", "json_data = json.dumps(list1,ensure_ascii=False, indent=4) \n", "\n", "# 将 json 数据写入文件\n", "with open(\"data/card_天津石化2025.json\", \"w\",encoding = 'utf-8') as file:\n", " file.write(json_data) \n", "print(len(list1),'ok')" ] }, { "cell_type": "markdown", "id": "4b7730ae-e5ca-4d4f-8abf-fd23e9138002", "metadata": {}, "source": [ "## 合并读卡系统文件" ] }, { "cell_type": "code", "execution_count": null, "id": "0bebc944-ffa0-4bc9-8ae5-5643fe1015dd", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/天津石化人员2025.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/data_天津石化2025.json'\n", "with open(filename,'r') as fl:\n", " list1 = json.load(fl)\n", "for item in list1:\n", " code = item['id'].lower()\n", " if code not in dict1.keys():\n", " print(code,item['name'],item['unit'])\n", " code = code.lower()\n", " unit = item['unit'].split('-')[0]\n", " sub_unit = item['unit'].split('-')[1]\n", " dict1.setdefault(code,{})\n", " dict1[code]['name'] = item['name']\n", " dict1[code]['sex'] = item['gender']\n", " dict1[code]['unit'] = unit\n", " dict1[code]['sub_unit'] = sub_unit\n", " dict1[code]['birth'] = item['birth']\n", "filename = 'data/天津石化人员2025.json'\n", "with open(filename, 'w') as fl:\n", " json.dump(dict1, fl, ensure_ascii=False)\n", "print(len(dict1),'ok')" ] }, { "cell_type": "markdown", "id": "fd5cb794-6197-4204-a421-fd7a14aeab20", "metadata": {}, "source": [ "## 获取人员测试成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "52de3ba0-f430-444b-87e9-1f13c3e2dcc2", "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/天津石化人员2025.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "filename = 'data/marks_20251129.csv'\n", "re_ta = My.get_result_2023(filename,dict1)\n", "\n", "\n", "filename = 'data/result_天津石化2025.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": "f58f041b-a3cb-475c-8ac2-a8a747c96386", "metadata": {}, "source": [ "## 统计体测人员明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "04990b9f-a8f9-4442-935e-d223fde24e72", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_天津石化2025.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2025.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 dict1.items(): \n", " list2 = [i,k,v['name'],v['unit'],dict2[k]['sub_unit'],v['rq'],]\n", " i+=1\n", " list1.append(list2)\n", "#print(list1)\n", "filename = f'data/天津石化体测人员名单.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": "ca8b7f16-4654-4117-9e86-6d81ae464bac", "metadata": {}, "source": [ "## 统计各部门测试情况" ] }, { "cell_type": "code", "execution_count": null, "id": "fcb3c816-5260-4807-9536-b8203680ed1c", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_天津石化2025-2.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2025.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/天津石化部门测试情况(截至20241130).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": "386e1cf1-74d4-4aad-a228-b30e65ffd710", "metadata": {}, "source": [ "## 统计未体测人员明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "df8b9405-a2d9-413d-bcf4-205704b0243a", "metadata": {}, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "filename = 'data/result_天津石化2025.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2025.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/天津石化未测试人员名单(截至20251126).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": "dd24318c-a408-43b0-9b5d-3f8e643d7bab", "metadata": {}, "source": [ "## 统计俯卧撑人员明细表" ] }, { "cell_type": "code", "execution_count": null, "id": "06979464-2285-4862-94de-84e772f44bbf", "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", "for n in range(2, sheet.max_row+1):\n", " \n", " if sheet.cell(n, 4).value=='pushup':\n", " code = str(int(sheet.cell(n, 3).value))\n", " person.setdefault(code, {})\n", " dict1 = {}\n", " \n", " dict1['item'] = sheet.cell(n, 4).value\n", " dict1['mark'] = sheet.cell(n, 5).value\n", " dict1['date'] = sheet.cell(n, 6).value \n", " dict1['create_date'] = sheet.cell(n, 7).value\n", " person[code] = dict1\n", " #list2 = [code,dict1['date'],sheet.cell(n, 5).value,dict1['create_date']]\n", " #list1.append(list2)\n", "for k, v in person.items():\n", " list2 = [k,v['date'],v['mark'],v['create_date']]\n", " list1.append(list2)\n", " \n", "filename = f'data/天津石化俯卧撑仪器记录明细表.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": "d4bd8a8f-6326-4568-8417-abb62e35fe00", "metadata": {}, "source": [ "## 导入手工数据" ] }, { "cell_type": "code", "execution_count": null, "id": "97150a5f-9fcd-4b0a-aed9-61b10b26f2da", "metadata": {}, "outputs": [], "source": [ "import openpyxl\n", "import json\n", "from datetime import date\n", "\n", "wb = openpyxl.load_workbook('data/天津石化手工数据2025.xlsx')\n", "sheet = wb.active\n", "filename = 'data/result_天津石化2025.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 = sheet.cell(n, 2).value\n", " mark = str(sheet.cell(n, 3).value)\n", " rq = str(sheet.cell(n, 3).value)\n", " if code in dict2.keys():\n", " dict2[code].setdefault(item,{})\n", " dict2[code][item]['成绩'] = mark\n", " else:\n", " print(code)\n", " \n", "filename = 'data/result_天津石化2025-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": "58336a12-561b-4af7-be00-71c6d0a8ef75", "metadata": {}, "source": [ "## 导入腰臀数据" ] }, { "cell_type": "code", "execution_count": null, "id": "f50b8f39-0311-4537-8eae-9a84af01702d", "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_天津石化2025-1.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 = 'wh'\n", " mark = str(sheet.cell(n, 2).value)+','+str(sheet.cell(n, 3).value)\n", " if code in dict2.keys():\n", " dict2[code].setdefault(item,{})\n", " dict2[code][item]['成绩'] = mark\n", " else:\n", " print(code)\n", " \n", "filename = 'data/result_天津石化2025-2.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict2, fl, ensure_ascii=False) \n", "print(len(dict2)) " ] }, { "cell_type": "markdown", "id": "43d2d7dd-b747-4177-80df-5ca36bea8541", "metadata": {}, "source": [ "## 统计体测人员项目数" ] }, { "cell_type": "code", "execution_count": 40, "id": "227b2b23-1eb4-4da9-896f-5db070228f5b", "metadata": { "execution": { "iopub.execute_input": "2025-12-03T11:08:04.377758Z", "iopub.status.busy": "2025-12-03T11:08:04.377114Z", "iopub.status.idle": "2025-12-03T11:08:04.744096Z", "shell.execute_reply": "2025-12-03T11:08:04.743518Z", "shell.execute_reply.started": "2025-12-03T11:08:04.377699Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "01738573 曹志玲 研究院 2\n", "01730621 张敬东 电仪部 2\n", "01733160 王金江 烯烃部 2\n", "01736847 章洪 热电部 2\n", "01736378 杨桂强 热电部 1\n", "01737731 徐欣 运输销售部 1\n", "01736804 李振江 热电部 2\n", "01737858 于学宁 运输销售部 2\n", "01737542 刘呈健 水务部 1\n" ] } ], "source": [ "import json\n", "\n", "filename = 'data/result_天津石化2025-2.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", "list3 = []\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'],len(list1))\n", " list3.append(k)\n", "filename = 'data/天津石化人员2025.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 dict1.items():\n", " if k not in list3:\n", " list2 = [i,k,v['name'],v['unit'],dict2[k]['sub_unit'],v['rq'],]\n", " i+=1\n", " list1.append(list2)\n", "#print(list1)\n", "filename = f'data/天津石化体测人员名单(可出报告).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": "620b0be5-0651-4f62-9b4d-8cc590168a61", "metadata": {}, "source": [ "## 导出测试人员信息" ] }, { "cell_type": "code", "execution_count": null, "id": "d2900f9b-573e-41b1-aeae-8cec37a52826", "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_天津石化2025-1.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员2025.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年).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": "3df27e2f-55c0-446a-af01-074e85461bab", "metadata": {}, "source": [ "### 生成报告(按照编号)" ] }, { "cell_type": "code", "execution_count": 44, "id": "d0368e0f-270b-47fd-aec0-cae3cadd68b2", "metadata": { "execution": { "iopub.execute_input": "2025-12-03T11:31:43.458591Z", "iopub.status.busy": "2025-12-03T11:31:43.458312Z", "iopub.status.idle": "2025-12-03T11:31:44.427029Z", "shell.execute_reply": "2025-12-03T11:31:44.426528Z", "shell.execute_reply.started": "2025-12-03T11:31:43.458563Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "import requests\n", "import json\n", "import openpyxl\n", "\n", "\n", "headers = {\n", " \"Content-Type\": \"application/json; charset=UTF-8\"\n", " }\n", "filename = 'data/result_天津石化2025-2.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "filename = 'data/天津石化人员2025.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "list1 = []\n", "file_path ='./天津石化2025/'\n", "list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi','wh']\n", "i=0\n", "list2 = []\n", "person = ['03603316']\n", "bumen =['南港乙烯项目管理部']\n", "for k, v in dict1.items():\n", " list1 = []\n", " mydata = {}\n", " \n", " #id = str(k).rjust(8,\"0\")\n", " id = str(k)\n", " #if v['unit'] in bumen:\n", " if id in person:\n", " mydata['path'] = file_path+id+'-'+ v['name']+'.pdf'\n", " mydata['title'] = '中石化(天津)石油化工\\n有限公司'\n", " mydata['subtitle'] = v['unit'] + ' '+dict2[k]['sub_unit']\n", " mydata['id'] = id\n", " mydata['name'] = v['name']\n", " if v['sex'] == '男':\n", " mydata['gender'] = 'male'\n", " else:\n", " mydata['gender'] = 'female'\n", " \n", " mydata['month'] = v['month']\n", " mydata['fits'] = {}\n", " \n", " for item in list_item:\n", " if item in v.keys():\n", " mydata.setdefault('fits',{})\n", " if item in ['lung','pushup','step','situp']:\n", " mark = v[item]['成绩'].split()[0].split('.')[0]\n", " else:\n", " mark = v[item]['成绩'].split()[0]\n", " if item == 'bmi':\n", " mydata['fits']['heightWeight'] = {'mark':mark,'score':-1}\n", " else:\n", " mydata['fits'][item] = {'mark':mark,'score':-1}\n", " #if len(mydata['fits']) >2 or len(mydata['surveys']) >0:\n", " if len(mydata['fits']) >2 : \n", " list1.append(mydata)\n", " list2.append([k,v['name']])\n", " i+=1\n", " x = requests.post('http://localhost:3003', data = json.dumps(list1), headers=headers)\n", " #print(id,v['name'],x.text)\n", " #print(mydata)\n", " x.close()\n", "print(i)" ] }, { "cell_type": "markdown", "id": "428ff4de-5c44-4f13-bfd0-3ccca2d2aff4", "metadata": {}, "source": [ "## 核对报告人员" ] }, { "cell_type": "code", "execution_count": 41, "id": "8467b539-c5ca-4db3-8231-f634b70dff88", "metadata": { "execution": { "iopub.execute_input": "2025-12-03T11:13:39.490227Z", "iopub.status.busy": "2025-12-03T11:13:39.489101Z", "iopub.status.idle": "2025-12-03T11:13:39.648115Z", "shell.execute_reply": "2025-12-03T11:13:39.647529Z", "shell.execute_reply.started": "2025-12-03T11:13:39.490158Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "03603316 马新淼 炼油部\n", "01738573 曹志玲 研究院\n", "01730621 张敬东 电仪部\n", "01733160 王金江 烯烃部\n", "01736847 章洪 热电部\n", "01736378 杨桂强 热电部\n", "01737731 徐欣 运输销售部\n", "01736804 李振江 热电部\n", "01737858 于学宁 运输销售部\n", "01737542 刘呈健 水务部\n" ] } ], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "import openpyxl\n", "\n", "filename = 'data/result_天津石化2025-2.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "fi_path = '/home/songyi/pdf-typescript-fit2023/天津石化2025'\n", "\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "list1 = []\n", "title = ['测试编号','姓名','性别','部门']\n", "for fn in fls:\n", " list2 = []\n", " fi_name =Path(fn).stem.split('-')[0] \n", " list1.append(fi_name)\n", "for k, v in dict1.items():\n", " if k not in list1:\n", " print(k,v['name'],v['unit'])" ] }, { "cell_type": "markdown", "id": "1620d417-e80c-473a-81f8-f4e705ae6982", "metadata": {}, "source": [ "## 体测报告按部门、车间分类" ] }, { "cell_type": "code", "execution_count": 46, "id": "b9f88d36-e72a-4f26-8357-62c7b0e2128d", "metadata": { "execution": { "iopub.execute_input": "2025-12-03T12:03:30.161578Z", "iopub.status.busy": "2025-12-03T12:03:30.161039Z", "iopub.status.idle": "2025-12-03T12:03:31.205217Z", "shell.execute_reply": "2025-12-03T12:03:31.204754Z", "shell.execute_reply.started": "2025-12-03T12:03:30.161525Z" } }, "outputs": [], "source": [ "import os,sys,shutil\n", "import json\n", "import glob\n", "from pathlib import Path\n", "\n", "fi_path = '/home/songyi/pdf-typescript-fit2023/天津石化2025'\n", "new_path = 'file/天津石化2025'\n", "old = []\n", "dict2 = {}\n", "\n", "filename = 'data/天津石化人员2025.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "fls = glob.glob(f'{fi_path}/*.pdf')\n", "for fn in fls:\n", " fi_name =Path(fn).stem.split('-')[0]\n", " code = fi_name\n", " unit_path = Path(new_path,dict1[str(code)]['unit'],dict1[str(code)]['sub_unit'])\n", " unit_path.mkdir(parents = True, exist_ok = True)\n", " n_name = Path(unit_path,Path(fn).stem+'.pdf')\n", " if not os.path.exists(n_name):\n", " shutil.copyfile(fn,n_name)" ] }, { "cell_type": "markdown", "id": "85a03b00-9624-4ae9-aa6d-386798d457df", "metadata": { "execution": { "iopub.execute_input": "2023-10-25T02:50:56.997544Z", "iopub.status.busy": "2023-10-25T02:50:56.995911Z", "iopub.status.idle": "2023-10-25T02:50:57.006678Z", "shell.execute_reply": "2023-10-25T02:50:57.004773Z", "shell.execute_reply.started": "2023-10-25T02:50:56.997463Z" }, "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "# 体测数据分析" ] }, { "cell_type": "markdown", "id": "dca06570-73e6-4f60-8cf9-b3f9da64f1c4", "metadata": {}, "source": [ "## 清理报告数据" ] }, { "cell_type": "code", "execution_count": null, "id": "f9fee64f-41ff-4453-8a32-a33df086022e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "\n", "filename = 'data/result_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", " \n", "#items = ['身高','体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "items = {}\n", "items['lung'] = '肺活量'\n", "items['grip'] ='握力'\n", "items['flexion'] ='坐位体前屈'\n", "items['jump'] ='纵跳'\n", "items['pushup'] ='俯卧撑'\n", "items['balance'] ='单脚站立'\n", "items['reaction'] ='选择反应时'\n", "items['step'] ='台阶指数'\n", "items['situp'] ='一分钟仰卧起坐'\n", "items['bmi'] ='BMI'\n", "\n", "\n", "list1 = []\n", "fiie_path ='./134/'\n", "list_item = ['lung','grip','flexion','jump','pushup','balance','reaction','step','situp','bmi']\n", "i=1\n", "list2 = []\n", "dict2 = {}\n", "for k, v in dict1.items():\n", " list1 = []\n", " mydata = {}\n", " \n", " id = str(k).rjust(8,\"0\")\n", " mydata['unit'] = v['unit']\n", " mydata['name'] = v['name']\n", " mydata['sex'] = v['sex']\n", " mydata['month'] = v['month']\n", " age = int(v['month']/12)\n", " if age <20:\n", " mydata['age'] = 20\n", " else:\n", " mydata['age'] = int(v['month']/12)\n", " \n", " mydata['fits'] = {}\n", " score = 0\n", " for item in list_item:\n", " if item in v.keys():\n", " if item in ['lung','pushup','step','situp']:\n", " mark = v[item]['成绩'].split()[0].split('.')[0]\n", " else:\n", " mark = v[item]['成绩'].split()[0]\n", " mydata['fits'][items[item]] = {'mark':mark,'score':v[item]['score']}\n", " score = score + v[item]['score']\n", " mydata['score'] = round(score/len(mydata['fits']),2)\n", " if len(mydata['fits']) >2:\n", " dict2[str(k)] = mydata\n", "filename = f'data/data_天津231017.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict2,fl , ensure_ascii=False) \n", "print('ok!') " ] }, { "cell_type": "markdown", "id": "bd1f8f42-c14a-4bb7-8656-14a0f7968cfc", "metadata": {}, "source": [ "## 计算测试等级" ] }, { "cell_type": "code", "execution_count": null, "id": "006afc6c-2b1f-4edf-be1b-5f60e2029ee8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "items = ['体重','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "\n", "filename = 'data/data_天津231017_非倒班.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "dict2 = {}\n", "dict2['不合格'] = [0,255]\n", "dict2['合格'] = [256,332]\n", "dict2['良好'] = [333,367]\n", "dict2['优秀'] = [368,500]\n", "\n", "for k1, v1 in dict2.items():\n", " di = v1[0]\n", " gao = v1[1]\n", " i = 0 \n", " m = 0\n", " f = 0\n", " for k,v in dict1.items():\n", " if int(v['score']*100) in range(di,gao+1):\n", " dict1[k]['level'] = k1\n", " i+=1\n", " if v['sex'] == '男':\n", " m = m +1\n", " else:\n", " f = f+1\n", " print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')\n", "print(len(dict1))" ] }, { "cell_type": "markdown", "id": "ed3c0653-087a-4a9d-ba21-8cf5f48515d9", "metadata": {}, "source": [ "## 根据年龄汇总人员信息及成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "949e4c3c-023d-44a4-b99e-c5460da61161", "metadata": { "tags": [] }, "outputs": [], "source": [ "nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,69]]\n", "\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for item in nld:\n", " di = item[0]\n", " gao = item[1]\n", " i = 1\n", " score = 0\n", " m = 0\n", " f = 0\n", " for k,v in dict1.items():\n", " if v['age'] in range(di,gao+1):\n", " score = score+v['score']\n", " i+=1\n", " if v['sex'] == '男':\n", " m = m +1\n", " \n", " print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人,男性:{m}人')" ] }, { "cell_type": "markdown", "id": "6a967a44-7c12-4e82-827b-d75926c09e77", "metadata": {}, "source": [ "### 根据年龄汇总人员信息及成绩(男)" ] }, { "cell_type": "code", "execution_count": null, "id": "721977d3-5816-4bf6-82fc-26fd170e5454", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]\n", "\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for item in nld:\n", " di = item[0]\n", " gao = item[1]\n", " i = 1\n", " score = 0\n", " m = 0\n", " f = 0\n", " for k,v in dict1.items():\n", " if v['age'] in range(di,gao+1) and v['sex'] == '男':\n", " score = score+v['score']\n", " i+=1\n", " \n", " \n", " print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')" ] }, { "cell_type": "markdown", "id": "3a8f747e-aacd-45bf-b94a-b505cfd31922", "metadata": {}, "source": [ "### 根据年龄汇总人员信息及成绩(女)" ] }, { "cell_type": "code", "execution_count": null, "id": "f493dc0a-d3cd-4dbd-ad35-e06eb96afbc5", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]\n", "\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "for item in nld:\n", " di = item[0]\n", " gao = item[1]\n", " i = 1\n", " score = 0\n", " m = 0\n", " f = 0\n", " for k,v in dict1.items():\n", " if v['age'] in range(di,gao+1) and v['sex'] == '女':\n", " score = score+v['score']\n", " i+=1\n", " \n", " \n", " print(f'{di}~{gao}岁平均成绩:{round(score/i,2)}分,人数:{i-1}人')" ] }, { "cell_type": "markdown", "id": "e9c6bd2e-b6ac-4a6f-ba28-aafcabb40c0d", "metadata": {}, "source": [ "## 计算平均成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "7155f2c2-0719-4558-aa3b-629fb70194d6", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "nld = [[20,24],[25,29],[30,34],[35,39],[40,44],[45,49],[50,54],[55,80]]\n", "#filename = 'data/result_石家庄.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "i = 1\n", "m = 0\n", "f = 0\n", "score = 0\n", "t_score = 0\n", "for k,v in dict1.items():\n", " if v['sex'] == '男':\n", " m = m +1\n", " score = score+v['score']\n", "print(f'平均成绩:{round(score/m,4)}分,男性:{m}人')\n", "t_score = t_score + score\n", "score = 0\n", "for k,v in dict1.items():\n", " if v['sex'] == '女':\n", " f = f +1\n", " score = score+v['score']\n", "print(f'平均成绩:{round(score/f,4)}分,女性:{f}人')\n", "t_score = t_score + score\n", "print(f'平均成绩:{round(t_score/3657,4)}分,总体:3657人')" ] }, { "cell_type": "markdown", "id": "9a544eec-ec58-47dc-aa36-d890b0b309c2", "metadata": {}, "source": [ "## 计算测试等级" ] }, { "cell_type": "code", "execution_count": null, "id": "a0bbb339-ee4e-4dc1-83ec-b2055e3c670e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "dict2 = {}\n", "dict2['不合格'] = [0,255]\n", "dict2['合格'] = [256,332]\n", "dict2['良好'] = [333,367]\n", "dict2['优秀'] = [368,500]\n", "\n", "for k1, v1 in dict2.items():\n", " di = v1[0]\n", " gao = v1[1]\n", " i = 0 \n", " m = 0\n", " f = 0\n", " for k,v in dict1.items():\n", " if int(v['score']*100) in range(di,gao+1):\n", " dict1[k]['level'] = k1\n", " i+=1\n", " if v['sex'] == '男':\n", " m = m +1\n", " else:\n", " f = f+1\n", " print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')\n", "#filename = 'data/result_石家庄.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "92103efb-a3e4-43ec-acfb-e4cb0b07c2fb", "metadata": {}, "source": [ "### 计算各年龄段测试等级(女)" ] }, { "cell_type": "code", "execution_count": null, "id": "f8949993-7501-4359-aa7c-2cd5de348056", "metadata": {}, "outputs": [], "source": [ "import json\n", "\n", "\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "dict2 = {}\n", "dict2['不合格'] = [0,255]\n", "dict2['合格'] = [256,332]\n", "dict2['良好'] = [333,367]\n", "dict2['优秀'] = [368,500]\n", "\n", "for k1, v1 in dict2.items():\n", " di = v1[0]\n", " gao = v1[1]\n", " i = 0 \n", " m = 0\n", " f = 0\n", " for k,v in dict1.items():\n", " if int(v['score']*100) in range(di,gao+1):\n", " dict1[k]['level'] = k1\n", " i+=1\n", " if v['sex'] == '女':\n", " m = m +1\n", " else:\n", " f = f+1\n", " print(f'{di}~{gao}分人数:{i}人,男性:{m}人,女性:{f}人')\n", "#filename = 'data/result_石家庄.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl) \n", "print('ok')" ] }, { "cell_type": "markdown", "id": "194217e0-f1cf-4945-ad5a-52304ed2f943", "metadata": {}, "source": [ "## 计算各项目成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "5ed284c6-1a1c-43ab-92a8-b3c411cd77a1", "metadata": { "tags": [] }, "outputs": [], "source": [ "with open(filename,'r') as fl:\n", " dict1 = json.load(fl) \n", "items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数']\n", "for item in items:\n", " score = 0\n", " n = 0\n", " for k, v in dict1.items(): \n", " if item in v['fits'].keys():\n", " n = n + 1\n", " score =score + int(v['fits'][item]['score'])\n", " print(item,round(score/n,2),n)" ] }, { "cell_type": "markdown", "id": "5a130857-4dd1-4b5e-b21b-42fe32b367cf", "metadata": {}, "source": [ "## 按部门统计" ] }, { "cell_type": "markdown", "id": "cb1e13ae-3eba-4f6e-b70a-2bf87168ef1a", "metadata": {}, "source": [ "### 计算部门完成情况" ] }, { "cell_type": "code", "execution_count": null, "id": "5e7c1c49-75bf-4238-9bd7-b8511687f639", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "\n", "filename = 'data/data_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "dict3 = {}\n", "\n", "for k, v in dict2.items():\n", " unit = v['unit']\n", " dict3.setdefault(unit,{})\n", " dict3[unit].setdefault('应测',0)\n", " dict3[unit].setdefault('已测',0)\n", " dict3[unit]['应测']+=1\n", "for k, v in dict1.items():\n", " unit = v['unit']\n", " \n", " dict3[unit]['已测']+=1\n", " \n", "print(dict3)\n", "for k ,v in dict3.items():\n", " print(k,v['应测'],v['已测'])\n", " " ] }, { "cell_type": "markdown", "id": "e83941b9-b2b5-41db-b08a-a619f07c2487", "metadata": { "execution": { "iopub.execute_input": "2023-11-08T13:52:50.838712Z", "iopub.status.busy": "2023-11-08T13:52:50.838249Z", "iopub.status.idle": "2023-11-08T13:52:50.844168Z", "shell.execute_reply": "2023-11-08T13:52:50.843014Z", "shell.execute_reply.started": "2023-11-08T13:52:50.838676Z" }, "tags": [] }, "source": [ "### 计算部门合格率" ] }, { "cell_type": "code", "execution_count": null, "id": "d023724c-46b7-4b4e-bbcc-8b4f171590c5", "metadata": { "tags": [] }, "outputs": [], "source": [ "for k, v in dict1.items():\n", " unit = v['unit']\n", " dict3[unit].setdefault(v['level'],0)\n", " dict3[unit][v['level']]+=1\n", "print(dict3)\n", "for k ,v in dict3.items():\n", " print(k,v['已测'],v['不合格'])" ] }, { "cell_type": "markdown", "id": "4b996a8a-70e7-4c95-8b14-0f8fa89df7a4", "metadata": {}, "source": [ "### 计算部门成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "1d93d58e-115a-44a4-988f-fa5353c5fd0e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数'] \n", "filename = 'data/data_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "filename = 'data/天津石化人员名单2023.json'\n", "with open(filename,'r') as fl:\n", " dict2 = json.load(fl)\n", "dict3 = {}\n", "\n", "for k, v in dict1.items():\n", " unit = v['unit']\n", " dict3.setdefault(unit,{})\n", " for item in items:\n", " dict3[unit].setdefault(item,{})\n", " dict3[unit][item].setdefault('score',0)\n", " dict3[unit][item].setdefault('count',0)\n", " for k1,v1 in v['fits'].items():\n", " if k1 in items:\n", " dict3[unit][k1]['score']+=v1['score']\n", " dict3[unit][k1]['count']+=1\n", "print(dict3)" ] }, { "cell_type": "markdown", "id": "23a654a2-69f1-41cb-b3dc-23bc7dc7e294", "metadata": {}, "source": [ "### 显示部门成绩" ] }, { "cell_type": "code", "execution_count": null, "id": "0cb7ff83-69a9-4c03-a539-bde7ffd4a8a8", "metadata": { "tags": [] }, "outputs": [], "source": [ "\n", "for k ,v in dict3.items():\n", " print(k)\n", " for k1,v1 in v.items():\n", " if v1['count']>0:\n", " print(k1,round(v1['score']/v1['count'],4))\n", " print()" ] }, { "cell_type": "markdown", "id": "d3d9d517-61e5-4c4c-bddb-1f386a518d99", "metadata": {}, "source": [ "## 倒班人员数据分析" ] }, { "cell_type": "markdown", "id": "6b0b8d09-ce15-4a36-9421-251ab50ae706", "metadata": {}, "source": [ "### 倒班员工数据导入" ] }, { "cell_type": "code", "execution_count": null, "id": "518a1e40-d383-4d78-a4ea-224ddab49b79", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "\n", "filename = 'data/data_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", " \n", "wb = openpyxl.load_workbook('data/员工个人基础信息-倒班.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "dict2 = {}\n", "i = 1\n", "for n in range(4, sheet.max_row+1):\n", " if sheet.cell(n, 1).value is not None:\n", " code = int(sheet.cell(n, 1).value)\n", " daoban = sheet.cell(n, 6).value\n", " if str(code) in dict1.keys() and daoban == '倒班':\n", " dict2[str(code)] = dict1[str(code)]\n", "print(len(dict2))\n", "filename = 'data/data_天津231017_倒班.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict2, fl) \n", "dict3 = {}\n", "for k, v in dict1.items():\n", " if k not in dict2.keys():\n", " dict3[k] = dict1[k]\n", "print(len(dict3))\n", " \n", "filename = 'data/data_天津231017_非倒班.json'\n", "with open(filename,'w') as fl:\n", " json.dump(dict3, fl) \n" ] }, { "cell_type": "markdown", "id": "cf45ba36-896d-4d28-ae4a-08c512ff1ddb", "metadata": {}, "source": [ "### 核对倒班员工信息" ] }, { "cell_type": "code", "execution_count": null, "id": "08167b05-8719-41c9-a71d-57906a55eb63", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/data_天津231017_非倒班.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", " \n", "wb = openpyxl.load_workbook('data/员工个人基础信息-倒班.xlsx')\n", "sheet = wb.active\n", "# sheets = wb.sheetnames\n", "dict2 = {}\n", "i = 0\n", "for n in range(4, sheet.max_row+1):\n", " if sheet.cell(n, 1).value is not None:\n", " code = int(sheet.cell(n, 1).value)\n", " daoban = sheet.cell(n, 6).value\n", " if str(code) in dict1.keys():# and daoban != '倒班':\n", " dict2[str(code)] = dict1[str(code)]\n", "for k,v in dict1.items():\n", " if str(k) not in dict2.keys():\n", " i+=1\n", " print(i,k,v['name'])" ] }, { "cell_type": "markdown", "id": "dc51915d-7593-411c-8730-4ee9445ebd51", "metadata": {}, "source": [ "### 对比倒班及非倒班人员得分" ] }, { "cell_type": "code", "execution_count": null, "id": "096bb641-c000-490b-bd77-296fb0395dc8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数'] \n", "\n", "filename = 'data/data_天津231017_非倒班.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "dict3 = {}\n", "for k, v in dict1.items():\n", " unit = v['unit']\n", " dict3.setdefault(unit,{})\n", " dict3[unit].setdefault('非倒班',[0,0,0])\n", " dict3[unit].setdefault('倒班',[0,0,0])\n", " for k1,v1 in v['fits'].items():\n", " if k1 in items:\n", " dict3[unit]['非倒班'][0] = dict3[unit]['非倒班'][0]+ v1['score']\n", " dict3[unit]['非倒班'][2]+=1\n", " dict3[unit]['非倒班'][1] +=1\n", "filename = 'data/data_天津231017_倒班.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "for k, v in dict1.items():\n", " unit = v['unit']\n", " dict3.setdefault(unit,{})\n", " dict3[unit].setdefault('非倒班',[0,0])\n", " dict3[unit].setdefault('倒班',[0,0])\n", " for k1,v1 in v['fits'].items():\n", " if k1 in items:\n", " dict3[unit]['倒班'][0] = dict3[unit]['倒班'][0]+ v1['score']\n", " dict3[unit]['倒班'][2] +=1\n", " dict3[unit]['倒班'][1] +=1\n", "\n", "for k ,v in dict3.items():\n", " print(k,v)" ] }, { "cell_type": "markdown", "id": "ce2c7879-308c-45aa-aaeb-2323b3a060be", "metadata": {}, "source": [ "### 划分年龄段" ] }, { "cell_type": "code", "execution_count": null, "id": "c1b68d99-e8c1-455a-973f-20f4c1fd58a2", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "import openpyxl\n", "\n", "\n", "filename = 'data/data_天津231017.json'\n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "nld ={'20':[20,29],'30':[30,39],'40':[40,49],'50':[50,69]}\n", "for k,v in nld.items():\n", " age_min = v[0]\n", " age_max = v[1]\n", " for k1,v1 in dict1.items():\n", " if v1['age'] >=v[0] and v1['age']<=v[1]:\n", " dict1[k1]['nld'] = k\n", "\n", "filename = 'data/data_天津_nld.json' \n", "with open(filename,'w') as fl:\n", " json.dump(dict1, fl) \n", " " ] }, { "cell_type": "markdown", "id": "eb35716c-cd5a-476b-95d0-b326bfa04963", "metadata": {}, "source": [ "### 上肢、下肢力量分析(男)" ] }, { "cell_type": "code", "execution_count": null, "id": "6a8cfab1-c99b-4376-9ad2-4ae096dd4866", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/data_天津_nld.json' \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = ['20','30','40','50']\n", "shangzhi = ['握力','俯卧撑']\n", "xiazhi = ['纵跳','闭眼单脚站立']\n", "zongrenshu = 0\n", "ruo = 0\n", "for item in list1:\n", " print(item)\n", " renshu = 0\n", " ruo = 0\n", " \n", " for k, v in dict1.items():\n", " if v['nld'] == item and v['sex']=='男':\n", " renshu+=1\n", " n =0\n", " defen = 0\n", " for k1, v1 in v['fits'].items():\n", " if k1 in xiazhi:\n", " n+=1\n", " defen =defen+v1['score']\n", " if n>0 and (defen/n)<3:\n", " ruo+=1\n", " print(renshu,ruo)\n", " \n", " \n", " \n", " \n", " \n", " " ] }, { "cell_type": "markdown", "id": "6f83db87-9844-41dc-bf43-789c3367f411", "metadata": {}, "source": [ "### 上肢、下肢力量分析(女)" ] }, { "cell_type": "code", "execution_count": null, "id": "2cb586f9-cdf1-4b51-8900-50416b5f0ae5", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/data_天津_nld.json' \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = ['20','30','40','50']\n", "shangzhi = ['握力']\n", "xiazhi = ['纵跳','闭眼单脚站立']\n", "zongrenshu = 0\n", "ruo = 0\n", "for item in list1:\n", " print(item)\n", " renshu = 0\n", " ruo = 0\n", " \n", " for k, v in dict1.items():\n", " if v['nld'] == item and v['sex']=='女':\n", " renshu+=1\n", " n =0\n", " defen = 0\n", " for k1, v1 in v['fits'].items():\n", " if k1 in xiazhi:\n", " n+=1\n", " defen =defen+v1['score']\n", " if n>0 and (defen/n)<3:\n", " ruo+=1\n", " print(renshu,ruo)\n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "dd822864-0226-40c1-b385-cd146f6972c9", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "filename = 'data/data_天津_nld.json' \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "for k ,v in dict1.items():\n", " if v['sex'] == '男' and '握力' in v['fits'].keys():\n", " print(v['name'],v['nld'],v['fits']['握力']['mark'],v['fits']['握力']['score'])\n", " " ] }, { "cell_type": "markdown", "id": "1015b957-448a-4029-827f-3abc3c0e9173", "metadata": {}, "source": [ "### 弱项分析(男)" ] }, { "cell_type": "code", "execution_count": null, "id": "d3ea1ddb-db7a-4b4f-a23c-6951e88df2ff", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数'] \n", "\n", "\n", "filename = 'data/data_天津_nld.json' \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = ['20','30','40','50']\n", "\n", "for nld in list1:\n", " \n", " print(nld)\n", " for item in items:\n", " n =0\n", " defen = 0\n", " for k, v in dict1.items():\n", " \n", " if v['nld'] == nld and v['sex']=='男' and item in v['fits'].keys():\n", " n+=1\n", " defen =defen+ v['fits'][item]['score']\n", " if n>0:\n", " print(item,round(defen/n,2)) " ] }, { "cell_type": "markdown", "id": "727fda65-7268-44f5-b953-285c86602254", "metadata": {}, "source": [ "### 弱项分析(女)" ] }, { "cell_type": "code", "execution_count": null, "id": "723b50a1-60f1-4001-8b30-6f77c6a4b460", "metadata": { "tags": [] }, "outputs": [], "source": [ "import json\n", "\n", "items = ['BMI','肺活量','握力','坐位体前屈','纵跳','俯卧撑','一分钟仰卧起坐','单脚站立','选择反应时','台阶指数'] \n", "\n", "\n", "filename = 'data/data_天津_nld.json' \n", "with open(filename,'r') as fl:\n", " dict1 = json.load(fl)\n", "\n", "list1 = ['20','30','40','50']\n", "\n", "for nld in list1:\n", " \n", " print(nld)\n", " for item in items:\n", " n =0\n", " defen = 0\n", " for k, v in dict1.items():\n", " \n", " if v['nld'] == nld and v['sex']=='女' and item in v['fits'].keys():\n", " n+=1\n", " defen =defen+ v['fits'][item]['score']\n", " if n>0:\n", " print(item,round(defen/n,2))" ] }, { "cell_type": "code", "execution_count": null, "id": "62278ae0-be57-4f7c-85d6-cfb9cf61e341", "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 }