如何快速创建强大的可视化探索性数据分析,这对于现在的商业社会来说,变得至关重要。今天我们就来,谈一谈如何使用python来进行数据的可视化!

一旦你有了一个很好的被清理过的数据集,下一步就是探索性数据分析(EDA)。EDA是确定数据可以告诉我们的过程,我们使用EDA来查找模式、关系或异常情况,以便指导我们后续的工作。然而在EDA中有很多的方法,但最有效的工具之一是对图(也称为散点图矩阵)。散点图矩阵让我们看到了两个变量之间的关系。散点图矩阵是识别后续分析趋势的好方法,幸运的是,它们很容易用Python实现!

在本文中,我们将通过使用seaborn可视化库在Python中进行对图的绘制和运行。我们将看到如何创建默认配对图以快速检查我们的数据,以及如何自定义可视化以获取更深入的洞察力。该项目的代码在GitHub上以Jupyter Notebook的形式提供。在这个项目中,我们将探索一个真实世界的数据集,由GapMinder收集的国家级社会经济数据组成。

Seaborn的散点图矩阵(Pairs Plots)

在开始之前,我们需要知道我们有什么数据。我们可以将社会经济数据用熊猫(Pandas)数据框加载并查看列:

每行数据代表一个国家在一年内的结果,列中包含变量(这种格式的数据称为整洁数据)。有2个分类专栏(国家和大陆)和4个数字专栏。这些专栏包括:life_exp是几年出生时的预期寿命,pop是人口,gdp_per_cap是以国际美元为单位的人均国内生产总值。

虽然后面我们将使用分类变量进行着色,但seaborn中的默认对图仅绘制了数字列。创建默认的散点图矩阵很简单:我们加载到seaborn库并调用pairplot函数,将它传递给我们的数据框:

我仍然惊讶于一行简单的代码就可以完成我们整个需求!散点图矩阵建立在两个基本图形上,直方图和散点图。对角线上的直方图允许我们看到单个变量的分布,而上下三角形上的散点图显示了两个变量之间的关系。例如,第二行中最左边的图表显示life_exp与年份的散点图。

默认的散点图矩阵图经常给我们提供有价值的见解。我们看到人均预期寿命和人均GDP是正相关的,这表明高收入国家的人们倾向于更长寿(尽管这当然不能证明导致其他人也是如此)。它也似乎看起来是全世界的预期寿命随着时间的推移而上升。为了在未来的图中更好地显示这些变量,我们可以通过取这些值的对数来转换这些列:

虽然这种制图本身可以用于分析,但我们可以发现,通过对诸如大陆这样的分类变量进行数字着色,使其更有价值。这在seaborn中非常简单!我们所需要做的就是在hue中使用sns.pairplot函数调用使用关键字:

现在我们看到大洋洲和欧洲的人均预期寿命最高,亚洲人口最多。请注意,我们对人口和gdp的日志转换使这些变量正态分布,从而更全面地表示值。

上图更具信息性,但仍然存在一些问题:找不到叠加的直方图,就像在对角线上那样,它非常易于理解。显示来自多个类别的单变量分布的更好方法是密度图。我们可以在函数调用中交换柱状图的密度图。当我们处理它时,我们会将一些关键字传递给散点图,以更改点的透明度,大小和边缘颜色。

对角线上的密度图比堆积条更容易比较各大洲之间的分布。改变散点图的透明度可以提高可读性,因为这些数字有相当多的重叠(称为重叠绘图)。

作为pairplot默认的最后一个例子,让我们通过绘制2000年后的年份来减少数据混乱。我们仍然会按照大陆分布着色,但现在我们不会绘制年份列。为了限制绘制的列,我们将一个列表传递vars给函数。为了说明情节,我们还可以添加标题。

这开始看起来很不错!如果我们要进行建模,我们可以使用这些图中的信息来帮助我们进行选择。例如,我们知道log_gdp_per_cap与life_exp正相关,所以我们可以创建一个线性模型来量化这种关系。对于这篇文章,我们将坚持绘图,如果我们想要更多地探索我们的数据,我们可以使用PairGrid类自定义散点图矩阵。

使用PairGrid进行自定义

与sns.pairplot函数相反,sns.PairGrid是一个类,它意味着它不会自动填充我们的网格plot。相反,我们创建一个类实例,然后将特定函数映射到网格的不同部分。要用我们的数据创建一个PairGrid实例,我们使用下面的代码,这也限制了我们将显示的变量:

如果我们要显示它,我们会得到一个空白图,因为我们没有将任何函数映射到网格部分。有三个网格部分填写PairGrid:上三角形、下三角形和对角线。要将网格映射到这些部分,我们使用grid.map 部分中的方法。例如,要将散点图映射到我们使用的上三角形:

该map_upper方法接受任何两个变量数组(如plt.scatter)和关联的关键字(如color)的函数。该map_lower方法完全相同,但填充网格的下三角形。因为它需要在接受单个阵列(记住对角线仅示出了一个变量)的函数略有不同。一个例子是plt.hist我们用来填写下面的对角线部分:

在这种情况下,我们在下三角形中使用2-D(密度图)的核密度估计值。放在一起,这段代码给了我们下面的图:

使用PairGrid类的真正好处在于我们想要创建自定义函数来将不同的信息映射到图上。例如,我可能想要将两个变量之间的Pearson相关系数添加到散点图中。为此,我会编写一个函数,它接受两个数组、计算统计量,然后在图上绘制它。下面的代码显示了这是如何完成的(归功于这个Stack Overflow答案):

我们的新函数映射到上三角形,因为我们需要两个数组来计算相关系数(还要注意我们可以将多个函数映射到网格部分)。这会产生以下图形:

