在很久之前,我有写一个Excel数据分析的实战项目,不晓得大家还记不记得,感兴趣的童鞋可以回看:

A九姑娘:Excel数分实战:员工流失率分析​zhuanlan.zhihu.com

本次的项目数据依旧是这个,但是我们这次不再是对流失率分析,此次是利用Python知识对某公司的员工流失进行预测。

本次实战涉及Python的数据可视化、和数据建模及模型评估

干货内容

  • 数据可视化:运用matplotlib和seaborn,绘制柱状图、直方图、箱线图、折线图、饼图,以及运用子图;
  • 数据建模及模型评估:数据清洗、特征选择、特征处理、特征降维(PCA降维)、建模(分类:KNN、朴素贝叶斯、随机森林、Adaboost;回归:线性回归、岭回归、Lasso、逻辑回归)、以及各个模型的评估(准确率、召回率、F值)

感兴趣的童鞋可以接着看咯~


目录

  • 提出问题
  • 数据理解
  • 数据清洗
  • 数据可视化
  • 特征选择
  • 特征处理
  • 特征降维
  • 构建模型、模型评估

导入数据,我们先看一下整体情况:

df 

这里,我们先导入了很多库,有数据分析的numpy、pandas;数据可视化的matplotlib和seaborn;以及数据预处理(归一化、标准化、数值化、正规化、LDA降维)需要的包,接下来会一一介绍。

提出问题

根据公司离职员工特征,预测流失情况。

数据理解

前次的项目A九姑娘:Excel数分实战:员工流失率分析中我们已经对数据集进行理解,本次不再赘述。

数据清洗

本次抽样为全抽,不再进行选择子集;不涉及列重命名;不涉及数据类型转换;不涉及数据排序。

本次只涉及缺失值处理和异常值处理:

df 

数据可视化

  • 我们需要看一下员工不同阶薪酬的人数分布情况:
plt

这里,我们使用的柱状图

plt.bar就是使用matplotlib绘制直方图;那其他图我们按照这个思路就可以进行绘制了,以下列式不同图例如何绘制:

代码中的plt.title、 plt.xlabel、plt.ylabel、plt.xticks等是图表绘制中的基本元素,见下:

plt

接下来,我们又运用了seaborn,设置了主题为‘darkgrid’,字体和颜色主题。其实我们也可以利用seaborn绘制直方图:

sns

我们来看一下,seaborn的效果:

sns

seaborn的绘制效果更为美观。

  • 不同薪酬段各个部门人数的分布情况:
sns

  • 比较平均满意度、最后一次满意度和月平均工时的分布情况:

如果我们要把这三个图例一同比较,我们可以使用子图

f 

图太小了,看不清,我们运用figsize调整一下图的大小:

f 

  • 异常值分析的过程中,我们可以使用箱线图,观测数据整体的分布情况:
sns

在sns.boxplot的参数中,saturation表示上边界,默认0.75(四分位数),whis表示k默认1.5;我们调整k在看一下:

sns

看到出来,异常值变了。

  • 随着司龄变化,离职人数的变化情况,我们使用折线图
sub_df 

我们发现:工作时间5年的时候离职率最高,五年左右离职率比较高;随着时间越来越久,离职率就比较低,时间短离职率也不高;

  • 使用饼图观测各个部门的人数结构:
df

我们想要把销售部门sales着重突出:

explodes 

以上,我们使用了柱状图、直方图、饼图、折线图、箱型图对数据集进行了简单的理解;不再赘述,如果感兴趣,可以看文章开头推荐的另一篇,有对数据进行理解。

接下来,也是本文重点。

特征选择

我们在数据清理结束后,得到标注‘left’:

label 

接下来,对数据集进行相关性分析:

df

可以用热力图来更加直观的观察:

sns

以上是皮尔逊相关系数,蓝色正相关,红色负相关。last_evaluation不属于特征值,又因它和number_project和 average_monthly_hours正相关,此三个不属于特征值可去掉;因为特征不多,项目中我们可以暂时保留。

我们先去除我们的标注left:

df 

注意:axis = 1,表示列;axis = 0 表示行。

特征处理

特征变换的方法有:对指化(对数化、指数化)、离散化(等频分箱、等距分箱)、归一化、标准化、数值化、正规化。

我们对特征进行以下处理:

satisfacation_level 介于[0,1],可以不处理;或者 ,可采用MinMaxScaler归一化强行拉伸;或者标准化StandardScaler均值为0,方差为1
last_evaluation同上
number_project不大于10,也可同上
time_spend_company 与 number_project相似,同上
Work_accident promotion_last_5years 同上

sl 

此处注意:

sl为True

我们对数值类特征此处均使用标准化。

department 和salary 都是离散值,需要数值化,考虑Label Encoder和OneHot Encoder(标签化、和独热编码)

dpt 

此处注意:

department 

此处我们均使用了标签化LabelEncoding,然后进行归一化处理。

我们看一下结果:

特征降维

