对红酒品质进行数据分析(python)

news2024/12/25 13:19:21

http://t.csdnimg.cn/UWg2S

数据来源于这篇博客,直接下载好csv文件。

这篇内容均在VScode的jupyter notebook上完成,操作可以看我的另一篇博客:http://t.csdnimg.cn/69sDJ

一、准备工作

1. 导入数据库

#功能是可以内嵌绘图,并且可以省略掉plt.show()这一步,具体作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python console里面生成图像。
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#Seaborn是基于matplotlib的Python可视化库
import seaborn as sns
plt.style.use('ggplot')
# 创建调色板
color = sns.color_palette()
#设置字体等,方便我们在下面使用中文写label
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_style('darkgrid',{'font.sans-serif':['SimHei','Arial']})

import warnings
warnings.filterwarnings('ignore')

# 读取数据
wine_df = pd.read_csv('winequality-red.csv',sep=';')
wine_df.head()

得到下图: 

2. 查看文本数量

 一个较大的样本通常意味着数据更加全面二号具有代表性,可以减少随机误差的影响,提高分析结果的可靠性。并且大样本量可以增强分析结果的推广性,使得分析结果可以更可靠地推广到更大的总体中。

len(wine_df)

3. 更换文本文件名称为中文

为了方便看表格,将文本文件名称改为中文。

这里的代码很累赘,但是CV大法好!

#把标题换成中文,方便我们看数据
wine_df.rename(columns={"fixed acidity":"固定酸度"},inplace=True)
wine_df.rename(columns={"volatile acidity":"挥发性酸度"},inplace=True)
wine_df.rename(columns={"citric acid":"柠檬酸"},inplace=True)
wine_df.rename(columns={"residual sugar":"残糖"},inplace=True)
wine_df.rename(columns={"chlorides":"氯化物"},inplace=True)
wine_df.rename(columns={"free sulfur dioxide":"游离二氧化硫"},inplace=True)
wine_df.rename(columns={"total sulfur dioxide":"总二氧化硫"},inplace=True)
wine_df.rename(columns={"density":"密度"},inplace=True)
wine_df.rename(columns={"sulphates":"硫酸盐"},inplace=True)
wine_df.rename(columns={"alcohol":"酒精"},inplace=True)
wine_df.rename(columns={"quality":"品质"},inplace=True)

wine_df.head()

4. 查看基本信息

初步了解数据的整体情况,检查数据的完整性,看看数据有没有缺失值,然后确认数据的类型,确定分析方法。

wine_df.info()

得到下面: 

二、数据处理

1. 将品质作为表格的索引

在分析过程中,可以根据品质对数据进行分类和聚合。

#按品质分组,查看每组均值,进一步分析数据
wine_df.groupby('品质').mean()

得到如下: 

 

2. 计算相关系数

查看各个理化性质与品质的关系是否紧密。

 三、 绘制图表

1. 各个品质与理化性质的箱线图

总结得出品质更好的就有更高的柠檬酸、硫酸盐和酒精度数,还具有更低的挥发性酸度、密度。

对于品质优于7或者劣于4的酒,直观上是线性可分的,离群点较少,但是品质5、6的酒很难区分。

下图只展示了品质8,其它的类推:

quality_column = '品质'
factors = ['固定酸度','挥发性酸度','柠檬酸','残糖','氯化物','游离二氧化硫','总二氧化硫','密度','pH','硫酸盐','酒精']  # 确保这里包含了所有你想要绘制箱线图的列名

# 创建一个3x4的网格,用于绘制11个子图
fig, axs = plt.subplots(3, 4, figsize=(10, 10)) 

# 遍历每个因素并绘制箱线图
for i, factor in enumerate(factors):
    # 计算行和列的索引
    row = i // 4
    col = i % 4
    
    # 选择具有特定品质等级的行
    eight_data = wine_df[wine_df[quality_column] == 8]
    
    # 绘制箱线图
    axs[row, col].boxplot(eight_data[factor])
    
    # 设置标题和轴标签
    axs[row, col].set_title(f'{factor}与品质8的关系', fontsize=12)
    axs[row, col].set_ylabel(factor)

