摘要:阅读了前面文章的小伙伴们有没有对特征预处理有了一定的了解呢?接下来这篇文章将通过一个分析实践项目进一步了解特征预处理的过程。
目录
数据来源:本文的数据及代码来源于B站up主,Python数据分析-数据挖掘教程_哔哩哔哩_bilibili
需要本文数据或者有疑问的伙伴也可私信我,我们一起交流。
项目思路:
- 获取数据,确定标注
- 数据清洗,主要就是处理空值及异常值
- 特征选择,若数据特征不多建议不用特征选择
- 特征变换,常用标准化、归一化、数值化方法
- 特征降维,使用较为高效的主成分分析法
需要注意的是如果我们先确定标注在进行数据清洗的话会导致标注的维度与特征的维度会出现不一致的情况,所以我们可以找到标注,先让电脑进行数据清洗统一工作,然后再让电脑提取标注,保证标注与特征的维度一样。
1. 特征预处理
1.1 获取数据,数据清洗
import pandas as pd
df=pd.read_csv('D:/数据分析/HR.csv')
print(df)
提供数据的up主为了让大家方便学习,就制造了这样一个数据集,并将异常值和空值放在数据集的最后面,在此感谢up主。观察数据集,满意度水平(satisfaction_level)有空值出现,最近评价(last_evalution)和工资(salary)有异常值出现,接下来就需要处理这些数据。
#1.清洗数据
df=df.dropna(subset=['satisfaction_level','last_evaluation'])
df=df[df['satisfaction_level']<=1][df['last_evaluation']<=1][df['salary']!='nme']
print(df)
这样就得到了经过简单处理的数据,在数据较多的情况下,我们还可以利用前面文章说过的分位数来得到分析数据,也可以通过特殊值填充等方法来处理。
1.2 确定标注
将是否离职(left)视为标注,并将其从数据集中提取出来
#2.得到标注
label=df['left']
df=df.drop('left',axis=1)
# 先清洗数据再取标注,可以使最后数据和标注行数一样,如果先取标注再清洗的话,最后结果的行数就不一样
#3.特征选择:在此暂不用特征选择,因为获取的数据较少
1.3 特征变换
观察经过清洗的数据集,发现除了工资(salary)和部门(department)是非数值型数据外,其他的数据均为数值型数据,那么特征变换就需要分为两部分来进行。首先进行数值型数据的特征变换,采用Z-score标准化和最大最小标准化两种方法。
思路是:为每个特征设定一个参数值,参数值可以指定该特征是进行Z-score标准化还是最大最小标准化处理。
1.3.1 Z-score标准化与最大最小标准化
我们设定的参数如下:
以sl为例,如果参数是False的话,那么特征satisfaction_lev