云天徽上 发表于 前天 01:01

【数据可视化案列】白葡萄酒质量数据的EDA可视化分析

本帖最后由 云天徽上 于 2024-12-20 23:14 编辑

> 本帖最后由 云天徽上 于 2024-12-20 01:04 编辑

> 🧑 博主简介:曾任某智慧城市类企业`算法总监`,目前在美国市场的物流公司从事`高级算法工程师`一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:`xf982831907`)

# 一、引言

  葡萄酒作为一种广受欢迎的饮品,其质量评价一直是消费者和酿酒师们关注的焦点。通过数据分析,我们可以更好地了解葡萄酒的化学成分与其质量之间的关系。本文将使用Python进行白葡萄酒质量数据的探索性数据分析(EDA)和可视化分析,从而揭示不同化学成分对葡萄酒质量的影响。

# 二、数据准备

  我们将使用`pandas`库读取CSV文件,并进行初步的数据处理。数据集包含以下字段:
  本次案列的数据来源于:[https://www.kaggle.com/datasets/uciml/red-wine-quality-cortez-et-al-2009](https://www.kaggle.com/datasets/uciml/red-wine-quality-cortez-et-al-2009)

   其中包括以下字段:

* 非挥发性酸(fixed acidity)
* 挥发性酸(volatile acidity)
* 柠檬酸(citric acid)
* 残糖(residual sugar)
* 氯化物(chlorides)
* 游离二氧化硫(free sulfur dioxide)
* 总二氧化硫(total sulfur dioxide)
* 密度(density)
* 酸碱度(pH)
* 硫酸盐(sulphates)
* 酒精(alcohol)
* 葡萄酒质量(quality,0-10)

  首先,我们需要加载数据并进行简单的预处理。

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

# 读取数据
df = pd.read_csv('winequality-white.csv', sep=';')

print(df.info())
print(df.shape)
```

!(data/attachment/forum/202412/20/005708cvm51zvvnrrbbpxv.png)
  白葡萄酒数据集一共有4898个样本,12个特征。其中11个为白葡萄酒的理化性质,quality列为白葡萄酒的品质(10分制)。

# 三、数据探索

## 3.1 数据概览

  我们先来看一下数据的基本信息,包括每列的缺失值情况。

```python
# 检查缺失值
print(df.isnull().sum())
```

!(data/attachment/forum/202412/20/005726cuqufeccdtxbtdqj.png)

  通过上面数据中可以发现数据集中无缺失值;

## 3.2 数据分布

  接下来,我们绘制每个特征的分布图,以了解数据的分布情况。

```python
# 设置绘图风格
sns.set(style="whitegrid")
color = sns.color_palette()
column= df.columns.tolist()
fig = plt.figure(figsize = (10,8))
for i in range(12):
    plt.subplot(4,3,i+1)
    df].hist(bins = 100,color = color)
    plt.xlabel(column,fontsize = 12)
    plt.ylabel('Frequency',fontsize = 12)
plt.tight_layout()
```

!(data/attachment/forum/202412/20/005745pb8207u6urbul3ij.png)

## 3.3 数据相关性

  使用热力图来展示各特征之间的相关性,这有助于我们识别哪些特征对葡萄酒质量有显著影响。

```python
# 计算相关性矩阵
correlation_matrix = df.corr()

# 绘制热力图
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title('Correlation Matrix')
plt.show()
```

!(data/attachment/forum/202412/20/005758cpdn8gym0z1ggpz2.png)

  从热力图可以看出,`chlorides`(酒精)和`sulphates`(硫酸盐)与`quality`(质量)的相关性较高,而`volatile acidity`(挥发性酸)和`chlorides`(氯化物)与`quality`的相关性较高且为负。

# 四、数据可视化分析

## 4.1 酒精含量与质量的关系

```python
# 绘制酒精含量与质量的散点图

mean_quality_by_category = df.groupby('quality')['alcohol'].mean()
result_df = mean_quality_by_category.reset_index()

# 重命名列(可选,但通常是个好习惯)
result_df.columns = ['quality', 'mean_alcohol']

