Skip to content

Latest commit

 

History

History
185 lines (95 loc) · 15.6 KB

visualize-data-python-and-r.md

File metadata and controls

185 lines (95 loc) · 15.6 KB

如何在 Python(和 R)中可视化数据

原文:www.kdnuggets.com/2019/11/visualize-data-python-and-r.html

评论

SuperDataScience 提供

在某些鸡尾酒会上,你可以通过争论许多问题可以归结为数据的展示,而不是数据本身来获得成功。脱欧?你可能会说这是因为没有制作引人入胜、易于理解的预测生活质量变化的数据可视化。或者你可能会提到 Facebook,即使按照松散的加州标准,实际上也在进行数据可视化;数据是社交网络中的数据,被人为地更加具体。 空气 质量? 交通?你甚至可以阐述如何通过正确的数据可视化来灵活运用工具,尽管一切看起来仍像你的拇指,但至少你会是对的。


我们的前 3 个课程推荐

1. Google 网络安全证书 - 快速进入网络安全职业的快车道。

2. Google 数据分析专业证书 - 提升你的数据分析技能

3. Google IT 支持专业证书 - 支持你的组织进行 IT 事务


平均速度图:湾区大桥上每五分钟的速度变化,基于一个传感器(位于靠近珍珠岛)。在所有合理的通勤时间,速度骤降,展示了固定供应和需求的规律,这大多数人称之为交通。使用 Matplotlib 制作。

没有人说找到这些特定的鸡尾酒会很容易或令人兴奋。但无论如何,能够制作易于理解的数据可视化是数据科学的关键技能。让我们为数据可视化师们干杯;那些勇敢地将抽象数字变得更直观、使电子表格更具吸引力和技术报告更易于管理的人。如果你还需要更多的鸡尾酒会谈资,你还可以提到 W.E. DuboisKurt Vonnegut 作为其他可视化大师。

Python 和 R 走进酒吧……

教会-图灵论题表示,你在一个程序中能做的事情,理论上可以在任何其他程序中做。抽象来说,这是对的。然而,实际上,某些语言或软件包中容易做到的事情,在另一个语言或软件包中可能需要数小时的宝贵挫折感来完成。(我在看你,Matlab。)显然,这些差异与我们的大脑如何与编程语言互动、我们对它的了解程度以及编程语言的基本操作如何适应手头的问题有很大关系。正如你可能知道的那样,两个主要的通用数据编程语言是 Python 和 R,但直接比较它们是不公平的。更好的比较是 R 与使用Pandas 包配合 Jupyter Notebook 的效果。(为了完全透明,我是“Pandas 通常更酷,除非你有一些尚未移植到 Python 包中的非常具体的问题”阵营的一员。)

说完这些,你需要知道以下内容。

Pandas 首次创建于 2008 年,而 Python 本身则在 1991 年首次发布。许多使用 Python 的人声称它“易于思考”。另一方面,R 实际上是统计编程语言 S 的 90 年代中期实现,而 S 本身是在 70 年代中期的 Bell Labs 发明的。

尽管 R 的管理机构总部设在维也纳,但使用它并不会让你在华尔兹舞方面变得更好(实际上,它可能让你更糟),也不会让你在吃Manner Wafer 饼干时更出色,维也纳爱乐乐团的折扣票也不会出现在你的终端上。我能说什么呢,生活就是这么艰难。此外,给明智的人提个醒:将编程技能转移到华尔兹舞上唯一的办法是使用三进制计算机进行编码;两者都是基于三进制的。话虽如此,R 被设置用于实验室环境中所需的数据分析,产生的材料经过同行评审。鉴于 Church、Turing 以及每一位开源贡献者的上述工作,Pandas 可以做同样的事情(只需确保导入statsmodels),通常运行得更快,且更容易优化(使用NumbaNumpy)。

