第4章 数据预处理

目录

4.1 数据清洗

4.1.1 缺失值处理

4.1.2 异常值处理

4.2 数据集成

4.2.1 实体识别

4.2.2 冗余属性识别

4.3 数据变换

4.3.1 简单函数变换

4.3.2 规范化

4.3.3 连续属性离散化

4.3.4 属性构造

4.3.5 小波变换

4.4 数据规约

4..4.1 属性规约

4.4.2  数值规约

4.1 数据清洗

主要是删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理缺失值、异常值等。

4.1.1 缺失值处理

处理缺失值的方法分为3类:删除记录、数据插补和不处理。

1、常用的数据插补方法

均值/中位数/众数插补 根据属性值的类型,用该属性取值的均值/中位数/众数进行插补
使用固定值插补 将缺失的属性值用一个常量替换
最近临插补 在记录中找到与缺失样本数据最接近的样本的该属性值插补
回归方法 对带有缺失值的变量,根据已有数据和与其有关的其他变量(因变量)的数据建立拟合模型来预测缺失的属性值
插值法 利用已知点建立合适的插值函数f(x),未知值由对应点 x求出的函数值f ( x)近似代替

插值方法:拉格朗日插值法、牛顿插值法、Hermite插值、分段插值、样条插值法等。

拉格朗日插值法利用Python实现:

import pandas as pd
from scipy.interpolate import lagrange

data=pd.read_excel(r‘E:\siren\Python dataAnalyst\chapter4\demo\data\catering_sale.xls‘)

# 过滤异常值,将其变为空值
data[‘销量‘][(data[‘销量‘]<400)|(data[‘销量‘]>5000)]=None

#自定义列向量插值函数
def ployinterp_column(s,n,k=5):
    y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]  #取数
    y=y[y.notnull()]    #剔除空值
    return lagrange(y.index,list(y))(n)  #插值并返回插值结果

#逐个元素判断是否需要插值
for i in data.columns:
    for j in range(len(data)):
        if (data[i].isnull())[j]: #如果为空即插值
            data[i][j]=ployinterp_column(data[i],j)

4.1.2 异常值处理

在数据预处理时,异常值是否剔除,要视具体情况而定。

异常值处理常用方法

异常值处理方法 方法描述
删除含有异常值的记录 直接将含有异常值的记录删除
视为缺失值 将异常值视为缺失值,利用缺失值处理的方法进行处理
平均值修正 可用前后两个观测值的平均值修正改异常值
不处理 直接在具有异常值的数据集上进行挖掘

在很多情况下,要先分析异常值出现的可能原因,在判断异常值是否应该舍弃,如果是正确数据,可直接在具有异常值的数据集上进行挖掘建模。

4.2 数据集成

数据集成就是将多个数据源合并存放在一个一直的数据存储(如数据仓库)中的过程。

在数据集成时,来自多个数据源的现实世界实体的表达形式是不一样的,有可能不匹配,要考虑实体识别问题和属性冗余问题,从而将源数据在最底层上加以转换、提炼和集成。

4.2.1 实体识别

实体识别是指从不同数据源识别出现实世界的实体,它的任务是统一不同源数据的矛盾之处,常见形式:

(1)同名异义

数据源A中的属性ID和数据源B中的ID分别描述的是菜品编号和订单编号,即描述不同的实体。

(2)异名同义

数据源A中的sales_dt和数据源B中的sales_date都是描述销售日期的,即A.sales_dt=B.sales_date

(3)单位不统一

描述同一个实体分别用的是国际单位和中国传统的计量单位。

检测和解决这些冲突就是实体识别的任务。

4.2.2 冗余属性识别

数据集成往往导致数据冗余,例如:

(1)同一属性多次出现

(2)同一属性命名不一致导致重复

对于冗余属性要先分析,检测到后再将其删除。有些冗余属性可以用相关分析检测。

4.3 数据变换

