Python Seaborn综合指南,成为数据可视化专家
概述
- Seaborn是Python流行的数据可视化库
- Seaborn结合了美学和技术,这是数据科学项目中的两个关键要素
- 了解其Seaborn作原理以及使用它生成的不同的图表
介绍
一个精心设计的可视化程序有一些特别之处。颜色突出,层次很好地融合在一起,整个轮廓流动,整个程序不仅有一个很好的美学质量,它也为我们提供了有意义的技术洞察力。
这在数据科学中非常重要,因为我们经常处理大量杂乱的数据。对于数据科学家来说,具有可视化的能力是至关重要的。我们的利益相关者或客户将更多地依赖于视觉提示,而不是复杂的机器学习模型。
有大量优秀的Python可视化库可用,包括内置的matplotlib。但Seaborn对我来说很重要。它将美学魅力与技术洞察力无缝地结合在一起,我们很快就会看到这一点。
在本文中,我们将了解什么是seaborn以及为什么应该使用它而不是matplotlib。然后我们将使用seaborn在Python中为数据生成各种不同的可视化。
目录
- 什么是Seaborn?
- 为什么应该使用Seaborn而不是matplotlib?
- 搭建环境
- 使用Seaborn进行数据可视化
- 可视化统计关系
- 用分类数据绘图
- 可视化数据集的分布
什么是Seaborn?
你曾经在R中使用过ggplot2库吗?它是任何工具或语言中最好的可视化包之一。Seaborn给了我同样的感觉。
Seaborn是一个构建在matplotlib之上的一个非常完美的Python可视化库。
它使我们能够创建放大的数据视觉效果。这有助于我们理解数据,通过在可视上下文中显示数据来发现变量或趋势之间的任何隐藏相关性,而这些相关性最初可能并不明显。与Matplotlib的低级接口相比,Seaborn具有高级接口。
为什么应该使用Seaborn而不是matplotlib?
我一直在谈论Seaborn是多么的棒,所以你可能想知道我为什么这么大惊小怪。
当我们使用seaborn生成图时,我将以实际的方式全面地回答这个问题。现在,让我们快速讨论一下seaborn为什么在matplotlib之上。
Seaborn使我们的图表和绘图看起来很吸引人,并支持一些常见的数据可视化需求(比如将颜色映射到变量或使用分面(faceting))。从根本上说,它使数据可视化和探索变得很容易。相信我,这在数据科学中不是一件容易的事。
如果Matplotlib"试图让简单的事情变得简单,而让困难的事情变得可能",那么seaborn也尝试让一组定义良好的困难事情变得简单。——迈克尔·瓦斯科姆(Seaborn的创始人)
在matplotlib中有几个(很大的)限制是Seaborn已经修复的:
Seaborn提供了大量的高级接口和自定义主题,而matplotlib没有这些接口,因为很难确定哪些设置使图表更吸引人
Matplotlib函数不能很好地处理数据流,而seaborn可以
这第二点在数据科学中很突出,因为我们经常使用数据模型。
搭建环境
seaborn库具有四个必需的必需依赖项:
- NumPy (>= 1.9.3)
- SciPy (>= 0.14.0)
- matplotlib (>= 1.4.3)
- Pandas (>= 0.15.2)
要安装Seaborn并有效地使用它,首先需要安装前面提到的依赖项。一旦这一步完成,我们都准备安装Seaborn和享受其迷人的绘图。要安装Seaborn,可以使用以下代码
要安装最新版本的seaborn,你可以使用pip:
pip install seaborn
你也可以使用conda安装最新版本的seaborn:
conda install seaborn
要在代码中导入依赖项和seaborn本身,可以使用以下代码
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from scipy import stats
就是这样!我们都准备好了详细地探索seaborn。
用于数据可视化的数据集
我们将主要处理两个数据集:
- 人力资源分析(https://datahack.analyticsvidhya.com/contest/wns-analytics-hackathon-2018-1/)
- 预测投票数(https://datahack.analyticsvidhya.com/contest/enigma-codefest-machine-learning-1/)
之所以选择这两个,是因为它们包含多个变量,因此我们有很多选择可以使用。这两个数据集还可以模拟现实情况,因此你将了解数据可视化和了解业内的数据可视化方式。
你可以在DataHack平台上查看这个和其他高质量的数据集。因此,请在继续之前下载上述两个数据集。我们将一起使用它们。
使用Seaborn进行数据可视化
让我们开始吧!我已将此实现部分分为两类:
- 可视化统计关系
- 绘制分类数据
我们将研究每个类别的多个示例,以及如何使用seaborn对其进行绘制。
可视化统计关系
统计关系表示理解数据集中不同变量之间的关系以及这种关系如何影响或依赖于其他变量的过程。
在这里,我们将使用seaborn生成以下图:
- Scatter plot (散点图)
- SNS.relplot
- Hue plot (Hue图)
我选择了预测投票数数据集。所以,让我们导入数据集:
df = pd.read_csv(r"train.csv")
df.head()
使用Seaborn绘制散点图
散点图可能是可视化两个变量之间关系的最常见的例子。每个点在数据集中显示一个观察值,这些观察值用点状结构表示。图中显示了两个变量的联合分布。
为了绘制散点图,我们将使用seaborn库的relplot()函数。它是可视化统计关系的图形级角色。默认情况下,使用relplot会生成散点图:
sns.relplot(x="Views", y="Upvotes", data = df)
Seaborn的SNS.relplot
SNS.relplot是来自SNS类的relplot函数,SNS类是我们在上面与其他依赖项一起导入的一个seaborn类。
这里,参数是x、y,数据有在X,Y轴上表示的变量和我们要分别画出来的数据点,通过图片,我们发现了views和upvotes之间的关系。
接下来,如果我们想要看到与数据相关的标签,我们可以使用下面的代码:
sns.relplot(x="Views", y="Upvotes", hue = "Tag", data = df)
Hue图
我们可以在色调(Hue)的帮助下在我们的图片中添加另一个维度,通过为点赋予颜色来实现,每种颜色都有一些附加的意义。
在上图中,色调代表是样本类别,这就是为什么它有一个不同的颜色。如果色调代表的只是数字,那么色调就应该是连续的(因为数字是连续的,样本类别不是连续的)。
sns.relplot(x="Views", y="Upvotes", hue = "Answers", data = df);
我们还可以更改每个点的大小:
sns.relplot(x="Views", y="Upvotes", size = "Tag", data = df);
我们还可以手动更改大小,方法是使用另一个参数size=(15,200)。
用分类数据绘图
- 抖动图
- Hue图
- 箱线图
- 小提琴图
- Pointplot
在上面的小节中,我们了解了如何使用不同的视图表示来显示多个变量之间的关系。我们绘制了两个数值变量之间的关系图。在本节中,我们将看到两个变量之间的关系。例子中的数据是已分类的(分为不同的组)。
我们将使用seaborn库的catplot()函数来绘制分类数据图。就让我们一探究竟吧
抖动图
对于抖动图,我们将使用另一个数据集人力资源分析来分析,让我们现在导入该数据集。
df2 = pd.read_csv(r"train.csv")
df2.head()
现在,我们将使用catplot()函数查看education列和avg_training_score列之间的关系。
sns.catplot(x="education", y="avg_training_score", jitter = False, data=df2)
我们可以看到图表是散开的,所以为了处理这个问题,我们可以将抖动设置为false。抖动是偏离真实值。因此,我们将使用另一个参数将抖动设置为false。
sns.catplot(x="education", y="avg_training_score", jitter = False, data=df2)
Hue图
接下来,如果我们想在我们的图中引入另一个变量或另一个维度,我们可以使用hue参数,就像我们在上一节中使用的一样。假设我们希望看到教育和avg_training_score图中的性别分布,为此,我们可以使用以下代码
sns.catplot(x="education", y="avg_training_score", hue = "gender", data=df2)
在上面的图中,我们可以看到这些点是相互重叠的,为了消除这种情况,我们可以设置kind = “swarm”, swarm使用一种算法来防止这些点重叠,并且沿着分类轴调整这些点。我们看看它是怎样的
sns.catplot(x="education", y="avg_training_score", kind = "swarm", data=df2)
很神奇,对吧?如果我们想要看到引入swarmed作为第三维的版本呢?让我们将is_promoted作为一个新变量引入
sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "swarm", data=df2)
显然,分数更高的人得到了提升。
使用Seaborn的箱线图
我们可以绘制的另一种绘图是箱线图 ,它显示了分布的三个四分位值以及最终值。箱图中的每个值都对应于数据中的实际观察值。让我们现在绘制箱线图
sns.catplot(x="education", y="avg_training_score", kind = "box", data=df2)
当我们将Hue与boxplot一起使用时,它会沿着分类轴对齐,因此它们不会重叠。带有Hue的箱线图看起来是
sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "box", data=df2)
使用seaborn绘制小提琴图
我们也可以通过使用小提琴图来不同地表示上述变量。让我们尝试一下
sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "violin", data=df2)
小提琴图结合了箱线图和核密度估计程序,以提供更丰富的值分布描述。四分位数值显示在小提琴内部。当色调语义参数是二值时,我们还可以拆分小提琴,这也可能有助于节省绘图空间。让我们看一下具有不同值色调的小提琴图。
sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "violin", split = True, data=df2)
我开始使用seaborn的原因就是这些美妙的图表。它为你提供了很多显示数据的选项。另一个例子是箱线图。
使用Seaborn绘制箱线图
Boxplot对整个数据集进行操作,默认情况下获取平均值。
sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "bar", data=df2)
使用Seaborn绘制Pointplot
另一种类型的图是pointplot,这个图指出估计值和置信区间。Pointplot连接来自相同色调类别的数据。这有助于识别特定色调类别中的关系如何变化。你可以查看pointplot如何显示下面的信息。
sns.catplot(x="education", y="avg_training_score", hue = "is_promoted", kind = "point", data=df2)
从上面的图表可以明显看出,得分高的人更容易升职。
这不是结束,seaborn是一个巨大的库,有许多用于不同目的的绘图函数。其中一个目的是引入多维度。我们也可以想象高维的关系。让我们用群图来检验一下。
使用Seaborn的群图
sns.catplot(x="education", y="avg_training_score", hue="is_promoted",
col="gender", aspect=.9,
kind="swarm", data=df2);
当我们将多个概念组合成一个概念时,我们很容易将这个概念形象化。这里群图将色调语义属性和性别属性作了分面处理。
可视化数据集的分布
无论何时处理数据集,我们都想知道数据或变量是如何分布的。数据的分布可以告诉我们很多关于数据性质的信息,所以让我们深入研究一下。
绘制单变量分布
- 柱状图
在研究变量分布时,最常见的一个图是柱状图。默认情况下,distplot()函数绘制柱状图并适合内核密度估计。让我们看看年龄是如何分布在数据中的。
sns.distplot(df2.age)
这清楚地表明,大多数人都在二十多岁和三十多岁。
使用Seaborn的直方图
另一种用于单变量分布的图是直方图。
直方图以箱子的形式表示数据的分布,并使用条形图来显示每个箱子下的观察次数。我们还可以在其中添加一个加固图,而不是使用KDE(核密度估计),这意味着在每次观察时,它都会画一个小的垂直标尺。
sns.distplot(df2.age, kde=False, rug = True)
绘制双变量分布
- Hex图
- KDE 图
- Boxen 图
- Ridge 图 (Joy图)
除了可视化单个变量的分布外,我们还可以看到两个独立变量是如何相互分布的。双变量表示关节,为了将其形象化,我们使用了seaborn库的jointplot()函数。默认情况下,jointplot绘制散点图。让我们看看年龄和avg_training_score之间的二元分布。
sns.jointplot(x="avg_training_score", y="age", data=df2);
有多种方式可视化双变量分布。让我们再看几个。
使用Seaborn的Hexplot
Hexplot是一个双变量的直方图,因为它显示了在六边形区域内的观察次数。这是一个非常容易处理大数据集的图。为了绘制Hexplot,我们将把kind属性设置为hex。我们现在就去看看。
sns.jointplot(x=df2.age, y=df2.avg_training_score, kind="hex", data = df2)
使用Seaborn的KDE图
这还不是结束,接下来是KDE绘图。这是另一个很好的方法来可视化双变量分布。让我们看看如何使用**jointplot()**函数并将属性kind设置为KDE来实现上述观察。
sns.jointplot(x="age", y="avg_training_score", data=df2, kind="kde");
使用Seaborn绘制Heatmaps
现在让我们来谈谈我最喜欢的图表Heatmaps。Heatmaps中每个变量都表示为一种颜色。
让我们来生成一个:
corrmat = df2.corr()
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(corrmat, vmax=.8, square=True)
使用Seaborn的Boxen图
另一个我们可以用来表示二元分布的图是boxen图。Boxen plot最初被命名为letter value plot(字母值图),因为它显示了一个变量大量的值,也称为分位数。这些分位数也被定义为字母值。通过绘制大量的分位数,可以对分布的形状有更多的了解。这些类似于箱形图,让我们看看如何使用它们。
sns.catplot(x="age", y="avg_training_score", data=df2, kind="boxen",height=4, aspect=2.7, hue = "is_promoted")
使用Seaborn绘制Ridge图
下一个图表相当引人入胜。叫做Ridge图。它也被称为joy图。Ridge图有助于可视化几个组的数值分布。这些分布可以用KDE图或直方图来表示。现在,我们试着画一个Ridge图来表示年龄和性别的关系。
# 初始化FacetGrid对象
g = sns.FacetGrid(df2, row="gender", hue="gender", aspect=5, height=3)
# 画出密度
g.map(sns.kdeplot, "age", shade=True, alpha=1, lw=3.5, bw=.2)
g.map(sns.kdeplot, "age", color="w", lw=2, bw=.2)
g.map(plt.axhline, y=0, lw=2)
# 定义并使用一个简单的函数在坐标轴坐标中标记绘图
def label(x, color, label):
ax = plt.gca()
ax.text(0, .2, label, color=color, ha="left", va="center", transform=ax.transAxes)
g.map(label, "age")
# 将子图表设置为重叠
g.fig.subplots_adjust(hspace=-.25)
# 删除轴的细节,不要让细节影响到重叠
g.set_titles("")
g.set(yticks=[])
g.despine(bottom=True, left=True)
可视化数据集中的成对关系
我们还可以使用seaborn库的pairplot()函数来绘制数据集中的多个二元分布。这显示了数据库中每一列之间的关系。并绘制各变量在对角线上的单变量分布图。让我们看看它是什么样子。
sns.pairplot(df2)
结尾
我们已经讲了很多图表了。我们看到了seaborn库在可视化和研究数据(尤其是大型数据集)时是如何如此有效的。我们还讨论了如何为不同类型的数据绘制seaborn库的不同函数。
正如我前面提到的,学习seaborn的最佳方法是实践它。你自己实践产生的新的视图越多,你就会变得越自信。
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
Python Seaborn综合指南,成为数据可视化专家的更多相关文章
- Python调用matplotlib实现交互式数据可视化图表案例
交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...
- python实现的电影票房数据可视化
代码地址如下:http://www.demodashi.com/demo/14275.html 详细说明: Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采 ...
- Python图表数据可视化Seaborn:2. 分类数据可视化-分类散点图|分布图(箱型图|小提琴图|LV图表)|统计图(柱状图|折线图)
1. 分类数据可视化 - 分类散点图 stripplot( ) / swarmplot( ) sns.stripplot(x="day",y="total_bill&qu ...
- seaborn教程4——分类数据可视化
https://segmentfault.com/a/1190000015310299 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分: 风格管理 绘图风格设置 颜色风格设置 绘 ...
- Python的Excel操作及数据可视化
Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...
- Python+Docker+Flask+pyecharts实现数据可视化
1.数据加工pyecharts图实现: 数据源:本地CSV文件 ps:由于是跟生产环境做交互,生产环境指标由HSQL加工,使用存储过程挂后台定时运行,后使用python实现导出及定时分发,本地pyth ...
- 使用Python自己实现简单的数据可视化
只使用Python的random库,将已有数据生成HTML格式的标签云.思路就是根据同一单词出现的次数多少,生成不同大小不同颜色单词的数据的视图. 比如以下格式的多条数据: 1 Gaming 1 Sk ...
- 310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化
如图:文件夹 第一处:optimizer文件夹下的:optimizer.h文件中添加你所写代码的头文件 #include <OTL/Optimizer/Reference-NSGA-II/Re ...
- nomon+ pyNmonAnalyzer实现基于python的nmon监控性能数据可视化
pip install pyNmonAnalyzer nnmon for linux from sourceforge:https://sourceforge.net/projects/nmon/ ...
随机推荐
- git基本命令(二)
忽略文件 git可以将用户指定的文件或者目录排除在版本之外,它会检查代码仓库目录下是否存在名为.gitignore文件,如果存在就会一行一行读取这个文件的内容,会将每一行指定的文件或目录排除 ...
- sql02
1.小练习: 一切数据都是有用的,当我们删除时只是象征性设置一个标志位: 2.SQL学习 1)创建数据库 create database DbName; 使用--注释 多行注释/**/ 2)删除数据库 ...
- Flutter01-学习准备
1. 简介: Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...
- H5多列布局
多列布局 基本概念 1.多列布局类似报纸或杂志中的排版方式,上要用以控制大篇幅文本. 2.跨列属性可以控制横跨列的数量 /*列数*/ -webkit-column-count: 3; /*分割线*/ ...
- 不一样的ZTree,权限树.js插件
每一个有趣的创新,都源于苦逼的生活. 在最近的工作中,遇到一个做权限管理筛选的需求.简单总结需求:1展示一个组织中的组织结构2通过点击组织结构中的任意一个节点可以向上向下查询对应的组织结构 如果你不想 ...
- MongoDB Compass最新版(v_1.20.5)远程连接数据库
最近下载了最新版本的MongoDB Compass(v_1.20.5)后才发现软件较之前的版本有了很大的变化,主要体现在创建连接页面和连接方式上. 这是旧版的连接页面,所有的参数项以表单的形式列出,直 ...
- 简单的猜数字小游戏--Python
猜数字小游戏: #coding=utf-8 import random answer =random.randint(1,100) #生成随机数 n=int (input("Please ...
- SpringFactoriesLoader解析
一.SpringFactoriesLoader 介绍 1.1 SpringFactoriesLoader 简介 SpringFactoriesLoader 工厂加载机制是 Spring 内部提供的一个 ...
- 何为引用法---细谈C++引用
何为引用...给已有的变量取别名 ; int &a = num;//此处 &不是取地址 而是标明 a是引用变量(a 是 num的别名) 注意: 1.引用必须初始化 2.引用一旦初始化 ...
- 029.核心组件-Controller Manager
一 Controller Manager原理 1.1 Controller Manager概述 一般来说,智能系统和自动系统通常会通过一个"控制系统"来不断修正系统的工作状态.在K ...