【笔记】案例研究(红酒和白酒)

研究红酒和白酒的各个特性对酒的质量的影响

加载数据

import pandas as pd
df_red=pd.read_csv('winequality-red.csv',sep=';') # 因为数据用的是‘;’进行分隔
df_white=pd.read_csv('winequality-white.csv',sep=';')

评估红酒的数据(白酒略)

**df_red.info()
df_red.head()
df_red.dtypes
df_red.isnull().any() # 缺失值的列
sum(df_red.duplicated()) # 重复值的行数
df_unique= df_red.loc[:,'quality'] # quality的唯一值详情
df_unique.unique() 
df_means=df_red.loc[:,'density'] # density的平均值
df_means.mean()**

将两组数据合并

import numpy as np # 加载numpy数据库
color_red = np.repeat('red',1599)   # 为红葡萄酒数据框创建颜色数组 1599和4898由评估得出
color_white = np.repeat('white',4898)     # 为白葡萄酒数据框创建颜色数组

将名为 ‘颜色’ 的新列设置到适当数组,将数组添加到红葡萄酒和白葡萄酒数据框中。下面的框是在红葡萄酒数据框中添加数组。

red_df['color'] = color_red
white_df['color'] = color_white    

使用append()函数合并两组数据并保存到新文档

wine_df = red_df.append(white_df)
wine_df.to_csv('winequality_edited.csv',index=False) 

查看文档细节发现红酒的total_sulfur-dioxide与白酒的total_sulfur_dioxide不同,不能很好的合并,修改红酒的total_sulfur-dioxide为total_sulfur_dioxide(以下2种方法结果相同):

#1
red_df.rename(columns={'fixed_acidity':'fixed_acidity', 'volatile_acidity':'volatile_acidity', 'citric_acid':'citric_acid', 'residual_sugar':'residual_sugar','chlorides':'chlorides', 'free_sulfur_dioxide':'free_sulfur_dioxide', 'total_sulfur-dioxide': 'total_sulfur_dioxide', 'density':'density','pH':'pH', 'sulphates':'sulphates', 'alcohol':'alcohol', 'quality': 'quality', 'color':'color'}, inplace = True)
#2
new_labels=list(red_df.cloumns)   
new_labels.columns[6]='total_sulfur_dioxide'
red_df.columns=new_labels

使用matplotlib进行数据表征

% matplotlib inline
wine_new.hist(figsize=(10,10))  #各个变量的分布

在这里插入图片描述

wine_new.plot(x='quality',y='alcohol',kind='scatter')  #以质量与酒精度的关系为例

在这里插入图片描述
使用pandas中的groupby得出结论
(研究不同酸性条件下的平均质量情况)

import pandas as pd
df =pd.read_csv('winequality_edited.csv')
  
# 用 groupby 计算每个酒类型(红葡萄酒和白葡萄酒)的平均质量
df.groupby(['color']).mean()

在这里插入图片描述
使用describe()函数查看最小、25%、50%、75% 和 最大 pH 值,并对其进行分组

df['pH'].describe()

count 6497.000000
mean 3.218501
std 0.160787
min 2.720000
25% 3.110000
50% 3.210000
75% 3.320000
max 4.010000

# 对用于把数据“分割”成组的边缘进行分组
bin_edges = [2.720000 ,3.110000 ,3.210000 ,3.320000 ,4.010000 ]

# 四个酸度水平组的标签
bin_names = ['low','non_low','non_high','high'] # 对每个酸度水平类别进行命名

# 创建 acidity_levels 列
df['acidity_levels'] = pd.cut(df['pH'], bin_edges, labels=bin_names)

# 用 groupby 计算每个酸度水平的平均质量
df.groupby('acidity_levels').mean()

在这里插入图片描述
在这里插入图片描述
# 保存更改,供下一段使用
df.to_csv(‘winequality_edited.csv’, index=False)
用pandas的query得出结论
query函数的使用:

# selecting malignant records in cancer data
df_m = df[df['diagnosis'] == 'M']
df_m = df.query('diagnosis == "M"')

# selecting records of people making over $50K
df_a = df[df['income'] == ' >50K']
df_a = df.query('income == " >50K"')

问题 :酒精含量越高的葡萄酒获得的评级更高吗?
使用 query 创建两组葡萄酒样本:
低酒精(酒精含量低于中值的样本)
高酒精(酒精含量高于或等于中值的样本)

import pandas as pd
df =pd.read_csv('winequality_edited.csv')
df['alcohol'].mean() # 获取酒精含量的中位数

# 选择酒精含量小于中位数的样本
low_alcohol = df.query('alcohol == " <10.491800831152839"')

# 选择酒精含量大于等于中位数的样本
high_alcohol = df.query('alcohol == " >=10.491800831152839"')

# 确保这些查询中的每个样本只出现一次
num_samples = df.shape[0]
num_samples == low_alcohol['quality'].count() + high_alcohol['quality'].count() #应为真

# 获取低酒精含量组和高酒精含量组的平均质量评分
low_alcohol['quality'].mean()
high_alcohol['quality'].mean()

用 Matplotlib 绘制酒的类型和质量视图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
import seaborn as sns
sns.set_style('darkgrid')
wine_df = pd.read_csv('winequality_edited.csv')

为红葡萄酒条柱高度和白葡萄酒条柱高度创建数组
红葡萄酒条柱比例 = 每个质量等级的数量 / 红葡萄酒样本的总数
白葡萄酒条柱比例 = 每个质量等级的数量 / 白葡萄酒样本的总数

# 获取每个等级和颜色的数量
color_counts = wine_df.groupby(['color', 'quality']).count()['pH']
color_counts
# 获取每个颜色的总数
color_totals = wine_df.groupby('color').count()['pH']
color_totals
# 将红葡萄酒等级数量除以红葡萄酒样本总数,获取比例
red_proportions = color_counts['red'] / color_totals['red']
red_proportions
# 将白葡萄酒等级数量除以白葡萄酒样本总数,获取比例
white_proportions = color_counts['white'] / color_totals['white']
white_proportions

设置每个等级组的 x 坐标位置和每个条柱的宽度。

ind = np.arange(len(red_proportions))  # 组的 x 坐标位置
width = 0.35       # 条柱的宽度

现在创建图表。

# 绘制条柱
red_bars = plt.bar(ind, red_proportions, width, color='r', alpha=.7, label='Red Wine')
white_bars = plt.bar(ind + width, white_proportions, width, color='w', alpha=.7, label='White Wine')

# 标题和标签
plt.ylabel('Proportion')
plt.xlabel('Quality')
plt.title('Proportion by Wine Color and Quality')
locations = ind + width / 2  # x 坐标刻度位置
labels = ['3', '4', '5', '6', '7', '8', '9']  # x 坐标刻度标签
plt.xticks(locations, labels)

# 图例
plt.legend()

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值