数据变换主要是对数据进行规范化处理,将数据转换成“适当的”形式,以适用挖掘任务及算法的需要。

4.3.1 简单函数变换

简单函数变换是对原始数据进行某些数学变换,常用的变换包括平方、开方、取对数、差分运算等,即:

简单的函数变换常用来将不具有正态分布的数据变换成具有正态分布的数据。

4.3.2 规范化

数据规范化(归一化)处理是数据挖掘的一项基础工作。不同评价指标往往具有不同的量纲,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果。为了消除指标间的量纲和取值范围差异的影响,进行标准化处理,将数据按照比例进行缩放,是指落到一个特定区域,便于进行综合分析。

(1)最小-最大规范化

也称离差标准化,是对原始数据的线性变换,将数值映射到[0,1]之间。

离差标准化保留了原来数据中存在的关系,是消除量纲和数据取值范围影响的最简单方法。

缺点:若数值集中且某个数值很大,则规范化后各值会接近于0,并且会相差不大。若将来遇到超过目前属性取值范围的时候,会引起系统错误,需要重新确定min和 max。

(2)零-均值规范化

也称标准差标准化,经过处理的数据的均值为0,标准差为1。是当前用得最多的数据标准化方法。

(3)小数定标规范化

通过移动属性值的小数位数,将属性值映射到[-1,1]之间,移动的小数位数取决于属性值绝对值的最大值。

1 1 data=pd.read_excel(r‘E:\siren\Python dataAnalyst\chapter4\demo\data\normalization_data.xls‘)
2 2 #标准差标准化
3 3 (data-data.mean())/data.std()
4 4
5 5 #最小-最大规范化
6 6 (data-data.min())/(data.max()-data.min())
7 7
8 8 #小数定标规范化
9 9 data/10**np.ceil(np.log10(data.abs().max())

4.3.3 连续属性离散化

将连续属性变换成分类属性,即连续属性离散化。

1、离散化过程

连续属性的离散化就是在数据的取值范围内设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。

离散化涉及2个子任务:1)确定分类数

2)如何将连续属性值映射到这些分类值。

2、常用的离散化方法

(1)等宽法

将属性的值阈分成具有相同宽度的区间,区间个数由数据本身的特点决定。

缺点:对离群点敏感,倾向于不均匀地把属性值分布到各个区间。有些区间包含许多数据,另外一些区间的数据很少,这样会损坏建立的决策模型。

(2)等频法

将相同数量的记录放进每个区间。

缺点:虽然避免了使用等宽法的问题,却可能将相同的数据值分到不同的区间以满足每个区间中固定的数据个数。

(3)基于聚类分析的方法

一维聚类的方法包括两个步骤:

1)将连续属性的值用聚类算法(如K-Means)进行聚类

2)将聚类得到的簇进行处理,合并到一个簇的连续属性值并做同一标记。

聚类分析的离散化方法也需要用户指定簇的个数,从而决定产生的区间数。

 1 import pandas as pd
 2
 3 data = pd.read_excel(r‘E:\siren\Python dataAnalyst\chapter4\demo\data\discretization_data.xls‘) #读取数据
 4 data = data[u‘肝气郁结证型系数‘].copy()
 5 k = 4
 6
 7 d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3
 8
 9 #等频率离散化
