做者 | Will Koehrsenjavascript
如何仅使用一行代码制做漂亮、互动性强的图表?java
程序员的沉没成本论python
沉没成本谬论是人类众多的认知偏见之一。 它指的是咱们倾向于持续将时间和资源投入到失去的缘由中,由于咱们已经花了不少时间去追求无用的事情。沉没成本谬论适用于当咱们花了不少成本也不会起做用的项目或工做。好比,当存在效率更高,互动性更强的选择时,咱们依然继续使用Matplotlib。git
在过去的几个月里,我意识到我使用Matplotlib的惟一缘由是我花费了数百小时去学习它复杂的语法。这种复杂性让做者在StackOverflow上遭受了数小时的挫折去弄清楚如何格式化日期或添加第二个y轴。幸运的是,在探索了一些选项后,一个在易用性,文档和功能方面显著的赢家是Plotly库。程序员
在本文中,咱们将直接上手使用Plotly,学习如何在更短的时间内制做出更好的图表。github
本文的全部代码均可以在GitHub上找到(https://github.com/WillKoehrsen/Data-Analysis)。 图表都是交互式的,能够在NBViewer(https://w.url.cn/s/ALOvpfv)上查看。工具
Plotly简介布局
Plotly Python包(https://plot.ly/python/)是一个基于plotly.js(https://plot.ly/javascript/)构建的开源库,然后者又创建在d3.js(https://d3js.org/)上。咱们将用一个名为cufflinks的封装器来使用Pandas数据。所以,咱们的整个堆栈是cufflinks> plotly> plotly.js> d3.js,这意味着咱们能够经过d3的交互式图形功能去得到Python编码的效率。学习
(Plotly自己就是一家拥有多种产品和开源工具的图形公司。其Python版本的库能够无偿使用,咱们能够在离线模式下建立无限的图表,在线模式下最多能够建立25个图表,用于共享。)编码
本文中的全部工做都是使用Jupyter notebook完成的,其中的plotyl+cuffilinks能够在离线模式下运行。 在使用pip命令安装了plotly和cufflinks以后,在Jupyter中运行如下命令:
单变量分布:直方图和箱线图
单变量—单因素—图是开始分析数据的标准方法,直方图是绘制分布图的首选图(虽然它有一些问题-https://w.url.cn/s/AkZpZF1)。在这里,使用做者Medium文章的统计信息(你能够看到如何获取你的统计数据,或者你也可使用个人-https://w.url.cn/s/AQRA3Kp),制做了关于文章点赞数量的交互式直方图(df是标准的Pandas数据帧):
对于那些习惯使用Matplotlib的人来讲,咱们所要作的就是添加一个字母(使用iplot而不是plot),咱们就能够获得一个更好看的交互式图表! 咱们能够点击数据来获取更多细节,放大图的各个部分,咱们稍后会看到,能够选择要高亮的内容。
若是咱们想要绘制叠加的直方图,使用以下代码,一样很是简单:
经过使用一点点Pandas相关的操做,咱们能够作一个条形图:
正如咱们所看到的,咱们能够将Pandas与plotly+cufflinks结合起来。可对按出版物每一个故事的粉丝,绘制箱线图:
交互性的好处是咱们能够根据须要探索和分组数据。 在箱线图中有不少信息,若是没有观察数字的能力,咱们会错过大部分的信息!
散点图
散点图是大多数分析方法的核心。它容许咱们看到变量随时间演变的过程或两个(或更多)变量之间的关系。
时间序列
至关一部分的真实数据会有一个时间维度。 幸运的是,plotly+cufflinks的设计考虑了时间序列的可视化。 接下来使用下面的代码制做一个关于做者TDS文章的数据框,看看趋势是如何变化。
在这里,咱们仅用一行代码作了不少不一样的事情:
自动获取时间序列x轴
添加辅助y轴,由于咱们的变量有不一样的范围
将文章标题添加为悬停信息
咱们还能够很是轻松地添加文本注释:
对于使用第三个变量来上色的双变量散点图,咱们可使用以下命令:
咱们可使用log轴(指定为绘图布局)(参见Plotly文档-中的布局细节-https://plot.ly/python/reference/)以及数值变量来调整气泡,让图表更复杂一点:
更进一步的工做(详见notebook-https://w.url.cn/s/AS8rPTo
),咱们甚至能够在一个图表上放置四个变量(不建议-https://w.url.cn/s/ALRC02Y)!
和以前同样,咱们能够将pandas与plotly + cufflinks结合起来,用于得到有用的图表。
有关添加功能的更多示例,请参阅notebook或文档。 咱们可使用单行代码在文本中添加文本注释,参考线和最佳拟合线,而且仍然能够进行全部的交互。
进阶图表
如今咱们将制做一些你可能不会常用的图表,它可能会使人印象深入。咱们将使用plotly figure_factory(https://w.url.cn/s/ACGcXLa
),也仅使用一行代码来制做这些使人难以置信的图。
散点矩阵
当咱们想要探索许多变量之间的关系时,散点矩阵(也称为splom)是一个很好的选择:
这个图也是能够彻底人机交互的,用于探索数据。
相关性热力图
为了可视化数值变量之间的相关性,咱们会计算相关性,而后制做带注释的热力图:
还有不少不一样类型的图。cufflinks还有几个主题,咱们能够用来制做彻底不一样的风格。例如,下面咱们在“空间”主题中有一个比率图,在“ggplot”中有一个展开图:
咱们还能够获得3D图(表面和睦泡):
你甚至能够制做饼图:
在Plotly Chart Studio中编辑
当你在Notebook中制做这些图时,你会注意到图表右下角有一个小连接,上面写着“Export to plot.ly”。 若是单击该连接,你将会进入到Chat Studio,在那里您能够修改图并进行最终演示。 你能够添加注释,指定颜色,并清理全部不相关的内容来获得一张出色的图。而后,你能够在线发布图,以便任何人均可以经过连接找到它。
下面是我在Chart Studio中发布的两个图表:
上面提到的一切,并非该绘图库的所有功能! 所以做者建议读者查看plotly和cufflinks文档,以得到更使人难以置信的图形。
Plotly interactive graphics of wind farms in United States (Source)
总结
关于沉没成本谬论最糟糕的部分是你只能意识到在你退出这项努力以后浪费了多少时间。幸运的是,如今做者犯了长时间坚持使用Matploblib的错误,而你没必要!
在考虑绘图库时,咱们一般想要如下的一些东西:
一、仅用一行代码就能够快速探索数据
二、用于子集化/调查数据的交互元素
三、根据须要深刻挖掘细节
四、轻松定制最终演示文稿
截至目前,在Python中完成全部这些操做的最佳选择是 Plotly库。 Plotly容许咱们快速进行可视化,并帮助咱们经过交互更好地探索咱们的数据。 此外,必须认可的是,绘图应该是数据科学中最使人愉快的部分之一! 使用其余库时,绘图变成了一项繁琐的任务。可是使用plotly库时,能够为制做一张好图而愉悦!
A plot of my enjoyment with plotting in Python over time
如今是2019年,是时候升级您的Python绘图库,以便在数据可视化中实现更优的效率,功能和美学。