用Seaborn绘制图表

做者|Jenny Dcruz
编译|VK
来源|Towards Datas Sciencegit

Seaborn是一个功能强大的Python库,用于加强数据可视化。它为Matplotlib提供了大量高级接口。Seaborn能够很好地处理数据帧,而Matplotlib则不行,它可让你以更简单的方式绘制引人注目的图表。github

为了更好地理解本文,你须要了解pandas和matplotlib的基础知识。若是没有,能够参考如下文章:bash

  1. 用Pandas进行数据分析:https://towardsdatascience.com/pandas-for-data-analysis-142be71f63dc机器学习

  2. 使用Matplotlib进行可视化:https://towardsdatascience.com/visualizations-with-matplotlib-4809394ea223函数

确保系统中安装了必要的库:学习

使用conda:.net

conda install pandas
conda install matplotlib
conda install seaborn

使用pip:3d

pip install pandas
pip install matplotlib
pip install seaborn

让咱们首先导入所需的Python库和数据集。code

你能够在这里找到本教程的CSV文件:https://github.com/jendcruz22/Medium-articles/tree/master/Plotting charts with Seabornblog

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

df = pd.read_csv('Pokemon.csv', index_col = 0, encoding='unicode-escape')
df.head()

在上面的代码中,咱们将index_col设置为0,这表示咱们将第一列视为索引。

使用seaborn和Pokemon(口袋妖怪)数据集的属性,咱们将建立一些很是有趣的可视化效果。咱们首先要看的是散点图。

散点图

散点图使用点来表示不一样数值变量的值。每一个点在水平轴和垂直轴上的位置表示单个数据点的值。它们用于观察变量之间的关系。

在seaborn中制做散点图只须要使用“lmplot”函数。为此,咱们将dataframe传递给data参数,而后传入x和y轴的列名。

默认状况下,散点图还显示一条回归线,它是一条最适合数据的直线。

sns.lmplot(x=’Attack’, y=’Defense’, data=df)
plt.show()

在这里你能够看到咱们的散点图,它显示了进攻得分与防守得分的比较。

咱们的回归线基本上显示了两轴之间的相关性。在这种状况下,它是向上倾斜的。也就是说当进攻得分愈来愈高,防守得分也会愈来愈高。要删除回归线,能够将“fitreg”参数设置为false。

此外,咱们能够经过设置hue参数来在Pokemon的进化阶段着色。这个色调的参数是很是有用的,由于它容许你用颜色来表达第三维度的信息。

sns.lmplot(x=’Attack’, y=’Defense’, data=df, fit_reg=False, hue=’Stage’)
plt.show()

散点图看起来和以前的同样,除了中间没有回归线,并且每一个点的颜色也不一样。这些颜色只是显示了每一个小精灵的阶段。Stage只是咱们以前看到的数据中的另外一个属性。

经过这张图,咱们能够得出这样的结论:在第一阶段的pokemon(蓝点)一般比在更高阶段的pokemon得分更低。

箱线图

箱线图是经常使用于显示数据分布的重要图之一。在seaborn中只须要一行代码就可使用boxplot函数显示箱线图。在本例中,咱们将使用除total、stage和legendary属性以外的整个dataframe。

df_copy = df.drop([‘Total’, ‘Stage’, ‘Legendary’], axis=1)
sns.boxplot(data=df_copy)

在这里咱们能够看到每一个属性都有其各自的箱线图。

箱线图基于5个数字摘要,每一个摘要以不一样的行显示。中间的线是中值,是数据的中心点。箱线图末端的最底部和最顶部的线是四分位数1和4的中位数,基本上显示了分布的最小值和最大值。中间的另外两条线是四分位数2和3的中位数,它们显示了值与中位数之间的差别。超出此范围的单点表示数据中的异常值。

小提琴图

小提琴图与箱线图类似。小提琴图是箱线图很是有用的替代品。它们经过小提琴的厚度来显示分布,而不仅是简要的统计。众所周知,小提琴图在分析和可视化数据集中不一样属性的分布时很是方便。

在本例中,咱们将使用上一个示例中的相同数据帧副本。

sns.violinplot(data=df_copy)
plt.show()

咱们能够观察到口袋妖怪每一个属性的值分布。小提琴较厚的区域意味着值的密度更高。小提琴图的中间部分一般比较厚,这意味着那里的值密度很高。咱们比较了下一个口袋妖怪的攻击类型。为此,让咱们使用相同的小提琴绘图方法。

plt.figure(figsize=(10,6))\sns.violinplot(x='Type 1', y='Attack', data=df)
plt.show()

这个图显示了每一个口袋妖怪的主要类型的攻击分数分布。如你所见,“龙”型口袋妖怪的攻击得分最高,但它们也有较高的方差,这意味着它们的攻击分数也很是低。“Ghost”主类型的方差很是低,这意味着它们的大多数数据值都集中在中心。

热图

热图帮助你可视化矩阵类型的数据。例如,咱们能够将口袋妖怪不一样属性之间的全部关联可视化。

让咱们经过调用“corr”函数来计算数据帧的相关性,并使用“heatmap”函数绘制热图。

corr = df_copy.corr()
sns.heatmap(corr)

上面的热图显示了咱们数据帧的相关性。

长方体的颜色越浅,这两个属性之间的相关性就越高。例如,血量和口袋妖怪的总体速度之间的相关性很是低。所以,盒子的颜色是深色的。HP和防护速度之间的相关性很是高,所以咱们能够在热图中看到一个红色方块。咱们能够看到,当一个属性变高时,其余属性也会变高,好比防守速度。

直方图

直方图容许你绘制数值分布图。若是咱们要使用matplotlib来建立柱状图,那么与使用seaborn建立柱状图相比,这将须要更多的工做。对于seaborn,只须要一行代码就能够建立。

例如,咱们能够建立一个直方图来绘制带有攻击属性的分布。

sns.distplot(df.Attack, color=’blue’)

咱们能够看到大多数口袋妖怪都在50-100之间。咱们能够看到,攻击值大于100或小于50的口袋妖怪要少得多。

Calplots公司

与条形图相似,calplots容许你可视化每一个类别变量的分布。咱们可使用calplot来查看每种主要类型中有多少口袋妖怪。

sns.countplot(x=’Type 1', data=df)
plt.xticks(rotation=-45)

咱们能够看到,“水”类的口袋妖怪最多,而“仙女”和“冰”类的口袋妖怪最少。

密度图

密度图显示两个变量之间的分布。例如,咱们可使用密度图来比较口袋妖怪的两个属性:攻击值、防护值。咱们将使用'jointplot'函数来完成此操做。

sns.jointplot(df.Attack, df.Defense, kind=’kde’, color=’lightblue’)

“kde”表示咱们须要一个密度图。

如你所见,绘图区域在黑暗中的变化取决于区域中的值的数量。黑暗区域预示着一种很是牢固的关系。从这个图中咱们能够看出,当攻击值在50到75之间时,防护值在50左右。

关于这篇文章。我但愿你喜欢用seaborn可视化数据。

你能够在这里找到本文的代码和数据集:https://github.com/jendcruz22/Medium-articles/tree/master/Plotting charts with Seaborn

感谢你的阅读!

参考引用

[1] Seaborn文档:https://seaborn.pydata.org/

原文连接:https://towardsdatascience.com/plotting-charts-with-seaborn-e843c7de2287

欢迎关注磐创AI博客站:
http://panchuang.net/

sklearn机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/