Python员工离职数据分析

2023-11-08

Python员工离职数据分析

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
# 数据全显示
pd.set_option('display.max_columns', None)
# 颜色
colors = sns.color_palette()
# 数据精度
pd.set_option('precision', 3)
#  解决中文/小数点显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

项目名称:IBM员工离职数据分析

数据来源:https://tianchi.aliyun.com/dataset/dataDetail?dataId=77180

data_path = './data/WA_Fn-UseC_-HR-Employee-Attrition.csv'
df = pd.read_csv(data_path)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1470 entries, 0 to 1469
Data columns (total 35 columns):
Age                         1470 non-null int64
Attrition                   1470 non-null object
BusinessTravel              1470 non-null object
DailyRate                   1470 non-null int64
Department                  1470 non-null object
DistanceFromHome            1470 non-null int64
Education                   1470 non-null int64
EducationField              1470 non-null object
EmployeeCount               1470 non-null int64
EmployeeNumber              1470 non-null int64
EnvironmentSatisfaction     1470 non-null int64
Gender                      1470 non-null object
HourlyRate                  1470 non-null int64
JobInvolvement              1470 non-null int64
JobLevel                    1470 non-null int64
JobRole                     1470 non-null object
JobSatisfaction             1470 non-null int64
MaritalStatus               1470 non-null object
MonthlyIncome               1470 non-null int64
MonthlyRate                 1470 non-null int64
NumCompaniesWorked          1470 non-null int64
Over18                      1470 non-null object
OverTime                    1470 non-null object
PercentSalaryHike           1470 non-null int64
PerformanceRating           1470 non-null int64
RelationshipSatisfaction    1470 non-null int64
StandardHours               1470 non-null int64
StockOptionLevel            1470 non-null int64
TotalWorkingYears           1470 non-null int64
TrainingTimesLastYear       1470 non-null int64
WorkLifeBalance             1470 non-null int64
YearsAtCompany              1470 non-null int64
YearsInCurrentRole          1470 non-null int64
YearsSinceLastPromotion     1470 non-null int64
YearsWithCurrManager        1470 non-null int64
dtypes: int64(26), object(9)
memory usage: 402.1+ KB
df.describe()
Age DailyRate DistanceFromHome Education EmployeeCount EmployeeNumber EnvironmentSatisfaction HourlyRate JobInvolvement JobLevel JobSatisfaction MonthlyIncome MonthlyRate NumCompaniesWorked PercentSalaryHike PerformanceRating RelationshipSatisfaction StandardHours StockOptionLevel TotalWorkingYears TrainingTimesLastYear WorkLifeBalance YearsAtCompany YearsInCurrentRole YearsSinceLastPromotion YearsWithCurrManager
count 1470.000 1470.000 1470.000 1470.000 1470.0 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000 1470.00 1470.000 1470.000 1470.0 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000 1470.000
mean 36.924 802.486 9.193 2.913 1.0 1024.865 2.722 65.891 2.730 2.064 2.729 6502.931 14313.103 2.693 15.21 3.154 2.712 80.0 0.794 11.280 2.799 2.761 7.008 4.229 2.188 4.123
std 9.135 403.509 8.107 1.024 0.0 602.024 1.093 20.329 0.712 1.107 1.103 4707.957 7117.786 2.498 3.66 0.361 1.081 0.0 0.852 7.781 1.289 0.706 6.127 3.623 3.222 3.568
min 18.000 102.000 1.000 1.000 1.0 1.000 1.000 30.000 1.000 1.000 1.000 1009.000 2094.000 0.000 11.00 3.000 1.000 80.0 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000
25% 30.000 465.000 2.000 2.000 1.0 491.250 2.000 48.000 2.000 1.000 2.000 2911.000 8047.000 1.000 12.00 3.000 2.000 80.0 0.000 6.000 2.000 2.000 3.000 2.000 0.000 2.000
50% 36.000 802.000 7.000 3.000 1.0 1020.500 3.000 66.000 3.000 2.000 3.000 4919.000 14235.500 2.000 14.00 3.000 3.000 80.0 1.000 10.000 3.000 3.000 5.000 3.000 1.000 3.000
75% 43.000 1157.000 14.000 4.000 1.0 1555.750 4.000 83.750 3.000 3.000 4.000 8379.000 20461.500 4.000 18.00 3.000 4.000 80.0 1.000 15.000 3.000 3.000 9.000 7.000 3.000 7.000
max 60.000 1499.000 29.000 5.000 1.0 2068.000 4.000 100.000 4.000 5.000 4.000 19999.000 26999.000 9.000 25.00 4.000 4.000 80.0 3.000 40.000 6.000 4.000 40.000 18.000 15.000 17.000
# 查看所有数据分布
colnm = df.columns.to_list()
plt.figure(figsize=(35, 25))
for i in range(35):
    plt.subplot(5, 7, i+1)  # 3行4列 位置是i+1的子图
    df[colnm[i]].hist(bins=80, color=colors[1])  # bins 指定显示多少竖条
    plt.xlabel(colnm[i], fontsize=13)
    plt.ylabel('Frequency')
