当前位置:   article > 正文

【天池】WineQuality葡萄酒品质--数据分析练习_winequality-red.csv

winequality-red.csv

一、问题描述

1、数据集

数据下载地址:Wine Quality
根据数据说明可知,Wine Quality数据集中包含两个数据子集,分别是红葡萄酒(red wine)和白葡萄酒(white wine)的样本,样本量如下:

数据集 数据量
红葡萄酒(red wine) 1599
白葡萄酒(white wine) 4898

每个样本数据的输入、输出规则都是一样的,其中输入条件包含11个客观条件,都是葡萄酒的物化性质,记录为数值;输出结果只有1个,那就是专业品酒师的主观评分(至少取到三次评分的中位数),评分跨度0—10分,0分代表非常糟糕,10分代表非常出色。输入输出指标说明如下:

输入指标 说明
fixed acidity 固定酸
volatile acidity 挥发性酸
citric acid 柠檬酸
residual sugar 残留糖
chlorides 氯化物
free sulfur dioxide 游离二氧化硫
total sulfur dioxide 二氧化硫总量
density 密度
pH 酸碱值
sulphates 硫酸盐
alcohol 酒精
输出指标 说明
quality 品质(得分介于0-10)

另外还需要了解到,试验中提供的葡萄酒都来自于葡萄牙的"Vinho Verde"葡萄酒,但葡萄酒的质量并不是均匀分布的,即普通的葡萄酒要远多于劣质葡萄酒或优质葡萄酒,因此可以通过离群点有效甄别出那些少量的劣质葡萄酒或优质葡萄酒。

数据说明原文如下:

Citation Request:
  This dataset is public available for research. The details are described in [Cortez et al., 2009]. 
  Please include this citation if you plan to use this database:

  P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. 
  Modeling wine preferences by data mining from physicochemical properties.
  In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236.

  Available at: [@Elsevier] http://dx.doi.org/10.1016/j.dss.2009.05.016
                [Pre-press (pdf)] http://www3.dsi.uminho.pt/pcortez/winequality09.pdf
                [bib] http://www3.dsi.uminho.pt/pcortez/dss09.bib

1. Title: Wine Quality 

2. Sources
   Created by: Paulo Cortez (Univ. Minho), Antonio Cerdeira, Fernando Almeida, Telmo Matos and Jose Reis (CVRVV) @ 2009
   
3. Past Usage:

  P. Cortez, A. Cerdeira, F. Almeida, T. Matos and J. Reis. 
  Modeling wine preferences by data mining from physicochemical properties.
  In Decision Support Systems, Elsevier, 47(4):547-553. ISSN: 0167-9236.

  In the above reference, two datasets were created, using red and white wine samples.
  The inputs include objective tests (e.g. PH values) and the output is based on sensory data
  (median of at least 3 evaluations made by wine experts). Each expert graded the wine quality 
  between 0 (very bad) and 10 (very excellent). Several data mining methods were applied to model
  these datasets under a regression approach. The support vector machine model achieved the
  best results. Several metrics were computed: MAD, confusion matrix for a fixed error tolerance (T),
  etc. Also, we plot the relative importances of the input variables (as measured by a sensitivity
  analysis procedure).
 
4. Relevant Information:

   The two datasets are related to red and white variants of the Portuguese "Vinho Verde" wine.
   For more details, consult: http://www.vinhoverde.pt/en/ or the reference [Cortez et al., 2009].
   Due to privacy and logistic issues, only physicochemical (inputs) and sensory (the output) variables 
   are available (e.g. there is no data about grape types, wine brand, wine selling price, etc.).

   These datasets can be viewed as classification or regression tasks.
   The classes are ordered and not balanced (e.g. there are munch more normal wines than
   excellent or poor ones). Outlier detection algorithms could be used to detect the few excellent
   or poor wines. Also, we are not sure if all input variables are relevant. So
   it could be interesting to test feature selection methods. 

5. Number of Instances: red wine - 1599; white wine - 4898. 

6. Number of Attributes: 11 + output attribute
  
   Note: several of the attributes may be correlated, thus it makes sense to apply some sort of
   feature selection.

7. Attribute information:

   For more information, read [Cortez et al., 2009].

   Input variables (based on physicochemical tests):
   1 - fixed acidity
   2 - volatile acidity
   3 - citric acid
   4 - residual sugar
   5 - chlorides
   6 - free sulfur dioxide
   7 - total sulfur dioxide
   8 - density
   9 - pH
   10 - sulphates
   11 - alcohol
   Output variable (based on sensory data): 
   12 - quality (score between 0 and 10)

