书籍:《python machine learning》
推荐kaggel 上大神的数据预处理文章:
https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python
自己之前也学习过这篇文章对一些代码进行了注释,博文如下:
https://blog.csdn.net/Amy_mm/article/details/79538083
本文是学习《python machine learning》第四章的学习记录~~~
本文数据预处理源码git 地址:https://github.com/xuman-Amy/preprocessing
本文数据预处理主要步骤:
(1)删除和估算缺失值 (removing and imputing missing values)
(2)获取分类数据 (Getting categorical data into shape for machine learning)
(3)为模型构建选择相关特征 (Selecting relevant features for the module construction)
【创建CSV数据集】
#build a csv dataset
import numpy as np
import pandas as pd
from io import StringIO
import sys
#数据不要打空格,IO流会读入空格
csv_data = \
'''A,B,C,D
1.0,2.0,3.0,4.0
5.0,6.0,,8.0
10.0,11.0,12.0,
'''
df = pd.read_csv(StringIO(csv_data))
如图,有两个空值~
【统计空值情况】
#using isnull() function to check NaN value
df.isnull().sum()
【访问数组元素】
在放入sklearn的预估器之前,可以通过value属性访问numpy数组的底层数据
【消除缺失值 dropna() 函数】
一个最简单的处理缺失值的方法就是直接删掉相关的特征值(一列数据)或者相关的样本(一行数据)。
利用dropna()函数实现。
dropna( axis = 0 /1 )参数axis表示轴选择,axis=0 代表行,axis=1 代表列。
df.dropna(axis = 1)
df.dropna(axis = 0)
dropna( how = all) how参数选择删除行列数据(any / all)
df.dropna(how = 'all')
dropna(thresh = int) 删除值少于int个数的值
df.dropna(thresh = 4)
dropna( subset = [' ']) 删除指定列中有空值的一行数据(整个样本)
df.dropna(subset = ['C'])
删除C列中有空值的那一行数据
虽然直接删除很是简单啦~但是天下没有免费的午餐,直接删除会带来很多弊端。比如样本值删除太多导致不能进行可靠预测;或者特征值删除太多(列数据),可能失去很多有价值的信息。
所以下面介绍一个更为通用的缺失值处理技巧——插值技术。我们可以根据样本集中的其他数据,运用不同的插值技术,来估计 样本的缺失值。
【插值】interpolation techniques
【imputing missing values】
比较常用的一种估值是平均值估计(mean imputation)。可以直接使用sklearn库中的imputer类实现。
class sklearn.preprocessing .Imputer
(missing_values = 'NaN', strategy = 'mean', a