用SQL与Python搭建人才盘点模型,自动化生成九宫格与梯队PPT
2026/9/18 20:35:31 网站建设 项目流程

简介:围绕企业战略落地与人才梯队建设,这份61页PPT系统讲解人才盘点的核心方法,适合HR管理者、业务负责人及企业战略规划人员。内容从“什么是人才盘点”切入,明确数量、质量、结构、成本、地域五大匹配维度,并给出企业快速发展、战略转型等适用时机,也指出不适合开展盘点的情形。同时拆解人才质量盘点的重点与难点,推荐运用大数据统计与关键人群精细盘点,梳理出从业务战略规划人才、计算数量差距,到业绩能力盘点、潜质评估和培养行动计划的六步流程。后续延伸到人才梯队建设,结合案例解析如何将盘点结果转化为储备、培养、晋升方案,支撑企业长期发展。资源包共1个pptx文件,约2.06MB,已有60人学习下载,页面以课程大纲层级呈现,便于培训、制度设计及内部研讨使用。

1. 人才盘点最忌讳的,是把61页PPT做成61页表格

做人才盘点,大部分团队不是死在数据上,而是死在“PPT做得像报表”这件事上。既不缺九宫格,也不缺继任计划,缺的是让高管愿意看、看得懂的呈现方式。所谓“知识基于公司战略的人才盘点与人才梯队建设”,核心并不是把每个人打一个分、塞进九个格子里,而是把公司未来两年的业务赌注,翻译成“哪些岗位会变得更重要、哪些人必须在什么时间之前顶上、顶不上会损失什么”。

这件事值得IT从业者认真对待。尤其是HRIS、数据团队和信息化负责人,往往被业务方追问“凭什么评定这个人”“你们的工具和算法有多准”。与其绕开管理学模型直接写代码,不如先把人才盘点的数据模型和决策逻辑打通,再用工程手段把它做成可复用、可解释、能在董事会上讲清楚的东西。这套方案适合招聘负责人、HRBP、组织发展岗位,也适合正在搭建内部人才管理系统的工程师。

下面按“框架、数据、实现、落地、汇报”五条线展开,全部从可复现的角度讲,你能直接拷走改。

2. 人才盘点前先立框架:九宫格模型与数据字段设计

2.1 为什么“基于公司战略”不能停留在PPT标题页

人才盘点最常见的错误,是拿着通用素质模型硬套。一套“沟通能力、抗压能力、团队协作”的评分表,放在任何公司都成立,换了行业照样成立,这不叫盘点,叫年度评优。

基于公司战略的盘点,要求先回答三个问题:未来12到18个月公司要打赢哪几场仗?每场仗对哪些关键岗位的人才密度要求最高?这些岗位上的现任者,是否具备应对未来挑战的潜力?只有把这三个问题落到岗位和具体人身上,九宫格才有解释力。

所以我一般会建议先做“战略-岗位-人”的三层拆解,而不是直接进入打分环节。用一张表把公司当年的战略主题、对组织能力的诉求、受影响岗位群对应起来,再进入人才数据采集。

2.2 九宫格、三宫格还是五维模型

九宫格是最常见的盘点口径,横轴是绩效,纵轴是潜力。绩效看过去,潜力看未来。相比六宫格或三宫格,九宫格在“给高管做决策”时颗粒度更合适,能把“高潜但当前绩效一般”的人单独拉出来讨论,而不是被平均值吃进去。

维度含义数据来源典型周期
绩效过去一年对组织目标的实际贡献绩效系统、主管评定年度
潜力未来2-3年能否承担更复杂职责360评估、测评中心、高潜评审年度/半年度
准备度离目标岗位还差什么任职资格体系、胜任力模型盘点期
稳定性留在关键岗位的风险离职意愿访谈、司龄、激励状态半年
战略匹配度个人能力方向与战略方向是否一致战略解码会、组织诊断年度

字段设计上,建议把“评分”和“证据”分开存。评分只是结论,高管一定会追问“为什么他是9格里的左上角而不是右上角”。证据字段包括典型业绩案例、测评报告关键结论、主管评语摘要、个人发展计划完成情况,这些才是盘点的底层材料。

2.3 数据清洗要处理的主观偏差

盘点数据的噪声来源主要有三个:评审者尺度不一致、集中趋势、光环效应。技术手段能做到的是将偏差暴露出来,而不是消除偏差。

一个可落地的做法是给每个评委做一个“松紧系数”:计算该评委给所有人打分的均值和标准差,把原始分映射到统一的5分制分布上。这个换算在Excel里可以用公式实现,但人数超过三百人的团队,建议直接进数据库或脚本,避免人工处理引入二次误差。

3. 用SQL和Python把人才数据变成盘点底稿

3.1 人才台账的数据表结构设计

在做盘点系统时,我通常会用四张核心表来支撑:员工主表、绩效历史表、潜力评估表、继任关系表。员工主表存基础属性和当前岗位,绩效历史表存多周期绩效等级,潜力评估表存评委打分和测评结果,继任关系表存“接班人矩阵”。