# 关闭最后一个子图
axs[2, 3].axis('off')

# 显示图表
plt.tight_layout()
plt.show()

 

 2. 酒精和硫酸盐的数值指标条形图

grouped_df = wine_df.groupby('品质').mean()

#然后我们选出来酒精和硫酸盐两个指标
alcohol_content = grouped_df['酒精']
sulfur_content = grouped_df['硫酸盐']

width = 0.35
ind = np.arange(len(grouped_df.index))
plt.figure(figsize=(13,10))

# 使用matplotlib绘制条形图
plt.bar(ind - width/2, alcohol_content, color='yellowgreen',width=0.35, alpha=0.8,label='酒精')
plt.bar(ind + width/2, sulfur_content, color='green', width=0.35,alpha=0.8, label='硫酸盐')

#添加数据
for i, content in enumerate(alcohol_content):
    plt.text(i-width/2, content + 0.1, str(content), ha='center')  # ha='center' 表示水平对齐方式为居中

for i, content in enumerate(sulfur_content):
    plt.text(i+width/2, content + 0.1, str(content), ha='center')  # ha='center' 表示水平对齐方式为居中
    
# 设置图表标题和轴标签
plt.title('与红酒品质正相关')
plt.xlabel('品质等级')
plt.ylabel('酒精&硫酸盐含量平均值 ')
plt.xticks(ind,[3,4,5,6,7,8])

#添加图例
plt.legend()

# 显示图表
plt.show()

得到如下:

 

 3. 挥发性酸度和总二氧化硫条形图

grouped_df = wine_df.groupby('品质').mean()

#我们选出负相关性强的两个指标:挥发性酸度和总二氧化硫
volatile_acidity_content = grouped_df['挥发性酸度']
sulfur_dioxide_content = grouped_df['总二氧化硫']

width = 0.35
ind = np.arange(len(grouped_df.index))
plt.figure(figsize=(13,10))

# 使用matplotlib绘制条形图
plt.bar(ind + width/2, volatile_acidity_content, color='orangered', alpha=0.8, width=0.35, label='挥发性酸度')
plt.bar(ind - width/2, sulfur_dioxide_content, color='sandybrown', alpha=0.8, width=0.35, label='总二氧化硫')

#添加数据
for i, content in enumerate(sulfur_dioxide_content):
    plt.text(i-width/2, content + 0.1, str(content), ha='center')  # ha='center' 表示水平对齐方式为居中

for i, content in enumerate(volatile_acidity_content):
    plt.text(i+width/2, content + 0.1, str(content), ha='center')  # ha='center' 表示水平对齐方式为居中


# 设置图表标题和轴标签
plt.title('与红酒品质负相关')
plt.xlabel('品质等级')
plt.ylabel('挥发性酸度&总二氧化硫含量平均值 ')

#添加图例
plt.legend()

# 显示图表
plt.show()

得到如下: 

4. 挥发性酸度条形图

#总二氧化硫的数据不够理想,现在只保留挥发性酸度的数据

volatile_acidity_content = grouped_df['挥发性酸度']
#sulfur_dioxide_content = grouped_df['总二氧化硫']

width = 0.35
ind = np.arange(len(grouped_df.index))
plt.figure(figsize=(13,10))

# 使用matplotlib绘制条形图
plt.bar(grouped_df.index, volatile_acidity_content, color='sandybrown', alpha=0.8, width=0.3, label='挥发性酸度')
#plt.bar(grouped_df.index, sulfur_dioxide_content, color='sandybrown', alpha=0.8, width=0.3, label='总二氧化硫')


# 设置图表标题和轴标签
plt.title('与红酒品质负相关')
plt.xlabel('品质等级')
plt.ylabel('挥发性酸度含量平均值 ')

#添加图例
plt.legend()

# 显示图表
plt.show()

得到如下:

 

5. 多变量分析

与品质相关性最高的两个特征是酒精浓度、挥发性酸度。下面图中显示酒精浓度、挥发性酸度的关系。

