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

点击上方“涛哥聊Python”,选择“星标”公众号

3d020a5bf5287e4ca0841b21ba81c8c2.gif

作者:Will Koehrsen

图文投稿:Allen

编辑:Kooyee

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

其他:https://mp.weixin.qq.com/s/DdME3Py88uujFNcoFIhLgg

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

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

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

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

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

2a2fd96872ac6544bedc6c5ad0197ded.png

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', x, y, )

b8f5bcb62557f4f347b03b1406bad647.gif

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

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

df[['time_started', 'time_published']].iplot(    kind='hist',    histnorm='percent',    barmode='overlay',    x,    y,    )

d190768a0b402ba6a211d9503c827de1.png

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

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

23f7b508db181c241e951e8b321a9fb0.png

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

df.pivot(columns='publication', values='fans').iplot( kind='box', y,)

2f6faef1a5c2ed6a676ce385068af0d5.gif

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

散点图

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

时间序列

现实世界中的大部分数据都与时间相关。幸运的是,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_, x, y, text='title', )

3ed9a989c5057f1e73e0ad3cb120ae7e.png

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

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

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

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

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

tds_monthly_totals.iplot(mode='lines+markers+text', text=text, y='word_count', opacity=0.8, x, y,)

1649d53e2cb83ca8e27640aca8f86c50.png

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

#read_time代表文章所需阅读时长,read_ratio代表阅读比例,即阅读文章的人数/点击查看的人数df.iplot( x='read_time', y='read_ratio',

# 定义类别变量categories='publication',xTitle='Read

Time',y, )

8d33db492831e85955807efb07e9ceb0.png

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

tds.iplot(x='word_count',y='reads', size='read_ratio',text=text, mode='markers',

# Log xaxislayout=dict(xaxis=dict(type='log', ), yaxis=dict(), ))

e7b00c0d67b81d11e1d3441dedaceea9.png

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

e729dd4d9cd62a2be719e0268279e47c.png

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

7da10f7eab83de9382bf3851005d8221.png

更高级的图表

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

散点图矩阵

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

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

621603755e6fa4e2790f66d9f7a645b4.png

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

相关系数热力图

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

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)

59661a0f94d427b410f4ff25ebd4c36e.png8edf1f19577ff61c3b001ce12a4a34eb.png

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

ec7a864e752843b8bc4556917976894f.png

7f381463805cf833adb46979bc2cb423.png

云制图——Plotly Chart Studio

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

a60864363ec2cebc68ccd8232bbee8bf.png

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

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

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

总结

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

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

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

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

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

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

d36a8cb4865e21a1e2e3e67fe63cbecd.png

往期文章

字节跳动,正在动摇腾讯的根基

强烈推荐 | 一位从不学无术到跨行算法工程师的人生赢家!

分享3个提升效率的方法

5db2c33ecec29760b103a167fc89de71.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssd训练自己数据集

1、用labelImg标数据 2、将数据转换为tfrecord 错误记录: NotFoundError:无法创建NewWriteableFile 解决方法:您需要在运行此脚本的运行环境文件夹中自己创建一个目录 1、前期准备工作 第一步:先将SSD框架下载到本地&#…

elasticsearch date_MySQL数据实时增量同步到Elasticsearch

Mysql到Elasticsearch的数据同步,一般用ETL来实现,但性能并不理想,目前大部分的ETL是定时查询Mysql数据库有没有新增数据或者修改数据,如果数据量小影响不大,但如果几百万上千万的数据量性能就明显的下降很多&#xff…

联想计算机不能进入系统桌面,联想笔记本进不去桌面的解决方法

联想笔记本进不去桌面的解决方法笔记本电脑开机后,电源指示灯亮,显示器屏如果有显示,但进不了系统,这种情况多数是系统故障导致的,可以尝试开机按F8键,进入安全模式,然后进入最后一次安全配置进…

win10 make命令的安装

1、下载MinGWMinGW官网下载:http://www.mingw.org ,点击右上角Downloads 或者网盘下载:链接:https://pan.baidu.com/s/1vQVKycK1TKVsnLV_OMgiCg 提取码:bbhl 点击下载 mingw-get-setup.exe 安装 mingw-get-setup.exe…

html中svg的css,HTML5 内联 SVG

什么是SVG?SVG 指可伸缩矢量图形 (Scalable Vector Graphics)SVG 用于定义用于网络的基于矢量的图形SVG 使用 XML 格式定义图形SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失SVG 是万维网联盟的标准SVG 的优势与其他图像格式相比(比如 JPEG 和 GIF)&#x…

fast-rcnn win10 tensorflow部署

1、下载代码https://github.com/chde222/Faster-RCNN-TensorFlow-Python3 2、安装所依赖包 pip install -r requirements.txt 或者单独利用pip install cython pip install easydict 3、在 ./data/coco/pythonAPI 下打开cmd运行: python setup.py build_ext --in…

