fit5147-data-vis

这门课因为当时已经开始准备博士申请了,因此没有时间好好做整理,这里就单纯分享一下一些上课原文内容。

总体来说,这门课非常有趣且实用,无论是未来做HCI人机交互的研究还是大厂里做运营或产品都能用上,从作业的R、D3(js)就能看出来。给分也和网上说的一样很慷慨。

W1

1. Introduction to data exploration and visualisation: Overview

1.1. Aims of this module

After completing this module you will:

  • Understand the important roles that visualisation plays in data science: data checking and cleaning, exploration and discovery, and the presentation and communication of results;
  • Introduce visual analytics and the complementary roles of visualisation and data analysis in data science;
  • Appreciate that data visualisation is not (just) about making cool looking InfoGraphics, it is about really showing the data in all of its messy detail;
  • Know a little about the history of data visualisation and how it has been shaped by factors such as: presentation technology, human cognitive abilities and limits, societal needs, data availability and the invention of different kinds of information graphics;
  • Have first-hand experience in data exploration and visualisation with easy-to-use visual analytics tools like Tableau and with programming languages like R.
  • Know about the What-Why-How framework for understanding data visualisation design
  • Have first-hand experience using the five design sheet methodology for designing data visualisations

1.2. How to study for this module

In this module, we draw on material in the public domain, including journal articles and quite a few videos.

In this module, there is one assessment activity: creating an interactive data visualisation with Tableau Public.

You should also start your data exploration project. By the end of the module, you should have identified what you want to investigate and where you are going to get your data from.

Good general introductions to data visualisation and visual analytics are:

  • Munzner, Tamara. Visualization Analysis and Design. CRC Press, 2014.
  • Ward, Matthew O., Georges Grinstein, and Daniel Keim. Interactive data visualization: foundations, techniques, and applications (2nd Ed). CRC Press, 2015.
    Other more specific references will be mentioned throughout the course.

1.2. Data Visualisation

The human visual system is amazing, almost half the human brain is devoted to vision. It is our primary sense for understanding the world. To “see” something is to understand it. In this module you will learn that interactive visualisation is one of the most important tools in the data scientists’ workbench, helping them to both understand their data and then to communicate what they have discovered to other people.

Data visualisation isn’t about creating cool InfoGraphics, it’s about creating visualisations that really allow you to understand the data. If you have a strong emotional reaction to the data visualisation it should be because of the underlying data, not the visual representation. To get a feel for the kind of visualisations we will be interested in take a look at the following two TED talks:

The first is by the late Hans Rosling The best stats you’ve ever seen (20 mins) and has become a classic in the data visualisation field. Bill Gates credits one of Rosling’s talks for convincing him to give billions of dollars to healthcare projects in developing countries (see Hans Rosling: the man who makes statistics sing).
Another great TED talk The beauty of data visualization (20 minutes) is by David McCandless
And spend some time looking at data visualisations developed by Tableau and Spotfire users

https://public.tableau.com/s/gallery
http://spotfire.tibco.com/demos/
Think about what you like in these visualisation and start to think about whether they are effective in allowing you to understand the underlying data. If they are then try and understand why are they effective. If not, what could be done to improve them.

1.3. 可视化分析和数据可视化的作用

数据可视化是理解数据的一种非常有效的方式。可视化与统计、数据挖掘和其他类型的计算分析的结合通常被称为可视化分析。这个术语是由 James Thomas 和 Kristin Cook 在 2001 年 9 月 11 日美国发生恐怖袭击后创造的。视觉分析最初的重点是帮助安全分析师和应急响应服务,但现在它被广泛用于商业智能和科学用于数据分析。

在 A Visual Analytics Agenda 中,Thomas 和 Cook 将可视化分析定义为“由交互式可视界面促进的分析推理科学”。它旨在“检测预期并发现意外”。

可视化分析就是在进行数据分析时将人置于循环中。如果您确切知道要测试的内容,则不需要人工,您只需运行分析即可。然而,如果你不确定你在寻找什么——这在数据科学中最常见——那么可视化分析支持对数据的交互式探索:

可视化数据,
做一些初步的假设,
运行适当的分析并可视化结果。
重复这个直到你找到你需要的东西。
可视化有效的一个原因是它们可以包含大量信息。标准统计度量,例如平均值、中位数、标准差或相关性,仅使用几个数字即可汇总数据。信息图形可能提供有关数据的更多信息,因为它可以显示数千(甚至数百万)个图形元素,每个图形元素都可以使用位置、颜色、图案或形状来编码有关数据的信息。

1973 年,统计学家 Francis Anscombe 构建了四个数据集来展示图形数据的重要性以及异常值对常用汇总统计的影响。这些组合被称为 Anscombe 四重奏。四组中的 x 和 y 值经过精心挑选,使得 x 值具有几乎相同的均值和方差,y 值具有几乎相同的均值和方差,并且它们具有相同的线性回归和相同的相关性。如果您不更仔细地查看数据,您会认为它们非常相似。然而,当数据被绘制成图表时,很明显数据集是不同的,并且它们具有非常不同的特征。

数据可视化有效的另一个原因是人类视觉系统。我们的大部分视觉处理都是预先注意的,并且是并行发生的。这意味着通过精心设计的可视化,我们可以非常快速地看到模式、异常和趋势——我们不必逐行阅读数据。我们立即从 Anscombe 的四重奏的散点图中看到不同的数据集是如何以完全不同的模式分组的。

活动
您可以使用此交互式散点图 (使用 R 和 Shiny 制作)探索数据集分组如何影响统计数据,例如平均值、标准差和相关系数 。

此散点图允许您通过单击添加数据点 - 您可以创建自己的数据集形状。当您添加点时,回归线、相关系数和 X 和 Y 的均值会动态更新。

添加数据点并观察各种形状的散点图对每个变量的均值和相关系数的影响。尝试重现 Anscombe 的四重奏的四个数据集形状,并尝试构建三个不同形状的散点图,每个散点图都与系数值 r=0.8 呈正相关。通过将大多数数据点聚集成一个圆形图案(观察相关系数的值)来探索异常值的影响 - 然后将一个点放在远处(尝试不同的位置)。观察相关系数如何仅受一个这样的“异常值”影响。

3. 可视化分析和数据可视化的作用

3.1。数据可视化在数据科学中的作用

数据可视化在数据科学中用于三个主要目的。

数据检查和清理。当您第一次获取数据时,您应该对各个特征进行一些快速绘图,以检查没有明显的错误并了解值的分布。

探索和发现。根据 Mike Lourdes(什么是数据科学?),世界领先的数据科学家之一希拉里·梅森(Hilary Mason)说,当她获得一个新数据集时,她会先绘制十几个或更多散点图,试图了解什么是可能很有趣。可视化揭示了可能的联系和模式,然后可以使用其他类型的分析来确认(或不确认)。可视化在理解任何类型的空间数据方面也起着关键作用。

结果的展示和交流。 可视化的另一个重要用途是呈现分析结果。这有两个主要目的:(1) 帮助您和其他建模者/分析师了解结果,以及 (2) 将结果传达给其他利益相关者。

3.2. 数据检查和清理

每当您第一次获得一些数据时,检查它是一个非常好的主意。这可以揭示简单的输入错误,如额外的 0、缺失值或数据中的奇怪模式,如 20% 的产品价格为 99.99 美元。这可能是正确的,也可能是数据错误。

以下是每个属性的快速检查列表:

看一些随机记录
计算数据的平均值、中位数和四分位数。看看这些的箱线图。
确定缺失值和无效值 (NaN) 的数量,特殊值(如 0)的数量。
确定不同值的数量以及它们是否真的不同。
绘制值的频率分布。这可能是直方图或密度图。您应该尝试选择 bin 宽度,因为这可以平滑数据。
检查分布的对称性(偏度)和平坦度/尖峰度(“峰度”,注意 platykurtic = 具有低峰的平坦分布,leptokurtic = 平均值附近的尖峰)。
查看异常值并检查它们是否应该被舍弃(修剪)向上或向下舍入(Winsorised)。例如,对于第 5 个和第 95 个百分位数之外的数据,可以这样做。
检查日期格式,确保它们处于可比较的时区。
在地图上绘制纬度和经度以检查它们是否合理。
检查文本是否有奇怪的字符或编码

如果您正在使用需要正态分布的统计测试,请检查数据是否看起来是正态分布的。有一些统计测试可以做到这一点,但它们可能非常挑剔。更好的方法是实际绘制数据并以图形方式测试正态性。

有两种方法可以做到这一点。首先是查看数据分布的直方图或密度图,看看它是否看起来像在均值附近输入的正态分布。另一种检验正态性的方法是使用 QQ 图。这在表格数据中的趋势和模式分析中进行了更全面的讨论

3.3. 探索与发现

