被“Python之父”称为最强外挂 这个Python库没人敢说不好
今天就带你深入体验易于使用、文档健全、功能强大的开源 Python 绘图库 Plotly,教你如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。
“沉没成本谬误”是人们常犯的几种认知偏差之一:由于在某件事上已经投入了(“沉没”)太多的成本,即使这件事已经注定要失败,人们倾向于继续投入更多的时间和金钱。
比如,在不好的职位上待了比正常更长的时间,在一个明显不可能的项目上埋头苦干,以及(你猜的没错)继续用一个陈旧、枯燥的绘图库——matplotlib——即使已经有了更高效、更美观、可互动性更好的替代品了。
我之前一直守着 matplotlib 用的原因,就是为了我学会它复杂的语法,已经“沉没"在里面的几百个小时的时间成本。这也导致我花费了不知多少个深夜,在 StackOverflow 上搜索如何“格式化日期”或“增加第二个Y轴”。
但我们现在有一个更好的选择了 —— 比如易于使用、文档健全、功能强大的开源 Python 绘图库 Plotly。今天就带你深入体验下,了解它如何用超简单的(甚至只要一行!)代码,绘制出更棒的图表。
* 本文中所有代码都已经在 Github 上开源,所有的图表都是可交互的,请使用NBViewer查看 。
(Github 源代码地址:https://github.com/WillKoehrsen/Data-Analysis/blob/master/plotly/Plotly%20Whirlwind%20Introduction.ipynb)
(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 里完成导入:
单变量分布:柱状图和箱形图
单变量分析图往往是开始数据分析时的标准做法,而柱状图基本上算是单变量分布分析时必备的图表之一(虽然它还有一些不足)。
就拿博客文章点赞总数为例(原始数据见 Github:https://github.com/WillKoehrsen/Data-Analysis/tree/master/medium ),做一个简单的交互式柱状图:
(代码中的 df 是标准的 Pandas dataframe 对象)
(使用 plotly+cufflinks 创建的交互式柱状图)
对于已经习惯 matplotlib 的同学,你们只需要多打一个字母(把 .plot改成 .iplot ),就能获得看起来更加美观的交互式图表!点击图片上的元素就能显示出详细信息、随意缩放,还带有(我们接下来会提到的)高亮筛选某些部分等超棒功能。
如果你想绘制堆叠柱状图,也只需要这样:
对 pandas 数据表进行简单的处理,并生成条形图:
就像上面展示的那样,我们可以将 plotly + cufflinks 和 pandas 的能力整合在一起。比如,我们可以先用 .pivot() 进行数据透视表分析,然后再生成条形图。
比如统计不同发表渠道中,每篇文章带来的新增粉丝数:
交互式图表带来的好处是,我们可以随意探索数据、拆分子项进行分析。箱型图能提供大量的信息,但如果你看不到具体数值,你很可能会错过其中的一大部分!
散点图
散点图是大多数分析的核心内容,它能让我们看出一个变量随着时间推移的变化情况,或是两个(或多个)变量之间的关系变化情况。
时间序列分析
在现实世界中,相当部分的数据都带有时间元素。幸运的是,plotly + cufflinks 天生就带有支持时间序列可视化分析的功能。
以我在“Towards Data Science”网站上发表的文章数据为例,让我们以发布时间为索引构建一个数据集,看看文章热度的变化情况:
在上图中,我们用一行代码完成了几件事情:
自动生成美观的时间序列 X 轴
增加第二条 Y 轴,因为两个变量的范围并不一致
把文章标题放在鼠标悬停时显示的标签中
为了显示更多数据,我们可以方便地添加文本注释:
(带有文本注释的散点图)
下面的代码中,我们将一个双变量散点图按第三个分类变量进行着色:
接下来我们要玩点复杂的:对数坐标轴。我们通过指定 plotly 的布局(layout)参数来实现这一点(关于不同的布局,请参考官方文档 https://plot.ly/python/reference/ ),同时我们把点的尺寸(size参数)和一个数值变量 read_ratio (阅读比例)绑定,数字越大,泡泡的尺寸也越大。
如果想要更复杂一些(详见 Github 的源代码),我们甚至可以在一张图里塞进 4 个变量!(然而并不推荐你们真的这么搞)
和前面一样,我们可以将 pandas 和 plotly+cufflinks 结合起来,实现许多有用的图表:
建议你查看官方文档,或者源代码,里面有更多的范例和函数实例。只需要简单的一两行代码,就可以为你的图表加上文字注释,辅助线,最佳拟合线等有用的元素,并且保持原有的各种交互式功能。
高级绘图功能
接下来,我们要详细介绍几种特殊的图表,平时你可能并不会很经常用到它们,但我保证只要你用好了它们,一定能让人刮目相看。我们要用到 plotly 的 figure_factory 模块,只需要一行代码,就能生成超棒的图表!
散点图矩阵
假如我们要探索许多不同变量之间的关系,散点图矩阵(也被称为SPLOM)就是个很棒的选择:
即使是这样复杂的图形,也是完全可交互的,让我们能更详尽地对数据进行探索。
关系热图
为了体现多个数值变量间的关系,我们可以计算它们的相关性,然后用带标注热度图的形式进行可视化:
自定义主题
除了层出不穷的各种图表外,Cufflinks 还提供了许多不同的着色主题,方便你轻松切换各种不同的图表风格。下面两张图分别是“太空”主题和“ggplot”主题:
此外,还有 3D 图表(曲面和泡泡):
对有兴趣研究的用户来说,做张饼图也不是什么难事:
在 Plotly 图表工坊(Plotly Chart Studio)里编辑
当你在 Jupyter Notebook 里生成了这些图表之后,你将会发现图表的右下角出现了一个小小的链接,写着“Export to plot.ly(发布到 plot.ly)”。如果你点击这个链接,你将会跳转到一个“图表工坊”(https://plot.ly/create/)。
在这里,你可以在最终展示之前进一步修改和润色你的图表。可以添加标注,选择某些元素的颜色,把一切都整理清楚,生成一个超棒的图表。之后,你还可以将它发布到网络上,生成一个供其他人查阅的链接。
下面两张图是在图表工坊里制作的:
讲了这么多,看都看累了吧?然而我们还并没有穷尽这个库的所有功能。限于篇幅,有些更棒的图表和范例,只好请大家访问 plotly 和 cufflinks 的官方文档去一一查看咯。
(Plotly 交互式地图,显示了美国国内的风力发电场数据。来源:plot.ly)
最后 ……
关于沉没成本谬误,最糟糕的一点在于,人们往往只能在放弃之前的努力时,才能意识到自己浪费了多少时间。
在选择一款绘图库的时候,你最需要的几个功能有:
快速探索数据所需的一行代码图表
拆分/研究数据所需的交互式元素
当需要时可以深入细节信息的选项
最终展示前能轻易进行定制
从现在看来,要用 Python 语言实现以上功能的最佳选择非 plotly 莫属。它让我们快速生成可视化图表,交互功能使我们更好地理解信息。
我承认,绘图绝对是数据科学工作中最让人享受的部分,而 plotly 能让你更加愉悦地完成这些任务。
(用一张图表显示一下用 Python 绘图的愉悦程度随着时间变化。来源 towardsdatascience.com)
2021 年是时候升级你的 Python 绘图库了,让自己在数据科学和可视化方面变得更快、更强、更美吧!
彩蛋
最后,想学习Python的小伙伴们:
这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。送给正在学习python的小伙伴!这里是python学习者聚集地,欢迎初学和进阶中的小伙伴!
私信我 666 分享给你们
被“Python之父”称为最强外挂 这个Python库没人敢说不好相关推荐
- Python 之父:因打发时间创造 Python,躬耕多年退位
点击上方"Python大本营",选择"置顶公众号" Python大本营 IT人的职业提升平台 作者 | 年素清 出品 | 程序人生(ID:coder_life) ...
- Python 之父:别等了,Python 4.0 可能不会来了
来自:机器之心 不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van Rossum 2020 年 1 月 1 日,Python 官方结束了对 Python ...
- Python之父(龟叔):Python 4.0可能不会来了
不要对 Python 4.0 抱有希望,可能不会有的.--Python 之父 Guido van Rossum 2020 年 1 月 1 日,Python 官方结束了对 Python 2 的维护,意味 ...
- 中国python之父是谁-别了!Python之父!
原标题:别了!Python之父! 前段时间,Python之父退出了Python,这个创造出了世界上最令人欢迎的编程语言之一Python(胶水语言)的技术界大牛终于不用再为运营的事情苦恼了! 有人说:耿 ...
- 鸿蒙起源轩辕厉害吗,风云雄霸天下中最强的武器“轩辕剑”为什么没人拿?
风云雄霸天下这部电视剧中出现了很多非常强大的神兵利器,像绝世好剑.雪饮狂刀.火麟剑.无双剑.英雄剑等等.那么接下来要说的这把剑应该是剧中隐藏的一把绝世神兵,这把神兵的名字叫做"轩辕剑&quo ...
- python分析比赛_最强观战指南 | Python分析热门夺冠球队(附源代码)
2018年,火热的世界杯即将拉开序幕.在比赛开始之前,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队. 通过数据分析,可以发现很多有趣的结果,比如: ...
- Python 之父谈放弃 Python:我对核心成员们失望至极!
Python 之父讲述退位原因,以及 Python 的未来将何去何从. 在 Python 社区,Python 的发明者 Guido Van Rossum 被称为 "仁慈的终生独裁者" ...
- python之父叫啥-对话Python之父:Python下一步做什么?
Python部落组织翻译,禁止转载,欢迎转发 InfoWorld的编辑对话Python之父,讨论Python的性能.生态系统和在移动开发和浏览器方面的前景. 问:有没有什么正在做的计划,来促进Pyth ...
- python之父叫什么-对话Python之父:Python下一步做什么?
Python部落组织翻译,禁止转载,欢迎转发 InfoWorld的编辑对话Python之父,讨论Python的性能.生态系统和在移动开发和浏览器方面的前景. 问:有没有什么正在做的计划,来促进Pyth ...
最新文章
- Swift版音乐播放器(简化版),swift音乐播放器
- mockito_Mockito和Hamcrest的试驾制造商
- mysql用代码建表基础语法
- java递归mysql生成树_JavaScript图形实例:递归生成树
- dbcc收缩数据库_使用DBCC SHRINKFILE收缩数据库
- 2019 Web 前端热点笔试面试题总结(转载)
- FreeMarker笔记 第二章 数值和类型
- 凹凸实验室:支撑数千万消费者的小程序开发实践
- 指令级并行——超标量Superscalar与超长指令字VLIW架构
- html代码在线获取,在线客服系统html代码的获取与生成方式 - 快商通
- Linux系统升级及内核版本升级
- “漫威月”来临,蜘蛛侠成首个 NFT 超级英雄 IP
- 计算机C语言二级操作题之编程题
- 检测xposed框架实现
- 一位沪漂 11 年的程序员老兵,回老家了!
- 安踏正式宣布王一博成为其全球首席代言人
- python split
- 华为LiteOS操作系统基础知识入门与内核移植
- 安装saltstack遇到缺包问题!自己遇到的错!若有雷同请海涵
- mmap函数使用说明以及示例