跳转至

数据预处理

在进行基础的数据探索或者建模之前,一般会对数据做一些数据预处理,常见的数据预处理操作主要包括如下几类:

1.数据偏度#

从数据特征本身的统计维度看,有尺度、偏度等

数据标准化/归一化#

  • 标准化 => 均值0,方差1
  • 归一化 => [0,1]
## 数据标准化
from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler()
X_train_norm = mms.fit_transform(imputed_data)
X_test_norm = mms.transform(imputed_data)

数据偏度#

可以通过偏度来度量,数据中如果存在较大的偏度,可能是因为有异常点的存在。
有偏数据处理,一般可以取log,或者开根号让它能近似正态

2.异常点#

首先什么是异常点,需要进行异常点识别异常检测-多元

异常点
1. 首先确认是不是错误导致,比如计算错误。取值错误
2. 确认异常点的生成机制

异常点处理
* 如果是少量可以直接删除
* 当数据量较少,删除后造成可用信息较少时候,可以使用“空间标识”的数值处理方法

3.缺失值#

缺失机制:
随机缺失,还是非随机缺失。如果是非随机缺失,就需要考虑清楚这个特征是否会都最终结果的预测有偏。

python中缺失是nan,如果本身数据中缺失是用其他方式表示的,可以先转换一下
df.replace('-', np.nan)

处理方式:

暴力删除#

如果缺失占比太大,删除
isnull() 判断是否缺失
dropna( axis = 0 /1 ) 参数axis表示轴选择,axis=0 代表行,axis=1 代表列
dropna(subset=['']) 删除指定列中有空值的一行数据

默认值填充#

比如填充均值、中位数、众数等等,也可以对不同列填不同的值
df.fillna(value)

统计/算法填充#

  • 统计方法:均值
  • 机器学习方法:回归、K近邻
from sklearn.preprocessing import Imputer
# strategy 有mean,median, most_frequent 方式
# axis 默认是0,列向, axis=1行向
dff = df.loc[:, ['comment_time']]
imr = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0 )
imr = imr.fit(dff.values)
imputed_data = imr.transform(dff.values)
## 3.分类数据处理
from sklearn.preprocessing import LabelEncoder
class_le = LabelEncoder()
y = class_le.fit_transform(df['nid'].values)

4.特征冗余#

一般是说特征自相关性太高,即“共线性”。另外是指一些没有区分度的变量,比如一是特征取值的总数与样本数目的比例在 10% 以下,二是出现频率最高的特征取值的出现频率应该在出现频率次高的特征的20倍以上。

检测办法:
解决办法:PCA

分类型变量处理#

有时候建模过程中是有分类型变量的,对于传统的机器学习模型来说。需要将分类变量转为数字才行。
1. one hot
2. label encode


参考资料#

一方面可以多查些官方说明,多去看些kaggle,tianchi等的比赛案例,他们数据预处理做的很全面到位实践一些工作中的项目,将代码规范化

https://blog.chih.me/Outlier-mining-review.html

https://blog.csdn.net/Amy_mm/article/details/79799629
https://www.cnblogs.com/charlotte77/p/5622325.html

https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python