数据科学的核心是探索数据并发现模式和趋势。可视化在这个过程中起着核心作用。散点图、时间序列、数据图、标签云和您将在本单元后面看到的许多其他类型的图形使数据科学家能够了解他们的数据及其之间的联系。作为此过程的一部分,可视化用于了解分析结果,例如聚类或曲线拟合。可视化对计算分析起着补充作用:它是分析结果如何呈现给数据科学家的方式,以便他们看到所有细节并“确认预期”或看到“意外”。

探索本质上是渐进的。一个可视化导致一个假设,该假设导致另一个可视化,看看这是否得到数据的支持,也许还有一些对假设的验证性统计测试。这反过来可能导致另一个假设。作为此过程的一部分,数据融合了来自不同来源的数据,并且该过程可能确定必须收集或找到新数据。探索期间的典型任务是:

搜索满足某些属性的元素(如果存在)。这可能是定位已知数据点、过滤数据或查找异常值。
识别单个数据项的属性
比较或排列元素
直观地识别某些元素子集中的模式。示例包括趋势、相关性、集群或类别。
计算最初不在数据中的派生属性。这些可能是数据转换、数据聚合或可能是统计属性,例如回归线或聚类
在本单元的许多活动中,您将探索数据并发现模式和趋势。我把最后一句话留给伟大的数学家 John W. Tukey:

图片的最大价值在于它迫使我们注意到我们从未期望看到的东西。JW图基。探索性数据分析,1977 年。

Tukey 发明了箱线图,根据维基百科,他还发明了“位”和“软件”这两个词。

3.4. 结果介绍

数据科学中可视化的另一个常见用途是传达分析结果。

这种交流可能是针对其他处理相同问题的分析师。在这种情况下,可视化通常是那些用于探索和发现的可视化,可能会稍微清理一下。

需要付出更多努力来准备图形和可视化,以便将结果传达给非数据科学家的利益相关者。在教育项目的情况下,这些人可能是经理、政策制定者或学生,在记者的情况下可能是公众。

这些类型的可视化需要相当长的时间来准备。它们通常用于传达特定的信息或叙述。需要设计图形以清楚地向读者传达该信息。生产价值也非常高:标准绘图包生成的绘图和图形通常使用 Adob​​e Illustrator 或 Inkscape 等图形编辑工具进行修饰。

一旦这些演示图形是静态的,通常打印在光面纸上或显示在 PowerPoint 演示文稿中。如今,它们通常是交互式的并在 Web 上发布。

在为演示开发数据可视化时,不要试图创建一个看起来很酷的 InfoGraphic。您需要仔细考虑呈现数据和故事的最佳方式,并确保它有效地传达它,并且不会通过隐藏复杂性来过度简化故事。

3.5. 概括

可视化在数据科学中用于三个重要目的:

初始数据检查和清理,
探索和发现,
和结果的介绍。
可视化是有效的,因为人类视觉系统允许并行感知大量信息。可视化分析是交互式可视化与统计、数据挖掘和其他类型分析相结合的名称。

4. 数据可视化简史

我们的现代世界充斥着信息图形;地图、计划、时间表、图表和图表。我们认为它们是理所当然的,是帮助我们交流和了解世界的工具。情况并非总是这样:很少有信息图形超过一千年,这表明它们在此之前相对罕见。

通过了解为什么信息图形和数据可视化变得司空见惯,我们可以更好地了解它们在数据科学中的作用以及它们在未来可能发生的变化。在本模块中,我们将介绍数据可视化的简史及其兴起的主要原因。我认为有四种原因:

用于生成和呈现图形的改进技术。 没有纸就不可能广泛使用信息图形,没有计算机就不可能实现打印和交互式数据可视化。
社会需求和对图形的态度的变化。 科学革命需要科学和医学插图,探索时代需要地图,工业革命需要工程图纸,而 21 世纪需要交互式数据可视化。
数据的可用性。 详细的地图需要准确的调查,而显示人口或财富分布的图表需要人口普查数据。
图形符号和交互技术的发明。 这些允许以有用的方式显示数据,满足社会的需求。它们形成一种视觉语言。
我们可以将数据可视化的历史分为四个主要时期。我们依次看这些。

4.1。史前史

人们普遍认为,示意图和宇宙图等信息图形已在传统的狩猎采集和自给农业社会中使用了数千年。然而,这方面的证据有些不确定,因为其中大多数可能是在沙子、树皮等短暂材料上产生的,甚至是在人体上绘制的。

澳大利亚土著人有着使用示意图和宇宙图的悠久传统。他们被认为是世界上现存最古老的文化之一,并在澳大利亚居住了 60,000 多年。他们的大部分艺术作品都展示了与地方的联系,并通过梦想时间的存在穿越土地。西部沙漠的岩画和版画可能是已知最古老的地图。这些显示了代表水洞的圆圈,连接线代表水洞之间的旅程。

4.2. 早期文明

公元前 3500 年左右,最早的文明出现在美索不达米亚和埃及的尼罗河谷。随后是大约公元前 2500 年印度印度河流域的文明和大约公元前 2000 年在中国黄河(黄河)附近的文明。文明也在美洲独立出现,首先是在公元前 500 年左右的中美洲,然后在南美洲。据信,当人口增长或气候变化给生活在被干旱土地包围的河谷或洪泛平原的维持生计水平的农民带来压力时,所有这些都出现了。由于周围的土地不适合耕种,增加粮食产量的唯一方法是建造大规模的灌溉和排水工程,这可以显着提高耕地的生产力,使其能够养活更多的人口。

在大多数这些早期文明中,我们发现了信息图形的证据。虽然古代美索不达米亚和埃及之间有接触,但其他文明之间几乎没有或根本没有接触,因此它们对信息图形的使用很可能是独立进化的。

这也许并不令人惊讶。早期文明也有类似的问题,因此提出了类似的解决方案。集中的政治权力需要记录土地所有权及其边界的方法——这导致了详细的地图记录财产边界(这些被称为地籍图)。计算税收和土地面积的需要导致了几何和几何图;计划军事行动、城镇和建筑物的需要导致了计划;而预测季节和其他周期性事件的需要导致了星图。了解一个人在世界上的位置的需要产生了象征性的宇宙学地图。

4.3. 印刷和纸张

虽然一些信息图形可以从史前时代或早期文明中幸存下来,但它们很少见。造成这种情况的主要原因之一是很难准确地再现图形。在印刷发明之前,所有的副本都必须手工完成。这是耗时且极易出错的。

在欧洲文艺复兴时期,这一切都发生了变化。中国发明的纸张和木刻版画通过伊斯兰世界传入欧洲。纸张大约在 12 世纪问世,紧随其后的是印刷术。起初,木版印刷被用于生产塔罗牌和扑克牌等物品。它也被用于印刷书籍,尽管它不太适合这一点,因为文字所需的精细细节很难雕刻且耗时。大约在 1440 年,Johannes Gensfleisch zur Laden zum Gutenberg 发明了印刷机和可移动的金属活字。这彻底改变了书籍的生产,很快木版插图与印刷相结合,允许生产插图书籍。

在接下来的五个世纪里,印刷技术不断进步。铜版印刷可以提供更精细的细节,而 19 世纪后期的平版印刷首次提供了廉价的高质量彩色印刷品。

到 20 世纪初,信息图形无处不在。教育和参考书籍以及报纸和杂志等流行媒体包含各种各样的图表和地图,街道地图和地图集普遍使用,图形广泛用于科学、医学、建筑和工程以及商业和政府. 我们现在看看这些不同种类的图形是什么时候开发的。

4.4. 信息图形的兴起

现代科技绘图技术起源于欧洲文艺复兴时期。它们为现代科学、医学、工程和建筑的出现奠定了基础。草图是建筑师和工程师用于设计的主要工具,他们通过查看现有建筑物和机器的图纸和计划来学习他们的技能,并使用图纸和计划与客户沟通并向建筑商指定最终设计。

文艺复兴时期的一项重大发现是以线性和平行透视绘制建筑物和机器的规则,以及使用测量平面和多视图正交投影来精确指定其尺寸的规则。随着建筑师和工程师成为独立的职业,并且建筑工艺方法被设计和施工之间的分离所取代,这些都是必要的。

绘图和图表对现代科学和医学同样重要。这些依赖于科学家分享他们的观察和理论。如果没有插图,早期科学家就不可能分享他们对自然、人体解剖学、早期欧洲探险家遇到的新型动植物以及通过望远镜和显微镜可见的新世界的观察。

插图不仅对于记录观察很重要,它们还允许科学家交流新的实验设备和设计。对于许多科学家来说,图表和心理图像是让他们了解自然并将由此产生的理论有力地传达给其他科学家的工具。