常用特征降维方式,有主成分分析PCA降维、LDA降维、奇异值分解SVD。此处我们使用用PCA降维,因为LDA降维后是1维。

features 

构建模型及评估

我们对数据集进行拆分,训练集60%,测试集20%,验证集20%:

from 

接下来就是建模了。

1)分类-KNN

先以KNN为例:

先说一下KNN的算法思想:一个数据集都会有他的标注,如果说找到了一个点,有K个邻居中一种标注大于另外一种标注,那我们就说这个点更倾向于与多数点是一致的,这个K可以由我们来定:

那 这个点到他邻居的距离是什么?我们可以理解,把属性转化为数值后,每个属性都是一个维度,每个对象,都是一个空间中的坐标;对象和对象之间就会有距离。有以下几种:

  • 欧式距离:理解为两个点的直线距离
  • 曼哈顿距离:理解为各个维度的长度相加
  • 闵可夫斯基距离:闵可夫斯基有一个参数p,可以取任一志,p取1时候,就是欧氏距离,p取2时候,就是曼哈顿距离;p可以无穷大。

接下来,直接上代码:

from 

我们衡量指标使用的准确率ACC、召回率REC和F值。

看一看到,验证集验证结果的准确率0.96、召回率0.91、F值0.92;

我们调整K,看一下如果只要3个邻居的话,结果又如何:

看的出来,n_neighbore=3时,泛化能力更好;

根据验证集进行对预测值验证后,我们还想根据测试集、训练集同样进行验证,我们可以建立一个函数来完成,进而比较:

knn_clf 

0为训练集;1为验证集;2为测试集。

整体来看,泛化能力还是不错的;但是,对于测试集略还是略低于训练集;存在微小的过拟合现象。

如果我们在特征预处理的时候,对数据进行的是归一化,并不是这次的标准化,我们也可以去实验一下看一下结果;同样,可以对department和salary进行one-hot编码,多次尝试;寻找最合适的模型,大家可以自己练习一下。

2)分类-朴素贝叶斯

基本算法思想

  • 假设特征间是相互独立的;
  • 各种特征在X条件下的概率也是已知的;
  • 条件X的分布概率也是已知的;
  • 给定特征,判断是X的哪个值。

常用的朴素贝叶斯算法有:高斯贝叶斯和伯努利朴素贝叶斯:

  • 朴素贝叶斯用到的特征必须是离散的;如果这些离散值都是二值(0,1),使用伯努利贝叶斯会更好;如果值是连续的,在伯努利朴素贝叶斯下,也会把 他们二值化;
  • 高斯贝叶斯,是假设特征都是高斯分布的;二者都对特征有比较严格的要求;同时,他们在离散属性的情况下会有更好的表现;连续属性不一定会非常好
from 

我们先导入数据库包~

接下来,为了方便,我们先建立一个model,存放我们的各个模型,然后统一运行比较:

models 

然后呢,我们把按照刚才的for循环思路,稍作修改:

for 

运行,我们看一下结果:

看的出来,朴素贝叶斯在此次的特征大部分非离散的情况下,泛化结果较差。

3)分类-决策树

决策树,是模仿人类做决策的过程,一步步的做出决策。

from 

我们按照刚才的思路,在models中增加决策树:

models

运行for循环,看一下结果,我们这里只看决策树部分的吧:

很明显,决策树的泛化效果更佳。

4)分类-支持向量机SVM

算法思想:扩维,把一组特征变为线性可分;所以,可以先在低维空间进行计算,利用核函数扩维。

from 

我们可以用参数C来控制SVM的精度,C越大,SVM准确率越高。这里我们先试试C = 1:

我们可以尝试把C调整到10000:

看得到,泛化效果有了明显提升。

5)分类-随机森林

随机森林是一种集成方法。

集成方法是什么?

同一个问题,我们可以用不同的分类器来判别,针对某一条数据不同的分类器结果会有不同,如果充分考虑分类器判对或者盘错的可能,就很有可能发现进一步提升分类质量的方法;机器学习问题中,将很多机器学习算法组合在一起,得到可能会比单一算法的结果更好的性能结果;这样的思路就是集成学习的方法。

集成方法分为袋装法和提升法:

  • 袋装法:对训练集用不同的模型判断后,对不同模型投票(均值),比如随机森林;
  • 提升法:模型串联起来,加权叠加,比如Adaboost;

随机森林,有N个决策树,但是我们需要注意树的个数,过多容易造成过拟合。

from 

我们运行for循环,看一下结果:

训练家的准确率达到0.996,召回率达到0.986,F值同样也是0.99;相对验证集和测试集基本差不多。整体来看,泛化能力较好。

6)分类-Adaboost

from 

运行for循环,看一下结果:

7)回归-线性回归

在上文,我们可以知道,last_evaluation number_project average_monthly_hours 相关性比较大,我们对这三列进行分析:

from 

我们看一运行结果:

8)回归-岭回归

from 