8. Missing Attribute Values: None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

2、分析思路

因为这次数据量不大,就不进数据库了,直接使用python进行分析。
由于对葡萄酒不太了解,先去百度一下可以知道以下有用信息:
以下数值标准主要参考自最新国家标准:《葡萄酒》(GB 15037-2006)》,国外标准有别于国内,仅供参考。

  1. 葡萄酒的四大基本特征:酸度、单宁、酒精和甜味。优质的葡萄酒的四个基本特征一定都是处于很好的平衡状态。

  2. 酸主要可分为固定酸和挥发酸,常说的总酸就是两者的总和。葡萄酒中含有许多种酸,主要是酒石酸、苹果酸、柠檬酸、琥珀酸、乳酸、醋酸,挥发酸是葡萄酒中以游离状态或以盐的形式存在的所有乙酸等脂肪酸的总和,但不包括乳酸、琥珀酸以及CO2和SO2,其中醋酸是主要的挥发酸。挥发酸的含量是葡萄酒健康状态的“体温表”,因为它是发酵、贮藏管理不良留下的标记,通过挥发酸含量的测定可以了解葡萄酒是否生病、病害的严重性以及预测贮藏的困难程度。在国标中对挥发酸和柠檬酸做了明确规定。
    在这里插入图片描述
    在这里插入图片描述

  3. PH值是衡量葡萄酒中酸度的程度,一般来说,白葡萄酒的酸度一般在3.1至3.5之间,高于红葡萄酒的3.5至4的区间值。相较而言酸度是衡量葡萄酒中酸含量的多少。

  4. 一般来说,酸度对葡萄酒口感的影响要大于PH值,但如果PH值位于一个极端的位置,就会产生较大的影响。总酸度是告诉我们这款酒的浓度,而PH值显示的是这款酒品尝起来口感的浓郁度。例如,在PH值相同的情况下,一款总酸度为6g/L的葡萄酒品尝起来会比总酸度为4g/L的葡萄酒更酸。

  5. 残留糖分(简称残糖)是衡量葡萄酒中甜度的标准。通常,残留糖分低于4克/升的葡萄酒为干型葡萄酒,许多干型葡萄酒几乎不含残糖。
    在这里插入图片描述

  6. 酒精度指葡萄酒中所含酒精的百分比,大部分葡萄酒的酒精度都在10-15%之间,但也有些特殊的葡萄酒,如阿斯蒂(Moscato d’Asti)(酒精度非常低),波特酒(Port)(酒精度非常高)。
    在这里插入图片描述

  7. 氯化物和硫酸盐都属于葡萄酒中的矿物盐成分,一般来说含量分别是0.1-0.4g/L和0.25-0.85g/L。值得一提的是,虽然这些矿物质成分存在葡萄酒中且可以增强葡萄酒的风味,但它们并不是某些葡萄酒带有矿物风味的主要原因。一般而言,红葡萄酒所含的矿物质多于白葡萄酒。

  8. 并不是所有葡萄酒中都会有二氧化硫,但二氧化硫能起到如杀菌、抗氧化、澄清酒液和提高色素和酚类物质含量等作用,因此一般葡萄酒中或多或少地带有一定的二氧化硫,只是整体而言其含量非常少,多为 80-200mg/L,个别葡萄酒中还含有 10-50mg/L 的游离态二氧化硫。不过,适当的摇杯或者醒酒等可以令其挥发掉,因此几乎可以忽略不计。
    在这里插入图片描述
    在欧盟,干红葡萄酒中二氧化硫的最高含量为 160mg/L,白葡萄酒和桃红葡萄酒为 210mg/L,甜型葡萄酒中的二氧化硫含量可能更高。

根据查到的信息,更新输入变量表格如下:

输入指标 说明 备注
fixed acidity 固定酸(g/L) 总酸组成之一
volatile acidity 挥发性酸(g/L) 总酸组成之一
citric acid 柠檬酸(g/L) 属于固定酸
residual sugar 残留糖(g/L) 基本指标之一
chlorides 氯化物(g/L) 矿物盐成分
free sulfur dioxide 游离二氧化硫(mg/L) 防腐保鲜剂
total sulfur dioxide 二氧化硫总量(mg/L) 防腐保鲜剂
density 密度(g/ml)
pH 酸碱值 酸度的另一种测量角度
sulphates 硫酸盐(g/L) 矿物盐成分
alcohol 酒精 (%vol) 基本指标之一

