点击上方 Z先生点记,加为星标

第一时间收到 Python 技术干货!

来源:优达学城Udacity

https://towardsdatascience.com/the-next-level-of-data-visualization-in-python-dd6e99039d5e

心理学上有一个名词叫“沉没成本谬误”,它指如果我们已经在一项事业上花费了很多时间,那么即使明知是失败的,我们仍然会倾向于继续把时间和资源花在上面。

在数据可视化的路上,我也曾犯过这样的错误。

当我明知存在更高效、更具交互性和外观更好的替代方案时,我却仍然继续使用一个过时的绘图库——matplotlib,只是因为我曾经花了数百个小时来学习 matplotlib 复杂的语法。

幸运的是,现在有许多的开源绘图库可供选择,经过仔细研究,我发现 plotly 包无论从易用性、交互性还是功能性来看,都有绝对的优势。接下来,我将带领大家学会如何用更少的时间绘制更美观的可视化图表——通常只需要一行代码。

本文所有代码都可以在 GitHub 上找到。读者朋友们也可以直接在浏览器里打开 NBViewer 链接查看效果。地址获取方式见文末。


Plotly简要概述

plotly Python 包是一个构建在 plotly.js 上的开源库,而后者又是构建在 d3.js 上的。我们将使用一个 plotly 的“包装器”——cufflinks,它可以 plotly 的使用变得更加简单。整个堆叠顺序是cufflinks>plotly>plotly.js>d3.js,意味着我们同时获得了 Python 的编程高效性和d3强大的图形交互能力。(毕竟d3.js是全世界公认的第一可视化框架!)

本文中所有工作都是使用 plotly+cufflinks 在 Jupyter Notebook 中完成的。在开始前,我们需要使用 pip install cufflinks plotly 在 Python 环境中安装这两个包,然后在 jupyter notebook 中导入这两个包:

# 导入plotly包import plotly.plotly as pyimport plotly.graph_objs as gofrom plotly.offline import iplot,init_notebook_mode

# 使用离线模式的 plotly + cufflinksimport cufflinkscufflinks.go_offline(connected=True)

单变量分布:直方图和箱线图

单变量-单变量制图是开始一个数据分析的标准方法。直方图是绘制单变量分布的首选方式。在这里,我使用的数据来源是我个人在 medium 网站上所写过文章的统计信息,让我们先来制作一个关于文章点赞次数的交互式直方图(df 是一个标准的 Pandas 数据结构)。

df['claps'].iplot(kind='hist', xTitle='claps', yTitle='count', title='Claps Distribution')

如果你已经习惯使用**matplotlib**,你所需要做的只是在你原有代码的基础上添加一个字母,即把 plot 改为 iplot,就可以得到一个更加好看的交互式图标!我们可以通过鼠标的滑动获得更多的数据几节,还可以放大图的各个部分。

如果我们想要绘制重叠的直方图,这很简单:

df[['time_started', 'time_published']].iplot(    kind='hist',    histnorm='percent',    barmode='overlay',    xTitle='Time of Day',    yTitle='(%) of Articles',    title='Time Started and Time Published')

通过一点 pandas 处理,我们还可以制作一个条形图:

#重采样获得每月的均值 e Views and Reads')df2 = df[['view','reads','published_date']].set_index('published_date').resample('M').mean()df2.iplot(kind='bar', xTitle='Date', yTitle='Average',    title='Monthly Average Views and Reads')

就像我们前面看到的那样,pandas+plotly+cufflinks 这一组合的功能非常强大。如果我们要绘制一个关于每篇文章粉丝数量在不同发表渠道的分布情况的箱线图,我们可以先使用 pandas 中DataFrame 的 pivot(透视表) 功能,然后再绘制图表,如下:

df.pivot(columns='publication', values='fans').iplot(  kind='box', yTitle='fans',title='Fans Distribution by Publication')

交互式图表的好处就在于,我们可以尽情地探索图表中的数据。特别是在箱线图中,包含的信息很多,如果不能局部放大查看,我们可能会错过这些信息。

散点图

散点图是大多数分析的核心,它可以使我们看到变量随着时间的演变情况,也可以看到两种变量之间的关系。

时间序列

现实世界中的大部分数据都与时间相关。幸运的是,plotly + cufflinks 在设计之初就考虑到了时间序列的可视化。让我们来创建一个关于我写过文章情况的 dataframe,看看它的各项指标是怎么随着时间变化的。

