写点什么

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

评论

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

哪些前端学习方法对小白比较有用?

小谷哥

5 步!用阿里云 Serverless 搭建高质量的图片压缩工具

阿里巴巴云原生

阿里云 Serverless 云原生

「推荐收藏」提高组件库Level必做好这六件事

GFE

前端 组件库

Docker安装minio(CentOS7)

蜗牛也是牛

直播预告|全闪文件存储在 AI 大数据领域的前沿应用

焱融科技

云计算 分布式系统 高性能 文件存储 全闪存储

web前端培训上海学习好吗

小谷哥

豆瓣评分9.8!阿里内部的分布式架构手册让多少人突破了瓶颈?

程序知音

Java 分布式 java架构 java架构师 后端技术

数据挖掘、机器学习、深度学习的区别

九章云极DataCanvas

数据挖掘 机器学习 深度学习

微博评论高可用高性能计算架构设计

Jack

架构实战训练营9期

web前端培训学习需要注意什么

小谷哥

pytorch实现空洞卷积+残差网络实验(torch实现

Studying_swz

深度学习 11月月更

量化交易炒币机器人开发合约策略

薇電13242772558

量化策略

面向智慧城市的GIS框架

tjn

GIS 可视化 11月月更

5 分钟教你搭建「视频动作分类」系统

Zilliz

人工智能 计算机视觉 Towhee 视频动作分类

Milvus 编译环境演进

Zilliz

c++ Python Milvus cmake 编译环境

java学习后该怎么培养自主学习能力

小谷哥

Go语言—基本输入输出包的使用

良猿

Go golang 后端 11月月更

大数据培训学习后,就业不好就业

小谷哥

专为实时而生 — GreptimeDB 现已在 GitHub 正式开源

Greptime 格睿科技

开源 分布式 云原生 时序数据库 存算分离

自助客户服务页面|从To B产品流量获取到客户服务体验上升

Baklib

系统运维利器,百万服务器运维实战总结!一文了解最新版SysAK|龙蜥技术

OpenAnolis小助手

Linux 开源 运维 龙蜥社区 SysAK

惊艳华为PocketS发布会! 杰美特旗下高端品牌决色推出首款“月光宝壳”

科技热闻

极客时间运维进阶训练营第四周作业

好吃不贵

如何在大促中做好系统高可用

阿里巴巴云原生

阿里云 微服务 高可用 云原生网关

带你全面了解Gateway

好程序员IT教育

Spring Cloud Gateway SpringCloud Gateway

OpenI启智社区2022年度优秀项目及开发者申报通知

OpenI启智社区

开源社区 优秀项目 优秀开发者 OpenI启智社区

JAVA concurrency -- AQS 源码详解

骑牛上青山

Java 源码

鼎医信息加入PolarDB开源数据库社区

阿里云数据库开源

阿里云 polarDB PolarDB-X 阿里云数据库 PolarDB for PostgreSQL

搭建企业镜像仓库~Harbor

蜗牛也是牛

STL迭代器失效问题

Maybe_fl

阿里内部高并发核心编程笔记:多线程、锁、JMM、JUC、设计模式

程序知音

高并发 java架构 后端技术 高并发架构

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