在文艺复兴时期,地图也变得更加重要。葡萄牙探险家沿着非洲海岸一路前行,最终绕过非洲底部到达印度尼西亚的“香料群岛”或摩鹿加群岛,克里斯托弗·哥伦布前往美国,尽管他坚持认为自己实际上已经到达了亚洲。

水手们需要准确的地图,地图制作技术迅速提高。经纬度以及精确的比例尺成为标准。印刷使公众能够看到这些新发现的地图,世界上第一本地图集于 1570 年印刷。

直到 17 世纪和 18 世纪,更多抽象材料的图表才变得普遍。在此之前,表格是显示抽象信息的常用方式。例如,许多从古代美索不达米亚幸存下来的泥板都包含由新手抄写员完成的数学练习表。人们几乎可以听到小男孩(当然没有女孩)的呻吟声,因为他们被迫记住以 20 和 60 为基数的数字系统所需的非常大的乘法表。

信息图形的一个关键思想是使用平面上的位置来表示二维数值数据—— 笛卡尔平面。这概括了地图中使用的纬度和经度。Rene Descarte 和 Pierre de Fermat 在 1600 年之后独立发明了这个基本思想。 1686 年,Edmund Halley 是第一个使用笛卡尔图进行数据分析的人,通过将双曲线曲线拟合到气压与海拔的关系,但曲线拟合的散点图并不常用直到19世纪。

通常我们希望用其他类型的信息覆盖地图。Edmund Halley 也开创了这种信息图形。这些 地图被制图师称为专题地图 ,但我更喜欢使用 Edward Tufte 的名字,即 数据地图。哈雷在 1686 年创建了第一张显示风向的数据图,并在 1701 年使用显示磁变化的等值线创建了另一张数据图。同样值得注意的是 1607 年 Jodocus Hondius 绘制的地图,显示了宗教的分布

认知研究表明我们使用空间推理来思考时间。这可能就是为什么英语(和许多其他语言)隐含地使用空间隐喻来表示时间:一个事件发生在另一个事件之前或之后。一个事件比另一个事件花费更长的时间。因此,令人惊讶的是,时间线的发明花了多长时间。Joseph Priestly 于 1769 年介绍了他们:见他 的传记图表。在此之前,表格是组织时间数据的标准方式:国王和王后列表等。William Playfair 在 1786 年建立在 Priestly 的思想基础上,发明了 折线图、 条形图 和 饼图。

从那时起,各种图表、图表和图形的发明迅速而激烈,用于显示各种数据。这并没有停止,有数百种不同的图形。我们将在接下来的三个模块中介绍其中最有用的部分。

4.5. 交互式数据可视化

20 世纪上半叶信息图形的广泛使用是由于纸张和印刷的发明而成为可能的。在 20 世纪中叶,还有另一项发明,它对数据可视化的影响不亚于纸张和印刷。这当然是电脑。

像 Ivan Sutherland 这样有远见的人看到计算机可以允许以完全不同的方式与图形交互。一种以交互方式使用计算机创建新图形的方法。Sutherland 在 1960 年代初为他在 MIT 攻读博士学位编写了一个革命性的计算机程序 Sketchpad。Sketchpad 是第一个交互式图形编辑器。它介绍了计算机图形学的基本算法和技术,是现代 CAD 系统的祖先。它还介绍了一种简单的面向对象编程。Sutherland 因这项研究于 1988 年获得图灵奖。以下视频显示了 Ivan Sutherland 在 1962 年左右展示 Sketchpad 的早期电影剪辑。评论由 GUI 研究的另一位先驱 Alan Kay 提供。

同样在 1960 年代,Roger Tomlinson 创建了第一批 GIS 系统之一,即加拿大地理信息系统 (CGIS)。在 AT&T 贝尔实验室工作的 Edward Fowlkes 创建了一个早期的交互式统计包,该包使用刷亮来选择异常值,以便在多部分显示中删除和链接点。

这些系统是第一个支持计算机介导的数据可视化的系统,用户可以在其中交互式地探索和可视化数据。它们导致了几个不同的研究领域: 地理信息系统 (GIS),它捕获、存储、操作、分析、管理和呈现地理数据;科学可视化 (SciVis),关注可视化具有固有空间表示的科学数据;信息可视化(InfoVis),用于可视化更抽象的数据;用于设计建筑物和机器的 CAD/CAM 系统。

计算机技术的变化正在继续推动数据可视化的创新。网络的兴起意味着演示图形现在发布在网络上而不是纸上,这可能允许读者与图形进行交互。Oculus Rift、HTC Vive 或 Microsoft HoloLens 等新型虚拟现实 (VR) 和增强现实 (AR) 设备看起来将再次彻底改变数据可视化。

4.6. 概括

我们已经看到数据可视化如何使用了数千年。它的历史受到社会需求、数据可用性以及基础生产和演示技术的影响:纸张和印刷,然后是计算机。我们今天认为理所当然的大部分信息图形,例如地形图、测量平面图,甚至散点图和条形图,都是在过去六百年中精心开发的。他们的发明是现代世界的伟大成就之一。

5. 数据探索和可视化工具

数据科学家使用各种不同的工具进行数据探索和可视化。它们分为三个主要类别。

5.1。介绍

5.1.1 通用编程语言

使用了两种主要的编程语言

用于数据可视化和探索的最广泛使用的语言可能 是R。虽然我发现 R 是一种难以使用的语言,但它具有令人难以置信的数据分析和可视化库。 Hadley Wickham的ggplot2是最好的图形库 之一。

下一个最常见的选择是 Python。这是一种更好的语言,但没有太多的分析包选择。它是数据处理的理想选择,Python 通常用于数据的抓取和融合,然后 R 用于探索和可视化。

为 Web 创建交互式演示图形的一种越来越流行的选择是

带有 D3 数据可视化库的JavaScript 。它通常不被数据科学家用于其他目的。
编程语言方法的最大优点是原则上你可以做任何事情。

5.1.2 通用可视化分析工具

提供了许多易于使用的数据分析和可视化工具。例子包括

SAS Visual Analytics 是许多 SAS 分析工具的可视化前端。
Tableau 是一种易于使用的可视化分析工具,商业智能通常使用它来交互式探索表格数据。它允许在网络上发布交互式图形。它有一个商业版本和一个名为 Tableau Public 的免费限量产品。
Qlik 是另一种广泛用于商业智能的可视化分析工具。

5.1.3 应用特定的可视化分析工具

第三类工具是为帮助特定应用领域的数据分析而设计的系统。其中有很多。作为一个例子看

国家地图 旨在在澳大利亚地图上显示澳大利亚政府数据

Scaffold Hunter 旨在分析生命科学中的数据,重点是药物发现。

5.2. 活动:使用 Tableau Public 探索和可视化数据

5.3. 活动:使用 R 探索和可视化数据

5.3.1 R 地图上的数据

您将需要 R 和 RStudio,还需要安装以下库(和依赖项):

  • ggmap
  • ggplot2
  • maps
  • mapproj
    如果您不确定如何执行此操作并想探索一些有关 R 的基础知识。

看看:

  • RStudio 教育
  • Torfs & Brauer 的“R 的 A(非常)简短介绍”[pdf]

第1步
运行 RStudio,安装库,尝试以下代码(复制、粘贴、运行):

1
2
3
4
5
6
7
library(ggmap) 
library(ggplot2)
library(maps)
library(mapproj)
# or you can try e.g. require(maps)
# map("usa")
map('state') # not necessary, just checking we can draw a map

您应该看到美国各州的基本地图

如果错误显示为“Plot region too large”。

您只需将 RStudio 的 右下 部分调大。

步骤 2 读取修改后的数据文件(已添加状态名称和代码)。
在 Household-heat-by-State-2008.csv 下载文件,并将其放入您的工作目录。

1
2
3
data <- read.csv("Household-heating-by-State-2008.csv", header=T) 
head(data)
names(data)

Step 3 名字有点多,简化一下我们感兴趣的:

1
2
names(data)[4] <- "MobileHomes"
names(data)

第 4 步现在按州对 Mobile Home 数据进行分组,计算平均值:

1
ag <- aggregate(MobileHomes ~ States, FUN = mean, data = data)

查看骨料的参数。

MobileHomes ~ States 表示按州对移动房屋数据进行分组

FUN = mean 意味着计算它们的平均值,

应该有多少个州?

1
2
head(ag) 
dim(ag)

暂时不用担心第一个“#N/A”状态,如果你愿意,可以删除它

Step 5 获取地图数据(ggplot2包内置地图数据)

1
2
3
m.usa <- map_data("state") # we want the states 
head(m.usa)
dim(m.usa) # more info than we need

第 6 步强制我们的状态为小写以匹配地图,同时保留一列数据

1
2
3
4
5
6
df <- data.frame(
region = tolower(ag$States),
MobileHomes = ag$MobileHomes,
stringsAsFactors = F
)
dim(df)

50个州?

