数据预处理
一、数据可能存在问题
在实际业务处理中,数据通常是脏数据。所谓的脏,指数据可能存在以下几种问题(主要问题):
-
数据缺失
-
数据噪声 (Noisy)是数据值不合常理的情况。如 Salary = “-100”
-
数据不一致 (Inconsistent)是数据前后存在矛盾的情况。如 Age = “42” vs. Birthday = “01/09/1985”
-
数据冗余 (Redundant)是数据量或者属性数目超出数据分析需要的情况。
-
数据集不均衡 (Imbalance)是各个类别的数据量相差悬殊的情况。
-
离群点/异常值 (Outliers)是远离数据集中其余部分的数据。
-
数据重复(Duplicate)是在数据集中出现多次的数据。
二、数据预处理步骤
数据进行预处理主要有以下步骤,第一部分提及的各种脏数据的处理就在这些步骤中完成:
-
数据清洗 Data Cleansing
-
数据转换 Data Transformation
-
数据描述 Data Description
-
特征选择 Feature Selection 或特征组合 Feature Combination
-
特征抽取 Feature Extraction
1、数据预处理
在数据清洗阶段,我们处理第一部分提及的缺失数据、离群点和重复数据。
1.1 缺失值处理
缺失数据有以下几类:
a.Missing completely at random: 缺失的概率是随机的,比如门店的计数器因为断电断网等原因在某个时段数据为空。
b.Missing conditionally at random: 数据是否缺失取决于另外一个属性,比如一些女生不愿意填写自己的体重。
c.Not missing at random: 数据缺失与自身的值有关,比如高收入的人可能不愿意填写收入。
处理方式有以下几种:
(1) 如果样本数量占总体比例较小且不是必要的,可以直接删除
(2)用pandas的df.fillna()方法填补,可以选择的有均值、众数、中位数等方式
(3)采用随机森林方法预测缺失的值,需要输入的是未包含缺失值的其他列
(4)使用插值法,如拉格朗日插值法,可以快速插补
拉格朗日插值法的代码如下
def ployinterp_column(s, n, k=5):
y = s[list(range(n-k, n