R语言数据集分析--葡萄酒

R语言对数据的分析

数据集信息:From http://archive.ics.uci.edu/ml/datasets/Wine+Quality这两个数据集与葡萄牙“Vinho佛得角”葡萄酒的红色和白色变种有关。欲了解更多详情,由于隐私和逻辑问题,只有物理化学(输入)和感官(输出)变量是可用的(例如,没有关于葡萄品种、葡萄酒品牌、葡萄酒销售价格等的数据)。

这些数据集可视为分类或回归任务。这类葡萄酒是按顺序排列的,而且不平衡(例如,普通葡萄酒比优质或劣质葡萄酒多)。离群点检测算法可以用来检测少数优秀或劣质葡萄酒。此外,我们也不确定是否所有输入变量都相关。因此,测试特征选择方法可能很有趣。

属性信息:
详情请参阅[Cortez等人,2009年]。
输入变量(基于物理化学测试):
1-固定酸度
2-挥发性酸度
3-柠檬酸
4-残余糖
5-氯化物
6-游离二氧化硫
7-总二氧化硫
8-密度
9-pH
10-硫酸盐
11-酒精
输出变量(基于感官数据):
12-质量(分数在0至10分之间)

实验过程及图片:
一、红葡萄酒分析

library(ggplot2)
library(tidyverse)
library(mice)
library(VIM)
library(psych) data1 <- read.csv2(“winequality-red.csv”,header = T)
view(data1)
class(data1)
data1[,1:11]<-lapply(df[,1:11],as.character)
data1[,1:11]<-lapply(df[,1:11],as.numeric)
view(data1)

aggr(data1,prop=F,numbers=T)#分析是否有残缺值
在这里插入图片描述
分析:由图可知没有残缺值
pairs.panels(data1[c(“quality”,“alcohol”,“sulphates”,“density”)])#画散点图矩阵
在这里插入图片描述
pairs.panels(data1[c(“quality”,“alcohol”,“sulphates”,“density”,“residual.sugar”,“pH”,“citric.acid”)])#多变量相关性分析
在这里插入图片描述

二、白葡萄酒分析

library(ggplot2)
library(tidyverse)
data<-read.csv2(“C:\includeR\winequality-white.csv”,header = T)
View(data)
在这里插入图片描述>head(data)
在这里插入图片描述
class(data)# [1] “data.frame”
df[,1:11]<-lapply(df[,1:11],as.character)#将数据中数据的因素格式转化为字符
在这里插入图片描述
df[,1:11]<-lapply(df[,1:11],as.numeric)#将数据转化为数值
在这里插入图片描述
在这里插入图片描述

str(data)
install.packages(“mice”)#缺失值处理包
library(mice)
install.packages(“VIM”)#利用第三方编辑包VIM对R语言中的缺失值分析
library(VIM)
aggr(data,prop=F,numbers=T)
在这里插入图片描述#从图中可以看出没有缺失值

ggplot(aes(x=quality),data=data) + geom_bar()+scale_x_continuous(lim=c(3,9),breaks = seq(3,9,1))
#由于我们最关注葡萄酒质量分布情况,所以对质量进行单变量分析
在这里插入图片描述
#右图可见呈正态分布。
#使用summary对总体进行分析
summary(data)
在这里插入图片描述
#由图可知各变量的最大值最小值和中位值等值。
ggplot(aes(x = fixed.acidity), data = df) +
geom_histogram(binwidth = 0.1) +
scale_x_continuous(breaks = seq(3.5, 15.5, 3))
summary(df$fixed.acidity)#画出固定酸含量分布图。
在这里插入图片描述
在这里插入图片描述
分析:从结果中可以发现,固定酸的含量大致是一个正态分布。50%的数据分布在6.3-7.3(g/dm^3)的范围之内。中位数为6.800,平均值为 6.855。