在我看来,当由专家或用于小众分析时,R 可以是一个强大的语言。然而,对于非专家来说,R 可能更难以审计。由于类似的原因,R 也更容易在数据处理管道中引入未被发现的隐性错误。换句话说,我认为 R 代码比 Python 代码更容易积累技术债务。另一方面,能够阅读 R 是有用的,显然如果你想在基于 R 的环境中工作,这些建议会有所不同。这是 Pandas 与 R 的简短语法比较。如果你和主要使用 R 的人谈论这一段,他们要么会热情地承认失败,要么会提出与我的观点截然相反的合理观点。你的体验可能会有所不同。

本文中的建议旨在帮助你更好地理解数据集、获取洞察力并向他人传达结果。这与例如《纽约时报》的艺术化可视化目的不同。(如果你希望做出同样出色的效果,你可能还想了解 D3,或者 D3 在R中的封装,或python中的等效工具。)

最后,有很多选择。尽管感到沮丧的程序员可能会不同意教会-图灵论题的实际解释,但数据可视化库的情况更是如此。如果一个数据可视化库无法完成所有常见的可视化,那么它还有什么用呢?

一般数据可视化建议

  • 阅读 Tufte

  • 每次做新项目时,开始一个新文件夹,将所有相关论文下载到研究子文件夹中。(无论你在做什么,阅读之前提出的内容都是有帮助的。)

  • 从一开始就开始写报告/白皮书/论文/总结。作为一个经历过这个过程的人,保存到最后会带来大量的麻烦,这也是一些研究生需要很长时间才能完成论文的原因之一。

  • 从一开始就做好笔记。

  • 唯一完全有资格写出他们想要的精确描述的人,也正是能够完成这个工作的那类人。

  • 三维图像是一个独立的类别,但将几个 2D 帧拼接在一起的 Gif,无论是前后振动还是将视角改变几度,都可以帮助你表达观点。

  • 查看Mike Bockstock 的数据可视化以及NYTimes创建的可视化。

  • 如果你有非技术人员需要答案,弄清楚是否可以让定量结果与视觉结果一致。例如,如果有办法可视化聚类分析的结果,请在讨论任何指标之前先展示这个结果。具体胜于抽象,这就是数据可视化的要点。

特定的数据可视化建议

  • 数据元素的色度、“色彩丰富度”或饱和度可以被调整以发挥你的优势,因为色度是可加的。如果两个数据元素重叠,它们的饱和度可以加在一起,使得重叠部分更加生动。这是一种“多通道增强”的类型,其中两个数据点重叠的事实通过空间和颜色通道传达。在 matplotlib 中,这可以通过 alpha 控制。

  • 感知均匀色彩系列也可以用于多通道增强,或为你的可视化添加额外的信息维度。例如,以下图表展示了圣塔莫尼卡市中心停车场的利用情况。在第一个图中,我使用了基本颜色,而在第二个图中,每一年都通过感知颜色映射的等距样本来着色。

y 轴显示了圣塔莫尼卡市中心停车场每五分钟增量的平均停车位数的五个 14 天移动平均值。较高的值意味着停车场更空,x 轴上的‘0’对应于每年新的前五分钟。2019 年的线条在四月底停止,这张图表暗示了以下结论:零售业正在衰退,零售业永存。使用 Matplotlib 制作。

这是我写的立即生成以下图表的代码。未显示的是我所做的预处理。我将“c”参数设置为一个名为 plasma 的感知色图。

import matplotlib.cm as cm #gets the colormaps

N = 4032 #the number of five minute increments in 14 days

rcParams['figure.figsize'] = 30, 15 #controls a jupyter notebook setting

plt.title("14 Day Moving Average, All Years -- Stacked")

plt.plot(g2015.iloc[N:]['Available'].rolling(N).mean()[N:].values,alpha=.4,c=cm.plasma(1/5,1),label='2015')

plt.plot(g2016.iloc[N:]['Available'].rolling(N).mean()[N:].values,alpha=.4,c=cm.plasma(2/5,1),label='2016')

plt.plot(g2017.iloc[N:]['Available'].rolling(N).mean()[N:].values,alpha=.5,c=cm.plasma(3/5,1),label='2017')

plt.plot(g2018.iloc[N:]['Available'].rolling(N).mean()[N:].values,alpha=.75,c=cm.plasma(4/5,1),label='2018')

