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()
函数来进行二元变量图形绘制。在该函数中,我们可以将要分组的两个变量(行业、月份)传入 x
和 y
参数中。
例如,我们可以使用以下代码来生成一个分组柱形图,同时显示不同行业的月均销售额:
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 库按两个分类变量分组来可视化数据。我们通过实例学习了如何绘制分组柱形图、热力图和交互式热力图。
以上方法可以快速有效地探究两个或多个分类变量间的关系,帮助我们更好地理解数据,以便做出更加准确的分析。