如何利用Seaborn绘制热力图?
如何利用Seaborn绘制热力图?
这是本学期在大数据哲学与社会科学实验室做的第八次分享了。
第一次分享的是:
- 如何利用“wordcloud+jieba”制作中文词云?
第二次分享的是:
- 如何爬取知乎中问题的回答以及评论的数据?
第三次分享的是:
- 如何利用百度AI平台或snownlp做中文文本的情感分析?
第四次分享的是:
- 如何利用情感词典做中文文本的情感分析?
第五次分享的是:
- 如何利用pyecharts绘制酷炫的桑基图?
- 如何在Jupyter Lab中显示pyecharts的图形?
第六次分享的是:
- 如何使用pyecharts中自带的数据集?
- 如何利用pyecharts绘制炫酷的关系网络图?
第七次分享的是:
- 如何使用netwokx进行复杂网络的中心性分析?
本次分享的是“如何利用Seaborn绘制热力图?”
1. Seaborn简介
Seaborn是在matplotlib的基础上进行了更高级的API封装,使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。
Seaborn官网:
https://seaborn.pydata.org/
Seaborn安装:
pip install seaborn
Seaborn升级:
pip install --upgrade seaborn
显示Seaborn信息:
pip show Seaborn
Name: seaborn
Version: 0.11.1
Summary: seaborn: statistical data visualization
Home-page: https://seaborn.pydata.org
Author: Michael Waskom
Author-email: mwaskom@nyu.edu
License: BSD (3-clause)
Location: c:\programdata\anaconda3\lib\site-packages
Requires: numpy, scipy, matplotlib, pandas
Required-by:
(base) PS D:\Users\Administrator>
2. 利用Seaborn绘制热力图
热力图 就是用颜色深浅来表示数值大小的图像。
在实际中常用于展示列联表的数据分布,以及展示一组变量的相关系数矩阵,通过热力图我们可以非常直观地感受到数值大小的差异状况。
heatmap的API如下所示:
def heatmap(data, *,vmin=None, vmax=None, cmap=None, center=None, robust=False,annot=None, fmt=".2g", annot_kws=None,linewidths=0, linecolor="white",cbar=True, cbar_kws=None, cbar_ax=None,square=False, xticklabels="auto", yticklabels="auto",mask=None, ax=None,**kwargs
):
2.1 展示列联表
列联表是根据多个类别变量来对观测值进行计数的表。该表的行和列对应于这些类别变量。
本案例采用的数据集是Seaborn中内置的flights航班数据集,dataframe中的数据代表了1949年-1960年每个月的航班乘客数量。
year 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960
month
Jan 112 115 145 171 196 204 242 284 315 340 360 417
Feb 118 126 150 180 196 188 233 277 301 318 342 391
Mar 132 141 178 193 236 235 267 317 356 362 406 419
Apr 129 135 163 181 235 227 269 313 348 348 396 461
May 121 125 172 183 229 234 270 318 355 363 420 472
Jun 135 149 178 218 243 264 315 374 422 435 472 535
Jul 148 170 199 230 264 302 364 413 465 491 548 622
Aug 148 170 199 242 272 293 347 405 467 505 559 606
Sep 136 158 184 209 237 259 312 355 404 404 463 508
Oct 119 133 162 191 211 229 274 306 347 359 407 461
Nov 104 114 146 172 180 203 237 271 305 310 362 390
Dec 118 140 166 194 201 229 278 306 336 337 405 432
Seaborn的数据集合:
https://github.com/mwaskom/seaborn-data
import seaborn as sns
import matplotlib.pyplot as pltdata = sns.load_dataset('flights'). \pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data)
plt.show()
热力图的右侧是 颜色带,上面代表了数值到颜色的映射,数值由小到大对应色彩由暗到亮。
从上面的heatmap,我们可以得到两层信息,一是随着时间的推移,飞机的乘客数量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具体的参数进行演示。
cmap
:设置颜色带的色系
有关色带的配置见图文:如何利用colormap让你的图表与众不同?
import seaborn as sns
import matplotlib.pyplot as pltdata = sns.load_dataset('flights'). \pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r')
plt.show()
annot
:是否显示数值注释
数值注释默认显示的是科学记数法的数值,我们得把数值进行格式化,这就用到了下面的参数。
fmt
:format的缩写,设置数值的格式化形式
import seaborn as sns
import matplotlib.pyplot as pltdata = sns.load_dataset('flights'). \pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True, fmt='d')
plt.show()
linewidths
:控制每个小方格之间的间距
import seaborn as sns
import matplotlib.pyplot as pltdata = sns.load_dataset('flights'). \pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,fmt='d', linewidths=0.3)
plt.show()
linecolor
:控制分割线的颜色
import seaborn as sns
import matplotlib.pyplot as pltdata = sns.load_dataset('flights'). \pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,fmt='d', linewidths=0.3, linecolor='gray')
plt.show()
cbar_kws
:关于颜色带的设置
import seaborn as sns
import matplotlib.pyplot as pltdata = sns.load_dataset('flights'). \pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,fmt='d', linewidths=0.3, linecolor='gray',cbar_kws={'orientation': 'horizontal'})
plt.show()
2.2 展示相关系数矩阵
所用数据集mtcars.csv记录了32种不同品牌的轿车的11个属性。
数据来源:
https://gist.github.com/seankross/a412dfbd88b3db70b74b
皮尔逊相关系数(Pearson Correlation)是衡量向量相似度的一种方式。
这个系数在-1~1之间波动,0表示完全无关,1表示完全正相关,-1表示完全负相关。
pearson=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2pearson = \frac{\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\bar{x})^2}\sqrt{\sum_{i=1}^{n}(y_i-\bar{y})^2}} pearson=∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
对相关的通俗理解可以看图文:内积与相关
上面数据计算出来的相关系数矩阵如下:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd# 确保正常显示中文+负号
plt.rcParams['font.sans-serif'] = ['Simhei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12, 10), dpi=70)df = pd.read_csv('.\data\mtcars.csv')
pd.set_option('display.max_columns', None)name = ["汽车名称", "英里/加仑", "气缸数量", "排量", "总马力","驱动轴比", "重量", "1/4英里所用时间", "引擎","变速器", "前进档数", "化油器数量"]
df.columns = name
mat = df.corr(method='pearson')
sns.heatmap(data=mat, cmap='RdYlGn', annot=True)plt.title('mtcars数据集的相关性矩阵', fontsize=22)
plt.xticks(fontsize=12 # 字体大小, rotation=45 # 字体是否进行旋转, horizontalalignment='right' # 刻度的相对位置)
plt.yticks(fontsize=12)
plt.show()
2.3 成对分析图
成对分析图 是以图像形式分析多个变量之间相关性的图像,是相关矩阵图的具体化。
我们可以使用散点图或者带最佳拟合线的散点图来描述变量两两之间的关系。但当我们有着探索多个特征两两之间关系的需求时,一一绘制图像的效率比较低下,因此我们就可以使用成对分析图。它是一种类关系矩阵的绘图方式,一次性绘制出所有特征之间的相关图像。
def pairplot(data, *,hue=None, hue_order=None, palette=None,vars=None, x_vars=None, y_vars=None,kind="scatter", diag_kind="auto", markers=None,height=2.5, aspect=1, corner=False, dropna=False,plot_kws=None, diag_kws=None, grid_kws=None, size=None,
):
本案例采用的数据集是Seaborn中内置的iris鸢尾花数据集。
数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于山鸢尾(iris-setosa),杂色鸢尾(iris-versicolour),维吉尼亚鸢尾(iris-virginica)中的哪一品种。
import seaborn as sns
import matplotlib.pyplot as pltsns.set_style('white', {'font.sans-serif': ['simhei', 'Arial']})
data = sns.load_dataset('iris')
data.columns = ["花萼长", "花萼宽", "花瓣长", "花瓣宽", "种类"]
kind_dict = {"setosa": "山鸢尾","versicolor": "杂色鸢尾","virginica": "维吉尼亚鸢尾"
}
data["种类"] = data["种类"].map(kind_dict)
sns.pairplot(data=data)
plt.show()
可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图,从图中我们发现,花瓣的长度和宽度之间以及萼片的长短和花瓣的长、宽之间具有比较明显的相关关系。
kind
:用于控制非对角线上的图的类型,可选"scatter"(散点图)与"reg"(回归图)diag_kind
:控制对角线上的图的类型,可选"hist"(直方图)与"kde"(核密度估计图)
sns.pairplot(data=data, kind='reg', diag_kind='kde')
plt.show()
将 kind
参数设置为 “reg” 会为非对角线上的散点图拟合出一条回归直线,更直观地显示变量之间的关系。
那对于不同种类的花,其花萼和花瓣有什么比较鲜明的特征吗?我们通过hue
参数把不同种类的花区分开,进行进一步分析。
hue
:按照某个字段进行分类
sns.pairplot(data=data, hue='种类')
plt.show()
我们可以从经过hue
分类后的pairplot
中发现,不论是从对角线上的分布图还是从分类后的散点图,都可以看出对于不同种类的花,其萼片长、花瓣长、花瓣宽的分布差异较大,换句话说,这些属性是可以帮助我们去识别不同种类的花的。
比如,对于萼片、花瓣长度较短,花瓣宽度较窄的花,那么它大概率是山鸢尾。
当然,可以通过 palette 参数来调出自己想要的颜色
palette
:控制色调
sns.pairplot(data, hue='种类', palette="husl")
plt.show()
markers
:控制散点的样式
sns.pairplot(data, hue='种类', markers=["*", "s", "D"])
plt.show()
当我们想单独研究某两个(或多个)变量的关系时,我们只需要通过vars
参数指定你想研究的变量
vars,x_vars,y_vars
:选择数据中的特定字段,以list形式传入
#单独用vars参数选择"花萼长 "和"花瓣长"两种属性
sns.pairplot(data, hue='种类', vars=["花萼长", "花瓣长"])
plt.show()
# 用x_vars和 y_vars参数指定
# 需要注意的是,x_vars和y_vars要同时指定
sns.pairplot(data, x_vars=["花萼长", "花瓣宽"], y_vars=["花萼宽", "花瓣长"])
plt.show()
更多的样式可以通过plot_kws
和diag_kws
来进行控制
plot_kws
:用于控制非对角线上的图的样式
diag_kws
:用于控制对角线上图的样式
sns.pairplot(data, diag_kind="kde", markers="s",plot_kws=dict(s=50, edgecolor="w", color="g", alpha=.5),diag_kws=dict(shade=True, color="r"))
plt.show()
参考图文:
- https://www.jianshu.com/p/6e18d21a4cad
- https://zhuanlan.zhihu.com/p/96040773
- https://zhuanlan.zhihu.com/p/98729226
相关文章:

如何学习大数据?
想要都进入大数据行业的第一步,是先搞清楚大数据究竟有哪些就业方向。 大数据就业岗位 随着大数据技术在企业界如火如荼的实践,企业对组建大数据团队的迫切程度也也来越高,对与大数据相关高端人才的需求也越来越紧迫,但企业对大数…

软件测试培训分享:Bug的作用有多大?
软件测试人员在工作中遇到最常见的是就是bug,那么bug经常出现是对是错呢?Bug的作用有多大?本期小编为大家介绍的软件测试培训教程就是关于这方面的内容的,来看看下面的详细介绍吧。 软件测试培训分享:Bug的作用有多大?主要有以下几点&…

(转)Linux进程调度时机
转自:http://oss.org.cn/kernel-book/ch05/5.3.2.htm 调度程序虽然特别重要,但它不过是一个存在于内核空间中的函数而已,并不神秘。Linux的调度程序是一个叫Schedule()的函数,这个函数被调用的频率很高&…

python 字符编码问题
字符编码 一、字符编码的演进 ASCIIGB2312 GBK1.0 GB18030Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode(统一码、万国码)规定所有的…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 6. 神经网络
Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 以往内容: 西瓜书公式推导讲解来了!0. 导学1. 一…

Python培训常识:Python面试中常被问到的几种设计模式要知道
学习Python技术大家都是为了日后能够找到适合自己的工作岗位,那么除了要学习好Python技术外,对于面试环节的问题也要有所了解,本期小编为大家介绍的Python培训教程就算关于Python面试中常被问到的几种设计模式,希望能够给带来帮助…

ThinkPHP 框架学习
学习内容全部参考开发手册 建议收藏网页 https://www.kancloud.cn/manual/thinkphp/1696 一、几个概念 应用:基于同一个入口文件访问的项目称之为一个应用 模块:一个应用下面可以包含多个模块。每个模块在应用目录下面都是一个独立的子目录 控制器&…

【青少年编程】【三级】克隆猫游戏
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

想转行学软件测试要注意哪些问题
软件测试的快速发展,让很多人都红了眼,大家都想转行学软件测试,那么想转行学软件测试要注意哪些问题呢?大家是否考虑过自己是否合适呢?那么我们来看看下面的介绍吧。 想转行学软件测试要注意哪些问题?据数据显示,今年毕业生首选…

SpringMVC学习二
使用POJO作为参数 web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app version"3.0" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio…

使用CInternetSession和CHttpFile读取网页内容
参考网址:http://www.398588.com/Article/T9/78.aspx读取网页的内容可以类比本地的文件一下,代码如下:#include <afxinet.h> CString url; GetDlgItemText(IDC_EDIT1,url); CInternetSession Sess; CHttpFile*cFile (CHttp…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 7. 支持向量机
Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 以往内容: 西瓜书公式推导讲解来了!0. 导学1. 一…

Python培训分享:Python发展前景怎么样?
最近学习Python技术的同学越来越多,大家对于Python技术比较关注的两个点,就是Python技术好不好学,Python就业前景好不好,那么本文针对Python发展前景怎么样这个问题为大家做下详细的介绍。 Python培训分享:Python发展前…

处理器拦截器(HandlerInterceptor)详解
处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4简介SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理。 应用场景1、日…

Datawhale组队学习周报(第018周)
文章目录本周结营的开源内容即将结营的开源内容正在进行的开源内容七月排期的开源内容希望排期的开源内容每周号外Whalepaper 招新公告本周(06月14日~06月20日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群…

【原创】多台电脑如何公用一个键盘鼠标进行操作 - Mouse with Borders 软件
搞程序开发的同事经常会碰到类似的情况,桌子有多台设备,笔记本,台式机了,经常需要来回切换操作,桌子上摆满了键盘和鼠标,如果要是用同一个键盘或者鼠标,操作这些设备那就很便利了。 给大家推荐一…

Python培训教程分享:如何实现pygame的初始化和退出操作?
本期小编为大家介绍的Python培训教程是关于“如何实现pygame的初始化和退出操作?”的内容,pygame模块针对不同的开发需求提供了不同的子模块,例如显示模块、字体模块、混音器模块等,一些子模块在使用之前必须进行初始化,比如字体…

PLSQL的 dynamic sql小例子
开始 SET serveroutput ON;DECLAREp_tab_name varchar2(20);cursor_name INTEGER;p_rows_del INTEGER; BEGINp_tab_name : EMP_CPY;cursor_name : DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(cursor_name, DELETE FROM ||p_tab_name, DBMS_SQL.NATIVE);DBMS_OUTPUT.PUT_LINE(p_tab_n…

【青少年编程】陈晓光:打靶游戏
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…
Phpcms V9手机门户设置教程:怎么用PC V9做手机网站
一、在PHPcms V9管理后台设置手机门户 1.1、开启手机网站。位置:模块 》手机门户 》 添加手机站点,具体设置可参照截图: 填写站点名和LOGO文件相对位置,绑定用于手机网站的二级域名m.cmsyou.com,域名以http://开头。 1…

参加软件测试培训需要学习哪些知识
软件测试在互联网行业的发展前景非常好,很多人都想学习软件测试,其中有很多都是零基础学员,那么参加软件测试培训需要学习哪些知识?零基础是否能学会呢?来看看下面的详细介绍吧。 参加软件测试培训需要学习哪些知识?下面给大家简单说下软件…

C#用XmlDocument操作XML
1.加载xml文件 string xmlPath AppDomain.CurrentDomain.BaseDirectory"xml/test.xml"; XmlDocument xmlDoc new XmlDocument(); xmlDoc.Load(xmlPath);//这里是xml文件的路径 string xmlString"<books><book>test</book></books>…

【第20周复盘】转换思路,让更多的小朋友们参与进来!
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

篇三:XPath--解析Html
篇三:XPath--解析Html

Python培训教程:什么是Python全局解释器锁(GIL)?
本期Python培训教程小编为大家带来的是关于“什么是Python全局解释器锁(GIL)?”的问题,全局解释器锁是计算机程序设计语言解释器用于同步线程的工具,使得在同一进程内任何时刻仅有一个线程在执行,常见的有CPython、Ruby MRI。 Python培训教程…

Datawhale组队学习周报(第019周)
本周(06月21日~06月27日),第 25 期组队学习一共有 3 门开源课程,共组建了 3 个学习群,参与的学习者有 292 人,其中 web开发入门教程、数据挖掘实战(异常检测) 已经结营,另…

git ingore添加忽略文件无较的解决方法
一、启动Git Bash并切换到项目目录下 二、执行下列语句: git rm -r --cached . git add . git commit -m update .gitignore 三、OK。

01、WPF 中 URI 解析
WebBrowser 控件导航到包中的 html 文件,首先把该文件 (bland.html) 的属性设置为 "Resource"、“始终复制”, 然后在 C# 页面可以导航到该文件。 webView.Navigate(new Uri(System.Environment.CurrentDirectory "/Assets/bland.html", UriK…

现在参加软件测试培训就业难度大不大?
软件测试对于IT行业来说,入门是相对比较简单的,所以学习起来是非常快的,零基础也可以在短时间内学会,那么现在参加软件测试培训就业难度大不大呢?看出来大家主要关心的是就业问题,来看看下面小编的详细介绍就知道了。…

ABP理论学习之数据传输对象(DTO)
本篇目录 为何需要DTO 领域层抽象数据隐藏序列化和懒加载问题DTO惯例和验证 DTO和实体的自动映射 使用特性和扩展方法进行映射帮助接口DTO用于应用层和 展现层间的数据传输。 展现层调用具有DTO参数的应用服务方法,然后应用服务使用领域对象来执行一些特定的业务逻辑…