写点什么

Python 数据可视化的 10 种技能

  • 2019-02-13
  • 本文字数:2995 字

    阅读完需:约 10 分钟

Python数据可视化的10种技能

内容来自:极客时间专栏《数据分析实战45讲》


如果你想要用 Python 进行数据分析,就需要在项目初期开始进行探索性的数据分析,这样方便你对数据有一定的了解。其中最直观的就是采用数据可视化技术,这样,数据不仅一目了然,而且更容易被解读。同样在数据分析得到结果之后,我们还需要用到可视化技术,把最终的结果呈现出来。

可视化视图都有哪些?

按照数据之间的关系,我们可以把可视化视图划分为 4 类,它们分别是比较、联系、构成和分布。我来简单介绍下这四种关系的特点:


  • 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图;

  • 联系:查看两个或两个以上变量之间的关系,比如散点图;

  • 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图;

  • 分布:关注单个变量,或者多个变量的分布情况,比如直方图。


同样,按照变量的个数,我们可以把可视化视图划分为单变量分析和多变量分析。


  • 单变量分析指的是一次只关注一个变量。比如我们只关注“身高”这个变量,来看身高的取值分布,而暂时忽略其他变量。

  • 多变量分析可以让你在一张图上可以查看两个以上变量的关系。比如“身高”和“年龄”,你可以理解是同一个人的两个参数,这样在同一张图中可以看到每个人的“身高”和“年龄”的取值,从而分析出来这两个变量之间是否存在某种联系。


可视化的视图可以说是分门别类,多种多样,今天我主要介绍常用的 10 种视图,包括了散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布、成对关系。

1.散点图

散点图的英文叫做 scatter plot,它将两个变量的值显示在二维坐标中,非常适合展示两个变量之间的关系。当然,除了二维的散点图,我们还有三维的散点图。


我在上一讲中给你简单介绍了下 Matplotlib 这个工具,在 Matplotlib 中,我们经常会用到 pyplot 这个工具包,它包括了很多绘图函数,类似 Matlab 的绘图框架。在使用前你需要进行引用:



在工具包引用后,画散点图,需要使用 plt.scatter(x, y, marker=None)函数。x、y 是坐标,marker 代表了标记的符号。比如“x”、“>”或者“o”。选择不同的 marker,呈现出来的符号样式也会不同,你可以自己试一下。


下面三张图分别对应“x”“>”和“o”。



除了 Matplotlib 外,你也可以使用 Seaborn 进行散点图的绘制。在使用 Seaborn 前,也需要进行包引用:



在引用 seaborn 工具包之后,就可以使用 seaborn 工具包的函数了。如果想要做散点图,可以直接使用 sns.jointplot(x, y, data=None, kind=‘scatter’)函数。其中 x、y 是 data 中的下标。data 就是我们要传入的数据,一般是 DataFrame 类型。kind 这类我们取 scatter,代表散点的意思。当然 kind 还可以取其他值,这个我在后面的视图中会讲到,不同的 kind 代表不同的视图绘制方式。


好了,让我们来模拟下,假设我们的数据是随机的 1000 个点。



我们运行一下这个代码,就可以看到下面的视图(第一张图为 Matplotlib 绘制的,第二张图为 Seaborn 绘制的)。其实你能看到 Matplotlib 和 Seaborn 的视图呈现还是有差别的。Matplotlib 默认情况下呈现出来的是个长方形。而 Seaborn 呈现的是个正方形,而且不仅显示出了散点图,还给了这两个变量的分布情况。


Matplotlib 绘制:



Seaborn 绘制:



扩展阅读:


(小手)数据可视化:掌握数据领域的万金油技能

2.折线图

折线图可以用来表示数据随着时间变化的趋势。


在 Matplotlib 中,我们可以直接使用 plt.plot()函数,当然需要提前把数据按照 X 轴的大小进行排序,要不画出来的折线图就无法按照 X 轴递增的顺序展示。


在 Seaborn 中,我们使用 sns.lineplot (x, y, data=None)函数。其中 x、y 是 data 中的下标。data 就是我们要传入的数据,一般是 DataFrame 类型。


这里我们设置了 x、y 的数组。x 数组代表时间(年),y 数组我们随便设置几个取值。下面是详细的代码。



然后我们分别用 Matplotlib 和 Seaborn 进行画图,可以得到下面的图示。你可以看出这两个图示的结果是完全一样的,只是在 seaborn 中标记了 x 和 y 轴的含义。


3.直方图

直方图是比较常见的视图,它是把横坐标等分成了一定数量的小区间,这个小区间也叫作“箱子”,然后在每个“箱子”内用矩形条(bars)展示该箱子的箱子数(也就是 y 值),这样就完成了对数据集的直方图分布的可视化。


在 Matplotlib 中,我们使用 plt.hist(x, bins=10)函数,其中参数 x 是一维数组,bins 代表直方图中的箱子数量,默认是 10。


在 Seaborn 中,我们使用 sns.distplot(x, bins=10, kde=True)函数。其中参数 x 是一维数组,bins 代表直方图中的箱子数量,kde 代表显示核密度估计,默认是 True,我们也可以把 kde 设置为 False,不进行显示。核密度估计是通过核函数帮我们来估计概率密度的方法。


这是一段绘制直方图的代码。



我们创建一个随机的一维数组,然后分别用 Matplotlib 和 Seaborn 进行直方图的显示,结果如下,你可以看出,没有任何差别,其中最后一张图就是 kde 默认为 Ture 时的显示情况。


4.热力图

热力图,英文叫 heat map,是一种矩阵表示方法,其中矩阵中的元素值用颜色来代表,不同的颜色代表不同大小的值。通过颜色就能直观地知道某个位置上数值的大小。另外你也可以将这个位置上的颜色,与数据集中的其他位置颜色进行比较。


