最强 Python 数据可视化库,没有之一!

今天给大家分享一篇可视化干货,介绍的是功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。

我之前一直守着 matplotlib 用的原因,就是为了我学会它复杂的语法,已经“沉没"在里面的几百个小时的时间成本。这也导致我花费了不知多少个深夜,在 StackOverflow 上搜索如何“格式化日期”或“增加第二个Y轴”。

但我们现在有一个更好的选择了 —— 比如易于使用、文档健全、功能强大的开源 Python 绘图库 Plotly。今天就带你深入体验下,了解它如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。

本文中所有代码都已经在 Github 上开源,所有的图表都是可交互的,请使用Jupyter notebook查看 。

(Github 源代码地址:https://github.com/WillKoehrsen/Data-Analysis/blob/master/plotly/Plotly%20Whirlwind%20Introduction.ipynb)

aeed025a3d8185c1bfdc4cbeec93ab2f.png

(plotly 绘制的范例图表。图片来源:plot.ly)

Plotly 概述

plotly 的 Python 软件包是一个开源的代码库,它基于 plot.js,而后者基于 d3.js。我们实际使用的则是一个对 plotly 进行封装的库,名叫 cufflinks,它能让你更方便地使用 plotly 和 Pandas 数据表协同工作。

*注:Plotly 本身是一个拥有多个不同产品和开源工具集的可视化技术公司。Plotly 的 Python 库是可以免费使用的,在离线模式可以创建数量不限的图表,在线模式因为用到了 Plotly 的共享服务,只能生成并分享 25 张图表。

本文中的所有可视化图表都是在 Jupyter Notebook 中使用离线模式的 plotly + cufflinks 库完成的。在使用 pip install cufflinks plotly 完成安装后,你可以用下面这样的代码在 Jupyter 里完成导入:

4cf7e62c241ec4329c81268cc17f84a9.png单变量分布:柱状图和箱形图

单变量分析图往往是开始数据分析时的标准做法,而柱状图基本上算是单变量分布分析时必备的图表之一(虽然它还有一些不足)。

就拿博客文章点赞总数为例(原始数据见 Github:https://github.com/WillKoehrsen/Data-Analysis/tree/master/medium ),做一个简单的交互式柱状图:

a5779024c7272d4e17d9d8016f7650fc.png

(代码中的 df 是标准的 Pandas dataframe 对象)

24a7b630b7601b70a8725970af658936.gif

(使用 plotly+cufflinks 创建的交互式柱状图)

对于已经习惯 matplotlib 的同学,你们只需要多打一个字母(把 .plot 改成 .iplot ),就能获得看起来更加美观的交互式图表!点击图片上的元素就能显示出详细信息、随意缩放,还带有(我们接下来会提到的)高亮筛选某些部分等超棒功能。

如果你想绘制堆叠柱状图,也只需要这样:

010a6e463e02b2869abfe8ad41e12031.png

ebeee3dd0cce8c39cd4ee1ecda641eb9.png

对 pandas 数据表进行简单的处理,并生成条形图:

7c756c2091eba2e0c07a956363349ba4.png

9b3b5d080acd155a6757e8e2066a60dd.png

就像上面展示的那样,我们可以将 plotly + cufflinks 和 pandas 的能力整合在一起。比如,我们可以先用 .pivot() 进行数据透视表分析,然后再生成条形图。

比如统计不同发表渠道中,每篇文章带来的新增粉丝数:

3b5dc87428002207cedccce693394f41.png

a2e240f726d785d474fc1b4f4a191771.gif

交互式图表带来的好处是,我们可以随意探索数据、拆分子项进行分析。箱型图能提供大量的信息,但如果你看不到具体数值,你很可能会错过其中的一大部分!

散点图

散点图是大多数分析的核心内容,它能让我们看出一个变量随着时间推移的变化情况,或是两个(或多个)变量之间的关系变化情况。

时间序列分析

在现实世界中,相当部分的数据都带有时间元素。幸运的是,plotly + cufflinks 天生就带有支持时间序列可视化分析的功能。

以我在“Towards Data Science”网站上发表的文章数据为例,让我们以发布时间为索引构建一个数据集,看看文章热度的变化情况:

7d87a870f62dbadbe504d070935b3627.png

d0518ad64d9302782202289f3f2cac78.gif

在上图中,我们用一行代码完成了几件事情:

  • 自动生成美观的时间序列 X 轴

  • 增加第二条 Y 轴,因为两个变量的范围并不一致

  • 把文章标题放在鼠标悬停时显示的标签中

为了显示更多数据,我们可以方便地添加文本注释:

c1cde4590a3189ecfcf9487a82dfbcf6.png

f7c5076748fc8c6db31095fd3232a13d.png

(带有文本注释的散点图)

下面的代码中,我们将一个双变量散点图按第三个分类变量进行着色:

9aa782e238402207c04688a7c73bf100.png

3023e401300aeddbcb7cb8f017d87e84.png

接下来我们要玩点复杂的:对数坐标轴。我们通过指定 plotly 的布局(layout)参数来实现这一点(关于不同的布局,请参考官方文档 https://plot.ly/python/reference/ ),同时我们把点的尺寸(size参数)和一个数值变量 read_ratio (阅读比例)绑定,数字越大,泡泡的尺寸也越大。

279f0367e884114f2f4030194a841cbb.png

5d66923ab1249bbf4a4e404445413af1.png

如果想要更复杂一些(详见 Github 的源代码),我们甚至可以在一张图里塞进 4 个变量!(然而并不推荐你们真的这么搞)

fa77a708b7091b1b68aab998b7290dd1.png

和前面一样,我们可以将 pandas 和 plotly+cufflinks 结合起来,实现许多有用的图表:

17c2a5ffadca5d504797d6965f1ddaff.png

53ff8b0d61344bd7b362b914edd92892.png

建议你查看官方文档,或者源代码,里面有更多的范例和函数实例。只需要简单的一两行代码,就可以为你的图表加上文字注释,辅助线,最佳拟合线等有用的元素,并且保持原有的各种交互式功能。

高级绘图功能

接下来,我们要详细介绍几种特殊的图表,平时你可能并不会很经常用到它们,但我保证只要你用好了它们,一定能让人刮目相看。我们要用到 plotly 的 figure_factory 模块,只需要一行代码,就能生成超棒的图表!

散点图矩阵

假如我们要探索许多不同变量之间的关系,散点图矩阵(也被称为SPLOM)就是个很棒的选择:

edf26bb48eda97a469109e5d97137d14.png

ee85c1d89b238b2ef5b96c5556a296a0.jpeg

即使是这样复杂的图形,也是完全可交互的,让我们能更详尽地对数据进行探索。

关系热图

为了体现多个数值变量间的关系,我们可以计算它们的相关性,然后用带标注热度图的形式进行可视化:

ad5dc2052e8c50c271c0a936c835fd39.png

9656df1676fbec6667dfa840d3d47df0.jpeg

自定义主题

除了层出不穷的各种图表外,Cufflinks 还提供了许多不同的着色主题,方便你轻松切换各种不同的图表风格。下面两张图分别是“太空”主题和“ggplot”主题:

f2b2240e578d1f62089fa092d11e2c06.png

d36f54e2ea8aa1f30b860ef45647dd69.png

此外,还有 3D 图表(曲面和泡泡):

922f3dd69b93e1fcddca6fa6711ffe6e.png

fcd49e4ee5cfb731786b6833d580f198.png

对有兴趣研究的用户来说,做张饼图也不是什么难事:

2a89728f2ea573767e6dac717845e943.png


在 Plotly 图表工坊(Plotly Chart Studio)里编辑

当你在 Jupyter Notebook 里生成了这些图表之后,你将会发现图表的右下角出现了一个小小的链接,写着“Export to plot.ly(发布到 plot.ly)”。如果你点击这个链接,你将会跳转到一个“图表工坊”(https://plot.ly/create/)。

在这里,你可以在最终展示之前进一步修改和润色你的图表。可以添加标注,选择某些元素的颜色,把一切都整理清楚,生成一个超棒的图表。之后,你还可以将它发布到网络上,生成一个供其他人查阅的链接。

下面两张图是在图表工坊里制作的:

8f95e9362aa30aa10412d0feac2a030a.png

52c2ec3eaf670b08e562880bd7a1eedd.png

讲了这么多,看都看累了吧?然而我们还并没有穷尽这个库的所有功能。限于篇幅,有些更棒的图表和范例,只好请大家访问 plotly 和 cufflinks 的官方文档去一一查看咯。

3908d83c6cd4c6d30ab10010cce8b319.jpeg

(Plotly 交互式地图,显示了美国国内的风力发电场数据。来源:plot.ly)

最后 ……

关于沉没成本谬误,最糟糕的一点在于,人们往往只能在放弃之前的努力时,才能意识到自己浪费了多少时间。

在选择一款绘图库的时候,你最需要的几个功能有:

  • 快速探索数据所需的一行代码图表

  • 拆分/研究数据所需的交互式元素

  • 当需要时可以深入细节信息的选项

  • 最终展示前能轻易进行定制

从现在看来,要用 Python 语言实现以上功能的最佳选择非 plotly 莫属。它让我们快速生成可视化图表,交互功能使我们更好地理解信息。

我承认,绘图绝对是数据科学工作中最让人享受的部分,而 plotly 能让你更加愉悦地完成这些任务。

de35c34246eac0861417a8668b7991ca.png

(用一张图表显示一下用 Python 绘图的愉悦程度随着时间变化。来源 towardsdatascience.com)

2021 年是时候升级你的 Python 绘图库了,让自己在数据科学和可视化方面变得更快、更强、更美吧!

NO.1

往期推荐

Historical articles

用Python自动化操作Excel制作报表,真的是太方便啦!!!

Python预处理时间序列数据的方法汇总

【Python自动化办公】分享几个好用到爆的模块,建议收藏!

用Python制作可视化GUI界面,一键实现证件照背景颜色的替换

分享、收藏、点赞、在看安排一下?

fbb92e11429be76538b8b49da372bb70.gif

86bc3dad039f37b026e8f565982eb3c3.gif

ed7be25d0bb0332ea9271990b72e8f58.gif

cf909382c5838740ebbfab1c067f462a.gif

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值