第三章 数据探索

3.1 数据质量分析

缺失值的处理,从总体上分为删除、对可能值进行插补以及不处理。
异常值分析也称为离群点分析,可以通过简单统计量分析、3σ原则以及箱型图分析(箱型图仅通过分位数对数据进行识别,而不需要分布,分析结果比较客观)。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter3/示例程序")
# 读入数据
saledata <- read.csv(file = "./data/catering_sale.csv", header = TRUE) 

# 缺失值检测 并打印结果,由于R把TRUE和FALSE分别当作1、0,可以用sum()和mean()函数来分别获取缺失样本数、缺失比例
sum(complete.cases(saledata))
sum(!complete.cases(saledata))
mean(!complete.cases(saledata))
saledata[!complete.cases(saledata), ]

# 异常值检测箱线图
sp <- boxplot(saledata$"销量", boxwex = 0.7)
title("销量异常值检测箱线图")
xi <- 1.1
sd.s <- sd(saledata[complete.cases(saledata), ]$"销量")
mn.s <- mean(saledata[complete.cases(saledata), ]$"销量")
points(xi, mn.s, col = "red", pch = 18)
arrows(xi, mn.s - sd.s, xi, mn.s + sd.s, code = 3, col = "pink", angle = 75, length = .1)
text(rep(c(1.05, 1.05, 0.95, 0.95), length = length(sp$out)), 
     labels = sp$out[order(sp$out)], sp$out[order(sp$out)] + 
       rep(c(150, -150, 150, -150), length = length(sp$out)), col = "red")

运行结果是缺失值个数为1,占样本总量的0.497%,位于第15行。

3.2 数据特征分析

分布分析:对于定量数据,可以用频率分布表、直方图和茎叶图分析其分布的特征;对于定性数据,可用饼形图和条形图显示分布情况。
对比分析:绝对数比较寻找差异,相对数比较反映现象之间的关联度。
统计量分析:常用均值、中位数表现指标集中趋势,用标准差、四分位数间距表现离中趋势。
均值r语言离群值怎么求 r语言离群值处理_数据挖掘,均值对极端值很敏感,若数据是偏态分布,可以用截断均值或中位数来度量数据的集中趋势。
中位数r语言离群值怎么求 r语言离群值处理_数据_02
极差r语言离群值怎么求 r语言离群值处理_数据_03,极差对异常值很敏感,且忽略了极差间数据的分布。
标准差r语言离群值怎么求 r语言离群值处理_r语言_04,用于衡量数据偏离均值的程度。
变异系数r语言离群值怎么求 r语言离群值处理_r语言_05,用来衡量标准差s相对于均值x的离中趋势,比较多个不同单位或不同波动幅度的数据集的离中趋势。
四分位数间距:上四分位数QU和下四分位数QL之差包含了数据的一半,其值越大,说明数据变异程度越大,反之变异程度越小。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter3/示例程序")
# 读入数据
saledata <- read.table(file = "./data/catering_sale.csv", sep=",", header = TRUE) 
sales <- saledata[, 2]

# 统计量分析
# 均值
mean_ <- mean(sales, na.rm = T)
# 中位数
median_ <- median(sales, na.rm = T)
# 极差
range_ <- max(sales, na.rm = T) - min(sales, na.rm = T)
# 标准差
std_ <- sqrt(var(sales, na.rm = T))
# 变异系数
variation_ <- std_ / mean_
# 四分位数间距
q1 <- quantile(sales, 0.25, na.rm = T)
q3 <- quantile(sales, 0.75, na.rm = T)
distance <- q3 - q1
a <- matrix(c(mean_, median_, range_, std_, variation_, q1, q3, distance),
            1, byrow = T)
colnames(a) <- c("均值", "中位数", "极差", "标准差", "变异系数", 
                 "1/4分位数", "3/4分位数", "四分位间距")
print(a)

