原始数据的质量直接影响了数据分析的质量,不符合要求的脏数据有:
数据清晰需要处理脏数据,包括删除无关数据、重复数据,处理缺失值、异常值。
**缺失值处理:**使用NA表示,is.na
识别是否存在缺失值。缺失值常见处理方法:
na.omit()
移除缺失行,该方法适用于缺失目标影响不大的情况。**异常值处理:**使用箱线图、散点图进行识别,如超过上下四分位数 +/- 1.5倍上下四分位数间距
的为异常值。还可以使用标准差寻找。异常值的处理方法是:
将多个数据源的数据集成到一个数据仓库中。R中的数据集成是指将储存在两个数据框中的数据以关键词为依据,以行为单位做列合并。可使用merge()
函数,格式为`merge(数据框1, 数据框2, by = ‘关键词’),合并后按关键词取值升序排列。
统一实体。常见的实体不一致为同名不同义、同义不同名、单位不统一。
数据集成中往往出现冗余:同一属性多次出现;同一属性命名不一致,导致重复。可以在数据集成前对冗余部分分析,统一实体。
数据变换的目的是把数据变换成适合进一步挖掘的格式。常见方法包括简单函数变换、规范化处理、连续变量的离散化、变量属性的构建。
**简单函数变换:**包括平方、开方、取对数、差分运算。
**规范化处理:**将差别很大的原始数据,变换为[-1,1]或者[0,1]之间的数据。常见的规范化方法包括最小-最大值法,零-均值规范化、小数定标规范化。
# 最小-最大值法
b1 <- (data[,1] - min(data[,1]))/(max(data[,1] - min(data[,1])) # 第一列
b2 <- (data[,2] - min(data[,2]))/(max(data[,2] - min(data[,2])) # 第二列
b3 <- (data[,3] - min(data[,3]))/(max(data[,3] - min(data[,3])) # 第三列
b4 <- (data[,4] - min(data[,4]))/(max(data[,4] - min(data[,4])) # 第四列
data_scatter <- cbind(b1, b2, b3)
# 零-均值规范化
data_zscore <- scale(data) # 公式 (x - 均值)/标准差
# 小数定标规范化
i1 <- ceiling(log(max(abs(data[,1])),10)) # 指数
c1 <- data[,1]/10^i1
i2 <- ceiling(log(max(abs(data[,2])),10)) # 指数
c2 <- data[,1]/10^i2
i3 <- ceiling(log(max(abs(data[,3])),10)) # 指数
c3 <- data[,1]/10^i3
i4 <- ceiling(log(max(abs(data[,4])),10)) # 指数
c4 <- data[,1]/10^i4
data_dot <- cbind(c1,c2,c3,c4)
# 打印结果
options(digits = 4)
data;data_scatter;data_zscore; data_dot
**连续属性离散化:**一些分类算法,要求数据是分类属性形式。
首先,在数据集中设定若干个离散划分点,把数据集划分为离散化区间;其次,用不同的符号或整数值代表落在每个子区间的数据值。
常用的离散方法包括等宽法、等频法、一维聚类。
数据规约的目的是提高建模的准确性、使用少量且有代表性的数据大幅缩减数据挖掘所需时间、降低数据储存成本。
属性规约:目的是寻找出能反映原始数据集概率分布的最小属性子集,常用方法如下:
(上图来源《R语言数据分析与挖掘实战》)
主成分分析方法见R语言教程|带你搞清楚主成分分析(PCA)并完成分析。
**数值规约:**选择替代的、较小的数据来减少数据量。包括有参数方法和无参数方法。
有参数方法无需存放数据,只存放参数,如回归(线性回归和多元回归)和对数线性模型。
无参数方法需要储存实际数据,如直方图、聚类、抽样。
主要函数如下:
函数名 | 函数功能 | 格式 |
---|---|---|
lm() | 利用因变量与自变量建立线性回归模型 | m <- lm(y~x1 + x2 + …,data) |
predict() | 依据已有模型对数据进行预测 | predict(model, newdata) |
mice() | 对缺失数据进行多重插补 | - |
which() | 返回服从条件的观测所在位置 | which(约束条件) |
scale() | 对数据进行零-均值规范化 | Z <- scale(X, center = TRUE, scale = TRUE) |
rnorm() | 随机产生服从正态分布的一列数 | X <- rnorm(n , u, d^2) |
ceiling() | 向上舍入接近的整数 | Z <- ceilling(X) |
kmeans() | 对数据进行快速聚类分析 | Z <- kmeans(X, m) |
dwt() | 对数据进行小波分解 | Z <- dwt(X, n, levels = m) |
princomp() | 对指标变量矩阵进行主成分分析 | Z <- princomp(X, cor=TURE) |
(上图来源《R语言数据分析与挖掘实战》 P61)