热力图是一种非常直观的多元变量分析方法。


我们一般使用 Seaborn 中的 sns.heatmap(data)函数,其中 data 代表需要绘制的热力图数据。


这里我们使用 Seaborn 中自带的数据集 flights,该数据集记录了 1949 年到 1960 年期间,每个月的航班乘客的数量。



通过 seaborn 的 heatmap 函数,我们可以观察到不同年份,不同月份的乘客数量变化情况,其中颜色越浅的代表乘客数量越多,如下图所示:


成对关系

如果想要探索数据集中的多个成对双变量的分布,可以直接采用 sns.pairplot()函数。它会同时展示出 DataFrame 中每对变量的关系,另外在对角线上,你能看到每个变量自身作为单变量的分布情况。它可以说是探索性分析中的常用函数,可以很快帮我们理解变量对之间的关系。


pairplot 函数的使用,就好像我们对 DataFrame 使用 describe()函数一样方便,是数据探索中的常用函数。


这里我们使用 Seaborn 中自带的 iris 数据集,这个数据集也叫鸢尾花数据集。鸢尾花可以分成 Setosa、Versicolour 和 Virginica 三个品种,在这个数据集中,针对每一个品种,都有 50 个数据,每个数据中包括了 4 个属性,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。通过这些数据,需要你来预测鸢尾花卉属于三个品种中的哪一种。



这里我们用 seaborn 中的 pairplot 函数来对数据集中的多个双变量的关系进行探索,如下图所示。从图上你能看出,一共有 sepal_length、sepal_width、petal_length 和 petal_width4 个变量,它们分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。


下面这张图相当于这 4 个变量两两之间的关系。比如矩阵中的第一张图代表的就是花萼长度自身的分布图,它右侧的这张图代表的是花萼长度与花萼宽度这两个变量之间的关系。



关于本次 Python 可视化的学习,我希望你能掌握:


  • 视图的分类,以及可以从哪些维度对它们进行分类;

  • 十种常见视图的概念,以及如何在 Python 中进行使用,都需要用到哪些函数;

  • 需要自己动手跑一遍案例中的代码,体验下 Python 数据可视化的过程。


戳我查看>>>「另 5 种可视化技能」


戳我测试>>>你的数据分析能力:


三道数据分析测试题:基础+进阶+场景


2019-02-13 13:585403

评论

发布
暂无评论
发现更多内容

喜马拉雅亿级用户量的离线消息推送系统架构设计实践

JackJiang

消息推送 即时通讯 IM push

我用Vanilla JS重写了一遍项目,结果……

Faye

大前端 js 原生

直击技术最前沿 | Amazon S3增加新的存档访问层

亚马逊云科技 (Amazon Web Services)

阿里P7大牛手把手教你!卧薪尝胆70天内推入职阿里

欢喜学安卓

android 程序员 面试 移动开发

所有前端都要看的2D游戏化互动入门基础知识

蚂蚁集团移动开发平台 mPaaS

大前端

hdfs 的集群间拷贝、归档、回收站等功能剖析

大数据技术指南

hdfs 7月日更

阿里新出炉爆款的顶配版Spring Security笔记,肝完变秃也变强

Java spring 编程 架构

你见过最具有代表性的面试是什么样的?大三4面上岸腾讯(Java岗)

Java架构师迁哥

闭关三月!啃透美团保姆级分布式进阶技术手册,终入美团定L8

Java 面试

经过一年的不懈努力社招进了阿里,我总结了50个Java面试必考题

Java 程序员 架构 面试

点通生活系统软件开发搭建

铂金10:能工巧匠-ThreadLocal如何为线程打造私有数据空间

MetaThoughts

Java 后端 多线程 并发

高并发应对策略系列文章阶段汇总,提供离线文档下载

Coder的技术之路

程序员的自我修养-用科学的方法提高交付质量

刘绍

程序员 软件工程 软件质量 TDD 单元测试

理解Linux 终端、终端模拟器和伪终端

mazhen

Linux Shell SSH Linux Kenel

Mtail导致Nginx报警延迟

BUG侦探

运维 监控 日志

阿里P7亲自讲解!Android大厂面试真题解析大全

欢喜学安卓

android 程序员 面试 移动开发

从零开始学习3D可视化之摄像机投影方式

ThingJS数字孪生引擎

大前端 可视化 3D 数字孪生

CodeDay 北京站报名倒计时

蚂蚁集团移动开发平台 mPaaS

移动开发

Eureka可用性解读

赵镇

Eureka

FIL币最新价格怎么样?FIL币最新消息是什么?

发布60分钟!霸榜Github的阿里面试参考指南,啃透涨薪10k

Java架构师迁哥

CryptoPlace挖矿APP系统开发简介

亚马逊云科技和 Verizon 利用专有 MEC 解决方案扩大 5G 合作

亚马逊云科技 (Amazon Web Services)

架构实战营模块8作业

eoeoeo

架构实战营

工商银行:应用多k8s集群管理及容灾实践

华为云开发者联盟

容器 多云 工商银行 k8s集群 Karmada

全美第四大无线运营商 DISH 和亚马逊云科技开展战略合作

亚马逊云科技 (Amazon Web Services)

阿里P9看了都说牛B!阿里巴巴史上最牛的分布式核心原理深度解析全彩手册

Java架构追梦

Java 阿里巴巴 架构 面试 分布式核心原理解析

架构实战营-模块八-作业

大可

夏令营|第五届埃文网络安全技能训练营火热报名中

郑州埃文科技

一文读懂大数据实时计算

五分钟学大数据

实时计算 7月日更

Python数据可视化的10种技能_数据库_陈旸_InfoQ精选文章