1 需求
概述
- Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和探索性数据分析(EDA)。
主要特点
- 美观的默认样式:
- Seaborn 具有吸引人的默认样式,其图表风格通常比 Matplotlib 更加现代和美观。例如,它的颜色搭配、字体选择等方面都经过精心设计。它提供了多种预设的主题,如
darkgrid
、whitegrid
、dark
、white
和ticks
。以darkgrid
主题为例,它会在深色背景上绘制带有白色网格线的图表,这种风格在展示数据时可以减少视觉疲劳,并且使数据点和线条更加突出。- 丰富的统计图表类型:
- 涵盖了多种用于统计分析的图表。例如,
distplot
(在较新版本中被拆分为histplot
和kdeplot
)可以用于绘制数据的分布情况,它可以同时展示直方图和核密度估计曲线。pairplot
是一个非常强大的工具,用于探索数据集中多个变量之间的关系。如果有一个包含多个数值变量的数据集,pairplot
可以快速生成一个矩阵式的图表,其中对角线位置展示每个变量的分布,非对角线位置展示变量之间的两两关系(如散点图或回归直线等)。boxplot
可以直观地展示数据的分布特征,包括中位数、四分位数、异常值等信息,有助于比较不同组之间的数据分布差异。- 方便的数据分组和分类可视化:
- 能够轻松地处理分组数据和分类数据的可视化。例如,
catplot
是一个分类绘图函数,它可以根据指定的分类变量绘制不同类型的图表。可以使用它来绘制分类数据的柱状图、箱线图、散点图等多种图表类型。假设我们有一个销售数据集,其中包含产品类别和销售额两个变量,通过catplot
可以很方便地按照产品类别绘制出销售额的柱状图,从而直观地比较不同类别产品的销售额。- 与 Pandas 和 NumPy 集成良好:
- 由于 Seaborn 是基于 Python 的数据科学生态系统构建的,它与 Pandas 和 NumPy 等常用的数据处理库无缝集成。这意味着可以直接使用 Pandas 的 DataFrame 作为 Seaborn 函数的输入。例如,使用 Pandas 读取一个 CSV 文件并存储为 DataFrame 后,能够直接将这个 DataFrame 传递给 Seaborn 的绘图函数,如
sns.scatterplot(data = df, x = "column1", y = "column2")
,其中df
是 Pandas 的 DataFrame,column1
和column2
是 DataFrame 中的列名,用于指定散点图的 x 轴和 y 轴数据。常用图表类型及应用场景
- 分布可视化(如 histplot、kdeplot):
- 功能:用于展示数据的分布情况。
histplot
通过绘制直方图来展示数据在各个区间的频率分布,kdeplot
则是通过核密度估计来展示数据的概率密度分布。- 应用场景:在数据分析的早期阶段,当需要了解数据的整体分布特征时非常有用。例如,在分析学生成绩分布时,可以使用
histplot
来查看成绩在各个分数段的人数分布情况,或者使用kdeplot
来更平滑地展示成绩的分布概率密度,从而了解成绩的集中趋势和离散程度。- 关系可视化(如 scatterplot、regplot):
- 功能:
scatterplot
用于展示两个变量之间的关系,通过散点的分布来直观地显示变量之间的相关性。regplot
则在scatterplot
的基础上添加了线性回归拟合线,用于展示变量之间的线性关系并估计其斜率和截距。- 应用场景:在探索变量之间的相关性时使用。例如,在研究房价与房屋面积之间的关系时,可以使用
scatterplot
来观察房价随着房屋面积的变化趋势,并且使用regplot
来拟合出一条直线,以定量地分析房价和面积之间的线性关系程度。- 分类可视化(如 boxplot、barplot):
- 功能:
boxplot
用于展示分类数据的分布特征,包括中位数、四分位数和异常值等信息。barplot
用于比较不同分类之间的数值大小,通过柱状的高度来直观地显示差异。- 应用场景:在比较不同组之间的数据时很有用。例如,在比较不同品牌手机的价格时,可以使用
barplot
来直观地展示各个品牌手机价格的高低;在分析不同班级学生成绩的差异时,可以使用boxplot
来查看每个班级成绩的分布情况,包括中位数、上下四分位数以及是否存在异常值等。
2 接口
3 示例
from sklearn.feature_extraction.text import CountVectorizer
import seaborn as sns
import matplotlib.pyplot as plt# 定义文本语料库
corpus = ['Time flies like an arrow.', 'Fruit flies like a banana.']# 创建并配置独热编码向量器
one_hot_vectorizer = CountVectorizer(binary=True)# 对语料库进行向量化
one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()# 获取词汇表(新版本的正确方式)
vocab = one_hot_vectorizer.get_feature_names_out()# 绘制热图
plt.figure(figsize=(len(vocab), 2))
g = sns.heatmap(one_hot, annot=True, cbar=False, xticklabels=vocab, yticklabels=['Sentence 1', 'Sentence 2'])
plt.show()