由此可知,11种输入变量可以大致划分成三类,第一类是基本指标及其内含的个别具体指标,第二类是附加指标(矿物盐、二氧化硫),第三类是密度这个物理性质。
根据以上信息,拟定分析内容如下图所示:
在这里插入图片描述

二、数据分析(Python)

0.数据清洗

使用Jupyter Notebook进行代码工作,首先加载需要用到的库:

%matplotlib inline
#%config InlineBackend.figure_format = 'retina'

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns

# 颜色
color = sns.color_palette()
# 数据print精度
pd.set_option('precision',3) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里开局就报错了,good。问题出在seaborn这个库,解决过程详见:Python seaborn库导入报错的解决,简而言之就是在anaconda中创建一个虚拟环境,安装python3.6的环境,再安装这几个库。
安装完毕后,重新输入上述代码,运行完毕。然后读取文件:

dfr = pd.read_csv(r'G:\1数据集\WineQuality\winequality-red.csv',sep = ';') #dfr short for dataframe_red
dfw = pd.read_csv(r'G:\1数据集\WineQuality\winequality-white.csv',sep = ';') #dfw short for dataframe_white
  • 1
  • 2

结果如下:
在这里插入图片描述
因为总酸作为葡萄酒基本指标值之一,是固定酸和挥发酸的合,所以可以在表中增加一列"total acid"作为总酸,并放置在表格首列:

#增加总酸
dfr['total acid'] = dfr['fixed acidity'] + dfr['volatile acidity']
dfw['total acid'] = dfw['fixed acidity'] + dfw['volatile acidity']
#移动dfr总酸到列首
r = dfr.columns.tolist()
r.insert(0,r.pop())
dfr = dfr.reindex(columns=r)
#移动dfw总酸到列首
r = dfw.columns.tolist()
r.insert(0,r.pop())
dfw = dfw.reindex(columns=r)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然后就可以看到:
在这里插入图片描述

因为不存在值必须唯一的变量且需要分析分类数量,故此处不对数据集进行去重(经试验两个数据集都存在一定数量的重复值)。
经检查不存在异常值。
至此分析用的数据准备就算完成了。

1.分类讨论

11种输入变量可以大致划分成三类,第一类是基本指标及其内含的个别具体指标,第二类是附加指标(矿物盐、二氧化硫),第三类是密度这个物理性质。

1-1 描述统计

1-1-1 数值描述
首先对两种葡萄酒作描述统计,这个可以.describe()方法直接得到结果

dfr.describe()
dfw.describe()
  • 1
  • 2

在这里插入图片描述
由上面结果首先可以知道参与测试的红葡萄酒获得的评分分布在3-8分,白葡萄酒在3-9分,且各分位数数据一致,这说明两种葡萄酒的品质在大体上无明显区别,但具体是否存在细节上的差距还需要进一步分析。另外对于输入变量的各参数,数据表格展示的形式太繁杂不直观,一时看不出什么信息,需要进一步加工成图像便于分析比对。
1-1-2 箱线图
进一步,绘制两种葡萄酒每个变量的箱线图

#红葡单变量箱线图
colnm = dfr.columns.tolist()
plt.figure(figsize = (10, 6))
plt.suptitle('红葡萄酒单变量箱线图', y=1.05) #总标题
"""画第一行的图"""
for i in range(7):
    plt.subplot(2,7,i+1)
    sns.boxplot(dfr[colnm[i]], orient="v", width = 0.4, color = color[0])
    plt.ylabel(colnm[i],fontsize = 12)
plt.tight_layout()
"""画第二行的图"""
for i in range(6):
    plt.subplot(2,6,i+7)
    sns.boxplot(dfr[colnm[i+7]], orient="v", width = 0.4, color = color[0])
    plt.ylabel(colnm[i+7],fontsize = 12)
plt.tight_layout()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
结合箱线图和刚才的数据表格可以直观了解到各个变量的分布特征,大致归纳如下