第 7 步现在将其绘制在地图上(查看所有这些图层……)

1
2
3
4
5
6
7
8
# Create a empty canvas
ggplot(df, aes(map_id = region)) +
# draw the grid
expand_limits(x = m.usa$long, y = m.usa$lat) +
# draw a us map, fill = MobileHomes means color the map according to MobileHomes property
geom_map(aes(fill = MobileHomes), map = m.usa) +
# fix the ratio of the x and y axises, to match a map
coord_map()

5.4. 活动:使用 D3 探索和可视化数据

在本活动中,您将使用 D3 构建等值线图。

别担心,它会比你想象的更容易……

5.4.1 简介

D3。( Data-Driven Documents ) 是一个基于 HTML5/SVG + JavaScript 的数据可视化工具包。它允许您创建可以在 Web 浏览器中查看的动态和交互式数据可视化。D3 是一个 JavaScript 库。JavaScript 是一种用于网页的编程语言。它用于从动态内容创建网页并根据用户交互进行更改。与 HTML 和 CSS 一起,它是现代网页设计的支柱之一。

D3 起源于 Protovis。D3 非常强大,可以让您创建几乎任何您能想象到的可视化。您可以查看一些示例: https 😕/github.com/mbostock/d3/wiki/Gallery

如果您查看代码,您会发现这种能力是有代价的:D3 相当复杂并且依赖于几个不同的概念。但是,在此活动中,我们不会深入探讨所有细节。相反,您可以有一些使用 D3 的实践经验。稍后在本单元中,您将了解有关 D3 的更多信息。或者,如果您迫不及待,这里有免费的 D3 综合在线教程:

Scott Murray 的 D3 教程

如果您不熟悉 JavaScript,您可能想查看有关 JavaScript 的 W3C 教程 https://www.w3schools.com/js/

5.4.2 准备

下载 地图文件。
该文件包含美国不同州地图的详细信息。基本上,它保存地理形状的记录,如线、点等。
(可选)查看 http://geojson.org/ 了解更多详细信息。

下载 数据
许可:CC Attribution 4.0 International (CC BY 4.0)

为了保持一致,我们将使用我们在 R 活动中使用的相同数据。D3(甚至 JavaScript)都不是数据处理的理想工具,所以这里我们使用由 总计的 R中的函数。

设置静态web服务器
出于安全考虑,浏览器不能直接访问本地文件,所以需要设置静态web服务器,让我们的D3脚本加载数据。最 简单的方法 是下载 Microsoft 的Visual Studio Code(适用于 Windows、Mac 和 Linux)。这是一个具有实时预览功能的文本编辑器,当您想使用实时预览查看时,可以通过安装“Live Server”扩展并使用“使用 Live Server 打开”来访问它。第 0 周提供了有关安装的更多信息。或者,如果您已经知道如何设置静态 Web 服务器,则可以使用您喜欢的文本编辑器并跳过此步骤。

(可选)如果您更喜欢启动静态服务器,您可以这样做:

安装 Python(在 Windows 上,大多数 Linux 和 Mac OS 应默认安装 Python)
将 Python 添加到系统路径(在 Windows 上)
使用终端(命令行)进入您的项目目录/文件夹(使用 cd 命令)
运行命令:
对于 python 2:
python -m SimpleHTTPServer 8000
对于 python 3:
python -m http.server 8000
然后您可以在浏览器中打开 http://localhost:8000/ 以访问您的 D3 可视化。

5.4.3 设置 HTML 页面

使用菜单 文件 -> 新建 要创建一个空文件,请将其保存到保存所有下载数据的文件夹中,名称为 us-map.html(如果您不喜欢,当然可以更改名称)。

让我们创建一个基本的 HTML 页面:

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>US Mobile Homes choropleth map</title>
</head>
<body>
<svg></svg>
</body>
</html>

如果您使用的是 Brackets,请单击右侧的“闪电”图标以查看这个全新的网页。

正如预期的那样,您将看到一个空白页面,但是,如果您足够小心,您会发现浏览器选项卡上的文本是“US Mobile Homes choropleth map”。

5.4.4 初始化 svg 画布

我们需要一个画布来绘制我们的可视化。

幸运的是,我们已经定义了我们的 svg HTML 中的元素。(SVG 是矢量图形的 HTML5 标准)

我们将利用 D3 的优势

选择 访问 svg 元素的函数
属性 修改svg元素属性的函数,以及
风格 修改svg元素样式的函数
首先,我们需要在我们的网页中引用 D3 库,添加

<script src="https://d3js.org/d3.v4.min.js"></script>
到我们 HTML 的正文部分。

为我们自己的 JavaScript 代码创建另一个脚本部分,并初始化 svg 元素。整个 HTML 应如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
<title>US Mobile Homes choropleth map</title>
</head>
<body>
<svg></svg>

<script src="https://d3js.org/d3.v4.min.js"></script>

<script>
var width = 960;
var height = 500;

var svg = d3.select("svg")
.attr("width", width)
.attr("height", height)
.style("border", "1px solid");
</script>
</body>
</html>

在浏览器中刷新网页:您现在应该可以看到我们的画布了。

当然,如果你有 web 开发经验,你知道这个过程可以在没有 javascript 的情况下完成,你可以简单地编写 SVG 代码

这里我们要演示D3的一些基本功能。

5.4.5 读取数据

我们将利用 D3 的请求函数来加载数据。(可选)更多详情请访问: https 😕/github.com/d3/d3/blob/master/API.md#requests-d3-request

我们可以用 d3.json 和 d3.csv 函数分别加载我们的地图和数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
<head>
<title>US Mobile Homes choropleth map</title>
</head>
<body>
<svg></svg>

<script src="https://d3js.org/d3.v4.min.js"></script>

<script>
var width = 960;
var height = 500;

var svg = d3.select("svg")
.attr("width", width)
.attr("height", height)
.style("border", "1px solid");

d3.json("us-states.txt", function(mapData){
d3.csv("MobileHomes.csv", function(data) {

});
});
</script>
</body>
</html>

5.4.6 绘制地图

让我们首先关注地图。

地图文件为 GeoJson 格式,包含纯地理信息。

要绘制地图,我们需要将地理信息(纬度、经度)转换为屏幕的二维坐标 (x 、y )(X,是的).

这个过程称为 地图投影,您将在本单元中学习(很多)更多细节。

D3提供了很多不同的地图投影!可能是 Javascript 中可用的最全面的集合。(可选) https://github.com/d3/d3-geo-projection

我们使用下面的代码来定义我们稍后要使用的地图投影。

1
2
3
4
5
6
7
8
9
10
11
12
// Map projection
var projection = d3.geoAlbersUsa()
// move the center of the map to the center of our canvas
.translate([width / 2, height / 2])
// scale things down so see entire US
.scale([1000]);

// Define path generator
// path generator that will convert GeoJSON to SVG paths
var path = d3.geoPath()
// tell path generator to use the previous map projection
.projection(projection);

在此之后,绘制地图非常容易:

1
2
3
4
5
6
7
8
9
10
11
var states = svg.selectAll("path")
// bind the geographic data to svg elements
.data(mapData.features)
// create one "path" svg element for each datum
.enter().append("path")
// using the map projection to convert geographic information to screen coordinates
.attr("d", path)
// change the style properties for the svg
.style("stroke", "black")
.style("stroke-width", "1")
.style("fill", "white");

现在,刷新您的网页,向美国地图问好。

如果你什么都看不到,可能这又是一个关于工作目录的把戏。

请使用顶部的菜单“文件 => 打开文件夹”,然后选择您保存所有文件的目录。

然后再次尝试“闪电”按钮。

5.4.7 给地图上色

我们首先需要一点数据处理。

为了使不同状态的颜色与其值成正比,我们需要知道:

每个状态的值
所有状态的最小值和最大值
这可以通过以下方式实现:

1
2
3
4
5
6
7
8
9
10
var country2value = {};
var minValue = Infinity;
var maxValue = -1;
data.forEach(function(d){
var thisValue = d["MobileHomes"];
country2value[d["States"]] = thisValue;

minValue = Math.min(minValue, thisValue);
maxValue = Math.max(maxValue, thisValue);
});

我们还需要一个颜色映射来将值映射到颜色。

一个不错的选择是使用 d3-scale-chromatic 图书馆。
(可选) https://github.com/d3/d3-scale-chromatic

我们先引用这个库:
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
在这里,为了制作用于比较值的等值线图,我们要将连续值映射到 顺序的 颜色。

这种颜色映射接受从 0 到 1 的数字参数并将它们映射到相关颜色。

通常浅色代表小值,深色代表大值。

需要创建两个映射:

将值映射到 0-1 的范围
将上述输出映射到颜色
var value2range = d3.scaleLinear()
.domain([minValue, maxValue])
.range([0, 1])
var range2color = d3.interpolateBlues;
感谢您的耐心等待,现在是时候完成几行代码了。