10 w = [1.0*i/k for i in range(k+1)]
11 w = data.describe(percentiles = w)[4:4+k+1] #使用describe函数自动计算分位数
12 w[0] = w[0]*(1-1e-10)
13 d2 = pd.cut(data, w, labels = range(k))
14
15 from sklearn.cluster import KMeans #引入KMeans
16 kmodel = KMeans(n_clusters = k, n_jobs = 4) #建立模型,n_jobs是并行数,一般等于CPU数较好
17 kmodel.fit(data.reshape((len(data), 1))) #训练模型
18 c = pd.DataFrame(kmodel.cluster_centers_).sort(0) #输出聚类中心,并且排序(默认是随机序的)
19 w = pd.rolling_mean(c, 2).iloc[1:] #相邻两项求中点,作为边界点
20 w = [0] + list(w[0]) + [data.max()] #把首末边界点加上
21 d3 = pd.cut(data, w, labels = range(k))
22
23 def cluster_plot(d, k): #自定义作图函数来显示聚类结果
24     import matplotlib.pyplot as plt
25     plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘] #用来正常显示中文标签
26     plt.rcParams[‘axes.unicode_minus‘] = False #用来正常显示负号
27
28     plt.figure(figsize = (8, 3))
29     for j in range(0, k):
30     plt.plot(data[d==j], [j for i in d[d==j]], ‘o‘)
31
32     plt.ylim(-0.5, k-0.5)
33     return plt
34
35 cluster_plot(d1, k).show()
36
37 cluster_plot(d2, k).show()
38 cluster_plot(d3, k).show()

4.3.4 属性构造

利用已有的属性构造出新的属性,并加入到现有的属性集合中。

比如,进行防窃露电诊断建模时,已有的属性包括供入电量、供出电量。理论上供入电量=供出电量,但是传输过程中存在电能损耗,使得供入电量>供出电量,如果这条线路上的一个或多个大用户存在窃漏电行为,会使得供入电量明显大于供出电量。

为判断是否有大用户存在窃漏电行为,构造新指标-线损率,该过程就是构造属性。

线损率正常为3%~15%,如果远远超过这个范围,就可以认为该条线路的大用户可能存在窃漏电等用电异常行为。

4.4 数据规约

4.4.1 属性规约

通过属性合并来创建新属性维数,或者直接通过删除不相关的属性(维)来减少数据维数,从而提高数据挖掘的效率、降低计算成本。

目标:寻找出最小的属性子集并确保新数据子集的概率分布尽可能接近原来数据集的概率分布

属性规约的常用方法:

(1)合并属性

(2)逐步向前选择

(3)逐步向后删除

(4)决策树归纳

(5)主成分分析

逐步向前选择、逐步向后删除、决策树归纳属于直接删除不相关属性方法。

4.4.2 数值规约

数值规约是指通过选择替代的、较小的数据来减少数据量,包括有参数方法和无参数方法两类。

有参数方法:使用一个模型来评估数据,只存放参数,而不是存放实际数据,如:回归和对数线性模型。

无参数方法:需要存放实际数据,如:直方图、聚类、抽样(采样)。

(1)直方图

(2)聚类

聚类技术奖数据元组(即记录,数据表中的一行)视为对象。将对象划分为簇,使一个簇中的对象相互“相似”,与其他簇中的对象“相异”。

(3)抽样

简单随机抽样

聚类抽样

分层抽样

(4)参数回归

原文地址:https://www.cnblogs.com/dataAnalysis/p/9413686.html

时间: 2024-08-30 01:23:34

第4章 数据预处理的相关文章

《数据挖掘概念与技术》--第三章 数据预处理

一.数据预处理 1.数据如果能够满足其应用的要求,那么他是高质量的. 数据质量涉及许多因素:准确性.完整性.一致性.时效性.可信性.可解释性. 2.数据预处理的主要任务:数据清洗.数据集成.数据规约.数据变换. 二.数据清理:试图填充缺失值,光滑噪声.识别利群点.纠正数据中的不一致. 1.缺失值的处理: 1)忽略元组:缺少类标号时通常这么做.但是忽略的元组其他属性也不能用,即便是有用的. 2)人工填写:该方法很费事费时,数据集很大.缺失值很多时可能行不通. 3)使用一个全局常量填充缺失值:将缺失

【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

3.3缺失值处理 R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量.数据框等多种对象,返回逻辑值. > attach(data) The following objects are masked fromdata (pos = 3): city, price, salary > data$salary=replace(salary,salary>5,NA) > is.na(salary) [1] FALSEFALSE TRUE

