写点什么

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:585151

评论

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

RocksDB 7 终于解决了 Compaction 时性能下降问题

Kvrocks

redis RocksDB kvrocks

JavaScript的垃圾回收机制

肥晨

js 垃圾回收机制 11月月更

GoFrame的gmap相比Go原生的map,天然支持排序和有序遍历!?

王中阳Go

Go golang 高效工作 学习方法 11月月更

知象光电完成过亿元C轮融资,加速发力全球市场

硬科技星球

uniapp多端分享(app,小程序,公众号)

格斗家不爱在外太空沉思

vue.js uniapp 11月月更

前端面经

肥晨

前端面试题 11月月更 前端面筋 超全面试题

Paddle模型性能分析工具Profiler:定位瓶颈点、优化程序、提升性能

汀丶人工智能

自然语言处理 nlp 性能分析 11月月更

从柯里化讲起,一网打尽 JavaScript 重要的高阶函数

掘金安东尼

前端 11月月更

web--文件上传

我是一个茶壶

WEB安全 文件上传 11月月更

计算机网络:组帧

timerring

计算机网络 11月月更

不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?

汪子熙

JavaScript 前端开发 Fiori SAP UI5 11月月更

河北首家城商行传统核心业务国产化,TDSQL突破三“最”为秦皇岛银行保驾护航

腾讯云数据库

数据库 分布式 tdsql 客户案例 腾讯云数据库

DevData Talks | 让效能度量产生真正的价值,要避开多少“坑”?

思码逸研发效能

研发效能 研发管理工具 企业研发管理

为什么要用CSS精灵图

源字节1号

软件开发 前端开发 后端开发 小程序开发

SOFARegistry | 大规模集群优化实践

SOFAStack

开源 SOFA SOFARegistry'

写给关系数据库开发者的 TDengine 入门指南

TDengine

数据库 tdengine 时序数据库

HTTP和HTTPS是什么 二者区别是什么

肥晨

11月月更 http和https http工作原理

装了我这 10 个 IDEA 神级插件后,同事也开始情不自禁的嘚瑟了

沉默王二

IntelliJ IDEA

ModelBox姿态匹配:抖抖手动动脚勤做深呼吸

华为云开发者联盟

人工智能 华为云 企业号十月 PK 榜

HummerRisk V0.5:新版云合规报告、资源风险联动、拓扑展示等内容

HummerCloud

云安全 云原生安全 11月月更

2022世界互联网大会 | VoneCredit为中小企业纾困解忧

旺链科技

区块链 产业区块链 世界互联网大会 企业号十月PK榜

uniapp简单入门

格斗家不爱在外太空沉思

vue.js uniapp 11月月更

京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

京东科技开发者

运维 k8s IoT etcd K8s 多集群管理

云数据库时代,DBA将走向何方?

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

Serverless Developer Meetup 杭州站精彩回顾!【附赠PPT】

阿里巴巴云原生

阿里云 Serverless 云原生

软件测试面试真题 | 面试时被问到知识盲区,该怎么办呢?

测试人

软件测试 面试题 测试开发

快速创建软件安装包-ClickOnce

沙漠尽头的狼

微信小程序—制作一个简单的跑步小程序

格斗家不爱在外太空沉思

JavaScript 微信小程序 11月月更

【C语言】break 关键字

謓泽

11月月更

dns-client占用cpu过高的问题解决方案

我是一个茶壶

win10 DNS 11月月更

3层结构+7大特点,带你认识华为云IoTEdge

华为云开发者联盟

云计算 物联网 华为云 企业号十月 PK 榜

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