白葡萄酒质量探索
数据来自于uci机器学习数据库中的白葡萄酒部分
library(ggplot2)
library(gridExtra)
library(GGally)
# 加载数据
df <- read.csv('wineQualityWhites.csv')
汇总统计
# 察看数据结构
str(df)
从这里我们可以发现一共有4898行观测值,以及13个变量。
# 察看汇总分析
summary(df)
固定酸
# 画出固定酸含量分布图
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.
# 使用log10尺度来显示分布图
ggplot(aes(x = residual.sugar), data = df) +
geom_histogram(binwidth = 0.05) +
scale_x_log10() +
xlab('residual.sugar by log10')
从图中可以发现,变成log10显示后,很明显残余糖分出现了一个双峰的形状。结合这个因素,我们新定义一个特征,类型。以5为分界线,定义干葡萄酒(dry)以及甜葡萄酒(sweet)。
# 建立新的变量type包含干与甜,并且画出分布图
df$type<-ifelse(df$residual.sugar >= 5, 'sweet', 'dry')
ggplot(aes(x = type), data = df) +
geom_bar(width = 0.3)
table(df$type)
可以看到干葡萄酒和甜葡萄酒数量分别是2367,2531。
氯化物
# 画出氯化物含量分布图
ggplot(aes(x = chlorides), data = df) +
geom_histogram(binwidth = 0.005)
summary(df$chlorides)
从结果中可以发现氯化物成一个长尾分布,50%的数据分布在0.036-0.05(g/dm^3)的范围之内。中位数为0.043,平均数为0.04577。
游离二氧化硫
# 画出游离二氧化硫分布图
ggplot(aes(x = free.sulfur.dioxide), data = df) +
geom_histogram(binwidth = 2)
summary(df$free.sulfur.dioxide)
从结果中可以发现整体是一个长尾分布,50%的数据分布在23.00-35.31(mg/dm^3)之间,中位数为34.00,平均数为35.31。
总二氧化硫
# 画出总二氧化硫分布图
ggplot(aes(x = total.sulfur.dioxide), data = df) +
geom_histogram(binwidth = 3)
summary(df$total.sulfur.dioxide)