CREATE TABLE employee_dim ( emp_id VARCHAR(20) PRIMARY KEY, name VARCHAR(50), dept VARCHAR(100), position VARCHAR(100), critical_flag TINYINT COMMENT '关键岗位标记 1是0否', talent_level CHAR(2) COMMENT '盘点后的人才层级', updated_at DATETIME ); CREATE TABLE perf_history ( emp_id VARCHAR(20), period VARCHAR(10) COMMENT '如2023H1', perf_grade VARCHAR(2) COMMENT 'A/B/C/D', perf_score DECIMAL(5,2), source VARCHAR(50) COMMENT '绩效系统或主管评分', PRIMARY KEY (emp_id, period) ); CREATE TABLE potential_assessment ( emp_id VARCHAR(20), assessor_id VARCHAR(20) COMMENT '评委工号', potential_score DECIMAL(5,2), readiness_level VARCHAR(20) COMMENT '现在可晋升/1年后/2年后', evidence TEXT, assess_time DATETIME );

字段解释:potential_score建议用0到10的连续值,而不要用高中低三档。原因是在做后继的数值分析时,连续值可以求分布、算相关性,类别值做不到。readiness_level单独拆出来,和九宫格结果并列展示,因为“高潜”不代表“现在就能上”,很多组织忽略了这个关键差异。

3.2 用SQL完成九宫格归档

九宫格本质上是一个二维交叉分类。先对绩效和潜力各自确定切分阈值,再把人映射到9个格子。

WITH score_base AS ( SELECT e.emp_id, e.name, e.dept, AVG(p.perf_score) AS avg_perf, AVG(a.potential_score) AS avg_potential FROM employee_dim e LEFT JOIN perf_history p ON e.emp_id = p.emp_id LEFT JOIN potential_assessment a ON e.emp_id = a.emp_id WHERE p.period IN ('2023H2', '2024H1') GROUP BY e.emp_id, e.name, e.dept ) SELECT emp_id, name, dept, CASE WHEN avg_perf >= 80 AND avg_potential >= 80 THEN '1-超预期' WHEN avg_perf >= 80 AND avg_potential >= 60 THEN '2-稳定贡献' WHEN avg_perf >= 60 AND avg_potential >= 80 THEN '3-潜力黑马' -- 其余组合自行补全 END AS nine_box FROM score_base;

阈值不能拍脑袋。常见的做法是取所有参与者绩效分和潜力分的中位数或三分位数,而不是用绝对分数。因为不同部门的绩效标准天然不同,绝对值会放大部门间的系统性偏差。SQL写法不变,把8060替换成PERCENTILE_CONT计算出来的动态阈值即可。

3.3 Python清洗评委打分并输出盘点底稿

SQL管取数,Python管清洗和证据归集。在线下面谈时,评委可能是直接在Excel里打的分,文件格式五花八门,需要先做标准化。

import pandas as pd df = pd.read_excel('raw_scores.xlsx', sheet_name=None) def normalize_score(series, target_mean=7.0, target_std=1.0): """把评委原始分映射到统一均值和标准差""" mean = series.mean() std = series.std() if std == 0: return pd.Series([target_mean] * len(series)) normalized = (series - mean) / std * target_std + target_mean return normalized.clip(1, 10) for sheet_name, frame in df.items(): score_col = '潜力评分' frame['normalized_score'] = normalize_score(frame[score_col]) frame.to_csv(f'normalized_{sheet_name}.csv', index=False, encoding='utf-8-sig')

这段代码的逻辑是把每个评委的打分分布压缩到统一的均值和标准差上。这样做的原因很直接:同一个被盘点人,A评委给7分,B评委只给5分,不代表A比B更有眼光,只能说明两人的尺度不同。

对处理完的文件,建议再自动生成一页“评委偏差报告”,显示每个评委的均值、极差、打分人数。这个报告反直觉但非常有用——它把潜规则摆到了台面上,减少评委会上的无谓争执。

4. 人才梯队建设:继任计划、IDP 与组织健康度

4.1 从盘点结果到梯队名单的映射规则

九宫格完成的只是“分类”,梯队建设要求的是“层级”。两套体系需要做一个映射,否则盘点结果落不了地。常见做法是这样对应:

人才层级九宫格位置管理动作
高潜人才(Top Talent)1-超预期、潜力黑马加速发展、关键岗位继任候选
中坚力量(Core)2-稳定贡献、常规贡献保留、激励、岗位轮换
待提升(Watch)绩效或潜力偏低但可辅导IDP、在岗训练
风险管控(Risk)绩效低且潜力低转岗/优化

这里有一个容易被忽略的点:梯队名单必须是“池子”而不是“名单”。如果直接宣布某人进入高潜池,反而容易造成组织博弈。我见过比较稳妥的做法是池子保密,仅对本人告知发展方向,不对全公司公开分层结果。

4.2 继任计划的一页纸输出

