白葡萄酒品质数据探索分析
# 加载你最终使用的所有组件
# 在这个代码块的分析中。
# 注意,在这个代码块中,将参数 "echo" 设为假。
# This prevents the code from displaying in the knitted HTML output.这可以避免代码混入 HTML 输出显示。
# 应当在文件中,对所有代码块设为 echo=FALSE 。
library(ggplot2)
library(dplyr)
library(GGally)
library(ggtern)
白葡萄酒品质数据探索分析
数据概括与假设
白葡萄酒的的品质鉴别主要可以从感官指标和理化指标两部分进行分析,感官指标重要指光彩、香气、滋味和典范性方面的要求,理化指标重要指酒精含量(酒精度)、酸度和糖分指标。这里得到的数据集包含4,898种白葡萄酒,及11个量化每种酒化学成分的变量。至少3名葡萄酒专家对每种酒的品质进了评分,分数在0(非常差)和10(非常好)之间。
由于葡萄酒专家一般是通过品尝和观察等方法进行评鉴的,可以假设葡萄酒专家应该是从感官指标上面对葡萄酒进行的评分。而得到的数据是葡萄酒的理化指标数据,那么可以假设理化指标数据会影响感官指标。
下面将通过对数据的探索分析来得到这些理化指标与白葡萄酒品质的关系,分析的结果会得到葡萄酒的品质好与坏的归类,以及各个理化指标对葡萄酒品质的影响。
单变量分析
# 导入数据
df <- read.csv('wineQualityWhites.csv')
# 查看数据基础信息
str(df)
## 'data.frame': 4898 obs. of 13 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ fixed.acidity : num 7 6.3 8.1 7.2 7.2 8.1 6.2 7 6.3 8.1 ...
## $ volatile.acidity : num 0.27 0.3 0.28 0.23 0.23 0.28 0.32 0.27 0.3 0.22 ...
## $ citric.acid : num 0.36 0.34 0.4 0.32 0.32 0.4 0.16 0.36 0.34 0.43 ...
## $ residual.sugar : num 20.7 1.6 6.9 8.5 8.5 6.9 7 20.7 1.6 1.5 ...
## $ chlorides : num 0.045 0.049 0.05 0.058 0.058 0.05 0.045 0.045 0.049 0.044 ...
## $ free.sulfur.dioxide : num 45 14 30 47 47 30 30 45 14 28 ...
## $ total.sulfur.dioxide: num 170 132 97 186 186 97 136 170 132 129 ...
## $ density : num 1.001 0.994 0.995 0.996 0.996 ...
## $ pH : num 3 3.3 3.26 3.19 3.19 3.26 3.18 3 3.3 3.22 ...
## $ sulphates : num 0.45 0.49 0.44 0.4 0.4 0.44 0.47 0.45 0.49 0.45 ...
## $ alcohol : num 8.8 9.5 10.1 9.9 9.9 10.1 9.6 8.8 9.5 11 ...
## $ quality : int 6 6 6 6 6 6 6 6 6 6 ...
可以发现总计有4898个观察值,共计13个变量,除了第一个变量为白葡萄酒数据索引序号外,其他的变量分别是fixed acidity(固定酸)、volatile acidity(挥发性酸)、citric acid(柠檬酸)、residual sugar(残余糖分)、chlorides(氯化物)、free sulfur dioxide(游离二氧化硫)、total sulfur dioxide(总二氧化硫)、density(密度)、pH(pH值)、sulphates(硫酸盐)、alcohol(酒精度)、quality(品质)。
下面我们查看每个变量的统计指标,包括最小值、最大值、平均值、中位数等。
# 查看数据统计指标
summary(df)
## X fixed.acidity volatile.acidity citric.acid
## Min. : 1 Min. : 3.800 Min. :0.0800 Min. :0.0000
## 1st Qu.:1225 1st Qu.: 6.300 1st Qu.:0.2100 1st Qu.:0.2700
## Median :2450 Median : 6.800 Median :0.2600 Median :0.3200
## Mean :2450 Mean : 6.855 Mean :0.2782 Mean :0.3342
## 3rd Qu.:3674 3rd Qu.: 7.300 3rd Qu.:0.3200 3rd Qu.:0.3900
## Max. :4898 Max. :14.200 Max. :1.1000 Max. :1.6600
## residual.sugar chlorides free.sulfur.dioxide
## Min. : 0.600 Min. :0.00900 Min. : 2.00
## 1st Qu.: 1.700 1st Qu.:0.03600 1st Qu.: 23.00
## Median : 5.200 Median :0.04300 Median : 34.00
## Mean : 6.391 Mean :0.04577 Mean : 35.31
## 3rd Qu.: 9.900 3rd Qu.:0.05000 3rd Qu.: 46.00
## Max. :65.800 Max. :0.34600 Max. :289.00
## total.sulfur.dioxide density pH sulphates
## Min. : 9.0 Min. :0.9871 Min. :2.720 Min. :0.2200
## 1st Qu.:108.0 1st Qu.:0.9917 1st Qu.:3.090 1st Qu.:0.4100
## Median :134.0 Median :0.9937 Median :3.180 Median :0.4700
## Mean :138.4 Mean :0.9940 Mean :3.188 Mean :0.4898
## 3rd Qu.:167.0 3rd Qu.:0.9961 3rd Qu.:3.280 3rd Qu.:0.5500
## Max. :440.0 Max. :1.0390 Max. :3.820 Max. :1.0800
## alcohol quality
## Min. : 8.00 Min. :3.000
## 1st Qu.: 9.50 1st Qu.:5.000
## Median :10.40 Median :6.000
## Mean :10.51 Mean :5.878
## 3rd Qu.:11.40 3rd Qu.:6.000
## Max. :14.20 Max. :9.000
从上面的结果可以看出各个变量的统计指标,值得注意的是某些数据的数量级跨度略大(如 residual.sugar),可能需要使用对数坐标进行绘图。下面将对每个变量进行单独的分析,通过绘制直方图来分析变量的分布情况。
固定酸(fixed acidity)
# 绘制固定酸含量分布图
ggplot(aes(x = fixed.acidity), data = df) +
geom_histogram(binwidth = 0.1) +
scale_x_continuous(breaks = seq(3.5, 15.5, 2.5)) # 根据最大值和最小值判定坐标区间,下同
可以发现,固定酸含量大致是一个正态分布,数据比较集中分布在6.3-7.3之间,均值6.855,中位数6.800。
挥发性酸(volatile acidity)
## 绘制挥发性酸含量分布图
ggplot(aes(x = volatile.acidity), data = df) +
geom_histogram(binwidth = 0.01) +
scale_x_continuous(breaks = seq(0, 1.2, 0.2))
可以发现,挥发性酸含量大致是一个正态分布,数据比较集中分布在0.21-0.32之间,均值0.2782,中位数0.2600。
柠檬酸(citric acid)
## 绘制柠檬酸含量分布图
ggplot(aes(x = citric.acid), data = df) +
geom_histogram(binwidth = 0.01) +
scale_x_continuous(breaks = seq(0, 1.8, 0.2))
可以发现,柠檬酸含量大致是一个正态分布,但是有部分异常值,数据比较集中分布在0.27-0.39之间,均值0.3342,中位数0.3200。
残余糖分(residual sugar)
## 绘制残余糖分含量分布图
ggplot(aes(x = residual.sugar), data = df) +
geom_histogram(binwidth = 0.5) +
scale_x_continuous(breaks = seq(0, 66, 5))
可以发现残余糖分的分布不是正态分布,上面提到该数据的坐标跨度很大,因此需要使用对数坐标重新绘制一下再进行分析。
## 绘制残余糖分含量分布图(对数坐标)
ggplot(aes(x = residual.sugar), data = df) +
geom_histogram(binwidth = 0.05) +
scale_x_log10() +
xlab(label = "residual sugar(log10)")
可以看出残余糖分的对数分布图呈现两个山峰形状,查阅资料发现葡萄酒分为干型和甜型1,因此该变量可以作为参考把我们的葡萄酒分成两类,可以使用中位数5.200作为分界计算两种分类的数量。
#计算白葡萄酒的干型和甜型数据
df$type<-ifelse(df$residual.sugar >= 5.200, 'sweet', 'dry')
ggplot(aes(x = type), data = df) +
geom_bar(width = 0.3)
## 统计甜型和干型数量
table(df$type)
## dry sweet
## 2440 2458
根据计算结果,发现干型白葡萄酒有2440种,甜型葡萄酒有2458种,根据葡萄酒专家的喜好不同,干型和甜型的葡萄酒会影响葡萄酒的品质。
氯化物(chlorides)
## 绘制氯化物含量分布图
ggplot(aes(x = chlorides), data = df) +
geom_histogram(binwidth = 0.002) +
scale_x_continuous(breaks = seq(0, 0.4, 0.05))
可以发现,氯化物含量大致偏长尾分布,数据比较集中分布在0.036-0.06之间,均值0.04577,中位数0.04300。
游离二氧化硫(free sulfur dioxide)
## 绘制游离二氧化硫含量分布图
ggplot(aes(x = free.sulfur.dioxide), data = df) +
geom_histogram(binwidth = 2) +
scale_x_continuous(breaks = seq(0, 300, 30))
可以发现,游离二氧化硫含量大致偏长尾分布,数据比较集中分布在10-60之间,均值35.31,中位数34.00。
总二氧化硫(total sulfur dioxide)
## 绘制总二氧化硫含量分布图
ggplot(aes(x = total.sulfur.dioxide), data = df) +
geom_histogram(binwidth = 5) +
scale_x_continuous(breaks = seq(0, 450, 40))
可以发现,总二氧化硫含量大致是一个正态分布,数据比较集中分布在80-220之间,均值138.4,中位数134.0。
密度(density)
## 绘制密度分布图
ggplot(aes(x = density), data = df) +
geom_histogram(binwidth = 0.0005) +
scale_x_continuous(breaks = seq(0.9, 1.05, 0.005))
可以发现,密度大致是一个正态分布,而且比较集中,葡萄酒加入的酒精和其他化合物的量的多少可以使葡萄酒的密度不同,均值0.9940,中位数0.9937。
pH
## 绘制pH值分布图
ggplot(aes(x = pH), data = df) +
geom_histogram(binwidth = 0.01) +
scale_x_continuous(breaks = seq(2.7, 3.9, 0.1))
可以发现,pH值大致是一个正态分布,数据集中在3.0-3.4之间,均值3.188,中位数3.180。由于pH值和葡萄酒中酸性物质含量的关系比较大,可以与其他的指标进行相关分析。
硫酸盐(sulphates)
## 绘制硫酸盐含量分布图
ggplot(aes(x = sulphates), data = df) +
geom_histogram(binwidth = 0.01) +
scale_x_continuous(breaks = seq(0.2, 1.1, 0.05))
可以看出,硫酸盐含量的分布偏长尾分布,而且硫酸盐和前面硫含量相关的指标有很大关系,可以作相关分析。数据集中在0.35-0.65之间,均值0.4898,中位数0.4700。
酒精度(alcohol)
## 绘制酒精度分布图
ggplot(aes(x = alcohol), data = df) +
geom_histogram(binwidth = 0.1) +
scale_x_continuous(breaks = seq(7, 15, 1))
可以看出,酒精度的含量不是正态分布,但是酒精度与葡萄酒的口感相关,是评价葡萄酒品质的重要指标,可以和其他变量做相关分析。
品质(quality)
## 绘制品质分布图
ggplot(aes(x = quality), data = df) +
geom_histogram(binwidth = 0.5) +
scale_x_continuous(breaks = seq(0, 10, 1))
可以看出,白葡萄酒的品质从分数是3-9,主要分布在5-7之间,这里可以把葡萄酒分成5个等级,既差(3-4)、中下(5)、中等(6)、中上(7)、优(8-9),以此统计各个品质等级的葡萄酒数量。
## 给葡萄酒分出等级并绘制统计图
df$rating <- ifelse(df$quality >= 8, 'good', ifelse(df$quality == 7, 'above-average',ifelse(df$quality == 6,"average",ifelse(df$quality == 5,"below-average","bad"))))
ggplot(aes(x = rating), data = df) +
geom_bar(width = 0.3)
## 统计数据
table(df$rating)
可以得到差品质白葡萄酒有183种,中下品质有1457种,中等品质有2198种,中上品质有880种,优质有180种。
当然,由于每个人的喜好不同,针对干型和甜型白葡萄酒也做一下统计。
## 选取干型白葡萄酒
dry=filter(df,type == "dry")
table(dry$rating)
## 选取甜型葡萄酒
sweet=filter(df,type == "sweet")
table(sweet$rating)
这里我们发现对于两种类型的白葡萄酒,干型中上和优质品质的白葡萄酒要多于甜型,可以猜测糖分的存在可能会影响其他指标从而影响品质,后面要做进一步的数据分析。
你的数据集结构是什么?
数据集中共有4898条观测数据以及13个变量,除了第一个X是代表葡萄酒的编号以外,其他的都是代表葡萄酒的理化指标和品质评分,而品质评分是3-9的整数,其他的都是小数。挥发性酸和柠檬酸有相同的标度,游离二氧化硫和总二氧化硫具有相同的标度。
与葡萄酒酸度有关的变量有:固定酸,挥发性酸,柠檬酸,游离二氧化硫,总二氧化硫,硫酸盐,pH;
与葡萄酒甜度有关的变量有:残余糖分;
与葡萄酒咸度有关的变量有:氯化物;
其他变量:密度,酒精度。
其他观测结果:白葡萄酒品质在5-7的葡萄酒最多,可以分成5类。
根据残余糖分含量可以把白葡萄酒分成两类,干型与甜型。
大部分数据呈现正态分布。
你的数据集内感兴趣的主要特性有哪些?
主要感兴趣的特征是残余糖分、酒精度和品质,这些特征比较能够直观的感受白葡萄酒的优劣,能够直接帮助选择喜欢的葡萄酒。
你认为数据集内哪些其他特征可以帮助你探索兴趣特点?
根据残余糖分这个特征变量可以把葡萄酒分成干型和甜型,根据酒精度可以选择合适的口感,根据柠檬酸和其他酸含量也可以帮助选择合适的口感。
而且发现干型和甜型白葡萄酒的品质优劣数量略有不同,可能与葡萄酒的存放时间有关,值得进一步探索。
根据数据集内已有变量,你是否创建了任何新变量?
根据残余糖分把白葡萄酒分成了干型和甜型,建立了type变量,包含dry和sweet。
然后又根据专家的评分把白葡萄酒分成了5类,既差(3-4)、中下(5)、中等(6)、中上(7)、优(8-9),建立了rating变量,包含 above-average、average、 bad、below-average和good 。
我总计建立了2个变量type和rating。
在已经探究的特性中,是否存在任何异常分布?你是否对数据进行一些操作,如清洁、调整或改变数据的形式?如果是,你为什么会这样做?
比如探究糖分的含量的时候,由于变量的跨度很大,无法从分布图上面明确分布形式,因此采用log10对数坐标重新绘制,发现了双峰的形状,据此把白葡萄酒分成了干型和甜型。
这样的做法是为了减小坐标跨度大小最观察结果的影响。
双变量分析
在做双变量分析之前,我们可以看一下各个特征变量之间的相关关系矩阵,查看变量与变量之间的相关性。
## 画出变量之间的相关系数图
ggcorr(data = subset(df, select = -c(X,type,rating)), # 去除不需要的特征变量后再做图
label = TRUE,
label_size = 4,
label_round = 2,
label_alpha = TRUE,
hjust = 0.8,
size = 3)
从图中可以看出,密度和残余糖分有很大的正相关性,相关系数达到0.84,残余糖分与酒精度呈负相关,相关系数-0.45。
同时密度和酒精度有很大的负相关性,相关系数达到-0.78。同时可以发现游离二氧化硫和总二氧化硫含量的相关系数达到了0.62。与我们最关心的品质相关性最高是酒精度。然而前面猜测柠檬酸可能会影响品质,但是他们的相关系数不大。
ph值和固定酸含量的相关性较大,却与其他酸含量关系不大。
根据以上的分析,我们将会讨论这些变量之间的关系。
残余糖分与密度
## 画出残余糖分与密度的关系(散点图)
ggplot(aes(x = residual.sugar, y = density), data = df) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(df$residual.sugar), quantile(df$residual.sugar, 0.95)) +
ylim(min(df$density), quantile(df$density, 0.95))
cor(df$residual.sugar, df$density)
可以看出密度和残余糖分呈现正相关性,相关系数是0.8389665。根据数据点的分布可以看出较低的残余糖分部分数据点比较集中,因为之前分出了干型和甜型两种,我们需要看一下在这两种类型的葡萄酒中密度与残余糖分的关系。
## 画出残余糖分与密度的关系(散点图)干型白葡萄酒
ggplot(aes(x = residual.sugar, y = density), data = dry) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(dry$residual.sugar), quantile(dry$residual.sugar, 0.95)) +
ylim(min(dry$density), quantile(dry$density, 0.95))
cor(dry$residual.sugar, dry$density)
这里可以发现在干型葡萄酒中密度与残余糖分的相关性不高,相关系数只有0.1423657。
## 画出残余糖分与密度的关系(散点图)甜型白葡萄酒
ggplot(aes(x = residual.sugar, y = density), data = sweet) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') +
xlim(min(sweet$residual.sugar), quantile(sweet$residual.sugar, 0.95)) +
ylim(min(sweet$density), quantile(sweet$density, 0.95))
cor(sweet$residual.sugar, sweet$density)
这里可以看出在甜型葡萄酒中密度与残余糖分的相关性很大,相关系数达到了 0.8026762。由此可见影响整个葡萄酒密度与残余糖分的相关性的数据主要是甜型白葡萄酒。同时这个相关系数比整体的要小,可能与采用区分干型和甜型的阀值有关。
残余糖分与酒精度
## 画出残余糖分与酒精度的关系(散点图)
ggplot(aes(x = residual.sugar, y = alcohol), data = df) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(df$residual.sugar), quantile(df$residual.sugar, 0.95)) +
ylim(min(df$alcohol), quantile(df$alcohol, 0.95))
cor(df$residual.sugar, df$alcohol)
由于密度和酒精度的相关性,可以发现残余糖分与酒精度呈负相关,相关系数-0.4506312。
密度与酒精度
## 画出密度与酒精度的关系(散点图)
ggplot(aes(x = density, y = alcohol), data = df) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(df$density), quantile(df$density, 0.95)) +
ylim(min(df$alcohol), quantile(df$alcohol, 0.95))
cor(df$density, df$alcohol)
可以看出酒精度和密度呈负相关,相关系数-0.7801376,也就是说酒精度越高,白葡萄酒的密度就越小。
酒精度与总二氧化硫
## 画出总二氧化硫度与酒精度的关系(散点图)
ggplot(aes(x = total.sulfur.dioxide, y = alcohol), data = df) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(df$total.sulfur.dioxide), quantile(df$total.sulfur.dioxide, 0.95)) +
ylim(min(df$alcohol), quantile(df$alcohol, 0.95))
cor(df$total.sulfur.dioxide, df$alcohol)
可以看出酒精度与总二氧化硫含量呈现负相关,相关系数-0.4488921,这可能与白葡萄酒的防腐技术有关,酒精度越高添加的防腐剂可能越少。
游离二氧化硫和总二氧化硫
## 画出游离二氧化硫和总二氧化硫的关系(散点图)
ggplot(aes(x = free.sulfur.dioxide, y = total.sulfur.dioxide), data = df) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(df$free.sulfur.dioxide), quantile(df$free.sulfur.dioxide, 0.95)) +
ylim(min(df$total.sulfur.dioxide), quantile(df$total.sulfur.dioxide, 0.95))
cor(df$free.sulfur.dioxide, df$total.sulfur.dioxide)
可以看出游离二氧化硫和总二氧化硫呈现正相关,相关系数0.615501,二氧化硫作为添加剂放在葡萄酒中是为了防腐,游离的二氧化硫和结合的二氧化硫共同组成总二氧化硫,这也是他们呈现正相关的原因。
pH值与固定酸
## 画出pH值与固定酸的关系(散点图)
ggplot(aes(x = fixed.acidity, y = pH), data = df) +
geom_point(alpha = 0.1) +
geom_smooth(method = 'lm', color = 'blue') + # 添加回归曲线
xlim(min(df$fixed.acidity), quantile(df$fixed.acidity, 0.95)) +
ylim(min(df$pH), quantile(df$pH, 0.95))
cor(df$fixed.acidity, df$pH)
我们知道酸性越高,pH值越小,这也是pH值与固定酸呈现负相关的原因。相关系数-0.4258583,这说明其他物质的含量也会影响pH值。
品质与酒精度
由于品质这一项是整形数据,需要做一下变换处理,因此要把quality一项改成factor。由此添加一项数据quality.factor,否则无法正常做出箱形图。
## 添加quality.factor
df$quality.factor <- factor(df$quality)
# 画出品质与酒精度箱形图
ggplot(aes(x = quality.factor, y = alcohol), data = df) +
geom_boxplot() +
xlab('quality')
可以看出品质的评分与酒精度的关系,品质低的酒(3-5)酒精度整体偏低,而品质较高的酒(6-9),整体上评分越高酒精度也越高,由于酒精度与品质的相关系数较大,可以看出酒精度影响了白葡萄酒的品质。那么选择白葡萄酒的时候,消费者可以直观的根据酒精度来判断好坏。
品质与密度
# 画出品质与密度含量箱形图
ggplot(aes(x = quality.factor, y = density), data = df) +
geom_boxplot() +
ylim(0.99,1.001) +
xlab('quality')
由于酒精度和密度的负相关,这里看出了品质与密度呈现负相关的趋势,也就是说,品质越好的酒整体上的密度也会越低。
品质与氯化物
## 画出品质与氯化物含量箱形图
ggplot(aes(x = quality.factor, y = chlorides), data = df) +
geom_boxplot() +
ylim(min(df$chlorides), quantile(df$chlorides, 0.95)) +
xlab('quality')
可以看出氯化物含量越高,白葡萄酒的品质越低,他们之间呈现负相关的关系。
品质与干型和甜型的关系
# 画出葡萄酒类型(干,甜)与品质关系的分布图
ggplot(aes(fill = type, x = quality), data = df)+
geom_bar(position = "dodge")
可以看出,干型葡萄酒的品质整体上上要高于甜型葡萄酒,除了有品酒专家的喜好干型的原因,也可能是因为酒精度的影响,甜型的白葡萄酒酒精度偏低。
双变量分析
探讨你在这部分探究中观察到的一些关系。这些感兴趣的特性与数据集内其他特性有什么区别?
可以知道残余糖分与密度有很大的相关性,同时密度和酒精度也有很大的相关性,这说明影响白葡萄酒密度的变量是酒精度和残余糖分。
而和品质关系较大的残余糖分和酒精度,其他的特征变量之间的相关性并不是很大。
你是否观察到主要特性与其他特性之间的有趣关系?
就是酒精度和密度以及残余糖分之间有很强的相关性,也是影响品质的主要变量。
你发现最强的关系是什么?
影响品质的最强的是酒精度,密度和酒精度的相关系数是-0.7801376,密度与参与糖分的相关系数是0.8389665。
同时发现单独把甜型白葡萄酒的残余糖分与密度做相关分析发现相关系数是0.8026762,反而比整体的相关系数低,可能的原因是区分干型和甜型的阀值有关。
多变量绘图选择
酒精度,品质和残余糖分
因为发现影响品质的主要两个特征变量时酒精度和参与糖分,因此拿出这三个数据做多变量分析。
# 画出酒精,品质,酒的类型(干,甜)之间的箱形图
ggplot(aes(x = quality.factor, y = alcohol), data = df) +
geom_boxplot(aes(color = df$type)) +
xlab('quality')
通过图片可以看出,不管评分如何,干型的酒精度总要比甜型的酒精度高,可能是因为白葡萄酒中残余糖分在发酵过程中没有完全转化为酒精,在日常生活中,都说贮藏年份越高的酒价值不菲,而贮藏时间正好影响了葡萄酒中残余糖分与酒精的转化。
酒精度、残余糖分与密度
## 绘制酒精度、残余糖分与密度三元图
ggtern(aes(x = df$residual.sugar,y = df$alcohol,z = df$density),data = df,shape = group,colour = group) +
theme_rgbw() +
geom_point(alpha = 0.1) +
theme_legend_position("topright") +
xlab("residual.sugar") + ylab("alcohol") + zlab("density")
这里可以看出,主要是残余糖分和酒精度占有很高的成分,这是因为密度与酒精度和残余糖分的相关性很高,后两者往往决定了白葡萄酒整体的密度。
酒精度、氯化物与品质
## 绘制酒精度、氯化物与品质 三元图
ggtern(aes(x = df$chlorides,y = df$alcohol,z = df$quality),data = df,shape = group,colour = group) +
theme_rgbw() +
geom_point(alpha = 0.1) +
theme_legend_position("topright") +
xlab("chlorides") + ylab("alcohol") + zlab("quality")
可以看出相对于酒精度,氯化物对品质的影响较小。
多变量分析
探讨你在这部分探究中观察到的一些关系。通过观察感兴趣的特性,是否存在相互促进的特性?
主要影响品质的特征变量是酒精度,其他特征变量如氯化物对品质的影响比较小。由于残余糖分、密度以和酒精度之间有很强的关系,可以说酒精度是影响品质的主要因素。
这些特性之间是否存在有趣或惊人的联系呢?
主要是干型葡萄酒比甜型葡萄酒的酒精度偏高,同时干型葡萄酒的品质整体上也高于甜型葡萄酒。
选项:你是否创建过数据集的任何模型?讨论你模型的优缺点。
因为从相关系数矩阵来看,各个变量与品质的线性关系不是很强,所以无法建立多元线性回归模型,这里没有进一步做模型讨论。
定稿图与总结
绘图一
## 画出变量之间的相关系数图
ggcorr(data = subset(df, select = -c(X,type,rating)), # 去除不需要的特征变量后再做图
label = TRUE,
label_size = 4,
label_round = 2,
label_alpha = TRUE,
hjust = 0.8,
size = 3) +
labs(title ='Relationship among all data')
描述一
从相关系数图中可以看出影响白葡萄酒品质的特征变量主要是酒精度,这在后面的分析中也得以进一步验证,而作为影响酒精度的主要因素是残余糖分和总二氧化硫含量(不考虑密度的情况),可能是因为防腐技术的原因。
绘图二
## 画出酒精,品质,酒的类型(干,甜)之间的箱形图
ggplot(aes(x = quality.factor, y = alcohol), data = df) +
geom_boxplot(aes(color = df$type)) +
labs(x = 'Quality',
y = 'Alcohol (% by volume)',
title ='Relationship of Quality and Alcohol')
描述二
可以发现干型葡萄酒要比甜型葡萄酒的酒精度偏高,说明糖分越高的酒酒精度偏低,同时也可以说明品酒专家并没有偏好白葡萄酒的甜和不甜。
绘图三
# 画出葡萄酒类型(干,甜)与品质关系的分布图
ggplot(aes(fill = type, x = quality), data = df)+
geom_bar(position = "dodge") +
labs(x = 'Quality',
y = 'Type Count',
title ='Quality Counts of Dry and Sweet')
描述三
干型比甜型的白葡萄酒整体品质要高,综合描述二的结果,说明影响白葡萄酒品质的主要判定因素是酒精度。干型品质高的主要原因是残余糖分在发酵过程中能够更多的转化成酒精,同时也减少了防腐剂的添加,这样的白葡萄酒品质会高一些。
反思
在完成整个项目过程中掌握了R语言绘图的技巧,同时也对EDA的过程有了充分的了解,这对于我以后会有很大的帮助,在做EDA过程中很遗憾的是没有做出一个可靠的模型来分析白葡萄酒的品质。在对葡萄酒分成干型和甜型之后发现其实葡萄酒可以分成四类,既干型、半干型、半甜型、甜型,我想如果使用这样的分类方法会发现更有意思的事情。
在做数据分析的过程我有尝试把一些单变量的分析都分出甜型和干型做分析,不过在分析的过程中发现这些单变量在甜型和干型的分布形状上很相似,所以没有做进一步的深究。
同时有一些变量没有做出深入的分析,其实还可以做一下聚类分析,然后通过聚类分析再与葡萄酒的品质做对比,这样可能会更有意思。