数据分析基本技巧总结-特征工程(二)

版权声明:转载请注明出处。 https://blog.csdn.net/b285795298/article/details/81706931

特征工程

数据分析的首要问题是,清楚自己要通过数据分析去验证阐述发现一个什么样的目标。
那么特征工程要做的是:

  1. 特征的获取:围绕着目标去选择一份最相关的数据,或者知道应该怎么样去获取一些数据来实现这个目标,哪些数据可以获取,哪些不能,不能获取的数据重不重要,可以用什么数据代替或从侧面分析出来。
  2. 特征的处理:获得的数据由于人工标注,历史版本不一,数据部分丢失,甚至数据混淆等原因需要进行清洗和预处理。比如数据格式的规整,异常值的取出,脏数据的删除、在特征数量大的情况下进行降维等等。

  3. 特征的监控:历史的数据能否始终说明和支撑当前的数据分析结论?新的数据,新的特征能否利用起来增强、改善、甚至推翻当前的结论?

那么当你获得数据之后,首先进行的是数据预处理,处理好异常值和脏数据等。之后应该进行特征选择,选择出对之后构建数据模型最有意义的特征。当然数据预处理特征选择这两者在某些情况下,也可以不分先后。

数据清洗(特征预处理)

异常值的识别:
#判断是否空值
df.isnull()
#是否重复
df.duplicated()
#四分位上下界的方法判定异常值(见下文)

异常值处理:

1、丢弃:

#dropna 默认axis= 0 表示丢弃NaN和None的行,
#axis= 1表示丢弃列,subset可指定特定丢弃的属性
df.dropna(subset=['colA','colB'],axis= 0)
df.drop()
#drop_duplicates 默认保留首次出现的行即keep = 'First',
#keep也可以是'last'(表示保留最后出现的行)或'False'(全部不保留)
df.drop_duplicates(['colA'],keep='First')

2、代替:

#边界值,均值,差值等替换NaN 或者 None
fillna()
#interpolate 表示用差值填充,默认:
#若NaN在第一行,则填充第二行的数代替NaN
#若NaN在最后行,则填充倒数第二行的数代替NaN
#若NaN在中间,则填充前面数与后面数的均值代替NaN
#method= 可指定差值的类别,具体可参看[官方文档](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.interpolate.html)pd.Series.interpolate(method='spline')
四分位上下界的方法判定异常值

该方法经常用在定位连续数据异常值上。如下图,不妨假设数据数据有序,那么很容易得出数据的下四分位数、中位数、上四分位数,分别对应图中的Q1、Q2、Q3,设定一个系数k(一般取1.5-3),k的取值视数据分布情况而定。取偏离(大于)上分位数k*(Q3-Q1)的值为数据的上界,偏离(小于)下分位数k*(Q3-Q1)的值为数据的下界,然后将不属于上界和下界之间 的值定义为异常值,进而抛弃掉。
在python中,quantile(0.25)quantile(0.75) 就可以得出某个数据序列的下四分位数和上四分位数。你还想知道中位数怎么求? data.median()可以实现你的愿望。
那么,该方法的具体操作为:

  1. 计算下分位数,上分位数
  2. 计算出上界、下界
  3. 定义参数k
  4. 去掉异常值

这里写图片描述

举一个栗子:

In [1]: import pandas as pd
#若数据为多次重复试验观测,则data中 0.1 显然跟其它的值有所偏离
In [2]: data = pd.Series([0.1,10.2,11.4,8.9,9.1,12.0])
#计算上四分位数
In [3]: upper = data.quantile(0.75)
#计算下四分位数
In [4]: lower = data.quantile(0.25)
#计算四分位间距
In [5]: q_int = upper - lower
#指定系数k
In [6]: k  = 2.5
#获取合理数据
In [7]: data[data>lower-k*q_int][data<upper + k*q_int]
Out[7]: 
1    10.2
2    11.4
3     8.9
4     9.1
5    12.0
dtype: float64
#这样我们就取出了异常值。

特征的选择和变换

特征选择的目的是筛选出能训练出更好的模型的数据。
特征选择的方法有:

1、过滤思想:利用特征与标注的距离(可以是相关性、欧氏距离、假设检验等)剔除最不相关的特征。sklearn.feature_selection.SelectKBest
2、包裹思想:通过构造简单模型,根据系数、逐步过滤特征集合(比如RFE算法)。sklearn.feature_selection.RFE
3、嵌入思想:通过所有特征构建的模型(如线性回归)拟合当前的标注,最后根据各个特征的权重筛选掉权重小的特征。

猜你喜欢

转载自blog.csdn.net/b285795298/article/details/81706931