plt.tight_layout()
print('\n figure 01')
 figure 01

在这里插入图片描述

得出结论: 该公司员工平均年龄为36岁 平均工作年限为11年,最长工作年限为40年 月平均收入为6502.93等重要信息

# 公司各部门离职率分析
plt.figure(figsize=(15, 9))  # 图片大小
df1 = pd.crosstab(df['Department'], df['Attrition'])
df1.plot(kind='bar')
plt.legend()
plt.xlabel('部门')
plt.ylabel('人数')
plt.xticks(rotation=0)
plt.title('公司各部门离职率分析')
print('\n figure 02')
 figure 02

在这里插入图片描述

得出结论:公司主要由三个部门组成(人力资源,科技部门,销售部门),其中科技部门的总人数最多,相对应的离职人数也是最多的,人力资源部门总人数和离职人数都最少

# 公司离职人数占比分析
labels = ['离职', '在职']
sizes = [sum(df['Attrition'] == 'Yes'), sum(df['Attrition'] == 'No')]
explode = (0, 0.001)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("公司离职人数占比分析")
print('\n figure 03')
 figure 03

在这里插入图片描述

得出结论:公司离职率是16%

# 加班与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='OverTime', hue='Attrition', data=df, color=colors[4])
plt.legend()
plt.xlabel('加班时长')
plt.title('加班与离职率的关系')
print('\n figure 04')
 figure 04

在这里插入图片描述

得出结论:加班时间越长,员工的离职率越高,加班是导致离职的重要原因

# 商务出差与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='BusinessTravel', hue='Attrition', data=df)
plt.legend()
plt.xlabel('商务出差频次')
plt.title('商务出差与离职率的关系')
print('\n figure 05')
 figure 05

在这里插入图片描述

得出结论:如果频繁的商务出差,员工的离职率会更高

# 教育程度与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='Education', hue='Attrition', data=df, color=colors[6])
plt.legend()
plt.xlabel('教育程度')
plt.title('教育程度与离职率的关系')
print('\n figure 06')
 figure 06

在这里插入图片描述

得出结论:科技公司大部分学历中偏上,教育程度越高,更有竞争力,离职率也越低

# 性别与离职率的关系
plt.figure(figsize=(6, 4))
sns.countplot(x='Gender', hue='Attrition', data=df, color=colors[8])
plt.legend()
plt.xlabel('性别')
plt.title('性别与离职率的关系')
print('\n figure 07')
 figure 07

在这里插入图片描述

得出结论:科技公司男性人数比较多,通过公司人口基数来对比,女性的离职率是要高于男性的

# 婚姻状况与离职率的关系
labels = ['单身', '已婚', '离婚']
sizes = [sum(df['MaritalStatus'] == 'Married'), sum(df['MaritalStatus'] == 'Single'), sum(df['MaritalStatus'] == 'Divorced')]
explode = (0.04, 0, 0.001)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("婚姻状况与离职率的关系")
print('\n figure 08')
 figure 08

在这里插入图片描述

得出结论:公司单身离职率最高,离婚后的离职率最低

# 收入与离职率的关系
df_income1 = df[(df['MonthlyIncome'] > 1000) & (df['MonthlyIncome'] < 8000)]
df_income2 = df[(df['MonthlyIncome'] > 8000) & (df['MonthlyIncome'] < 15000)]
df_income3 = df[(df['MonthlyIncome'] > 15000) & (df['MonthlyIncome'] < 20000)]
labels = ['月收入小于8000离职率', '月收入8000-15000离职率', '月收入大于15000离职率']
sizes = [sum(df_income1['Attrition'] == 'Yes'), sum(df['Attrition'] == 'Yes'),
         sum(df['Attrition'] == 'Yes')]
