Python Pandas – 用 Seaborn 按两个分类变量分组

Python Pandas – 用 Seaborn 按两个分类变量分组

Seaborn 是一个基于 Python Matplotlib 库的数据可视化工具,它提供了许多美观、易用、丰富的可视化图表,而Pandas则是Python程序员必备的数据分析工具,其中提供了DataFrame、Series等数据结构、操作方式等。

在数据可视化中,有时需要按两个分类变量对数据进行分组并进行可视化。这时我们就可以使用 Seaborn 库来处理这样的任务,接下来就让我们通过具体的案例来学习 Seaborn 库的分类变量分组功能。

更多Pandas相关文章,请阅读:Pandas 教程

案例背景

某公司想通过自己的销售数据,探寻出每个行业、每个月份的销售情况,以便指导公司的日后营销决策。因此,该公司收集了一些数据集,其中记录了不同行业在每个月份的销售数据,如下:

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

data = {'month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
        'industry': ['Transportation', 'Transportation', 'Transportation', 'Retail', 'Retail', 'Retail', 'Retail', 'Transportation', 'Transportation', 'Transportation', 'Retail', 'Retail'],
        'sales': [2364, 3226, 1843, 9445, 5621, 3645, 5665, 12968, 7538, 8759, 8415, 10719]
       }

df = pd.DataFrame(data)

print(df)
   month        industry  sales
0    Jan  Transportation   2364
1    Feb  Transportation   3226
2    Mar  Transportation   1843
3    Apr          Retail   9445
4    May          Retail   5621
5    Jun          Retail   3645
6    Jul          Retail   5665
7    Aug  Transportation  12968
8    Sep  Transportation   7538
9    Oct  Transportation   8759
10   Nov          Retail   8415
11   Dec          Retail  10719

现在,该公司想要根据不同行业和月份,查看销售数据的情况,我们就可以通过 Seaborn 来实现我们所需的图表。

用 Seaborn 绘制多层分组柱形图

我们可以使用 Seaborn 的 catplot() 函数来进行二元变量图形绘制。在该函数中,我们可以将要分组的两个变量(行业、月份)传入 xy 参数中。

例如,我们可以使用以下代码来生成一个分组柱形图,同时显示不同行业的月均销售额:

sns.catplot(x="month", y="sales", hue="industry", kind="bar", data=df, height=6, aspect=2)
plt.show()

这里,我们可以从图中发现,在传统运输行业中,6-9月份是销售的旺季,而在零售行业中,11-12月份为销售旺季。

用 Seaborn 绘制月份-行业的热力图

Seaborn 也提供了热力图,可以更直观地展示出分类变量与数据间的关系。在上述数据集中,我们可以使用热力图来显示月销售数据的全势图。我们可以使用以下代 码,得到热力图:

pivot_data = pd.pivot_table(df, values="sales", index=["month"], columns=["industry"])
sns.heatmap(pivot_data, cmap="YlGnBu")
plt.show()

通过图中的热力图我们可以看出,传统运输行业的销售量在5-10月份较高,而零售行业的销售量则更加集中在11月和12月。

用 Seaborn 绘制月份-行业-销售量的交互式热力图

Seaborn 也支持绘制交互式的热力图,其主要通过interact与交互式控件配合使用。

我们可以使用下面的代码创建一个交互式热力图:

import ipywidgets as widgets
from ipywidgets import interact
import seaborn as sns

@interact(x=['industry', 'month'], y=['industry', 'month'])
def heatmap(x, y):
    pivot_data = pd.pivot_table(df, values="sales", index=[y], columns=[x])
    sns.heatmap(pivot_data, cmap="YlGnBu")

heatmap(x='industry', y='month')

我们可以发现,在该交互式热力图中,我们可以任意选择两个分类变量,并显示对应的销售数据。比如,我们选择 x = ‘industry’,y = ‘month’,就可以得到月份-行业-销售量的交互式热力图。

结论

在这篇文章中,我们学习了如何使用 Seaborn 库按两个分类变量分组来可视化数据。我们通过实例学习了如何绘制分组柱形图、热力图和交互式热力图。

以上方法可以快速有效地探究两个或多个分类变量间的关系,帮助我们更好地理解数据,以便做出更加准确的分析。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程