红葡萄酒变量 分布特征
total acidity 整体呈正偏,尾长较为对称,高浓度部分存在一定量离群点
fixed acidity 整体呈正偏,尾长较为对称,高浓度部分存在一定量离群点,整体分布与总酸相近
volatile acidity 整体呈正偏,尾长较为对称,高浓度部分存在一定量离群点,浓度范围低总酸一个数量级
citric acid 整体呈正偏,上尾长较长,最小值取到0,有极个别离群点取到1
residual sugar 整体呈高度正偏,尾长较为对称,存在大量高浓度离群点
chlorides 整体呈高度正偏,尾长较为对称,存在少量低浓度离群点和大量高浓度离群点
free sulfur dioxide 整体呈正偏,上尾长较长,存在一定量高浓度离群点
total sulfur dioxide 整体呈正偏,上尾长较长,存在一定量高浓度离群点且离群点间断大
density 整体几乎呈正态分布,上下各有一定量离群点
pH 整体呈轻度正偏,尾长较为对称,存在少量低值离群点和一定量高值离群点
sulphates 整体呈正偏,尾长较为对称,存在较多高浓度离群点
alcohol 整体呈正偏,上尾长较长,存在少量高浓度离群点
quality 整体几乎呈正太分布,上下各有极少量离群点

可以大致总结知道,对于红葡萄酒而言,除密度和评分这两项数据分布均匀呈正态之外,其他所有变量都呈现出不同程度的正偏分布,这说明大多数变量都存在可控下限却没有明确的上限,由于品质波动都可能出现较高取值的情况。

#白葡单变量箱线图
colnm = dfw.columns.tolist()
plt.figure(figsize = (10, 6))
plt.suptitle('白葡萄酒单变量箱线图', y=1.05) #总标题
"""画第一行的图"""
for i in range(7):
    plt.subplot(2,7,i+1)
    sns.boxplot(dfw[colnm[i]], orient="v", width = 0.4, color = color[0])
    plt.ylabel(colnm[i],fontsize = 12)
plt.tight_layout()
"""画第二行的图"""
for i in range(6):
    plt.subplot(2,6,i+7)
    sns.boxplot(dfw[colnm[i+7]], orient="v", width = 0.4, color = color[0])
    plt.ylabel(colnm[i+7],fontsize = 12)
plt.tight_layout()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
类似地,对于白葡萄酒可以分析得到:

白葡萄酒变量 分布特征
total acidity 整体呈正偏,尾长较为对称,存在少量低离群点和一定量高离群点
fixed acidity 整体呈正偏,尾长较为对称,存在少量低离群点和一定量高离群点,整体分布与总酸相近
volatile acidity 整体呈正偏,尾长较为对称,存在大量高离群点,浓度范围低总酸一个数量级
citric acid 整体呈正偏,尾长较为对称,存在少量低离群点和一定量高离群点
residual sugar 整体呈正偏,上尾长较长,存在少量高浓度离群点且离群点间断大
chlorides 整体呈高度正偏,尾长较为对称,存在少量低浓度离群点和大量高浓度离群点
free sulfur dioxide 整体呈正偏,上尾长较长,存在一定量高浓度离群点且离群点间断大
total sulfur dioxide 整体呈正偏,尾长较为对称,存在少量低离群点一定量高浓度离群点
density 整体呈轻度正偏,存在极少量高离群点
pH 整体呈轻度正偏,尾长较为对称,存在少量低离群点和一定量高离群点
sulphates 整体呈正偏,尾长较为对称,存在较多高浓度离群点
alcohol 整体呈正偏,上尾长较长,无离群点
quality 整体几乎呈正太分布,上下各有极少量离群点

可以发现白葡萄酒也是在绝大部分变量上呈现正偏分布,且相比红葡萄酒有更多变量有低离群点,整体上红葡萄酒和白葡萄酒在一些变量上表现不太相同,这些指标可能是造成品类不同的主要因素之一。

至此已经分别对红、白葡萄酒的情况有了初步了解,那二者之间是否有什么区别呢?可以把两种酒的变量箱线图放在一起进行观察:

#红白变量箱线图
colnm_r = dfr.columns.tolist()
colnm_w = dfw.columns.tolist()
plt.figure(figsize = (10, 6))
plt.suptitle('单变量箱线图对比',fontsize=14, y=1.05) #总标题
"""画第一行的图"""
for i in range(7):
    y1 = dfr[colnm_r[i]]
    y2 = dfw[colnm_w[i]]
    data = pd.DataFrame({
   "红": y1, "白": y2}) 
    plt.subplot(2,7,i+1)
    data.boxplot(widths=0.5,flierprops = {
   'marker':'o','markersize':2})
    plt.ylabel(colnm_r[i]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号