继任计划不是给每个关键岗位指定一个指定的接班人,而是要建立“岗位-候选人”的风险覆盖矩阵。对每个关键岗位,算出三个指标:后备充足度、后备准备度、在岗风险。

succession_data = [ {'position': '数据平台架构师', 'incumbent': '张伟', 'ready_now': '李娜', 'ready_1yr': '王强', 'risk': '中'}, {'position': '安全负责人', 'incumbent': '刘洋', 'ready_now': '空缺', 'ready_1yr': '陈静', 'risk': '高'}, ] for item in succession_data: ready_count = 1 if item['ready_now'] != '空缺' else 0 pipeline_count = ready_count + (1 if item['ready_1yr'] != '空缺' else 0) coverage = pipeline_count / 1.0 print(f"{item['position']}: 现任在岗风险{item['risk']}, 后备覆盖率{coverage}")

这个计算的核心价值是暴露“空缺”而不是掩盖空缺。“继任计划不能有空档”是常见误区,很多组织直到关键人离职才发现后备队列是空的。覆盖率低于1的岗位,应该触发招聘或内部培养的加速动作。

4.3 IDP 发展计划要能追踪,而不是写作文

个人发展计划(IDP)常见的坑是不了了之。每次盘点后花大力气写完,半年后发现没人跟进,下次盘点又是重写一遍。技术手段可以把IDP变成可追踪的任务清单。

建议把每个IDP拆成三个要素:发展目标(单位时间内要达成什么能力)、发展动作(轮岗/项目/课程)、验证标准(什么产出物或测评结果能证明达标)。在系统里落到里程碑后,用自动化工具定期提醒:

# 每月1日早上9点触发IDP进度检查 0 9 1 * * python /opt/hr/idp_check.py --send-reminder

idp_check.py内部逻辑不复杂:查IDP表,对完成率低于60%且距离截止日小于30天的任务,向项目负责人的企业微信或钉钉机器人推送提醒。这个自动化能力并不需要高深技术,但它保证盘点的结论不是沉没在纸面上。

5. 用 python-pptx 把盘点结果落成那61页PPT

5.1 模板先行:先定页面结构再写代码

在写任何自动化生成代码之前,先手工搭三张母版页:“总分总”封面页、九宫格分布页、人才梯队名单页。不要试图用代码完成视觉设计,代码只负责向固定版式里填数据。

这61页PPT的内部逻辑也值得设计。通常来说,战略篇占6到8页,数据与模型篇占10页左右,九宫格分部门展示占20到25页,继任计划与梯队名单占15页,发展计划与行动计划占10页。用 python-pptx 批量生成时,只需要做好一个循环,按部门或职级切片渲染。

5.2 用 python-pptx 生成九宫格分布页

from pptx import Presentation from pptx.util import Inches prs = Presentation('talent_template.pptx') slide_layout = prs.slides.add_slide(prs.slide_layouts[5]) # 空白版式 # 添加标题 title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.3), Inches(9), Inches(0.6)) title_box.text = f"{dept_name} 人才盘点九宫格分布" # 表格展示九宫格每个格子里的人数 rows, cols = 3, 3 table_shape = slide.shapes.add_table(rows, cols, Inches(1), Inches(1.5), Inches(8), Inches(3.5)) table = table_shape.table grid_data = [ ['潜力高/绩效低', '潜力高/绩效中', '潜力高/绩效高'], ['潜力中/绩效低', '潜力中/绩效中', '潜力中/绩效高'], ['潜力低/绩效低', '潜力低/绩效中', '潜力低/绩效高'], ] for i in range(rows): for j in range(cols): cell = table.cell(i, j) cell.text = f"{grid_data[i][j]}:{count_matrix[i][j]}人" prs.save(f'output/{dept_name}_盘点页.pptx')

这里要注意,table.text接受的是纯文本,不能包含复杂排版。如果需要在一格内展示多个名字,建议在名字间用换行符拼接。表格字体大小建议直接指定,否则不同环境打开可能出现字体回退。

5.3 导出PDF变糊的坑与字体处理

建议生成PPT后先做一次PDF导出来预览。在WPS或Office里导出PDF时,如果页面上有图片,很容易出现“PPT里PNG导出为PDF后变糊”的问题。原因通常是页面设置使用了“默认分辨率”,而不是高分辨率导出。

在 PowerPoint 里修改注册表或偏好设置并不通用,更简单的方案是:在 python-pptx 中把图片素材统一使用 PNG 或 EMF 格式,不要用 JPG。表格和形状走矢量路径,不要截图贴图。导出PDF时,在 PowerPoint 中选择“文件—选项—高级—图像大小和质量”,勾选“高保真”。

另外需要注意嵌入字体。项目交接或跨电脑打开PPT时,如果字体丢失,版式会完全乱掉。在保存PPT前去“文件—选项—保存—将字体嵌入文件”里勾选“嵌入所有字符”。如果用的是 python-pptx 生成的文件,嵌入字体无法在代码里直接设置,需要保存后用 Office 或 WPS 再执行一次嵌入操作。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询