9)回归-Lasso

from 

我们可以通过控制岭回归和Lasso回归的参数来控制拟合效果。

10)回归-逻辑回归

我们在之前的文章Python数分:回归分析中对逻辑回归和线性回归,进行详细的介绍,感兴趣的童鞋可以回看哈~本次就直接上代码了:

from 

运行for循环:

泛化效果较差。


以上,我们构建10种模型,并对各个模型果进行评估。此次分享先到这里~

感谢观看。

python sns绘制回归线_Python数分实战:员工流失情况预测相关推荐

  1. python sns绘制回归线_SVM--支持向量机amp;Python代码

    (一)基础理论部分 如果对支持向量机的基础理论推导感兴趣,这里分享一个经典的视频: https://www.youtube.com/watch?v=_PwhiWxHK8o​www.youtube.co ...

  2. python sns绘制回归线_【干货!】用Python演绎5种常见可视化视图

    - 点击上方"中国统计网"订阅我吧!- 通过本篇文章,你将学到: 视图的分类,从哪些维度进行分类 5种常见视图的概念,以及如何在Python中进行使用,都需要用到哪些函数. 注意: ...

  3. python 回归 显著_Python数分:回归分析

    文章主要介绍两种常见的回归分析方法,以及其对应的Python实现操作. 我会从以下几个方面来介绍: 什么是回归分析 为什么使用回归分析 回归分析技术有哪些 使用Python实现回归分析 什么是回归分析 ...

  4. python爬虫和定位_Python网络爬虫实战,照片定位与B站弹幕!

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. Python资源共享群:626017123 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位 ...

  5. python图形绘制星空图_Python数据可视化教程:基于Plotly的动态可视化绘图

    1. plotly 介绍 Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图, 下面我们以jupyter ...

  6. mysql 计算近30天总金额_MySQL数分实战:咖啡店精细化运营

    前期,我们已经对MySQL的增删改查.以及多种查询方式和窗口.视图进行了解学习.本次我们利用前期所积累的知识进行数据分析实战. 本次实战数据源来自: Superset​superset.workeri ...

  7. python体能达标成绩_Python+Excel数据分析实战:军事体能考核成绩评定(九)评定个人等级...

    这一章我们实现个人成绩的等级评定,根据单杠.仰卧起坐.蛇形跑.3公里跑成绩以及体型,综合评定个人等级. 相关规定:体型合格就不用考虑单项不合格的情况,只看通用训练科目成绩总分(单杠.仰卧起坐.蛇形跑. ...

  8. python爬虫和定位_Python网络爬虫实战(三)照片定位与B站弹幕

    之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就可以开始第一次实战了. 这篇实战包含两个内容. * 利用爬虫调用Api来解析照片的拍摄位置 * 利用爬虫爬取Bilibili视频中的 ...

  9. python turtle绘制柱状图_python画柱状图

    原博文 2016-10-10 14:05 − #coding:utf-8 __author__ = 'similarface' from collections import defaultdict ...

最新文章

  1. 活动推荐 | 百千万人才工程创新大讲堂开启报名
  2. table布局注意点
  3. Python安装模块出错(ImportError: No module named setuptools)解决方法
  4. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值
  5. 文本字符分析python_Python实现字符串匹配算法代码示例
  6. Win11系统添加新用户的方法
  7. kgdb调试内核无法执行断点及kdb-22:Permisson denied
  8. gogs可以自动化部署吗_效率提升利器:你还害怕自动化部署吗?
  9. 41. Element getElementsByTagName() 方法
  10. opensips脚本格式
  11. 如何养狗完整版 !-为了迎接我的大宝做好准备
  12. php扑克牌随机发,PHP实现随机发放扑克牌
  13. 自定义SharePoint新网站创建过程(2)
  14. 华为HCNA实验学习
  15. 正则表达式提取字符串全部汉字或者全部英文
  16. Java实现打印日历
  17. MAC 安装tomcat
  18. 传感网应用开发(环境部署)
  19. 再度联手中国联通,开启第二个五年战略合作!
  20. 数字图像学笔记——4. 直方图计算、线性变换、对数变换、Gamma变换

热门文章

  1. 最小拍控制系统详细解读(阶跃输入+速度输入2个案例)【Simulink仿真】
  2. WakaTime 记录你的时间(Moana 自动同步信息客户端)
  3. 上机环境是什么意思_380元入手RX580满血显卡,跑分17万,还要什么自行车
  4. JQuery Datatables 显示行的附加信息
  5. 从零搭建nginx服务器
  6. 容器技术之kubectl常用命令
  7. 不知道工作组名称怎样加入_剩米饭不知道怎样做?试试泡菜炒饭,再也不用担心米饭做多了...
  8. Dreamwear如何创建javascript_JavaScript 太糟糕,JVM 有妙招!
  9. js中立即执行函数会预编译吗_面试官:聊聊对Vue.js框架的理解
  10. 雨林木风win11 64位原版系统v2021.08