explode = (0.04, 0, 0.001)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=150)
plt.title("收入与离职率的关系")
print('\n figure 09')
 figure 09

在这里插入图片描述

得出结论:公司单身离职率最高,离婚后的离职率最低

# 员工工作过的公司与离职率的关系
df_worked1 = df[(df['NumCompaniesWorked'] > 0) & (df['NumCompaniesWorked'] < 3)]
df_worked2 = df[(df['NumCompaniesWorked'] > 3) & (df['NumCompaniesWorked'] < 6)]
df_worked3 = df[(df['NumCompaniesWorked'] > 6) & (df['NumCompaniesWorked'] < 10)]
x = ['0-3家', '3-6家', '6-10家']
y = [sum(df_worked1['Attrition'] == 'Yes'), sum(df_worked2['Attrition'] == 'Yes'), sum(df_worked3['Attrition'] == 'Yes')]
plt.plot(x, y, color='r')
plt.xlabel('员工工作过公司数量')
plt.ylabel('离职人数')
plt.title("员工工作过的公司与离职率的关系")
print('\n figure 10')
 figure 10

在这里插入图片描述

得出结论:员工工作过的公司越少,离职率越低,说明频繁跳槽的员工稳定性较差,更容易离职。

总结:

1.加班是导致离职最重要的原因。
建议:完善加班制度,可以对员工每月加班的时间进行限制。
加强员工培训,合理安排工作时间的工作和会议安排,提高工作时间的工作效率。

2.差旅次数过多也会导致员工离职。因为员工长期出差没办法兼顾家庭并且工作负担也比较大。
建议:合理安排员工的差旅次数。例如实施轮流差旅措施

3.工作年数也和离职率密切相关。工作年数越长,职位水平越高,离职率越低。
建议:公司招聘时考察员工的稳定性,一般情况下,以前待过的公司越少越好。