plt.figure(figsize=(10, 6))
sns.barplot(x='quality', y='mean_alcohol', data=result_df, alpha=0.6)
plt.title('Sulphates Content vs Quality')
plt.xlabel('Quality (1-10)')
plt.ylabel('Mean Alcohol Content (%)')
plt.show()
```

!(data/attachment/forum/202412/20/005827gpsfnr77w2qowhfw.png)
  从图中可以看出,酒精含量较高的葡萄酒往往质量也较高。

## 4.2 硫酸盐含量与质量的关系

```python
# 绘制硫酸盐含量与质量的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='sulphates', y='quality', data=df, alpha=0.6)
plt.title('Sulphates Content vs Quality')
plt.xlabel('Sulphates Content')
plt.ylabel('Quality (1-10)')
plt.show()
```

!(data/attachment/forum/202412/20/005842cz3ikmki8mml3kv8.png)
  平均硫酸盐含量与质量之间也quality<7时呈现出正相关关系,即硫酸盐含量越高,葡萄酒的质量也越高。而当quality>7时呈现出负相关关系,即硫酸盐含量越低,葡萄酒的质量也越高。负相关的变化速率高于正相关。

## 4.3 挥发性酸含量与质量的关系

```python
# 绘制挥发性酸含量与质量的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='volatile acidity', y='quality', data=df, alpha=0.6)
plt.title('Volatile Acidity vs Quality')
plt.xlabel('Volatile Acidity')
plt.ylabel('Quality (1-10)')
plt.show()
```

!(data/attachment/forum/202412/20/005901qbn5jo6poh4ppjl5.png)

  挥发性酸含量与质量之间呈现出负相关关系,即挥发性酸含量越高,葡萄酒的质量越低。

## 4.4 氯化物含量与质量的关系

```python
# 绘制氯化物含量与质量的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='chlorides', y='quality', data=df, alpha=0.6)
plt.title('Chlorides Content vs Quality')
plt.xlabel('Chlorides Content')
plt.ylabel('Quality (1-10)')
plt.show()
```

!(data/attachment/forum/202412/20/005956qoobo42totlhrtij.png)

  请读者自行补充描述

## 4.5 酸碱度与质量的关系

```python
# 绘制酸碱度与质量的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='pH', y='quality', data=df, alpha=0.6)
plt.title('pH vs Quality')
plt.xlabel('pH')
plt.ylabel('Quality (1-10)')
plt.show()
```

!(data/attachment/forum/202412/20/010011hys884a8qhma0ron.png)

  请读者自行补充描述

## 4.6 密度与质量的关系

```python
# 绘制密度与质量的散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(x='density', y='quality', data=df, alpha=0.6)
plt.title('Density vs Quality')
plt.xlabel('Density')
plt.ylabel('Quality (1-10)')
plt.show()
```

!(data/attachment/forum/202412/20/010027uyd790tx7ttdztbn.png)

  密度基本都其中再0.99-1.00之间,酒的品质和密度的相关性不大;

## 4.7 箱线图分析

  为了更直观地比较不同质量分数的葡萄酒在各特征上的分布情况,我们可以绘制箱线图。

```python
# 绘制箱线图
fig = plt.figure(figsize = (12,8))
plt.subplot(2,3,1)
sns.boxplot(x='quality', y='alcohol', data=df)
plt.suptitle('Boxplot Analysis')
plt.subplot(2,3,2)
sns.boxplot(x='quality', y='sulphates', data=df)
plt.subplot(2,3,3)
sns.boxplot(x='quality', y='volatile acidity', data=df)
plt.subplot(2,3,4)
sns.boxplot(x='quality', y='chlorides', data=df)
plt.subplot(2,3,5)
sns.boxplot(x='quality', y='pH', data=df)
plt.subplot(2,3,6)
sns.boxplot(x='quality', y='density', data=df)
plt.show()
```

!(data/attachment/forum/202412/20/010046hl0rkzlm4m2m706d.png)

  从箱线图中可以看出,随着质量的提升,酒精含量和硫酸盐含量的中位数逐渐升高,而挥发性酸含量、氯化物含量和密度的中位数逐渐降低,pH值的中位数则相对稳定。

## 4.8 聚类分析

  为了进一步探索数据中的潜在模式,我们可以使用K-means聚类算法对数据进行聚类分析。

```python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 选择特征列进行标准化处理
features = ['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides',
            'free sulfur dioxide', 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol']
scaler = StandardScaler()
scaled_features = scaler.fit_transform(df)

# 使用K-means算法进行聚类(假设分为3类)
kmeans = KMeans(n_clusters=3, random_state=42)
df['cluster'] = kmeans.fit_predict(scaled_features)

# 绘制聚类结果与质量的关系
plt.figure(figsize=(10, 6))
sns.scatterplot(x='alcohol', y='sulphates', hue='cluster', data=df, palette='viridis', alpha=0.6)
plt.title('Clusters based on K-means Algorithm')
plt.xlabel('Alcohol Content (%)')
plt.ylabel('Sulphates Content')
plt.legend(title='Cluster')
plt.show()
```

!(data/attachment/forum/202412/20/010106pu66cklwfdmrkwnn.png)

  通过聚类分析,我们可以将葡萄酒分为不同的类别,并观察各类别在特征空间中的分布情况。虽然这里的聚类结果并未直接用于质量预测,但它为我们提供了对数据更深层次的理解。

# 五、结论

  通过对白葡萄酒质量数据的EDA和可视化分析,我们得出了以下结论:酒精含量和硫酸盐含量与葡萄酒质量呈正相关关系,而挥发性酸含量、氯化物含量和密度则与质量呈负相关关系。此外,酸碱度对质量的影响相对复杂,但在特定范围内(如pH值约为3)葡萄酒质量较高。箱线图分析进一步证实了这些特征与质量之间的关系。聚类分析虽然未直接用于质量预测,但揭示了数据中的潜在模式,为深入理解葡萄酒质量提供了有价值的见解。这些发现对酿酒师和消费者在选择和评价葡萄酒时具有重要的指导意义。

!(data/attachment/forum/202412/20/010227s919neub1r79jcuu.png)
页: [1]
查看完整版本: 【数据可视化案列】白葡萄酒质量数据的EDA可视化分析