plt.style.use('ggplot')

sns.lmplot(x='酒精', y='挥发性酸度', hue='品质', data=wine_df, fit_reg=False, scatter_kws={'s': 10}, height=5, aspect=1)

print("Figure 11-1: Scatter Plots of Alcohol, Volatile Acid and Quality")

 

 

sns.lmplot(x = '酒精', y = '挥发性酸度', col='品质', hue = '品质', data = wine_df,fit_reg = False, height = 3,  aspect = 0.9, col_wrap=3,scatter_kws={'s':20})
print("Figure 11-2: Scatter Plots of Alcohol, Volatile Acid and Quality")

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制

原生的show-overflow-tooltip“true” 不能满足条件&#xff0c;使用插槽自定义编辑&#xff1b; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…

构建实时银行应用程序:英国金融机构 Nationwide 为何选择 MongoDB Atlas

Nationwide Building Society 超过135年的互助合作 Nationwide Building Society&#xff08;以下简称“Nationwide”&#xff09; 是一家英国金融服务提供商&#xff0c;拥有超过 1500 万名会员&#xff0c;是全球最大的建房互助会。 Nationwide 的故事可以追溯到 1884 年&am…

ArcGIS Pro、ChatGPT、Python、InVEST等多技术融合的水文、生态、气候变化等地学领域科研及项目综合能力提升

在当前科学技术飞速发展的背景下&#xff0c;综合科研能力的提升对于推动各个领域的创新和发展具有重要的意义。在当前竞争激烈的科研环境中&#xff0c;掌握先进的数据处理与分析技术、深入了解前沿的研究领域、有效利用智能工具进行科研工作&#xff0c;已成为科研人员脱颖而…

html5——CSS3_文本样式属性

目录 字体样式 字体类型 字体大小 字体风格 字体的粗细 文本样式 文本颜色 排版文本段落 文本修饰和垂直对齐 文本阴影 字体样式 字体类型 p{font-family:Verdana,"楷体";} body{font-family: Times,"Times New Roman", "楷体";} …

CF1473E Minimum Path 题解(最短路,分层图最短路,较重要的套路)

题目描述&#xff1a; 题目 分析&#xff1a; 题目是要让我们求从 1 1 1 出发&#xff0c;到 i i i 的路径的最小权值。其中路径的权值定义为 路径上所有的边权和 减去最大边权 加上最小边权。这里有一个很秒的转化&#xff1a;可以把一条路径的权值理解为 必须将路径上的任…

【面试八股总结】单例模式实现详解

一、基本概念 单例设计模式是⼀种确保⼀个类只有⼀个实例&#xff0c;并提供⼀个全局访问点来访问该实例的创建模式。 关键概念&#xff1a; 一个私有构造函数&#xff1a;确保只能单例类自己创建实例一个私有静态变量&#xff1a;确保只有一个实例&#xff0c;私有静态变量用…

IDEA自动把接口中的方法注解填充到实现类中,勾选Copy JavaDoc即可

1. 目的 有一个Image接口类&#xff0c;接口中有getUserById方法&#xff0c;方法上有注释&#xff0c;实现类ImageImpl实现Image中的方法时&#xff0c;自动把接口中方法的注释也给带下来 具体案例如下 2. 接口类 有一个getUserById方法&#xff0c;方法上面有注释 3. 实现…

Java常用的API_02(正则表达式、爬虫)

Java正则表达式 七、正则表达式7.1 格式7.1.1 字符类注意字符类示例代码1例2 7.1.2 预定义字符预定义字符示例代码例2 7.1.3 区别总结 7.2 使用Pattern和Matcher类与直接使用String类的matches方法的区别。&#xff08;1&#xff09; 使用Pattern和Matcher类示例代码 &#xff…

JVM 之对象的结构与创建

1.对象的创建 1.1类加载 当Java 虚拟机遇到一条字节码 new 指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那 必须先执行相应的类加载过…

昇思MindSpore学习总结十五 ——基于Mindspore 实现BERT对话情绪识别