states.style(“fill”, function(d){
return range2color(value2range(country2value[d.properties.name]));
});

整个网页应如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<!DOCTYPE html>
<html>
<head>
<title>US Mobile Homes choropleth map</title>
</head>
<body>
<svg></svg>

<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>

<script>
var width = 960;
var height = 500;

var svg = d3.select("svg")
.attr("width", width)
.attr("height", height)
.style("border", "1px solid");

// Map projection
var projection = d3.geoAlbersUsa()
// move the center of the map to the center of our canvas
.translate([width / 2, height / 2])
// scale things down so see entire US
.scale([1000]);

// Define path generator
// path generator that will convert GeoJSON to SVG paths
var path = d3.geoPath()
// tell path generator to use the previous map projection
.projection(projection);


d3.json("us-states.txt", function(mapData){

var states = svg.selectAll("path")
// bind the geographic data to svg elements
.data(mapData.features)
// create one "path" svg element for each datum
.enter().append("path")
// using the map projection to convert geographic
// information to screen coordinates
.attr("d", path)
// change the style properties for the svg
.style("stroke", "black")
.style("stroke-width", "1")
.style("fill", "white");

d3.csv("MobileHomes.csv", function(data) {

var country2value = {};
var minValue = Infinity;
var maxValue = -1;
data.forEach(function(d){
var thisValue = d["MobileHomes"];
country2value[d["States"]] = thisValue;

minValue = Math.min(minValue, thisValue);
maxValue = Math.max(maxValue, thisValue);
});

var value2range = d3.scaleLinear()
.domain([minValue, maxValue])
.range([0, 1])

var range2color = d3.interpolateBlues;

states.style("fill", function(d){
return range2color(
value2range(country2value[d.properties.name])
);
});
});
});
</script>
</body>
</html>

6. 设计数据可视化

Tamara Munzner 开发了用于理解数据可视化设计和评估的最广泛使用的框架之一。这包括三个部分:

要可视化的数据类型是什么?
为什么 要可视化数据——用户希望执行什么任务?
数据如何 可视化表示以及提供了哪些交互
问题来自应用程序,并不关心 如何 (起初)。

6.1。什么:数据种类

不同类型的可视化适用于不同类型的数据。我将对不同类型的数据集和不同类型的数据使用以下分类。在本单元中,我们将主要对四种数据集感兴趣:

表格数据集:我的意思是概念上组织成表格的数据,每一行对应一个不同的数据点或项目,每一列对应于数据的不同属性。这是传统统计学可以处理的数据类型,R 就是为这种数据设计的。
网络数据集:这是由节点或项目以及这些节点之间的链接组成的数据,这些节点代表不同类型的抽象关系,例如“reports-to”或“is-married-to”。项目可以包含属性。层次结构 是一种网络数据集。
空间数据集:这是其中项目与地理位置或区域相关联的数据,此地理键是组织和理解数据的自然方式。
文本数据集:这种数据集由单词序列和标点符号组成。
这些不是组织数据的唯一方式,但它们是数据科学和数据可视化中最常用的数据集类型。在科学可视化中使用的另一种组织数据的方法 field 是从连续的、概念上无限的域中采样数据。组织为字段的数据的一个示例是 X 射线图像。

数据项中的属性是可以测量或记录的简单值。他们可以

分类:没有固有顺序的数据。它通常被组织成一个层次结构。示例包括名称。
Ordered:可以排序或排序的数据。它有两个亚型
Ordinal:可以排序但项目之间的差异没有算术意义的数据。示例包括衣服尺寸(小、中、大)和调查响应量表,例如允许受访者从 5 点量表中进行选择,例如“强烈反对”、“不同意”、“中立”、“同意”、“强烈同意’。
定量的:具有支持算术比较的量级的数据。例如身高或体重。这可以是整数或实数。时间是定量数据的一个重要例子。有时定量数据分为 区间数据 和 比率 数据,但这种区别通常并不那么重要。不同之处在于比率数据具有自然 0,而区间数据则没有。因此,长度是比率数据的示例,而日期是间隔数据的示例。
有序数据既可以是 连续的,在这种情况下有最小值和最大值, 也可以是发散 的,在这种情况下可以理解为两个方向相反的序列,例如 从 -5 到 5 的喜欢/不喜欢比例在中性值 0 附近发散。有序数据也可以是循环的,其中值环绕。时间测量通常是循环的,例如一年中的几个月。

显示的数据不仅是原始数据,还可能是从原始数据计算得出的数据,例如统计值。

6.2. 为什么:任务

在设计可视化时,了解它需要支持的高级目标和任务是至关重要的。这些有很多分类。

发现:分析师想要完成的基本任务是从数据中获得洞察力或知识。期望的结果可能是制定假设(“发现意外”)或检验假设(“确认预期”)。假设可以采取因果关系、趋势、相关性或集群的形式。

展示:这个目标是指向某些目标受众展示已经发现的洞察力或知识。

享受:这个目标是指创建旨在吸引临时用户参与数据的数据可视化。例如,这可能是一个有吸引力的信息图或像 Name Voyager这样的可视化 ,它显示了儿童名字的演变。

我们将专注于发现任务。这依赖于执行一系列分析任务:

搜索 满足某些属性的元素(如果存在)。这可能是定位已知数据点、过滤数据或查找异常值。
识别 单个数据项的属性
比较 或 排列 元素
直观 地识别某些元素子集中的模式。示例包括趋势、相关性、集群或类别。
计算 最初不在数据中的派生属性。这些可能是数据转换、数据聚合或可能是统计属性,例如回归线或聚类
分析任务依赖于演示任务:

通过将元素及其属性映射到可视变量来创建视图来进行可视化
通过导航和选择元素子集来操作(或配置)视图
还有其他支持分析任务的用户任务

用文本或图形元素注释 视觉元素
记录 可视化元素,以便可以在分析工具之外保存和访问它们。例如,Tableau 记录了一个图形历史记录,其中包含显示当前可视化是如何达到的快照
重新访问 早期的可视化或重新定位分析师先前发现的元素或模式

6.3. How: vis术语

一旦你知道 你 想要可视化什么以及 为什么 要可视化,你需要决定 如何 最好地可视化它。Munzner 将其分为:

(Visual) Encoding(视觉)编码:数据如何映射到每个视图中的视觉和空间变量;
Manipulate:用户如何与可视化和数据交互
Facet:如何排列和组合不同的视图
Reduction and Statistical Analysis缩减和统计分析:对数据进行聚合、过滤和统计分析的不同方式。

6.4. 概括

在本主题中,我们介绍了 Munzner 的 What-Why-How 框架,用于理解数据可视化设计。在随后的模块中,我们将更详细地研究不同类型数据的常见视觉编码和分析。

7. 活动:五个设计表方法论

设计有效的数据可视化并不容易。与建筑、平面设计或软件设计等其他类型的设计活动一样,一个好的方法是生成、探索和评估各种不同的设计解决方案。草图和低保真原型让设计师可以快速探索想法,而不会陷入技术细节的困境。

引入了 五张设计表方法 (FdS) ,作为将这种设计方法形式化的一种方式,并用于向新的数据可视化设计师教授设计。正如您可能从 FdS 的名称所期望的那样,设计人员需要制作 5 个设计表。它以客户为中心,依靠与客户的初步讨论来了解需求,然后与客户讨论设计理念(表 2、3、4)。

准备

确定 要 可视化的数据类型以及 为什么 要可视化。准备好纸、尺子、彩色钢笔和铅笔,开始设计并弄清楚 如何设计。

表 1:想法表

这是最初的头脑风暴表。考虑设计的不同可能想法并将它们记下来。放松,在这个阶段没有任何想法是坏的。目的是充分探索设计空间,

产生尽可能多的 想法 ,大约在 10 到 20 个之间。这可以单独完成,也可以在小组中完成。在纸上画出设计图。在这个阶段,它们将是迷你想法、半生不熟的解决方案。

下一步是 过滤 小想法,删除重复和不相关或不可能的概念。

将小创意分组到 类别中。想想是否有一些缺失的类别。

将小创意组合并提炼 成更完整的解决方案。想想哪些可视化是相互补充的。

质疑 并反思你创造的东西。这些设计是否解决了最初的问题?它们的优点和缺点是什么?确定在表 2,3 和 4 中将更详细地探讨哪 3 个想法。选择最好的想法和两个同样不错但完全不同的设计。

表 2、3 和 4:替代设计

现在细化工作表 1 中确定的三个设计。为每个设计制作一个包含 5 个面板的工作表

信息:适当的元信息,例如标题、作者和数据
布局:绘制最终的可视化或界面
操作:列出可视化界面使用 Action -> Result 对支持的操作。
Focus/Parti:详细说明可视化或界面中的核心概念
讨论:讨论设计的优点、缺点、可行性。这可能与客户一起完成