4.单身的人离职率较高。
建议:公司多关照单身的人,别让加班耽误了单身青年谈恋爱,相亲的时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python员工离职数据分析 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • Easylogging++之配置功能

    要完成Easylogging 日志的配置功能 可以通过三种方式实现 而且每一种方法都非常简单 使用配置文件 这种方法的好处就是只要修改配置文件即可实现日志格式的重新配置 而不需要修改源程序代码 缺点就是发布程序时必须打包配置文件一起发布 否
  • 常见架构模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 计算机操作系统 (王道考研)笔记(一)

    重点知识点 1 并发 并行 2 电脑开机过程 3 程序 进程 4 进程 4 1 进程的组成与控制 进程的状态与转换 4 1 1 进程的组成 4 1 2 进程控制 4 1 3 进程的状态与转换 4 1 4 程序的切换 4 2 进程通信 4 2
  • 由计数排序衍生出来的桶排序

    计数排序说白了 就是拿一个列表来记录list里的数对应count的下标出现的次数 最后利用count的统计打印出来即可 下面来看看桶排序 针对较多的数据排序 将数据分为n个桶 列表遍历 冒泡排序逆用 确保每个桶里有序 直到最后将内个桶的数据
  • mysql查询时取多条记录中最大时间的记录

    在查询的过程中 有时库里单个用户的数据往往会存在很多条 当我们需要查询出用户的一条数据时 最大时间对应记录或最小时间对应记录 往往要写很复杂的子查询 而其实通过一个简单的方法就可以查询 就是使用concat函数 就可以非常简单的查询出相应的
  • 小技巧(8):Word中自定义目录,并设置自动目录的格式

    文章目录 一 对正文中的目录设置大纲级别 1 1 通过样式设置标题级别 1 2 通过段落设置标题级别 二 设定自定义目录格式 2 1 生成自定义目录 2 2 设置显示大纲级别 2 3 设置不同级别目录的显示格式 一 对正文中的目录设置大纲级
  • vsftpd的安装和使用

    目录 1 vsftpd的简介 2 2 特点 2 3 安装 2 4 创建虚拟用户 2 5 vsftpd服务器的配置 4 6 vsftpd配置文件说明 7 7 防火墙的配置 8 8 vsftpd的验证 9 9 vsftpd的常用命令 10 10
  • sql 递归查询_SQL如何求解递归问题?

    点击上方SQL数据库开发 关注获取SQL视频教程 SQL专栏SQL数据库基础知识汇总SQL数据库高级知识汇总 递归 递归是指程序调用自身的一种编程技巧 在SQL中也有递归查询 下面我们通过一个省市区的示例来讲解递归查询的用法 问题 有如下一
  • 【C语言刷题2】

    1 杨辉三角 思路 首先观察一下示例 会发现需要一个二维数组来帮助解题 根据题目描述 会发现每一行的元素个数等于行数 并且每行首尾元素都是1 中间的元素都是左上角和上方元素和 这样我们就可以建立一个选择语句if else 如果是每行第一个或
  • UE4 C++ Timeline

    UE4 C Timeline 我命名有点不规范注意点看 结束事件绑定 每次更改绑定 调用时间轴开始方法方法 1 先建C 类 用碰撞触发时间轴 代码 h Fill out your copyright notice in the Descri
  • Compareable接口的compareTo方法详解

    Compareable接口可以实现类中成员属性的排序方法 通过重写Compareable接口中的CompareTo方法实现自定义规则的排序 针对Compareable接口的排序方式 将通过对学生类和测试类进行一个代码演示 一般情况下 一般情
  • Java用集合实现斗地主洗牌发牌

    案列分析 准备4种花色牌与13种数值牌循环嵌套为52张牌 加两种特殊牌大王小王牌共54种 再进行洗牌发牌 文章目录 一 思路分析 二 准备牌 1 准备一个集合存放所有牌 2 准备两个数组分别存取扑克牌的4种花色和13种数值 3 进行嵌套组合
  • 调度器简介,以及Linux的调度策略

    进程是操作系统虚拟出来的概念 用来组织计算机中的任务 但随着进程被赋予越来越多的任务 进程好像有了真实的生命 它从诞生就随着CPU时间执行 直到最终消失 不过 进程的生命都得到了操作系统内核的关照 就好像疲于照顾几个孩子的母亲内核必须做出决
  • Linux找回密码

    Linux找回密码 1 开启的时候要尽快点击键盘上下键 选中上面一个 然后输入 e 2 然后点击键盘上下键 找到linux16开头这一行 在行的最后输入 init bin sh 3 接着 输入完成后 直接按快捷键 Ctrl x 进入单用户模
  • CSDN的chatGPT为什么会有很多问题无法回答?

    ChatGPT是一个被OpenAI训练的大型语言模型 它使用机器学习算法 可以根据上下文和用户的输入来回答问题 然而 由于我们的认知有限 有时ChatGPT无法正确理解用户的问题或句子 从而导致它无法给出准确的回答
  • 登录文档服务器,开启登录服务器

    开启登录服务器 内容精选 换一换 如果您已在购买存储库时绑定服务器 文件系统或磁盘 可以跳过此章节 云服务器备份存储库 SFS Turbo备份存储库和云硬盘备份存储库创建后 通过向存储库绑定服务器 文件系统或磁盘来进行备份 复制操作 当混合
  • C++学习之new 与 delete表达式

    new和delete表达式动态创建和释放单个对象 a 基本知识介绍 定义变量时 必须指定其数据类型和名字 而动态创建对象时只需指定其数据类型而不必为该对象命名 取而代之的是 new表达式返回新创建对象的指针 我们通过指针来访问此对象 int
  • 解决ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘问题

    解决ImportError Could not find the DLL s msvcp140 1 dll 问题 刚安装好tensorflow安装包去试试import tensorflow as ft时 出现错误 错误原因 ImportEr
  • 【项目实战】---需求分析+表关系分析

    SSH 小编初次接触的时候傻傻的以为这个跟SHE有什么关系呢 又是哪路明星歌手 后来才知道小编又土鳖了 原来SSH是这个样子滴 百度百科对她这样阐述 SSH即 Spring Struts Hibernate Struts对Model Vie
  • Python员工离职数据分析

    Python员工离职数据分析 import pandas as pd import seaborn as sns import matplotlib pyplot as plt import warnings warnings filter