#创建一个数据集,只包括发布在Towards Data Science渠道的文章tds = df[df['publication'] == 'Towards Data Science']. set_index('published_date')#将阅读时间作为时间序列tds[['claps', 'fans', 'title']].iplot(    y='claps', mode='lines+markers', secondary_y = 'fans',    secondary_y_title='Fans', xTitle='Date', yTitle='Claps',    text='title', title='Fans and Claps over Time')

我们在一行代码里完成了很多不同的事情:

- 自动获得了格式友好的时间序列作为x轴

- 添加一个次坐标轴(第二y轴),因为上图中的两个变量的值范围不同。

- 添加文章的标题到每个数据点中(鼠标放上去可以显示文章名和变量值)

如果要从图表上了解更多的信息,我们还可以很容易地添加文本注释:

tds_monthly_totals.iplot(mode='lines+markers+text', text=text, y='word_count', opacity=0.8,   xTitle='Date', yTitle='Word Count',title='Total Word Count by Month')

对于由第三个分类变量着色的双变量散点图,我们使用:

#read_time代表文章所需阅读时长,read_ratio代表阅读比例,即阅读文章的人数/点击查看的人数df.iplot( x='read_time', y='read_ratio',# 定义类别变量categories='publication',x,y, )

如果要在图表中体现三个数值变量,我们还可以使用气泡图,如下图:横坐标、纵坐标、气泡的大小分别代表三个不同的变量——文章字数的对数、阅读数量、阅读比例。