表 5:实现

这是设计师的最终设计,详细说明了要交付的概念。这包含足够的关于设计、功能和交互的信息,以便实现它。它可能包括

主要设计模式、算法或数据结构和参考的描述
设计中使用的基础 数学 和计算,例如布局尺寸
软件 需求、依赖关系等
成本、时间等估算
所需的任何 其他 要求或资源。
有关 FdS 的更多信息,请查看设计表 网站 和介绍它的论文 JCRoberts、CJHeadleand、PDRitsos,“使用五个设计表方法论绘制设计草图”, 可视化和计算机图形学交易,IEEE,22(1), 2016 年 1 月。

W2 & W3

1. 理解表格数据:概述

这是 FIT5147 数据探索和可视化单元中的第二个模块。在本模块中,您将了解用于显示表格数据的常用图形。这些是统计中常见的图形。

1.1。本模块的目标

完成本模块后,您将拥有:

查看用于显示表格数据的许多标准可视化(折线图、条形图、频率分布、时间序列数据等)并知道何时使用它们;

查看多元表格数据(小倍数、MDS 等)的标准可视化,并知道何时使用它们;

使用这些可视化来理解数据分布、测试假设(如正态性)和指导数据转换的能力;

熟悉数据的曲线和曲面拟合;

了解数据聚类技术;

对 R 和图形包ggplot2 有第一手经验

读取、检查、清理和转换数据;

为表格数据、曲线拟合、数据聚类和理解数据分布构建标准可视化;

使用包 Shiny创建交互式可视化。

1.2. 如何学习这个模块

在这个模块中,我们利用公共领域的材料,包括期刊文章和不少视频。我们还采访了一些数据可视化专家

2. 可视化表格数据

2.1。基本统计图形

各种简单的统计图形用于显示二维表格数据。这些图形显示了单个属性的数据分布和计数,或者一个属性相对于另一个属性如何变化,包括时间。此类图形仅显示单个属性的值或两个属性之间的关系。我们提供了最常见的简要回顾。

对于表格数据,通常有一个 键 (又名 因子),这是一个独立的属性,充当数据的索引,而从属属性称为 值。关键属性可以是分类的或有序的,并且可以按层次组织。关键属性的不同值通常称为 级别。值属性可以是任何类型的属性:分类的、有序的或定量的。最常见的图形如下:

  • Scatter plots 散点图 是应用最广泛的统计图形之一。它们显示了两个定量值变量,并且可以揭示变量之间的线性或曲线关系、变量之间的相关性以及极值(异常值)的存在。
  • Bar charts 条形图 和 polar area charts极区图 显示键的定量值。条形图更易于阅读。
  • Pie charts 饼图 或 normalised stacked bar chart 标准化堆积条形图 显示部分对整体的相对贡献。一般来说,饼图和其他径向布局比直线布局更难阅读。
  • Line charts 折线图 或 dot charts 点图 显示有序关键属性的一个定量值。如果在值之间进行插值有意义,则使用折线图。通常用于显示时变数据。
  • Histograms 直方图 (如bar chart条形图)和 density plots 密度图 (如line chart折线图)通常用于显示单个属性的数据值的频率。
  • Box-and-whisker plots 盒须图 或 violin plots 小提琴图 提供了频率分布的简明摘要。
  • Heat maps 热图 通常用于显示具有两个键的单个值属性。可以对行或列进行重新排序和聚类,以便具有相似数据值的键相邻。
  • Tree maps 树图 可用于显示分层组织键的定量数据。

2.2. 多元数据 Multivariate data

在大多数现实世界的数据科学应用程序中,表格数据是 多变量的:它具有两个以上的属性,通常更多。所以问题是,我们如何才能在二维(或至多三维)表面上显示两个以上的属性。Edward Tufte 将此称为离开 平地的问题。幸运的是,已经发明了许多用于显示多变量数据的巧妙图形,并且是数据科学家可视化库的重要组成部分。

2.3. 显示 3D

最简单的情况是当我们只为我们的问题添加一个维度并希望可视化三个变量的值时。在这种情况下,我们可以使用在 科学可视化中开发的技术 来显示物理对象,例如建筑物、晶体或生物,或者我们 3D 世界中的流体、场或气体的行为。

一种方法是在 2D 表面上显示第三个变量的轮廓 - 轮廓:
另一种是用三维扩展常见的 2D 图形,并使用 WebGL 等 3D 图形格式以 3D 形式呈现生成的 3D 对象、点云或表面。例如,通常在 3D 散点图中绘制数据点并使用金属丝网表面显示拟合曲线。

我们还可以使用动画来展示额外的维度,展示二维图形在不同时间点是如何变化的。当要可视化的额外维度实际上是时间时,这是最有意义的。

当然,以下任何用于多元可视化的更通用技术都可以用于三个变量的特定情况。

2.4. 额外的视觉属性

图形和图表由不同种类的几何对象组成:点、线和多边形。它们具有位置、形状,即一个点可能是十字形或圆形、多边形或条形、大小和视觉但非空间特征,例如颜色、纹理、阴影、线条粗细和样式、填充颜色,模糊等。其中一些特征,如颜色或纹理,可以进一步分解。例如色调、饱和度和亮度是颜色的独立属性。

这种过多的空间和视觉特征可用于编码多个数据属性。因此,虽然图形乍一看是二维的,但实际上由于这些附加属性,它实际上是多维的。

然而,虽然这可能非常有用,但生成的图形可能难以理解,可能难以感知不同属性之间的关系,并且在选择如何将数据属性映射到不同的空间和视觉特征时必须小心特征适合于对不同类型的数据进行编码。

赫尔曼·切尔诺夫(Herman Chernoff)设计了一种显示多变量数据的更不寻常的方法。人类视觉系统的一部分专门用于人脸识别。为此拥有一个专门的组件具有进化意义,因为能够快速识别手持长矛接近的人的脸非常重要,这样您就知道是应该拥抱他们还是开始跑步。切尔诺夫发明了小卡通面孔的使用,现在称为 切尔诺夫面孔,其形状、耳朵大小、鼻子、眼睛、颜色以及眼睛和嘴巴的角度等特征都可以编码一个单独的数据属性。我个人觉得它们很可爱,但很难阅读。

2.5. 多个图表

处理多变量数据的一种方法是简单地使用多个图形。最常见的方法之一是选择一个变量,并为此变量的每个值(或如果有太多的选定值)创建一个图表,然后使用通用比例将生成的图表放置在网格、列或行中这样您就可以轻松地比较图表之间的值。塔夫特称这些 小倍数。每个图表显示数据的一个切片或横截面。

另一种常见的方法是使用 scatter plot matrix 散点图矩阵 或 SPLOM 。顾名思义,这是一个二维散点图数组。每个维度都有一行和一列, 第 x 行 和 第y 列的条目显示了( x , y ) 的散点图 (X,是的) 价值观。这种图表有时被称为 绘图员显示 ,因为它显示了多维数据的正交投影,类似于由建筑师和工程师使用的地面平面、立面和立面组成的多视图正交平面图。

一种相关的方法是使用包括多个简单图表的 coordinated display 协调显示 ,这些图表可能是不同种类的。每个都显示数据的不同方面,并将它们放在一个大显示器中。刷亮 和 过滤等用户交互技术 使查看者能够了解每个图表中的数据属性是如何链接在一起的。例如,当用户将鼠标悬停在一个图表中的某个点上时,对应于同一数据点的所有元素将在其他图表中突出显示。

2.6. 叠加图形元素

另一种方法是通过将几个二维图形中的图形元素基本上重叠或并列以形成单个图表来创建多维图形。这类似于小倍数,但不是创建一个图表网格,一个图表对应某个选定变量的每个值,而是将这些不同图表中的显着图形元素组合成一个图表。

复合条形图 和 堆积 条形图就是很好的例子。复合条形图将简单条形图中的条形并列放置,将它们并排放置,而堆叠条形图将它们放在彼此的顶部。根据记录,如果比较总数很重要,则堆叠条形图优于复合条形图,而如果您希望比较不同值的大小,则复合条形图更好。配对条形图是并列条形图的另一个特殊示例。

多维表格、 面积图 和 多折线图以及 圆环图 是简单表格、折线图和饼图的多维等价物。 流图 类似于面积图,但不是堆叠在公共基线上。像饼图一样,应该避免使用圆环图。

2.7. 平行坐标

还有一种方法是使用 平行坐标。在这里,一系列等距的垂直线,每个维度一个,为数据提供轴。通过在每个轴上绘制一个与该维度的数据点属性值相对应的点并通过直线连接相邻点来在这些轴上绘制一个数据点。与更常见的笛卡尔坐标相比,平行坐标具有很大的优势,它可以自然地缩放到任意数量的维度。