相关系数现在出现在散点图上方。这是一个相对直接的例子,但我们可以使用PairGrid将我们想要的任何函数映射到图上。我们可以根据需要添加尽可能多的信息,只要我们能够弄清楚如何编写函数!作为最后一个例子,这里是一个显示对角线而不是网格的汇总统计图。

它显示了我们只做图标的总体思路,除了使用库中的任何现有功能(例如matplotlib将数据映射到图上)之外,我们还可以编写自己的函数来显示自定义信息。

结论

散点图矩阵是快速探索数据集中的分布和关系的强大工具。Seaborn提供了一个简单的默认方法,可以通过Pair Grid类来定制和扩展散点图矩阵。在一个数据分析项目中,价值的主要部分往往不在于浮华的机器学习,而在于直观的数据可视化。散点图举证为我们提供了全面的数据分析,是数据分析项目的一个很好的起点。

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

本文由阿里云云栖社区组织翻译。

文章原标题《visualizing-data-with-pair-plots-in-python》,

译者:虎说八道,审校:袁虎。

文章为简译,更为详细的内容,请查看原文。

python绘图矩阵散点图_Python实践:seaborn的散点图矩阵(Pairs Plots)可视化数据相关推荐

  1. python绘图 添加文字_Python | 将文字添加到绘图中

    python绘图 添加文字 Adding text to a plot is one of the most used features of matplotlib.pyplot and there ...

  2. python绘图课设_python课程设计笔记(三)turtle绘图库(海龟库)

    实例:绘制一条蟒蛇 #turtle:绘图库(海龟库) importturtle turtle.setup(650,350,200,200) turtle.penup() turtle.fd(-250) ...

  3. python绘图函数教程_Python绘图函数的完整集合,python,画图,大全

    很多时候,我们需要用python画图,这样就可以更加直观的看到数据的走势,而不是干巴巴的数字. 今天,我们就给大家整理了一下python画图的常用函数,由于篇幅限制.无法将这些函数的使用方法全部表现出 ...

  4. python zip函数转制_python 利用zip()函数进行矩阵转置

    声明:本文参考了博客文章https://www.cnblogs.com/anpengapple/p/5427367.html,对其中的代码进行了微调 本文介绍如何利用python的内置函数zip(), ...

  5. python 多线程并行 矩阵乘法_python实现简单的并行矩阵乘法

    python实现简单的并行矩阵乘法 python实现简单的并行矩阵乘法 本文采用的矩阵乘法方式是利用一个矩阵的行和二个矩阵的列相乘时不会互相影响.假设A(m,n)表示矩阵的m行,n列.那么C(m,m) ...

  6. python matplotlib画散点图_python matplotlib库绘制散点图例题解析

    假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温随时间(天)变化的某种规律? a = [11,17,16,11,12,11,12,6,6 ...

  7. python绘图函数返回_python – Matplotlib返回一个绘图对象

    我有一个包装pyplot.plt的函数,所以我可以使用经常使用的默认值快速创建图形: def plot_signal(time, signal, title='', xlab='', ylab='', ...

  8. python读取表格画散点图_python学习笔记-绘制散点图

    1.需求 读取excel的数据,绘制散点图,并保存图片. 2.所需要的包/模块 excel:xlrw 可视化:matplotlib 3.具体代码实现 #-*- coding:utf-8 -*- imp ...

  9. python怎么用散点图_Python利用matplotlib绘制散点图的新手教程

    前言 上篇文章介绍了使用matplotlib绘制折线图,参考:https://www.jb51.net/article/198991.htm,本篇文章继续介绍使用matplotlib绘制散点图. 一. ...

最新文章

  1. [NIO-1]缓冲区
  2. 测试Hibernate连接数据库的测试代码
  3. 美国汽车协会实测:行人检测系统都是渣渣,包括特斯拉
  4. 112.局部变量和全局变量在内存中是怎样存储的?113.WLAN无线传输协议
  5. Android表格布局(Table Layout)
  6. Web消息主体风格(Message Body Style)
  7. http缓存机制之304状态码
  8. 1.6编程基础之一维数组_04数组逆序重放
  9. OpenSelfSup: Open-MMLab自监督表征学习代码库
  10. 结对编程——paperOne基于java的四则运算 功能改进
  11. 【转】C#的内存管理:堆栈、托管堆与指针
  12. BZOJ 1901 Zju2112 Dynamic Rankings 题解
  13. 28款数据恢复软件对比测试
  14. Android开发如何进阶,薪资如何跟上年龄的脚步?,深度解读Netty
  15. excel单元格斜线_最实用的8个Excel操作技巧,1分钟学会!
  16. 如何使用传统图像处理方法进行大米的计数和长轴方向标记
  17. item_search按关键字搜索商品(shopee虾皮)
  18. java编程的英文_Java编程基础常见英语词汇总编
  19. Cg教程_可编程实时图形权威指南(扫描清晰版)+部分unity shader 知识
  20. python下载与安装(详细教程)

热门文章

  1. java实现多对多关系的方法_Hibernate一对多关联双向关联代码实现分享
  2. python安卓版开发环境搭建_React Native Android 开发环境搭建(Windows 版)
  3. cdh mysql sqoop 驱动_大数据技术之Sqoop学习——原理、安装、使用案例、常用命令...
  4. 长安渝北工厂机器人_长安工厂探秘!解密CS75 PLUS究竟是怎样造出来的
  5. 爱奇艺如何设置最小化显示在托盘
  6. ​GB28181心跳机制探讨和技术实现
  7. Android平台RTMP推送端实现外部数据对接推送和录像
  8. 跨平台屏幕/摄像头RTMP推流模块设计要点
  9. 浏览器与JavaScript(一)
  10. easyPOI基本用法详解