tds.iplot(x='word_count',y='reads', size='read_ratio',text=text, mode='markers',# Log xaxislayout=dict(xaxis=dict(type='log', title='Word Count'), yaxis=dict(title='Reads'),        title='Reads vs Log Word Count Sized by Read Ratio'))

再做一点工作,我们甚至可以在一个图表中体现四个变量!


结合 pandas 对数据进行统计处理,我们可以得到很多非常有价值的图,比如下面这张关于不同文章发表渠道的读者点击查看数量的变化趋势图,显然名为Toward Data Science的发表渠道能给文章带来更多的点击量。


更高级的图表

接下来所讲述的图表大家可能不会经常用到,但是非常酷炫,值得了解一下。同样,我们仍然只使用一行代码就可以完成这些超级图表。

散点图矩阵

当我们想要探索许多变量之间的关系时,散点图矩阵是非常好的选择。

import plotly.figure_factory as fffigure = ff.create_scatterplotmatrix(df[['claps', 'publication','views','read_ratio','word_count']],diag='histogram', index='publication')

以上的散点矩阵图仍然是可以交互的,可以自由放大缩小,查看各个数据点的详细信息。

相关系数热力图

为了将数值型变量的相关性可视化,我们可以先计算相关系数,接着就可以创建一个带注释的热力图:

corrs = df.corr()figure = ff.create_annotated_heatmap(z=corrs.values,x=list(corrs.columns),y=list(corrs.index), annotation_text=corrs.round(2).values, showscale=True)

我们还可以绘制非常酷炫的3D表面图和3D气泡图:



云制图——Plotly Chart Studio

当你使用 plotly 在 notebook 中绘制图表时,你可能注意到了每幅图的右下角都有一个链接 “Export to plot.ly” 。如果你点击该链接,就会跳转到名为chart studio的云制图平台,然后你就可以对自己的图标进行润色,添加注释、改改颜色、清理一些不必要的内容等等。


你还可以在线发布该图表,任何人可以直接通过链接访问到你的图表。(比如我的这个3D图,在浏览器中输入后方链接可直接抵达:https://plot.ly/~Allencxl/3/)

前面所述的内容还不算是这个库的所有功能,非常鼓励各位小伙伴们去查看 plotly 和 cufflinks 的文档,肯定会有更多不可思议的神级可视化在等着你!

美国风力发电厂的分布情况

总结

我已经因为固执地使用matploblib而浪费了太多时间,所以希望大家能通过这篇文章学习到一种新的方式提升自己的绘图效率。另外,当我们在选择绘图库的时候,有几点是永远需要考虑的:

- 用少量的代码进行数据探索

- 可以实时与数据交互,查看数据子集情况

- 根据自己的需要,选择性挖掘数据中的细节

- 非常便利地润色最终演示的图表

而到目前为止,能够在 Python 中实现上述需求的不二选择便是 plotly。plotly 使我们能够快速地进行可视化,让我们通过与图表的交互更好地了解我们的数据。日常工作中,在使用其他绘图库的时候,我感觉绘图是一项单调乏味的任务,但是使用 plotly 时,我觉得绘图是数据科学中相当有趣的工作之一!

推荐阅读:

《最受欢迎的女友职业排行榜Top10》20个极简Python代码,拿走即用

matplotlib 横坐标少了一个点_比 matplotlib 效率高十倍的数据可视化神器相关推荐

  1. matplotlib 横坐标少了一个点_收藏起来!比 matplotlib 效率高十倍的数据可视化神器!...

    点击上方"涛哥聊Python",选择"星标"公众号 作者:Will Koehrsen 图文投稿:Allen 编辑:Kooyee 原文链接:https://tow ...

  2. matplotlib 横坐标少了一个点_刘洲成点赞说马苏拍戏少视频

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以免费收到最新内容了.每天都有分享,完全是免费订阅,请放心关注. 声明:本文转载自网络,如有侵权,请在后台留言联系我 ...

  3. 机器学习第6天:数据可视化神器--Matplotlib

    文章目录 一.Matplotlib简介 二.散点图 第1步:导入数据 第2步:拆分成训练集和测试集 第3步:使用简单线性回归模型来训练训练集 第4步:绘制散点图 二.线图 三.等高线图 第1步:定义一 ...

  4. python人机交互界面设计_[译]学习IPython进行交互式计算和数据可视化(五)

    第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...

  5. 丽水数据可视化设计价格_网站建设之B端交互设计——数据可视化图表

    在B端设计中,数据可视化是必不可少而且非常重要,越来越多的设计师需要和数据打交道,但是很多设计师不懂可视化当中不同用途的图表规范,只是单纯设计出好看的数据图表,却不能给用户带来更多的信息和价值. 因此 ...

  6. wxpython可视化_使用wxPython的绘图模块wxPyPlot进行数据可视化

    [Python进阶(四十)-数据可视化の使用matplotlib进行绘图前言  matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.我将在这篇文章中介绍matp ...

  7. 51cto python数据分析系列课程 55g_热图_ Python数据分析系列视频课程--玩转数据可视化_数据可视化视频-51CTO学院...

    matplotlib包是基于Python平台的统计绘图利器,是在python平台上完成数据可视化不可或缺的工具,而基于matplotlib进一步开发的seaborn,更是将数据呈现与可视化的可用性推到 ...

  8. mysql高德地图设计_基于高德开放平台Map Lab的数据可视化

    在Map Lab上创建可视化项目,首先需要添加数据.添加数据有4种方式,分别是: 上传CSV文件添加数据 上传Excel文件添加数据 连接在线数据库添加数据 提供在线数据API添加数据 一.数据上传说 ...

  9. 本弗莱数据可视化的生产流程图_工业互联网 | 3D组态|图扑软件|数据可视化|blog...

    Home » Posts tagged "工业互联网" 2020年12月,国新办发布<中国交通的可持续发展>白皮书.从"走得了"到"走得好 ...

最新文章

  1. 题目1105:字符串的反码
  2. QTP的那些事--QTP回放iFrame控件时间非常慢的问题分析
  3. 如何将现有的回调API转换为Promise?
  4. 46 定时任务模块APScheduler
  5. fatal error C1071: unexpected end of file found in comment
  6. java 导入导出txt文件_Java读取和写入txt文件
  7. 23套新鲜出炉的网站和手机界面 PSD 素材
  8. gdb x命令_gdb基本命令
  9. centos7 docker删除端口映射_centos7安装docker,结合docker安装mysql,学习简单使用
  10. Win11任务栏大小怎么更改
  11. Spring-web-MultipartFile上传文件
  12. gpg加密命令 linux_Ubuntu下加密命令GPG和KEY
  13. jquery系列教程2-style样式操作全解
  14. C/C++ 取整函数
  15. Java操作数据库(一,JDBC的入门)
  16. Qt使用系统代理访问网络
  17. 语c语言描写,语c动作描写
  18. linux安装liinuxrar教程,linux操作系统下RAR的安装和使用
  19. Jacoco 入门使用
  20. 华为这么牛?21级程序员月薪看哭众人!网友直呼:我们不一样

热门文章

  1. windows server 2003之七---DNS
  2. linux fedora安装flameshot火焰截图
  3. spark on yarn参数: 任务优先级
  4. k8s pod健康检查(存活、就绪检查):livenessProbe策略配置示例
  5. spark on k8s报错:pods “spark-pi-4f2cd9772397764d-driver“ is forbidden: User “system:anonymous“
  6. elasticsearch ik分词插件配置自定义分词词典
  7. zookeeper 常用命令示例
  8. IDEA常用快捷键整理20191105
  9. springmvc+spring+mybatis基于soa架构进行框架整合思路分析
  10. Java提取mssql备份文件的数据