Python 中的可视化工具介绍

几周前,R语言社区经历了一场关于画图工具的讨论。对于我们这种外人来说,具体的细节并不重要,但是我们可以将一些有用的观点运用到 Python 中。讨论的重点是 R 语言自带的绘图工具 base R 和 Hadley Wickham 开发的绘图工具 ggplot2 之间的优劣情况。如果你想了解更多细节内容,请阅读以下几篇文章:

其中最重要的两个内容是:

  1. 其中一个工具能够实现的功能另一个工具也同样能实现。
  2. ggplot2 非常适合用于探索性分析。

不是所有人都认同第二个观点,ggplot2确实无法绘制出所有的图表类型,但是我会利用它来做分析。

综述

以下是 2016 年 4 月写的关于绘图工具的概述。出于多方面的原因,绘图工具的选取更多地取决于个人偏好,因此本文介绍的 Python 绘图工具也仅代表我的个人使用偏好。

Matplotlib

Matplotlib 是一个强大的工具,它是 Pandas' builtin-plottingSeaborn 的基础。Matplotlib 能够绘制许多不同的图形,还能调用多个级别的许多 API。我发现pyplot api非常好用,你可能用不上Transforms 或者 artists,但是如果你有需求的话可以查阅帮助文档。我将从 pandasseaborn 图开始介绍,然后介绍如何调用 pyplotAPI

Pandas' builtin-plotting

DataFrameSeries 拥有 .plot 的命名空间,其中有许多图形类别可供选择(line, hist, scatter, 等等)。 Pandas 对象还提供了额外的用于增强图形展现效果的数据,如索引变量。
由于 pandas 具有更少的向后兼容的限制,所以它具有更好的美学特性。从这方面来说,我认为 pandas 中的 DataFrame.plot 是一个非常实用的快速探索性分析的工具。

Seaborn

Michael Waskom 所开发的 Seaborn 提供了一个高层次的界面来绘制更吸引人统计图形。Seaborn 提供了一个可以快速探索分析数据不同特征的 API 接口,接下来我们将重点介绍它。

Bokeh

Bokeh 是一款针对浏览器开发的可视化工具。
matplotlib 一样,**Bokeh
** 拥有一系列 API 接口。比如 glpyhs 接口,该接口和 matplotllib 中的 Artists 接口非常相似,它主要用于绘制环形图、方形图和多边形图等。最近 Bokeh 又开放了一个新的图形接口,该接口主要用于处理词典数据或 DataFrame 数据,并用于绘制罐头图。

其他工具:

以下是一些本文没有提到的可视化工具:

  • Lightning
  • HoloViews
  • Glueviz
  • vispy
  • bqplot

案例介绍

我们将利用 ggplot2 中的 diamonds 数据集,你可以在 Vincent Arelbundock's RDatasets 中找到它(pd.read_csv('http://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv')),此外我们还需要检测是否已经安装feather

925
926
927

[站外图片上传中……(4)]

Bokeh 提供了两个 API,一个是低级的 glyph API,另一个是高级的 Charts API。

[站外图片上传中……(5)]

还不是很清楚我们应该在啥时候利用 Bokeh 来进行探索性分析,不过它的交互式功能可以激发我的兴趣。就个人而言,由于习惯问题我平时仍然一直使用 matplotlib 来绘图,我还无法完全切换到 Bokeh 中。

我非常喜欢 Bokeh 的仪表盘功能和 bokeh server 的 webapps。

[站外图片上传中……(6)]

Matplotlib

[站外图片上传中……(7)]

[站外图片上传中……(8)]

matplotlib 并不局限于处理 DataFrame 数据,它支持所有使用 getitem 作为键值的数据类型。

[站外图片上传中……(9)]

[站外图片上传中……(10)]

我们从列变量的名字中提取出轴标签,利用 Pandas 可以更加便捷地绘制一系列共享 x 轴数据的图形。

[站外图片上传中……(11)]

[站外图片上传中……(12)]

Seaborn

本文中的剩余部分将重点介绍 seaborn和为什么我认为它是探索性分析的强大工具。

我强烈建议你阅读 Seaborn 的 introductory notes,这上面介绍了 seaborn 的设计逻辑和应用领域。

Seaborn 主要目的是将探索和理解数据核心部分的过程进行可视化处理。

我们可以通过一个稳定的且易懂的 API 接口来调用 Seaborn。

绘图函数通过调用尽量少的参数来实现可视化的过程,此外还可以通过修改附加参数的形式来自定义选项。

事实上,seaborn 是基于 matplotlib 开发的,这意味着如果你熟悉 pyplot API的话,那么你可以很容易地掌握 seaborn。

大多数 seaborn 绘图函数的参数都由 x, y, hue, 和 data 构成(并不是所有的参数都是必须的)。如果你处理的对象是 DataFrame,那么你可以直接将列变量的名称和数据集的名称一同传递到绘图函数中。

[站外图片上传中……(13)]

[站外图片上传中……(14)]

[站外图片上传中……(15)]

[站外图片上传中……(16)]

我们可以很轻易地探究两个变量之间的关系:

[站外图片上传中……(17)]

[站外图片上传中……(18)]

或者一次探究多个变量之间的关系:

[站外图片上传中……(19)]

[站外图片上传中……(20)]

pariplot 是 PairGrid 的一个包装函数,它提供了 seaborn 一个重要的抽象功能——Grid。Seaborn 的 Grid 将 matplotlib 中Figure 和数据集中的变量联系起来了。

我们有两种方式可以和 grids 进行交互操作。其一,seaborn 提供了类似于 pairplot 的包装函数,它提前设置了许多常见任务的参数;其二,如果你需要更多的自定义选项,那么你可以直接利用 Grid 方法。

[站外图片上传中……(21)]
[站外图片上传中……(22)]

[站外图片上传中……(23)]
34312 rows × 7 columns

[站外图片上传中……(24)]
[站外图片上传中……(25)]

FaceGrid 可以通过控制分面变量来生成 Grid图形,其中PairGrid是它的一个特例。接下来的案例中,我们将以数据集中的 cut 变量为分面变量来绘制图像:
[站外图片上传中……(26)]

[站外图片上传中……(27)]
最后一个案例展示了如何将 seaborn 和 matplotlib 结合起来。g.axes是matplotlib.Axes的一个数组,g.fig是matplotlib.Figure的一个特例。这是使用 seaborn 时常见的一个模式:利用 seaborn 的方法来绘制图像,然后再利用 matplotlib 来调整细节部分。

我认为 seaborn 之所以吸引人是因为它的绘图语法具有很强的灵活性。你不会被作者所设定的图表类型所局限住,你可以根据自己的需要创建新的图表。
[站外图片上传中……(28)]

[站外图片上传中……(29)]

[站外图片上传中……(30)]

[站外图片上传中……(31)]

本来,我打算准备更多的例子来介绍 seaborn,但是我会将相关链接分享给大家。Seaborn 的说明文档写的非常详细。

最后,我们将结合 scikit-learn 来介绍如何利用 GridSearch 来寻找最佳参数。
[站外图片上传中……(32)]

[站外图片上传中……(33)]


[站外图片上传中……(34)]

原文链接:http://tomaugspurger.github.io/modern-6-visualization.html

原文作者:Tom Augspurger

译者:Fibears

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容