[Python数据挖掘]第4章、数据预处理

数据预处理主要包括数据清洗.数据集成.数据变换和数据规约,处理过程如图所示. 一.数据清洗 1.缺失值处理:删除.插补.不处理 ## 拉格朗日插值代码(使用缺失值前后各5个未缺失的数据建模) import pandas as pd #导入数据分析库Pandas from scipy.interpolate import lagrange #导入拉格朗日插值函数 inputfile = '../data/catering_sale.xls' #销量数据路径 outputfile = '../tmp

CS231n 卷积神经网络与计算机视觉 6 数据预处理 权重初始化 规则化 损失函数 等常用方法总结

1 数据处理 首先注明我们要处理的数据是矩阵X,其shape为[N x D] (N =number of data, D =dimensionality). 1.1 Mean subtraction 去均值 去均值是一种常用的数据处理方式.它是将各个特征值减去其均值,几何上的展现是可以将数据的中心移到坐标原点,Python中的代码是 X -= np.mean(X, axis = 0). 对于图像处理来说,每个像素的值都需要被减去平均值 ( X -= np.mean(X)), 也可以分别处理RGB

【深度学习系列】PaddlePaddle之数据预处理

上篇文章讲了卷积神经网络的基本知识,本来这篇文章准备继续深入讲CNN的相关知识和手写CNN,但是有很多同学跟我发邮件或私信问我关于PaddlePaddle如何读取数据.做数据预处理相关的内容.网上看的很多教程都是几个常见的例子,数据集不需要自己准备,所以不需要关心,但是实际做项目的时候做数据预处理感觉一头雾水,所以我就写一篇文章汇总一下,讲讲如何用PaddlePaddle做数据预处理. PaddlePaddle的基本数据格式 根据官网的资料,总结出PaddlePaddle支持多种不同的数据格式,

脑图像的数据预处理2

脑图像的数据预处理2 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 在脑图像的数据预处理中已经介绍了一些内容,这篇文章是对前一篇文章的补充与完善.更多内容请看脑图像.数据来源:BrainWeb: Simulated Brain Database 1. 将0.1.2.3类数据分离出来,并存入文件 main.m function main(filename,name, num) %将真实脑图像中的0.1.2.3拿出来,其余像素为0. %function

小白学 Python 数据分析(9):Pandas (八)数据预处理(2)

人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):Pandas (二)数据结构 Series 小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择 小白学

数据预处理(完整步骤)

原文:http://dataunion.org/5009.html 一:为什么要预处理数据?(1)现实世界的数据是肮脏的(不完整,含噪声,不一致)(2)没有高质量的数据,就没有高质量的挖掘结果(高质量的决策必须依赖于高质量的数据:数据仓库需要对高质量的数据进行一致地集成)(3)原始数据中存在的问题:不一致 —— 数据内含出现不一致情况重复不完整 —— 感兴趣的属性没有含噪声 —— 数据中存在着错误.或异常(偏离期望值)的数据高维度二:数据预处理的方法(1)数据清洗 —— 去噪声和无关数据(2)数

数据挖掘概念与技术读书笔记(三)数据预处理

3.1 数据预处理 数据质量的三个要素:准确性.完整性和一致性. 3.1.2 数据预处理的主要任务 数据清理:填写缺失的值,光滑噪声数据,识别或删除离群点,并解决不一致性来”清理“数据. 数据集成: 数据归约: 3.2 数据清理 3.2.1 缺失值 1.忽略元组 2.人工填写缺失值 3.使用一个全局常量填充缺失值 4.使用属性的中心度量填充缺失值:中位数 5.使用与给定元组属同一类的所有样本的属性均值或中位数 6.使用最可能的值填充缺失值:回归/贝叶斯/决策树 第6种是最流行的策略 3.2.2