业务背景
该数据为一家互联网科技公司的职工信息表,新入职的人力资源负责人想对该份数据进行探索性分析,以便快速了解公司员工情况。
分析目标
- 人力资源结构角度
- 人员岗位分布
- 管理人员比例
- 教育情况分布
- 人员年龄结构
- 人力资源运作角度
- 员工离职率
- 内部变动率
行业介绍
- 互联网公司职级划分
(1)岗位序列是针对岗位性质和要求相近的岗位进行分类。公司的岗位序列分为两大类∶管理序列(M),专业序列(P)。
- 管理序列(Management 简称 M 类)∶ 适用于从事管理工作,具有人员管理权限(不包括师徒关系、业务辅导关系),带领团队运作指定业务的岗位。
- 专业序列(Professional 简称P类)∶ 适用于从事产品设计、运营、市场、销售、人事、财务、信息技术服务工作等岗位。
(2)职等 - 定义∶ 指针对员工承担责任、知识经验和技能多寡等能力差异而进行的划分。
- 划分∶ M 序列和 P序列职等以 BAND 划分,共 12 等,由低到高分别为 BAND1至 BAND12。
- 人力资本指标
数据分析
- 导包
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"] # 指定默认字体
mpl.rcParams["axes.unicode_minus"] = False # 解决保存图像时负号问题
- 导入数据
data = pd.read_excel("HR_comma_sep.xlsx")
data.shape # 查看数据行列数
data.info() # 查看数据基本信息
data.describe() # 查看数据基本描述
data.head() # 查看前5行数据
3. 数据处理
3.1 清洗"级别"字段:M,P–>职称
data["级别"].value_counts()
data["职称"] = data["级别"].apply(lambda x: x[:1])
data["职称"].unique()
data["职称"].value_counts()
3.2将年龄进行分类–>年龄段
- [0,19,24,29,34,39,100]
- [“20以下”,“20-25”,“25-30”,“30-35”,“35-40”,“40以上”]
data["年龄段"] = pd.cut(x=data["年龄"],bins=[0,19,24,29,34,39,100],labels=["20以下","20-25","25-30","30-35","35-40","40以上"])
data["年龄段"].value_counts()
#25-30 8459
#20-25 6000
#30-35 521
#35-40 19
#20以下 0
#40以上 0
3.3 判断员工是否有部门变动:现就职部门与原就职部门不一致–>是否部门变动
def is_zhiwei(zhiwei_yuan,zhiwei_xian):
if zhiwei_yuan == zhiwei_xian:
return "否"
else:
return "是"
data["是否部门变动"] = data.apply(lambda x: is_zhiwei(x["原就职部门"],x["现就职部门"]),axis=1)
4. 职位分析过程
- 筛选在职数据
data_zaizhi = data[data["是否离职"] == "在职"]
4.1 人力构成指标
4.1.1 人员岗位分布(在职):部门人数/公司总人数
data_zaizhi_xian = data_zaizhi.groupby("现就职部门",as_index=False)[["工号"]].count()
data_zaizhi_xian.columns = ["部门","数量"]
data_zaizhi_xian["占比"] = data_zaizhi_xian["数量"]/data_zaizhi_xian["数量"].sum()
data_zaizhi_xian.sort_values("数量",inplace=True)
plt.figure(figsize=(20,8),dpi=200)
ax1 = plt.subplot(111)
ax1.bar(data_zaizhi_xian.部门,data_zaizhi_xian.数量,width=0.5)
ax2 =