vue 获取url地址的参数_Vue之vuerouter的使用

1. 什么是vue-router?所谓的vue-router, 通俗的来讲 就是路由 但是这个和后端路由是不同的, 这是前端路由,是url和单页面组件的对应关系, 也就是SPA(单页应用)的路径管理器。再通俗的说,vue-router就是WebApp的链接路径管理系统。vue-router是Vue.js官方的路由插件…

win10下openpose1.5安装

历经一个星期的安装挫折,终于安装成功了。赶紧记录一下。 1、准备所需资料 (1)下载cuda和cudnn。版本最好都是cuda10和cudnn10.我下载的是下图所示版本。 如果不是这个版本可能会出错,而且出错几率很高。本人就因为安装的cuda10…

div展示html文本,html – 使文本适合div

我一直在努力重新创建我在90年代创建的父亲网站(呃),我一直无法让文本适合div内部并水平对齐.我需要将文本放在一起,以便它们适合div.这是jsfiddle中页面的代码示例HTMLHomeInside StaffOur Mission示例CSSdiv img#header{width: 50%;height: 15%;margin-left: 125px;margin-ri…

ImportError: cannot import name 'pyopenpose' from 'openpose'错误解决方法

前提条件:openpose1.5配置过程前面都成功,c api成功运行,但是python api配置中,cmake也添加了build_python_path.运行中仍出现 ImportError: cannot import name pyopenpose from openpose 这个错误。 解决方法: 将你…

python语句join_详解Python中的join()函数的用法

原博文 2017-08-07 20:51 − 函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 &n...0584 相…

python glob.glob使用

函数功能:匹配所有的符合条件的文件,并将其以list的形式返回 示例: 当前文件夹下有如下文件 import globlist glob.glob(‘*g’)print(list) 结果: [dog.1012.jpg, dog.1013.jpg, dog.1014.jpg, dog.1015.jpg, dog.1016.jpg]

nohup启动jar_nohup命令详解

nohup命令详解在我们想要把SpringBoot微服务工程部署到远程服务器时,会通过java -jar springboot.jar的方式启动SpringBoot微服务。但是当我们把运行这个命令的SSH客户端退出登录就会导致SpringBoot进程也一起停止了,然后当然就没法访问我们启动的项目了…

python用pip安装pygame_安装pygame和pip的问题以及过程

1. 先安装pip(一个重要的工具cnqqtd) 2. 安装与python版和系统本相匹配的pygame 详细安装过程 Pip请到这里安装 https://pypi.python.org/pypi/pip#download 下载完成后,会获得一个叫git-pip.py的文件 • 打开git-pip.py文件存在的目录,按下shift rightClick • 打开windows Po…

.net fileupload批量上传可删除_【JavaWeb基础】文件上传和下载(修订版)

前言只有光头才能变强。文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y什么是文件上传?文件上传就是把用户的信息保存起来。为什么需要文件上传?在用户注册的时候,可能需要用户提交照片。…

object detection之Win10配置

1、下载models。 https://github.com/tensorflow/models 并文件解压。 2、下载protos文件 https://github.com/protocolbuffers/protobuf/releases?afterv3.9.1 我这里下载的3.7.0版本。注意一定要下载protoc-xxx-win64.zip版本。必须是带有win64的压缩包,否则可…

idea卸载不干净怎么办_fxfactory卸载不干净?Fxfactory及插件卸载教程

fxfactory卸载不干净怎么办?fxfactory是一款非常受欢迎的视频特效插件合集,能应用到FCPX、AE、PR、motion等软件中。过多特效插件下载会导致这些软件运行打开速度慢,那么如何卸载fxfactory这款软件或者删除那些特效插件呢?跟随小编…

矩阵标准型的系数是特征值吗_「线性代数」根据特征值,将二次型化为标准形、规范形...

今天我们来聊一聊线性代数中的二次型化为规范形、标准形的内容,这块知识相当重要,我看了看,几乎每一年的考研数学中都会涉及到一道关于这个知识点的题目,这次的整理,不仅帮助大家整理清楚思路,也是为自己整…

计算机丢失UxTheme无法修复,Win7系统启动程序失败提示“计算机中丢失UxTheme.dll”怎么办...

win7系统启动程序失败出错提示”无法启动此程序,因为计算机中丢失UxTheme.dll。尝试重新安装该程序以解决此问题“怎么办呢?UxTheme.dll是什么?其实UxTheme.dll是支持win7主题的核心文件,丢失UxTheme.dll就无法使用第三方主题了&a…

docker 设置 jvm 内存_是否值得付费?Oracle,Open JDK等四大JVM性能全面对比

市面上可供选择的JVM发行版还是有不少的。选择合适的JVM需要考虑不同的因素。性能是其中一个重要的因素。靠谱的性能研究是很困难的。在本文中,我创建了一个测试,在不同的JVM上执行对比测试。测试程序包括Spring Boot REST应用,使用Prometheu…