Python数据可视化:如何使用Seaborn绘制漂亮的图表?

2021年11月28日06:51:59 发表评论 1,395 次浏览
特色图片

数据可视化是一种技术,它允许数据科学家将原始数据转换为图表,从而产生有价值的见解。图表降低了数据的复杂性,并使任何用户都更容易理解。

有很多工具可以执行数据可视化,例如 Tableau、Power BI、ChartBlocks 等,它们都是无代码工具。它们是非常强大的工具,并且拥有自己的受众。但是,在处理需要转换和良好的数据游乐场的原始数据时,Python 是一个很好的选择。

尽管由于需要编程知识而更加复杂,但 Python 允许你对数据执行任何操作、转换和可视化。它非常适合数据科学家。

Python 是数据科学的最佳选择的原因有很多,但最重要的原因之一是它的库生态系统。许多很棒的库都可用于 Python 来处理诸如numpypandasmatplotlib, 之类的数据tensorflow

Matplotlib可能是最受认可的绘图库,可用于 Python 和其他编程语言,如R. 首先是它的定制化和可操作性水平。但是,使用它时可能难以处理某些操作或自定义。

开发人员基于 matplotlib 创建了一个名为seabornSeaborn功能强大,matplotlib同时还提供抽象以简化绘图并带来一些独特的功能。

如何使用Seaborn绘制图表?在本文中,我们将重点介绍如何与 Seaborn 合作创建一流的绘图。如果你想继续学习,你可以创建自己的项目,或者直接查看我 在 GitHub 上的seaborn 指南项目


Python Seaborn数据可视化教程:什么是Seaborn?

Seaborn 是一个用 Python 制作统计图形的库。它建立在matplotlib之上, 并与Pandas 数据结构紧密集成 。

Seaborn 设计允许你快速探索和理解你的数据。Seaborn 的工作原理是捕获包含所有数据的整个数据帧或数组,并执行语义映射和统计聚合所需的所有内部功能,以将数据转换为信息图。

它抽象了复杂性,同时允许你根据自己的要求设计图。


安装 Seaborn

Python如何使用Seaborn可视化数据?安装seaborn就像使用你最喜欢的 Python 包管理器安装一个库一样简单。安装时seaborn,该库将安装其依赖性,包括matplotlibpandasnumpy,和scipy

然后让我们安装 seaborn,当然还有包notebook 以访问我们的数据游乐场。

pipenv install seaborn notebook

此外,在开始之前,我们将导入一些模块。

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib

建立你的第一个地块

在我们开始绘制任何东西之前,我们需要数据。它的美妙之seaborn处在于它直接与pandas数据帧一起工作,非常方便。更重要的是,该库附带了一些内置数据集,你现在可以从代码中加载这些数据集,无需手动下载文件。

让我们通过加载包含航班信息的数据集来看看它是如何工作的。

flights_data = sns.load_dataset("flights")
flights_data.head()
编号乘客
01949年一月112
11949年二月118
21949年三月132
31949年四月129
41949年五月121

所有的魔法都在调用函数时发生load_dataset,它期望加载数据的名称并返回一个数据帧。所有这些数据集都可以在GitHub 存储库上找到 。

Python Seaborn数据可视化教程:散点图

散点图是基于数据集的二维显示点的图表。在 seaborn 库中创建散点图非常简单,只需一行代码。

sns.scatterplot(data=flights_data, x="year", y="passengers")
样本散点图
样本散点图

很容易吧?该函数scatterplot需要我们想要绘制的数据集以及代表xy轴的列。

线图

如何使用Seaborn绘制图表?此图绘制一条线,表示连续或分类数据的循环。它是一种流行且众所周知的图表类型,而且制作起来非常容易。同样之前,我们使用功能lineplot与数据集和代表列xy轴。Seaborn会做剩下的。

sns.lineplot(data=flights_data, x="year", y="passengers")
线样本图
样本线图

条形图

Python如何使用Seaborn可视化数据?它可能是最著名的图表类型,正如你可能已经预测的那样,我们可以seaborn使用函数绘制这种类型的图,就像绘制线条和散点图一样barplot

sns.barplot(data=flights_data, x="year", y="passengers")
示例条形图
示例条形图

它非常丰富多彩,我知道,我们稍后将在指南中学习如何自定义它。


使用 matplotlib 扩展

Seaborn 建立在 之上matplotlib,扩展了其功能并抽象了复杂性。话虽如此,它并没有限制其功能。seaborn可以使用matplotlib库中的函数自定义任何图表。它可以在特定操作中派上用场,并允许 seaborn 利用 的力量而matplotlib无需重写其所有功能。

例如,假设你想使用seaborn;同时绘制多个图形;那么你可以使用subplot来自matplotlib.

diamonds_data = sns.load_dataset('diamonds')
plt.subplot(1, 2, 1)
sns.countplot(x='carat', data=diamonds_data)
plt.subplot(1, 2, 2)
sns.countplot(x='depth', data=diamonds_data)
还有子图的示例图
带有子图的示例图