ggplot(aes(x = volatile.acidity), data = df) +geom_histogram(binwidth = 0.01) +scale_x_continuous(breaks = seq(0.1, 1.2, 0.2))
summary(df$volatile.acidity)#画出挥发性酸含量分布图。
在这里插入图片描述
在这里插入图片描述
分析:从结果中,我们可以发现,挥发酸的含量大致是一个正态分布。50%的数据分布在0.21-0.32(g/dm^3)的范围之内。中位数为0.26,平均值为 0.2782。

ggplot(aes(x = citric.acid), data = df) + geom_histogram(binwidth = 0.01) + scale_x_continuous(breaks = seq(0, 1.8, 0.2))
summary(df$citric.acid)
在这里插入图片描述
在这里插入图片描述
分析:从结果中,我们可以发现,柠檬酸的含量大致是一个正态分布(除去右边的大于0.6的异常值)。50%的数据分布在0.27-0.39(g/dm^3)的范围之内。中位数为0.32,平均值为0.3342。同时由于,上述提到的三个变量都是酸,因此把固定酸,挥发酸,柠檬酸三项合起来定义一个新的特征总酸量。

ggplot(aes(x = residual.sugar), data = df) +geom_histogram(binwidth = 1)#画出残留唐分布图
summary(df$residual.sugar)
在这里插入图片描述
在这里插入图片描述
分析:从图中可以看出,残留糖分不是正态分布也不像偏态分布,并且由于坐标之间差距很大,因此在下图使用Log10作伪标尺,再来确认一下分布。从数据上可以看出,50%的数据分布在1.7-9.9(g/dm^3)的范围内,中位数为5.2,平均数为6.391。
ggplot(aes(x = residual.sugar), data = df) +geom_histogram(binwidth = 0.05) +scale_x_log10() +xlab(‘residual.sugar by log10’)#用log10尺度来显示分布图。
在这里插入图片描述
分析:从图中可以发现,变成log10显示后,很明显残余糖分出现了一个双峰的形状。结合这个因素,我们新定义一个特征,类型。以5为分界线,定义干葡萄酒(dry)以及甜葡萄酒(sweet)。

df t y p e &lt; − i f e l s e ( d f type&lt;-ifelse(df type<ifelse(dfresidual.sugar >= 5, ‘sweet’, ‘dry’)#建立新的变量类型包含甜和甘。
ggplot(aes(x = type), data = df) + geom_bar(width = 0.3)
在这里插入图片描述
table(df$type)
在这里插入图片描述
分析:可以看到干葡萄酒和甜葡萄酒数量分别是2367,2531。

ggplot(aes(x = free.sulfur.dioxide), data = df) +geom_histogram(binwidth = 2)#画游离二氧化硫分布图
在这里插入图片描述
分析:从结果中可以发现整体是一个长尾分布,50%的数据分布在23.00-35.31(mg/dm^3)之间,中位数为34.00,平均数为35.31。
ggplot(aes(x = total.sulfur.dioxide), data = df) +geom_histogram(binwidth = 3)#对总二氧化硫画图
在这里插入图片描述
分析:从结果中可以发现,50%的数据分布在108.-138.4(mg/dm^3)之间。

ggplot(aes(x = density), data = df) + geom_histogram(binwidth = 0.0003) + scale_x_continuous(breaks = seq(.98, 1.04, 0.01))#画密度的分布图
在这里插入图片描述
分析:从结果中可以看出,密度的分布区间很小,而且密度的大小与酒精的含量由一定的关系。

ggplot(aes(x = pH),data = df) + geom_histogram(binwidth = 0.01) + scale_x_continuous(breaks = seq(2.7, 3.8, 0.1))#画出pH分布图
在这里插入图片描述
分析:从结果中可以发现,pH大致是一个正态分布,50%的数据位于3.09-3.28之间。

ggplot(aes(x = sulphates), data = df) +geom_histogram(binwidth = 0.02)#画硫甲酸的分布图
在这里插入图片描述
分析:从结果中可以看出,硫酸钾的含量大致是正态分布(略为长尾)。50%的数据位于0.4100-0.5500(g/dm^3)之间。

ggplot(aes(x = quality),data = df) +geom_bar() +scale_x_continuous(breaks = seq(3,9,1))#画质量的分布图
在这里插入图片描述
分析:从结果中可以看出,50%的数据分布在5-6之间,因此以此为界,建立一个新的特征,评分,分为好,中,差。

df r a t i n g &lt; − i f e l s e ( d f rating &lt;- ifelse(df rating<ifelse(dfquality >= 7, ‘good’, ifelse(dfKaTeX parse error: Expected 'EOF', got '#' at position 31: …common','bad'))#̲新建一个分列为rating,其…rating)
在这里插入图片描述

画出相关系数矩阵

ggcorr(data = subset(df, select = -c(type,quality.order)),label = TRUE,label_size = 4, label_round = 2, label_alpha = TRUE, hjust = 0.8, size = 3, color = “grey50”)
在这里插入图片描述
分析:由图可知密度与含糖量正相关性最强,而密度和酒精度的负相关性最强,符合物理知识。与质量有着相对较强关系的:
质量与酒精度有着正相关关系,相关系数0.44(数值上的与质量有关的最大相关系数)。
质量与密度有着负相关关系,相关系数为-0.31。
质量与总二氧化硫含量有着负相关关系,相关系数为-0.17。
质量与氯化物含量有着负相关关系,相关系数为-0.21。
质量与挥发酸含量有着负相关关系,相关系数为-0.19。
其他变量之间的较强关系:
酒精与密度有着负相关关系,相关系数-0.78。
pH与固定酸之间有着负相关关系,相关系数-0.43。
残余糖分与密度有着正相关关系,相关系数0.84。
酒精与氯化物有着负相关关系,相关系数-0.36.
酒精与总二氧化硫有着负相关关系,相关系数-0.45。

ggplot(aes(x = quality.order, y = alcohol), data = df) + geom_boxplot() +xlab(‘quality’)#画质量与酒精度箱线图
在这里插入图片描述
分析:从图中可以看出,3-5的范围内,随着较高评分的酒对应着较低的酒精度。
而从5-9的范围内,较高评分的酒对应着较高的酒精度。

ggplot(aes(x = quality.order, y = alcohol), data = df) + geom_boxplot(alpha = 0.2, aes(fill = rating)) + geom_hline(yintercept = quantile(subset(df,rating ==‘good’)$alcohol, .25), linetype = 2, color = ‘red’) + xlab(‘quality’) + scale_y_continuous(breaks = seq(8, 14, 1))#将箱线图分为好、中、差三个方面涂色
在这里插入图片描述
分析:从这副图中可以清楚地看到,很大程度上酒精度的多少决定了酒的质量。不仅仅是因为,酒精度与质量的相关系数为比其他变量与质量的相关系数都要高(0.44),并且,从图中的红线可以看到,75%以上的质量为好的酒拥有10.7以上的酒精度。与此相对,从箱形图可以看出,质量为差的酒的酒精度大部分都低于这个值。

ggplot(aes(x = quality.order, y = density), data = df) + geom_boxplot() + ylim(0.99,1.001) + xlab(‘quality’)#画质量与密度的箱线图
在这里插入图片描述
分析:发现了与酒精度相反的趋势。在3-5的范围内,质量高的酒拥有较高密度。而在5-9的范围内,质量高的酒拥有拥有较低的密度。不过由于酒精度与密度由较强的负相关性,相关系数-0.78。

p1 = ggplot(aes(x = alcohol, y = density), data = df) + geom_point(alpha = 0.1) + xlim(min(df a l c o h o l ) , q u a n t i l e ( d f alcohol), quantile(df alcohol),quantile(dfalcohol, 0.95)) + ylim(min(df d e n s i t y ) , q u a n t i l e ( d f density), quantile(df density),quantile(dfdensity, 0.95)) + geom_smooth(method = ‘lm’, color = ‘blue’)
p2 = ggplot(aes(x = residual.sugar, y = density), data = df) + geom_point(alpha = 0.1) + geom_smooth(method = ‘lm’, color = ‘red’) + xlim(min(df r e s i d u a l . s u g a r ) , q u a n t i l e ( d f residual.sugar), quantile(df residual.sugar),quantile(dfresidual.sugar, 0.95)) + ylim(min(df d e n s i t y ) , q u a n t i l e ( d f density), quantile(df density),quantile(dfdensity, 0.95))
grid.arrange(p1, p2, ncol = 2)#分别画出质量酒精度、质量残余糖的散点图,并画出回归线。
在这里插入图片描述
cor(df a l c o h o l , d f alcohol, df alcohol,dfdensity)
在这里插入图片描述
cor(df r e s i d u a l . s u g a r , d f residual.sugar, df residual.sugar,dfdensity)
在这里插入图片描述
分析:从这里可以很明显看出酒精度与残余糖分对于密度的影响。酒精负相关,残余糖分正相关。酒精的负相关在上面已经解释过了。而糖分也很明显,糖溶于水后体积基本不变,而质量则会明显增长。因此正相关。从这里我们可以发现密度几乎就与残余糖分和酒精度有关。这就说明,密度拥有第二高的正相关系数,基本都是因为酒精度的原因。更加强调了,酒精度对于酒的质量的重要性。

多变量绘图

ggplot(aes(x = quality.order, y = alcohol), data = df) + geom_boxplot(aes(color = df$type)) + xlab(‘quality’)#画出酒精,质量,酒的类型,之间的箱线图
在这里插入图片描述
分析:从图中可以发现,双变量最后的分析中,干葡萄酒比甜葡萄酒的总体分数要高的原因,看来不在于干,甜本身,并不是专家的口味有偏好,而是因为干葡萄酒中的酒精的整体含量要高于甜葡萄酒。说明不管是干还是甜,都是主要以酒精度的高低来进行酒的质量的判断。而这个原因有可能是因为,残余糖分多的葡萄酒的发酵相对来说不完全(糖分没有完全转化为酒精),导致的甜葡萄酒普遍酒精度较低。

  • 22
    点赞
  • 348
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
R语言是一种用于数据分析和统计建模的编程语言,非常适合进行kNN(k最近邻)算法的实施。kNN算法是一种基于实例的监督学习算法,用于分类和回归问题。 在进行葡萄酒数据的kNN分析之前,我们首先需要收集相关的葡萄酒数据集。对于葡萄酒数据集,我们可以选择常见的UCI葡萄酒数据集,包含多个特征,如酒精度、苹果酸含量、灰分含量等。 在R语言中,我们可以使用“caret”包来进行kNN分析。首先,我们需要加载“caret”包,并读取葡萄酒数据集: ```R library(caret) data <- read.csv("wine_data.csv") ``` 接下来,我们可以使用“trainControl”函数来设置交叉验证参数,然后使用“train”函数来构建kNN模型并进行训练: ```R ctrl <- trainControl(method = "cv", number = 5) knn_model <- train(Class ~ ., data = data, method = "knn", trControl = ctrl) ``` 在构建模型后,我们可以使用“predict”函数来对新的葡萄酒样本进行分类预测: ```R new_data <- data.frame(Alcohol = 13, Malic_Acid = 2, Ash = 2.5, ... ) prediction <- predict(knn_model, newdata = new_data) ``` 以上的代码中,我们创建了一个包含新葡萄酒样本特征的数据框,并使用训练好的kNN模型对其进行分类预测。 总结起来,R语言可以方便地进行葡萄酒数据的kNN分析。我们需要加载相应的包,读取数据集,构建kNN模型并进行训练,最后使用模型进行预测。这些步骤可以帮助我们理解和分析葡萄酒数据,并在分类问题中获得准确的预测结果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值