周期性分析:探索某个变量是否随着时间变化而呈现出某种周期变化趋势。
贡献度分析:又称“帕累托分析”,原理是帕累托法则“2/8定律”,争取找到那20%的资源并合理利用。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter3/示例程序")
# 读取菜品数据,绘制帕累托图
dishdata <- read.csv(file = "./data/catering_dish_profit.csv")
barplot(dishdata[, 3], col = "blue1", names.arg = dishdata[, 2], width = 1, 
        space = 0, ylim = c(0, 10000), xlab = "菜品", ylab = "盈利:元")
accratio <- dishdata[, 3]
for ( i in 1:length(accratio)) {
  accratio[i] <- sum(dishdata[1:i, 3]) / sum(dishdata[, 3])
}

par(new = T, mar = c(4, 4, 4, 4))
points(accratio * 10000 ~ c((1:length(accratio) - 0.5)), new = FALSE, 
       type = "b", new = T)
axis(4, col = "red", col.axis = "red", at = 0:10000, label = c(0:10000 / 10000))
mtext("累积百分比", 4, 2)

points(6.5, accratio[7] * 10000, col="red")
text(7, accratio[7] * 10000,paste(round(accratio[7] + 0.00001, 4) * 100, "%"))

相关分析:绘制散点图、散点矩阵图分析,相关系数。
pearson相关系数r语言离群值怎么求 r语言离群值处理_数据分析_06,0~0.3极弱线性相关,0.3~0.5低度线性相关,0.5~0.8显著线性相关,0.8~1高度线性相关。Spearman秩相关系数:pearson相关系数需要连续变量服从正态分布,非正态的关联性可以用等级相关系数描述r语言离群值怎么求 r语言离群值处理_数据_07,spearman相关只需要两个变量具有严格单调的函数关系,而pearson需要两个变量是线性相关的才说有线性关系。
判定系数:相关系数的平方r^2,用来衡量回归方程对y的解释程度,越接近1表明xy相关性越强。

# 餐饮销量数据相关性分析
# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter3/示例程序")
# 读取数据
cordata <- read.csv(file = "./data/catering_sale_all.csv", header = TRUE)
# 求出相关系数矩阵
cor(cordata[, 2:11])

3.3 R语言主要数据探索函数

r语言离群值怎么求 r语言离群值处理_数据_08


统计作图函数

barplot():绘制简单条形图

##barplot(X,horiz=FLASE,main,xlab,ylab),参数horiz是逻辑值,TRUE表示横向条形图
x=sample(rep(c("A","B","C"),20),50)  ##产生包含ABC的随机向量
counts=table(x)  ##统计三种样本的数量保存在counts中
barplot(counts)  ##绘制条形图展示三种样本的数量

pie():饼图,和不满1时饼图残缺,和超过1时,得到的是比例饼图

##pie(X)饼图
x=sample(rep(c("A","B","C"),20),50)  ##产生包含ABC的随机向量
counts=table(x)  ##统计三种样本的数量保存在counts中
pct=round(counts/sum(counts)*100)
lbls=paste(c("A","B","C"),pct,"%") ##计算百分比,便于加标签
pie(counts,labels = lbls) ##画饼图

hist():二维条形直方图

##hist(X,freq=TRUE)二维直方图,freq=T画频数图,freq=F画频率图
x=sample(1:999,100)%%100 ##取100个1到99之间的随机数
hist(x,freq=FALSE,breaks=7,main="H x") ##绘制频率直方图
line(density(x),col="red")  ##添加密度曲线

boxplot():箱型图

##boxplot(X,notch,horiztal),notch为TRUE时,绘制的是X的带刻槽的凹盒图
x1=c(rnorm(50,5,2),11,1) ##生成随机数50个,均值5,方差2,并补充2个常数
x2=c(rnorm(50,7,4),10,2)
boxplot(x1,x2,notch=TRUE) ##绘制带刻槽的箱型图