使用该subplot函数,我们可以在一张图上绘制多个图表。该函数采用三个参数,第一个是行数,第二个是列数,最后一个是绘图编号。

我们seaborn在每个子图中渲染一个图表,matplotlibseaborn函数混合。


Seaborn 喜欢 Pandas

我们已经讨论过这一点,但非常seaborn喜欢pandas它的所有功能都建立在pandas数据框之上。到目前为止,我们看到了使用seaborn预加载数据的示例,但是如果我们想从我们已经加载的数据中绘制图表pandas怎么办?

drinks_df = pd.read_csv("data/drinks.csv")
sns.barplot(x="country", y="beer_servings", data=drinks_df)
大熊猫样本图
Pandas样本图

用样式制作漂亮的情节

如何使用Seaborn绘制图表?Seaborn 使你能够更改图形界面,并且它提供了五种不同的开箱即用样式:darkgridwhitegriddarkwhiteticks

sns.set_style("darkgrid")
sns.lineplot(data = data, x = "year", y = "passengers")
暗格图案的示例图
暗格样式的示例图

这是另一个例子

sns.set_style("whitegrid")
sns.lineplot(data=flights_data, x="year", y="passengers")
具有 whitegrid 样式的示例图
具有 whitegrid 样式的示例图

Python Seaborn数据可视化教程:很酷的用例

我们了解了 的基础知识seaborn,现在让我们通过在同一数据集上构建多个图表来将它们付诸实践。在我们的例子中,我们将使用数据集“提示”,你可以直接使用seaborn.

首先,加载数据集。

tips_df = sns.load_dataset('tips')
tips_df.head()
total_bill提示性别吸烟者时间尺寸
016.991.01女性太阳晚餐2
110.341.66男性太阳晚餐3
221.013.50男性太阳晚餐3
323.683.31男性太阳晚餐2
424.593.61女性太阳晚餐4

我喜欢打印数据集的前几行,以了解列和数据本身。通常,我使用一些pandas函数来修复一些数据问题,例如null值,并向数据集添加可能有用的信息。你可以在使用 pandas的指南中阅读有关此内容的更多信息 。

让我们为数据集创建一个附加列,其中的百分比表示小费金额占账单总额的百分比。

tips_df["tip_percentage"] = tips_df["tip"] / tips_df["total_bill"]
tips_df.head()

现在我们的数据框如下所示:

total_bill提示性别吸烟者时间尺寸小费百分比
016.991.01女性太阳晚餐20.059447
110.341.66男性太阳晚餐30.160542
221.013.50男性太阳晚餐30.166587
323.683.31男性太阳晚餐20.139780
424.593.61女性太阳晚餐40.146808

接下来,我们可以开始绘制一些图表。

了解小费百分比

让我们首先尝试了解小费百分比分布。为此,我们可以使用histplot它生成直方图。

sns.histplot(tips_df["tip_percentage"], binwidth=0.05)
了解小费真图
了解小费百分比图

如何使用Seaborn绘制图表?这很好,我们必须自定义binwidth属性以使其更具可读性,但现在我们可以快速了解我们对数据的理解。大多数客户会支付 15% 到 20% 的小费,我们也有一些小费超过 70% 的极端情况。这些值是异常值,它们总是值得探索以确定这些值是否错误。

知道小费百分比是否随一天中的时刻而变化也很有趣,

sns.histplot(data=tips_df, x="tip_percentage", binwidth=0.05, hue="time")
更多时间图了解小费
按时间图了解小费百分比

这次我们加载了包含完整数据集而不是一列的图表,然后我们将属性hue设置为 column time。这将强制图表为每个值使用不同的颜色并为其time添加图例。

一周中每天的提示总数

Python如何使用Seaborn可视化数据?另一个有趣的指标是了解工作人员根据一周中的哪一天可以获得多少小费。

sns.barplot(data=tips_df, x="day", y="tip", estimator=np.sum)
了解每天的小费图
了解每天的小费百分比图

看起来星期五是待在家里的好日子。

桌子大小和天数对小费的影响

有时我们想了解如何将变量一起发挥作用来确定输出。例如,星期几和桌子大小如何影响小费百分比?

为了绘制下一个图表,我们将结合pivotpandas的功能对信息进行预处理,然后绘制一个热图图表。

pivot = tips_df.pivot_table(
    index=["day"],
    columns=["size"],
    values="tip_percentage",
    aggfunc=np.average)
sns.heatmap(pivot)
了解每天的小费和桌子大小图
了解每天的小费百分比和桌子大小图

Python Seaborn数据可视化教程结论

当然,我们可以做的还有很多seaborn,你可以通过访问官方文档了解更多用例 。

我希望你喜欢这篇文章,就像我喜欢写它一样。

谢谢阅读!

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: