一文学会用python进行数据预处理

目录

数据预处理

1、概述

2、缺失值处理

查找缺失值

缺失值处理方法

3、异常值处理

异常值的识别

异常值处理的常用方法

4、数据集成

5、数据变换

数据转换

数据标准化

最大-最小规范化

规范化

特征二值化

6、数据规约

维灾难

维规约


数据预处理

1、概述

实际的数据库极易受到噪声、缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源,低质量的数据将会导致低质量的挖掘结果,大量的数据预处理技术随之产生。

2、缺失值处理

  • 查找缺失值

元素级别的判断,把对应所有元素的位置都列出来,元素为空或者NA就显示True,否则就是False。

data.isnull()

结果示例如下,如果某个元素是缺失值则会显示True(下图红框中所示)

查看各列(行)是否存在空值,True表示有空值,参数axis=0代表查看列,axis=1代表查看行。

data.isnull().any(axis=0)

计算含有空值的列数(行数),参数axis。

data.isnull.any(axis=0).sum()

将某一列中为空或者NA的个数统计出来。

data['column_name'].isnull().sum()

列出在某一列中带有缺失值的所有行。

data[data['column_name'].isnull().values==True]
  • 缺失值处理方法

        1、删除法

        2、替补法

        3、插补法

删除法

删除法适用于变量有较大缺失且对研究目标影响不大的情况。

del data['column_name'] # 删除某一列
data['column_name'].dropna()   #删除某一行为空值或者NA的元素
data.drop(data.columns[[0,1]],axis=1,inplace=True)  
#删除第1,2列,设定axis是为了确定要删的标签是属于column还是index,inplace=True表示直接就在内存中替换了,不用二次赋值生效。
data.dropna(axis=0)         #删除带有空值的行
data.dropna(axis=1)        #删除带有空值的列

替换法

如果缺失值所在变量为数值型,一般用均值来替换;如果为非数值型变量,则用中位数或者是众数来替换。

data['column_name']=data['column_name'].fillna(num) 
#将该列中的空值或者NA填充为num.其中num是某位数字,这个代码用于用数字进行替换。
data['column_name'][data['column_name'].isnull()]=data['column_name'].dropna().mode().values
#如果该列是字符串的,就将该列中出现次数最多的字符串赋予空值,mode()函数就是取出现次数最多的元素
data['column_name'].fillna(method='pad') 
#使用前一个数值替代空值或者NA,就是NA前面最近的非空数值替换
data['column_name'].fillna(method='bfill',limit=1) 
#使用后一个数值替代空值或者NA,limit=1就是限制如果几个连续的空值,只能最近的一个空值可以被填充。
data['column_name'].fillna(data['column_name'].mean()) 
#使用平均值进行填充
data= data.fillna(data.mean())
#将缺失值全部用该列的平均值代替,这个时候一般已经提前将字符串特征转换成了数值。

插补法

使用删除法和替换法有时会存在信息浪费的问题,并且数据结构也会发生变动,导致得到有偏的统计结果。用插补法可以很轻松的解决此类问题,常用的插补法有回归插补、多重插补、拉格朗日插补等。

3、异常值处理

  • 异常值的识别

在异常值处理之前需要对异常值进行识别,一般多采用单变量散点图或是箱线图来达到目的,利用图形来判断数值是否处于正常值范围。

绘制箱线图展示缺失值:

from matplotlib import pyplot as plt
import pandas as pd
dataArray=pd.DataFrame([5,6,2,4,8,9,10,2,4,5,3,5,15])
plt.boxplot(dataArray[0],labels=["A"])
plt.title("Box-plot Test")
plt.show()

四分位距

IQR=Q_3-Q_1

异常值下限

down_line=Q_1-1.5*IQR

异常值上限

up_line=Q_3+1.5*IQR

注释:图中的长方形中的值为正常值,超出范围即可判定为异常值。

  • 异常值处理的常用方法

        1、视为缺失值

        2、删除含有异常值的记录

        3、平均值修正

        4、不处理

4、数据集成

数据集成就是将多个数据源合并存放在一个一致的数据存储中的过程,根据需求而定。

5、数据变换

数据变换主要是对数据进行规范化处理、连续变量的离散化以及变量属性的构造,将数据转换成“适当的”形式,以满足挖掘任务及算法的需要。

主要用到sklearn的preprocessing模块来介绍

  • 数据转换

把一些属性特征转换为数据的过程,例如性别这个字段,有男和女这两个元素。那我们就设0代表男,1代表女。

df[u'性别'] = df[u'性别'].map({'女': 1, '男': 0})
  • 数据标准化

经过数据标准化变化后各维特征有0均值、单位方差,所以也叫做z-score规范化(零均值规范化)。计算的方法是将特征值减去均值,除以标准差。

sklearn.preprocessing.scale(X)

通常情况下会把train和test放在一起进行标准化,或者在train集上做标准化后,用同样的标准化器去标准化test集,此时可以用scaler。

scaler = sklearn.preprocessing.StandardScaler().fit(train)
scaler.transform(train)
scaler.transform(test)
  • 最大-最小规范化

最小-最大规范化对原始数据进行线性变换,变换到[0,1]区间(也可以是其他固定最小最大值的区间)
 

min_max_scaler = sklearn.preprocessing.MinMaxScaler()

 

  • 规范化

规范化是将不同变化范围的值映射到相同的固定范围,常见的是[0,1],此时也称为归一化。

X = [[ 1, -1, 2],[ 2, 0, 0], [ 0, 1, -1]]
sklearn.preprocessing.normalize(X, norm='l2')   # 默认L2标准化

  • 特征二值化

给定阈值,将特征转换为0/1

binarizer = sklearn.preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)

6、数据规约

  • 维灾难

维灾难是指这样的现象:随着数据维度的增加,许多数据分析变的非常困难。特别是随着维度增加,数据在它所占据的空间中越来越稀疏。

  • 维规约

        1、主成分分析(PCA)

        2、奇异值分解(SVD)

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值