轴之间的线交叉可以揭示相关性。如果两个相邻属性正相关,则它们之间的线段不会交叉,但如果它们负相关,它们将交叉。

要注意的一件事是轴的顺序很重要,因此在探索数据时,您需要查看不同顺序的平行坐标,例如,每对维度至少在一个维度中彼此相邻的地块。

蜘蛛图 是平行坐标的径向版本。像大多数圆形情节一样,我还不确定它们的用处。

2.8. 降维

最后一种方法是通过将多维数据投影到二维或三个维度来减少数据的维度。有两种常见的方法可以做到这一点。

一种方法称为 多维缩放 或 MDS。这里的想法是在 2D 空间中为每个数据点找到一个位置,以便其属性具有相似值的点靠得很近,而具有不同值的点则相距更远。因此,可视化将相似的数据点聚集在一起。

如果 x 和 _ 是两个数据点和 x ’ 和 ’ _ 是它们在二维图中的位置,然后多维缩放试图使 d i s t ( x ′ , y ′ ) 尽可能接近 d i s t ( x , y ) 其中 d 我t ( u , v ) _ 是二维或 n 维空间中两点之间的距离。通常不可能使这些距离完全相等,因此多维缩放会找到一个试图最小化距离之间的整体差异的位置。

例如,如果我们有 4 个具有 4 个属性的数据点 :( 0 , 0 , 0 , 1 )(0,0,0,1), ( 0 , 0 , 1 , 0 ), ( 0 ,1 ,0, 0 ), (1 , 0 ,0, 0 ) 则每对点之间的欧几里得距离为 √ 2 (如果我们加上对应属性之间的距离)但是没有办法放置 4 点在一张纸上,使它们等距:最好是把它们放在一个正方形的图案中。

另一种减少维度的常用方法是 主成分分析 或 PCA。这种方法找到正交维度,在其上投影数据点,在某种意义上最能解释数据的方差。更准确地说,如果您投影到二维 PCA 首先找到线 L 1 当数据投影到它上面时方差最大,然后是线 L 2 与 L 1正交 并且最大化剩余方差。数据绘制在散点图上,其中 x 和 y 值是每个点在 L 1上的投影 和 L 2 . 虽然 PCA 听起来很难计算,但实际上它很容易使用数据协方差或相关矩阵的特征值分解来计算。如果您有兴趣,请参阅 维基百科了解更多详细信息,并且这里 有一个使用 Iris 数据集的 PCA 示例

第三种在概念上类似于 MDS 的方法是 自组织图 (SOM)。这是一种神经网络。它不像 MDS 或 PCA 那样广泛使用。

2.9。概括

在本模块中,我们回顾了基本的统计图形,然后查看了为显示多变量数据而发明的各种不同图形。虽然生成的图形对于理解多维数据非常宝贵,但它们需要一些解释技巧,因此必须谨慎使用。

3. 趋势和模式分析

尽管散点图、折线图或条形图有助于探索和理解数据,但很难判断总体趋势或模式是什么。分析可以通过汇总数据来帮助实现这一点。添加数据摘要或 “平滑器” 可以使查看全局模式变得更加容易。平滑是探索和理解数据的重要方式。也可以理解为一种模型拟合。另一种汇总数据的方法是使用聚类对相似的数据项进行分组。

3.1。简单线性回归

平滑数据的最简单方法是简单地拟合一条直线。这称为 线性回归。线性回归找到一条尽可能接近所有点的“最佳拟合”线。

我们也可以将线性回归理解为一种简单的模型拟合。给定一些数据点 ( x i , y i ) 我们想找到一个允许我们预测 y i值的线性模型 从 x我. 换句话说 , _ 是自变量, y i 是我们试图从 x i预测的因变量.

我们的线性模型是方程 y i = ( a + b x i ) + ϵ i是的一世=(一种+bX一世)+ε一世 其中 a 和 b 给出最佳拟合线的系数:这只是 y = ( a + b x )是的=(一种+bX) 其中 一个 是 y 拦截和 bb 是线的梯度。项方程 ϵ i 称为残差:这是线预测 y i的值之间的差异 将和它的实际值。

线性回归找到最适合数据的线(或更准确地说是系数 a 和 b)。这是通过最小化残差平方和来找到的。统计学家通过计算称为R 2的东西来计算线对数据的解释程度 R2. 这是模型解释的总变异的比例。接近 1 的值是好的,接近​​ 0 的值意味着模型解释得很少。

在拟合数据时,绘制数据和最佳拟合线以了解残差非常重要。不要简单地使用 stats 包来计算最佳拟合线和 R 2R2 并假设一切都很好,如果 R 2R2 不太接近 0。请记住 Anscombe 的数据四重奏,其中四个非常不同的数据集具有相同的最佳拟合线和相同的 R 2值R2. 需要进行可视化分析才能看到最佳拟合线在左上角的数据集中是合适的,但在其他三个数据集中不合适。在右上角,这种关系显然不是线性的,需要一个非线性模型,而在底部的两个数据集中,一个异常值已经扭曲了最佳拟合线。

事实上,绘制残差本身是一个好主意,因为这确实可以让您理解模型 没有 解释的内容。查看残差可以让您了解可以添加到模型中以更好地拟合数据的其他内容。

3.2. 检查正态

绘制残差的另一个原因是,它允许您检查作为回归和相关统计基础的假设:残差是均值为 0 的随机正态分布变量。请注意,只有残差需要正态分布,而不是原始值。

有两种方法可以绘制数据来检查它是否是正态分布的。
首先是查看数据分布的直方图或密度图,看看它是否看起来像以均值为中心的正态分布。

另一种检验正态性的方法是使用 QQ 图。QQ 图比较两个概率分布。它绘制了一个分布的分位数与另一个分布的分位数。因此名称,QQ 代表分位数 - 分位数图。如果图中的点位于 y = x是的=X 线那么两个概率分布是相同的。如果它们位于一条直线上,那么它们除了缩放和平移之外是相同的。

要测试正态性,您只需将数据分布分位数与标准分布的分位数进行对比。如果四分位数位于一条合理的直线上,则数据分布是正态的。

解释 QQ 图

完全正态分布的残差将沿着恒等线 (y=x) 对齐。
短尾线将水平转向。
长尾巴会垂直偏离线。
预计会有一些变化,即使是正常的残差!

3.3. 数据转换

如果数据(例如残差)不是正态分布的,那么有很多方法可以处理这个问题。一种方法是使用不依赖于正态假设的稳健或非参数测试。这些通常依赖于修剪数据以减少异常值的影响,或者简单地使用值的相对等级,而不是它们的精确数量。

另一种方法是统一变换观察结果以消除峰态或偏斜。一些有用的转换(来自 Field et al, Discovering Statistics Using R , 2012)是

对数变换 ( l o g ( X )l○G(X)) . 这会挤压分布的右尾,并可以纠正分布之间的正偏斜和不等方差。不过要小心,因为它只对正数有意义,所以您可能需要先向数据添加一个常数。
平方根变换 ( s q r t ( X )sqr吨(X)) . 这与对数转换的效果相似,但没有那么严重。同样,数据必须是积极的。
倒数变换 ( 1 / X1/X) . 这也减少了大分数的影响。要小心,因为它会颠倒分数的排名来解决这个问题,你可以使用 1 / ( X m a x − X )1/(X米一种X-X)
反向分数转换:为了克服负偏度的影响,您可以通过例如应用转换 ( X m a x - X )来简单地反转分数(X米一种X-X) 然后应用上述转换之一。

3.4. 其他类型的曲线拟合

在线性回归中,我们使用一个变量作为预测变量将一条直线拟合到数据中。当然,还有很多更复杂的曲线和曲面可以拟合到因变量,所有这些都是一种模型,可以让我们从自变量中预测因变量的值。一些更常见的包括

多元(线性) 回归:其中因数据由多个自变量解释。在这种情况下,我们仍然为数据拟合一条线,但它对每个自变量都有一个梯度系数。
多项式回归:我们可以将更复杂的多项式拟合到数据中。
LOESS:局部加权多项式回归。这将低次多项式拟合到每个数据点周围的数据子集。
无论拟合的曲线类型如何,绘制残差总是有用的,以便更好地理解模型的作用和未解释的内容。

到目前为止,我们假设独立值的值是完全已知的,或者实际上我们有独立变量和因变量。如果我们想同等对待这两种变量,那么我们必须使用 总最小二乘法。总体而言,残差测量数据点与拟合曲线上最近点之间的距离。

3.5. 不确定

然而,最佳拟合线的简单可视化存在一个潜在问题:很难理解其预测能力的不确定性水平。鉴于残差是正态分布的,可以计算最佳拟合线周围的区域,其中实际数据值的概率为 80% 或 90%。