plt.plot(g2019.iloc[N:]['Available'].rolling(N).mean()[N:].values,alpha=.9,c=cm.plasma(5/5.5,1),label="2019")

plt.legend()
  • 在数据点周围添加深色边界可以使它们看起来更清晰,这在你没有大量点需要可视化且点相对较大的情况下有效。查找 matplotlib 设置中的“edge_colors=True”。

  • Sparklines 的一课是,人脑能够解释小的数据元素,特别是当重要的是宏观趋势时。

这些原则在以下数据可视化中得到了说明。例如,大多数点太小而无法辨认。此外,颜色的饱和度或“alpha”属性设置为较少且为 100%,这样当点重叠时,它们看起来会变得更暗。

将高维数据投影到二维空间。这是通过 Matplotlib 制作的。

  • 对于直方图,尝试调整控制箱数的参数,直到你对箱子边界问题有一定的感觉。

  • 节点-链接图有其自身的特殊挑战,你可以在这篇插图文章中找到更多信息。

高级的 Python 数据可视化之旅

在我们生活在这个尘土飞扬的星球上时,有一些我们都应该知道的至关重要的真理。变化是唯一的常量;“自由市场效率”是关于信息流动和感知的一个命题,而不是市场运行的效果;社会基本上就像是“燃烧人节”,只是墙壁更坚固;我们都以每秒一秒的悠闲速度走向死亡(更不用提税季了),而在 Python 中使数据可视化效果更好的最快方法是将以下三行代码放在 Jupyter Notebook 的顶部:

from Matplotlib import pyplot as plt

import Seaborn as sns

sns.set()

一旦你完成了这些,你可以回到使用 Matplotlib 和思考时空的广阔以及整个的人类努力,仿佛什么都没有发生。实际上,发生的事情是我们使用了Seaborn的默认设置来清理 Matplotlib。(如果你不知道,Seaborn 基本上是一个经过清理的、更高级的 Matplotlib 版本,而 Matplotlib 本身是以 Matlab 为模型的。)如果 Matplotlib 证明过于繁琐,可以尝试 Seaborn。

让我给你展示一下区别。首先,这里有一些 matplotlib 代码用于可视化数据:

plt.scatter(range(len(counts)),counts)

plt.title("A Random Scatter Plot")

“之前”。

对比一下如果我运行以下代码会发生什么:

sns.set()

plt.scatter(range(len(counts)),counts,s=12)

plt.title("A Random Scatter Plot: Seaborn Defaults and Marker Size Adjustment")

Python 有几个用于创建数据可视化的包和包生态系统;点击这里阅读详细指南。Matplotlib 是其中最常用的工具。虽然没有人会因为制作 Matplotlib 插图而赢得“年度设计师”称号,但它非常适合可视化较小的数据集。同时,Matplotlib 并不适合快速可视化 10k 行数据,也不适合做很多偏离常规的操作。

要可视化大量数据,你可能需要查看一下DataShader 生态系统Bokeh非常适合交互式仪表板。对于 3D,你可以使用Matplotlib 扩展(mplot3d),或者查看Mayavi。如果你想用相对较少的代码制作出色的可视化效果,可以尝试Altair。说真的,试试 Altair,它可能会改变你的生活。

在 R 语言的世界里,标准的绘图库包括ggplot2lattice。前者是一个通用绘图库,后者则可以方便地从同一个数据集中生成多个小图。你可以在这里找到一份全面的 R数据可视化包清单。查看基础 R 数据可视化时,很容易产生这样的想法。

结论

数据可视化是理解数据集的工具。虽然某些可视化可以变成艺术,但制作高质量的日常视觉效果的基本技能对于任何数据导向的人来说都是无价的。尽管通常没有可视化就不能得出宏大的结论,但知道如何操控、调整大小、着色以及数据元素的运动是我们都可以达成一致的。

简介: SuperDataScience是一个面向数据科学家的在线学习平台,旨在帮助他们学习数据科学或提升职业生涯。我们使复杂变得简单!

相关:

更多相关话题