数据预处理(六)——数据变换与离散化

主要内容:
数据预处理的必要性
数据清洗
数据集成
数据标准化
数据规约
数据变换与离散化
利用sklearn进行数据预处理
小结

六、数据变换与离散化

在数据预处理过程中,不同的数据适合不同的数据挖掘算法。数据变换是一种将原始数据变换成较好数据格式的方法,以便作为数据处理前特定数据挖掘算法的输入。数据离散化是一种数据变换的形式。

(一)数据变换的策略
1.光滑
数据光滑用于去掉数据中的噪声。常用的数据光滑方法有分箱、回归和聚类等。
2.属性构造
属性构造是通过由给定的属性构造新的属性并添加到属性集中,以帮助数据挖掘。
3.聚集
聚集是对数据进行汇总或聚集。例如,可以聚集日销售数据,计算月和年销售量。通常,聚集用来为多个抽象层的数据分析构造数据立方体。
4.规范化
把属性数据按比例缩放,使之落入一个特定的小区间,如[-1.0,1.0]。
(1)最小-最大规范化

在这里插入图片描述
(2)z分数规范化
在这里插入图片描述
(3)小数定标(j为使 max( | vi` | ) < 1的最小整数)
在这里插入图片描述
5.离散化
(1)通过分箱离散化

分箱是一种基于指定的箱个数的自顶向下的分裂技术。例如使用等宽或等频分箱,然后用箱均值或中位数替换箱中的每个值,可以将属性值离散化。分箱对用户指定的箱个数很敏感,也易受离群点的影响。

(2)通过直方图离散化

直方图把属性A的值划分为不相交的区间,称作桶或箱。可以使用各种划分规则定义直方图。如在等宽直方图中,将值分成相等分区或区间。直方图分析算法可以递归地用于每个分区,自动地产生多级概念分层,直到达到一个预先设定的概念层数,过程终止。

(3)通过聚类、决策树和相关分析离散化

6.由标称数据产生概念分层

对于标称数据,概念分层可以基于模式定义以及每个属性的不同值个数产生。使用概念分层变换数据使得较高层的知识模式可以被发现。它允许在多个抽象层进行挖掘。

(二)Python数据变换与离散化

1.数据规范化

数据分析的预处理除了数据清洗、数据合并和标准化之外,还包括数据变换的过程,如类别型数据变换和连续型数据的离散化。

数据规范化示例。

import pandas as pd
import numpy as py
a = [47,83,81,18,72,41]
b = [56,96,84,21,87,67]
data = np.array([a,b]).T
dfab = pd.DataFrame(data,columns = ['A','B'])
print('最小-最大规范化:\n',(dfab-dfab.min())/dfab.max()-dfab.min())
print('零均值规范化:\n',(dfab-dfab.mean())/dfab.std())

# 最小-最大规范化:
#             A          B
# 0 -17.650602 -20.635417
# 1 -17.216867 -20.218750
# 2 -17.240964 -20.343750
# 3 -18.000000 -21.000000
# 4 -17.349398 -20.312500
# 5 -17.722892 -20.520833
# 零均值规范化:
#            A         B
# 0 -0.386103 -0.456223
# 1  1.003868  1.003690
# 2  0.926648  0.565716
# 3 -1.505803 -1.733646
# 4  0.579155  0.675209
# 5 -0.617765 -0.054747

2.类别型数据的哑变量处理

类别型数据是数据分析中十分常见的特征变量,但是在进行建模时,Python不能像R那样去直接处理非数值型的变量,因此往往需要对这些类别变量进行一系列转换,如哑变量。
哑变量(Dummy Variables)用以反映质的属性的一个人工变量,是量化了的自变量,通常取值为0或1。Python中利用pandas库中的get_dummies函数对类别型特征进行哑变量处理。

数据的哑变量处理。

df = pd.DataFrame([['green','M',10.1,'class1'],
                   ['red','L',13.5,'class2'],
                   ['blue','XL',14.3,'class1']])
df.columns = ['color','size','prize','class label']
print(df)
pd.get_dummies(df)
   color size  prize class label
   
# 0  green    M   10.1      class1
# 1    red    L   13.5      class2
# 2   blue   XL   14.3      class1

在这里插入图片描述
3.连续型变量的离散化

数据分析和统计的预处理阶段,经常会碰到年龄、消费等连续型数值,而很多模型算法尤其是分类算法都要求数据是离散的,因此要将数值进行离散化分段统计,提高数据区分度。
常用的离散化方法主要有等宽法、等频法和聚类分析法。

(1)等宽法
Pandas提供了cut函数,可以进行连续型数据的等宽离散化。cut函数的基础语法格式为:

pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3)
参数说明
x接收 array 或 Series,待离散化的数据
bins接收 int,list,array 和 tuple,若为 int,指离散化后的类别数目;若为序列型,则表示进行切分的区间,每两个数的间隔为一个区间
right接收 boolean,代表右侧是否为闭区间,默认为True
labels接收 list,array,表示离散化后各个类别的名称,默认为空
retbins接收 boolean,代表是否返回区间标签,默认为False
precision接收 int,显示标签的精度,默认为3

cut方法应用。

np.random.seed(666)
score_list = np.random.randint(25,100,size=10)
print('原始数据:\n',score_list)
bins = [0,59,70,80,100]
score_cut = pd.cut(score_list,bins)
print(pd.value_counts(score_cut))

# 原始数据:
#  [27 70 55 87 95 98 55 61 86 76]
# (80, 100]    4
# (0, 59]      3
# (59, 70]     2
# (70, 80]     1
# dtype: int64

(2)等频法
cut函数虽然不能够直接实现等频离散化,但可以通过定义将相同数量的记录放进每个区间。

等频法离散化连续型数据。

# print(data)
# print(score_list)
def SameRateCut(data,k):
    k = 2
    w = data.quantile(np.arange(0,1+1.0/k,1.0/k))
    data = pd.cut(data,w)
    return data
result = SameRateCut(pd.Series(score_list),3)
result.value_counts()

# (73.0, 98.0]    5
# (27.0, 73.0]    4
# dtype: int64

(3)聚类分析法

一维聚类的方法包括两步,首先将连续型数据用聚类算法(如K-Means算法等)进行聚类,然后处理聚类得到的簇,为合并到一个簇的连续型数据做同一标记。聚类分析的离散化需要用户指定簇的个数,用来决定产生的区间数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shi_jiaye

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

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

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

打赏作者

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

抵扣说明:

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

余额充值