看书标记【R语言数据分析与挖掘实战】3

本文介绍了数据探索的基本步骤,包括缺失值分析(删除、插补、不处理)和异常值分析(如3σ原则和箱型图)。接着讨论了数据特征分析,如分布、对比、统计量(均值、中位数、极差、标准差、变异系数等)以及周期性、贡献度和相关性分析。文中提供了R语言实现这些分析的代码示例,如绘制帕累托图和相关系数计算。
摘要由CSDN通过智能技术生成

第三章 数据探索

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 数据特征分析

分布分析:对于定量数据,可以用频率分布表、直方图和茎叶图分析其分布的特征;对于定性数据,可用饼形图和条形图显示分布情况。
对比分析:绝对数比较寻找差异,相对数比较反映现象之间的关联度。
统计量分析:常用均值、中位数表现指标集中趋势,用标准差、四分位数间距表现离中趋势。
均值 m e a n ( x ) = x ˉ = ∑ x i n ; m e a n ( x ) = ∑ w i x i ∑ w i = ∑ f i x i mean(x)=\bar{x}=\frac{\sum x_i}{n};mean(x)={\frac{\sum w_ix_i}{\sum w_i}}=\sum f_ix_i mean(x)=xˉ=nxi;mean(x)=wiwixi=fixi,均值对极端值很敏感,若数据是偏态分布,可以用截断均值或中位数来度量数据的集中趋势。
中位数 M = x ( n + 1 2 ) = 1 2 ( x n 2 + x n + 1 2 ) M=x_{(\frac{n+1}{2})}=\frac{1}{2}(x_{\frac{n}{2}}+x_{\frac{n+1}{2}}) M=x(2n+1)=21(x2n+x2n+1)
极差 m a x − m i n max-min maxmin,极差对异常值很敏感,且忽略了极差间数据的分布。
标准差 s = ∑ ( x i − x ˉ ) 2 n s=\sqrt{\frac{\sum(x_i-\bar x)^2}{n} } s=n(xixˉ)2 ,用于衡量数据偏离均值的程度。
变异系数 C V = s x ˉ × 100 % CV=\frac{s}{\bar x}×100\% CV=xˉs×100%,用来衡量标准差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 = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 r=\frac{\sum_{i=1}^{n}(x_i-\bar x)(y_i-\bar y)}{\sqrt{\sum_{i=1}^{n}(x_i-\bar x)^2\sum_{i=1}^{n}(y_i-\bar y)^2}} r=i=1n(xixˉ)2i=1n(yiyˉ)2 i=1n(xixˉ)(yiyˉ),0~0.3极弱线性相关,0.3~0.5低度线性相关,0.5~0.8显著线性相关,0.8~1高度线性相关。Spearman秩相关系数:pearson相关系数需要连续变量服从正态分布,非正态的关联性可以用等级相关系数描述 r s = 1 − 6 ∑ i = 1 n ( R i − Q i ) 2 n ( n 2 − 1 ) r_s=1-\frac{6\sum_{i=1}^{n}(R_i-Q_i)^2}{n(n^2-1)} rs=1n(n21)6i=1n(RiQi)2,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语言主要数据探索函数

在这里插入图片描述
统计作图函数
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) ##绘制带刻槽的箱型图
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值