1、环境配置 根据实际情况&#xff0c;选择合适版本。 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc…

用node.js写一个简单的图书管理界面——功能:添加,删除,修改数据

涉及到的模块&#xff1a; var fs require(‘fs’)——内置模块 var ejs require(‘ejs’)——第三方模块 var mysql require(‘mysql’)——第三方模块 var express require(‘express’)——第三方模块 var bodyParser require(‘body-parser’)——第三方中间件 需要…

华为HCIP Datacom H12-821 卷38

1.多选题 下面关于 BGP中的公认属性的描述&#xff0c;正确的是 A、公认必遵属性是所有BGP路由器都识别&#xff0c;且必须存在于Updata消息中心 B、BGP必须识别所有公认属性 C、公认属性分为公认必遵和可选过渡两种 D、公认任意属性是所有BGP造由器都可以识别&#xff0c…

217.贪心算法:加油站(力扣)

代码解决 class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curtotol 0; // 当前累积油量int tatol 0; // 总的油量减去总的花费油量int start 0; // 起始加油站的索引// 遍历所有加油站for (int i 0; i &…

【Android面试八股文】你说ARouter采用APT技术,那么谈一下你对APT技术的理解,还有那些框架是采用APT技术呀?JavaPoet

一、谈一下你对APT技术的理解 1.1 对APT技术的理解 APT(Annotation Processing Tool)是一种在编译期间处理注解的技术,它允许开发者在编译时扫描和处理 Java 源代码中的注解信息,生成额外的源代码、资源文件或者其他文件。以下是对APT技术的一些理解和应用场景: 工作原理…

期货量化交易客户端开源教学第九节——新用户注册

一、新用户注册界面设计&#xff1a; 注册时采用手机号注册&#xff0c;客户端发送新号注册申请由后台做审核&#xff0c;后台审核通过后向注册的手机号发送注册成功的消息。注册过的手机号不能再二次注册。 界面验证代码 private{ Private declarations }FVerf: AnsiString; …

【React Native】做了一个简约的雷达图组件

本文目录 【React Native】做了一个简约的雷达图组件获取组件实现思路用法示例简易用法自定义美化 结语 【React Native】做了一个简约的雷达图组件 最近在使用 react-native 中需要绘制雷达图&#xff0c;没有找到合适的小组件&#xff08;大的图表库未直接提供&#xff0c;需…

【活动预告】Apache IoTDB TsFile 智慧能源应用“上会”啦!

2024 年&#xff0c;站在中国数字经济产业升级和数据要素市场化建设的时代交汇点上&#xff0c;为进一步推动全球数据库产业进步&#xff0c;由中国通信标准化协会、大数据技术标准推进委员会主办的“2024 可信数据库发展大会”将于 2024 年 7 月 16-17 日&#xff0c;在北京朝…

Mac M1安装配置Hadoop+Flink SQL环境

Flink 1.18.1 Hadoop 3.4.0 一、准备工作 系统&#xff1a;Mac M1 (MacOS Sonoma 14.3.1) JDK&#xff1a;jdk1.8.0_381 &#xff08;注意&#xff1a;尽量一定要用JDK8&#xff0c;少用高版本&#xff09; Scala&#xff1a;2.12 JDK安装在本机的/opt/jdk1.8.0_381.jdk/C…

海外ASO:iOS与谷歌优化的相同点和区别

海外ASO是针对iOS的App Store和谷歌的Google Play这两个主要海外应用商店进行的优化过程&#xff0c;两个不同的平台需要采取不同的优化策略&#xff0c;以下是对iOS优化和谷歌优化的详细解析&#xff1a; 一、iOS优化&#xff08;App Store&#xff09; 1、关键词覆盖 选择关…

【公益案例展】中国电信安全大模型——锻造安全行业能量转化的高性能引擎...

‍ 电信安全公益案例 本项目案例由电信安全投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数智产业最具社会责任感企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 以GPT系列为代表的大模型技术&#xff0c;展现了人工智能技术与应…