Seaborn是基于Matplotlib构建的功能强大的可视化工具。 它使多变量探索性数据分析更加容易和直观,并且增加了一些新类型的图,并且其背景样式和颜色图更加令人愉悦。 它具有许多内置的统计功能,使其成为统计数据分析的首选工具。 它还具有非常详细的在线文档,您可以在以下位置找到https://seaborn.pydata.org/index.html。
我们将使用两个数据集来演示大多数海洋特征。 其中一个数据集“葡萄酒质量”,另一个是来自虚拟小吃店的小吃销售数据集。
关系图
小吃销售数据集
该数据集(在代码库中提供)包含有关给定日期,星期几,是否为周末以及当天是否促销的各种商品的销售信息。 我们拥有三年的数据:2015年,2016年和2017年。数据集的前五行如下所示:
图略
然后,我们将添加两个派生变量以帮助绘制所需的图形:month(1到12)和Quarter(1/4)。 添加这些变量后,前五行如下所示:
图略
以下代码块读取Excel文件并添加其他变量:
import pandas as pd
import numpy as np
snacks_sales = pd.read_csv('Snacks_Data.csv')
snacks_sales['Month'] = pd.DatetimeIndex(snacks_sales['Date']).month
Quarter_Mapping = {1:1, 2:1, 3:1, 4:2, 5:2, 6:2, 7:3, 8:3, 9:3, 10:4,
11:4, 12:4}
snacks_sales['Quarter'] = snacks_sales['Month'].map(Quarter_Mapping)
葡萄酒质量数据集
该数据集具有11个影响葡萄酒质量的属性。 质量等级从3到8不等,然后我们将3和4映射到Low,将5和6映射到Med,将7和8映射到high以创建一个新变量:质量。
数据集的前五行如下所示:
图略
我们还将为葡萄酒质量数据集计算相关矩阵,我们将在一些图中使用该矩阵。
以下是用于读取其他变量并将其添加到Wine Quality数据集的代码块:
import pandas as pd
# Read the data from a csv file into pandas data frame
wine_quality = pd.read_csv('winequality.csv', delimiter=';')
# Map numeric Quality codes to 'Low', 'Med' and 'High' qualitative
ratings
quality_map = {3:'Low', 4: 'Low', 5:'Med', 6:'Med', 7:'High', 8:'High'}
wine_quality['Quality'] = wine_quality['quality'].map(quality_map)
# compute correlation matrix
corr = wine_quality.corr()
# Display the first 5 records of wine_quality dataset, and unique
values of quality variable
wine_quality.head()
set(wine_quality.quality)
变量
除了将它们的关系绘制在二维图中的两个变量之外,seaborn还可以绘制三个附加变量对两个主要变量之间的关系的影响图。 这三个变量称为语义变量。 它们被称为色调,大小和样式,它们充当给定绘图功能的参数。
对于每个唯一的色调值,将有一个关系图。 同样,对于样式的每个唯一值,都会有一个关系图。 如果色调变量中有两个唯一值(例如,是和否),样式变量中有两个唯一值(例如,s和D标记),则将有2 * 2 = 4个关系图( 是&s,是&D,否&s,否&D组合)。 各种色调值以不同的颜色绘制,各种样式值以不同的线或标记样式绘制。
同样,大小变量会影响两个主要变量的绘制点的大小。 与Matplotlib散布函数不同,此处,大小可变范围分为多个容器,并将点分配给这些容器。 在Matplotlib散点函数中,每个点都分别映射为大小可变的不同值。
除了这三个语义变量外,seaborn还允许在row和col中添加另外两个变量,其中针对row / col变量的每个唯一值,将有一个图(轴),并将其布置在row / col中。 这些行和列变量称为构面变量,因为它们使我们能够了解其他构面对所绘制的两个主要变量的影响。
这些附加变量可以映射到要分析数据的各个维度,或者要分析两个变量之间的关系。 在典型的销售分析场景中,两个主要变量可以是销售额(单位或美元)或时间(天,月或季度),维度可以是业务单位,产品线,地区。
关系绘图
关系图描述了两个连续变量之间的关系。 seaborn中有一个常见的API,relplot(),用于两种类型的图:线图和散点图。 但是,这两种类型中的每一种都有单独的函数:lineplot()和scatterplot()。 我们可以使用带有参数的relplot()来绘制折线图或散点图,也可以直接使用lineplot()和scatterplot()函数。
一对一和一对多关系的线图
在线图中,观测值连接到可以自定义样式的线。 x和y变量之间的关系可以是一对一的,有时也可以是一对多的。 在我们的零食销售数据集中,如果我们根据日期或期间绘制每个商品的销售量,则这是一对一的关系,因为每对日期/期间和销售量只有一个观察值。 但是,如果我们按月销售,则每个月有30个观察值(销售记录),这是一对多的关系。
Seaborn提供了多种选择来绘制这两种类型的关系。
导入所需包:
import matplotlib.pyplot as plt
import seaborn as sns
步骤细节:
- 设置背景样式:
sns.set(style='darkgrid')
- 用图的标题在period和smoothies销售之间绘制折线图:
sns.relplot(x='Period', y='Smoothies',
data=snacks_sales.query('Period < 300'), kind='line')
plt.title('line plot', size=20, color='g')
- 绘制period和smoothies销售之间的折线图,以星期几为色调:
day_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday', 'Sunday']
sns.relplot(x='Period', y='Smoothies', hue='daywk',
hue_order=day_order,
data=snacks_sales.query('Period < 300'), kind='line')
plt.title('line plot with hue=daywk', size=20, color='g')
- 以促销为色调在period和smoothies销售之间绘制折线图:
sns.relplot(x='Period', y='Smoothies', hue='Promotion', hue_order=
['Yes', 'No'],
data=snacks_sales.query('Period < 300'), kind='line')
plt.title('line plot with hue=Promotion', size=20, color='g')
- 在“period”和“smoothies”销售之间绘制折线图,其中“促销”为色调,“周末”为样式:
sns.relplot(x='Period', y='Smoothies', hue='Promotion', hue_order=
['Yes', 'No'], style='weekend',
style_order=['Y', 'N'], kind='line',
data=snacks_sales.query('Period < 300'))
plt.title('line plot with hue and style', size=20, color='g')
分解代码
详情参阅 - 亚图跨际