如果可以的话,在数据可视化中以视觉方式指示不确定性非常重要,以便读者了解他们对数据或模型的信任程度。如果不这样做,很容易相信可视化是完全准确的:眼见为实。

3.6. 聚类

另一种汇总数据或查看模式的方法是使用聚类。聚类尝试将“相似”的数据项组合在一起。它是数据科学的核心部分,在课程的其他单元中有更详细的介绍。有大量的聚类方法,例如参见 Cluster Analysis (wikipedia)。聚类技术可以分为

  • 硬聚类 或 软聚类:在硬聚类中,一个项目要么属于一个聚类,要么不属于一个聚类,而在软聚类或模糊聚类中,一个项目有一定的属于一个聚类的可能性
  • 严格 或 重叠分区:在严格分区中,一个项目恰好属于一个集群,而在重叠分区中,它可以属于多个
  • 层次聚类:集群形成层次结构,即属于子集群的项目也属于父集群。
    没有单一的最佳聚类算法,它们都有局限性。这意味着可视化结果并查看聚类是否合理或比较不同的聚类非常重要。例如,在以下取自 wikimedia 的示例中,我们看到 k-means 聚类给出了与 EM 聚类完全不同的结果。
    K-means Clustering 迭代地计算每个集群的质心,而 EM(期望最大化)算法 迭代地优化集群的高斯分布模型的未知参数,并在每一步计算每个项目属于特定集群的可能性。在这种情况下,EM 算法的性能更好,给出的结果更接近左侧所示的已知聚类。

聚类分析的基本步骤是

  1. 如有必要,对数据进行规范化。最常见的方法是使用 z 分数。
  2. 决定如何衡量项目之间的相似性。在上面的示例中,我们使用了欧几里德距离,但还有许多其他选择。
  3. 选择聚类方法,如果需要,选择聚类数。
  4. 可视化集群并尝试确定它们是否有意义以及它们的含义。

3.7. 层次聚类

基于连通性的聚类 是一种直观简单且常用的聚类方法。它们通过迭代地连接两个最相似的集群以形成一个新的父集群来创建一个层次集群。最初,每个项目形成自己的集群。例如,考虑将 UPGMA(使用算术平均值的未加权对组方法)方法应用于具有两个属性的 5 个项目的假设数据集。

最初,每个观察被分配到它自己的集群。为了测量两个集群之间的相似性,我们使用两个集群成员之间的平均欧几里得距离。

将它们之间平均距离最小的两个簇合并形成一个新的簇。在这种情况下,观察 1 和 2 合并形成新的集群 1-2。
我们重复这个过程:接下来的观察 4 和 5 被合并
现在最后两个集群合并了。

层次聚类的结果通常使用树状图显示。在此图中,一棵树显示了集群层次结构,其中父节点的位置显示了两个集群的相似程度。例如,在我们的示例中,它显示集群 1 和 2 的平均欧几里得距离为 5,而集群 3 和 1-2 的平均距离为 12.35。

cophenetic相关系数 可用于检查层次聚类对数据的解释程度。这测量了每对项目之间的原始相似性与树状图中给出的相似性之间的相关性。例如,在我们的示例中,1 和 3 之间的原始相似度为 12.04,但树状图中的相似度为 12.35,因为这是与集群 1-2-3 相关联的平均欧几里德距离,该集群是包含 1 和 3 的最小集群。更复杂的分析也是可能的。

3.8. 概括

曲线拟合和聚类是两种常用的汇总表格数据的统计技术。曲线拟合可平滑数据并在对相似项目进行聚类时揭示趋势。在这两种情况下,使用可视化对结果进行“健全性检查”都很重要。尝试不同的“平滑”和聚类方法也很重要,因为没有一种最好的方法,不同的方法可以给出完全不同的结果。

4. 活动:使用 R 的高级绘图

4.1 ggplot2介绍

库是 ggplot2,函数是 ggplot——注意这一点。

基于第 4.4 章。“Introducing ggplot2” in “Discovering Statistics Using R”、Andy Field、Jeremy Miles 和 Zoë Field (2012) 以及“ggplot 备忘单”,例如

ggplot2 备忘单

4.1.1 理念

ggplot2 是 Hadley Wickham 的著名文章“A Layered Grammar of Graphics”的实现。

它旨在创建结构良好的 统计图形 (按层)。

4.1.2 层

在 ggplot2 中,图形由一系列 层组成。

您可以将图层想象成一个透明的,上面印有一些东西。那个“东西”可能是

  • 积分
  • 线条
  • bar
  • 符号(数据点的圆圈、正方形)
    还可能是:
  • legend
  • 轴标题
  • 轴刻度
  • 等等
    为了制作最终的plot,这些透明胶片被放置在彼此的顶部。
    可以看出,每一层都包含条形、点、文本等视觉对象。视觉元素在 ggplot2 中称为 geoms (“几何对象”的缩写)。因此,当我们定义一个层时,我们必须告诉 R 我们想要在该层上显示什么几何图形(我们想要一个条形、线、点等吗?)。

4.1.3 美学 Aesthetics
这些几何图形还具有决定它们的外观和绘制位置的美学属性(我们想要红色条还是绿色条?我们希望我们的数据点是三角形还是正方形?等等)。

这些美学(简称aes() )控制图形元素的外观(例如,它们的颜色、大小、样式和位置)。

美学可以为整个地块定义,也可以为特定层单独定义。它们控制几何或图层中元素的外观。

美学指定如何从数据属性映射到视觉或几何属性。

4.1.4 几何对象(geoms)
有多种几何函数可以确定在图层上打印哪种几何对象。以下是您可能使用的一些更常见的列表(完整列表请参见 ggplot2 网站 http://ggplot2.tidyverse.org/reference/ 或者您可以让 R 告诉您,见下文):

  • geom_bar():创建一个带有代表不同统计属性的条的层。
  • geom_point():创建一个显示数据点的图层(就像您在散点图上看到的那样)。
  • geom_line():创建一个用直线连接数据点的层。
  • geom_smooth():创建一个包含“平滑”的层(即,将数据汇总为一个整体而不是连接单个数据点的线)。
  • geom_histogram():创建一个带有直方图的图层。
  • geom_boxplot():创建一个带有盒须图的层。
  • geom_text():创建一个带有文本的图层。
  • geom_density(): 创建一个带有密度图的层。
  • geom_errorbar():创建一个显示错误栏的图层。
  • geom_hline(), geom_vline():直线

首先加载 ggplot 库,使用以下代码:

1
require(ggplot2) # load ggplot2 first

这是 ggplot 的语法(不是真正的代码):
myGraph <- ggplot(myData, aes(variable for x axis, variable for y axis))

我们首先需要有数据。在这里,我们来看一个内置的数据集 mtcars。
help(mtcars)
如果您不了解 R 中的某些内容,请尝试使用该 help 功能。

通常,你会很幸运。输出将在 RStudio 的 右下角 。

现在,我们使用这个数据集并让 x & y 为 mpg 和 hp

1
myGraph <- ggplot(data = mtcars, aes(x = mpg, y = hp))

4.2. ggplot2 可视化

让我们用 ggplot2 做一些真正的可视化。

ggplot 备忘单
实际上有两种方法可以使用 ggplot2 进行绘图:

使用 qplot() 函数进行快速绘图;和
使用 ggplot() 函数逐层构建绘图。
毫无疑问, qplot() 函数会让你更快地开始;然而,ggplot() 函数提供了更大的通用性。

5. 活动:使用 R 的交互式图表

5.1。Shiny

Shiny 是一个 R 包,可以轻松地直接从 R 构建交互式 Web 应用程序(应用程序)。如果您尚未安装 Shiny 包,请打开 RStudio。并按照模块 1 第 5.3 节中的说明安装 “shiny” 软件包。

它有一些内置的例子。让我们尝试其中之一:

5.2. 其他方法

还有许多其他方法可以在 R 中制作交互式图形。 ggvis 来自 ggplot 的制造商。它旨在使构建交互式图形以进行探索性数据分析变得容易。与 Shiny 类似,您需要安装 ggvis 包。安装后,运行以下命令(在新文件中,根据需要命名):
在幕后,交互式绘图是使用 shiny构建的,您目前在给定的 R 会话中一次只能运行一个。然而,看起来 ggvis 不再被开发。

Shiny 的替代方案是 plotly:

“Plotly 是使用 Python 和 Django 框架构建的,前端使用 JavaScript 和可视化库 D3.js、 HTML 和 CSS。文件托管在 Amazon S3上”—— 非常值得一看,有用于 R & Python 的 API,还有库,还有转换绘图的工具。

6. 活动:使用 R 进行聚类

在本活动中,我们使用 iris 数据集和一些板球数据来研究 R 中的聚类和聚类可视化。

https://cran.r-project.org/web/packages/dendextend/vignettes/Cluster_Analysis.html