【下载地址】
数据科学是一门激动人心的学科,它可以将原始数据转化为认识、见解和知识。本书的目标是帮助你学习使用R 语言中最重要的数据科学工具。读完本书后,你将掌握R 语言的精华,并能够熟练使用多种工具来解决各种数据科学难题。
你将学到什么
数据科学是一个极其广阔的领域,仅靠一本书是不可能登堂入室的。本书的目标是教会你使用最重要的数据科学工具。在一个典型的数据科学项目中,需要的工具模型大体如下图所示。
首先,你必须将数据导入R。这实际上就是读取保存在文件、数据库或Web API 中的数据,再加载到R 的数据框中。如果不能将数据导入R,那么数据科学就根本无从谈起。
导入数据后,就应该对数据进行整理。数据整理就是将数据保存为一致的形式,以满足其所在数据集在语义上的要求。简而言之,如果数据是整洁的,那么每列都是一个变量,每行都是一个观测。整洁的数据非常重要,因为一致的数据结构可以让你将工作重点放在与数据有关的问题上,而不用再费尽心思地将数据转换为各种形式以适应不同的函数。
一旦拥有了整洁的数据,通常下一步就是对数据进行转换。数据转换包括选取出感兴趣的观测(如居住在某个城市里的所有人,或者去年的所有数据)、使用现有变量创建新变量(如根据距离和时间计算出速度),以及计算一些摘要统计量(如计数或均值)。数据整理和数据转换统称为数据处理。 一旦使用需要的变量完成了数据整理,那么生成知识的方式主要有两种:可视化与建模。 这两种方式各有利弊,相辅相成。因此,所有实际的数据分析过程都要在这两种方式间多次重复。
可视化本质上是人类活动。良好的可视化会让你发现意料之外的现象,或对数据提出新的问题。你还可以从良好的可视化中意识到自己提出了错误的问题,或者需要收集不同的数据。可视化能够带给你惊喜,但不要期望过高,因为毕竟还是需要人来对其进行解释。
模型是弥补可视化缺点的一种工具。如果已经将问题定义得足够清晰,那么你就可以使用一个模型来回答问题。因为模型本质上是一种数学工具或计算工具,所以它们的扩展性一 般非常好。即使扩展性出现问题,购买更多计算机也比雇用更多聪明的人便宜!但是每个 模型都有前提假设,而且模型本身不会对自己的前提假设提出疑问,这就意味着模型本质上不能给你带来惊喜。
数据科学的最后一个步骤就是沟通。对于任何数据分析项目来说,沟通绝对是一个极其重 要的环节。如果不能与他人交流分析结果,那么不管模型和可视化让你对数据理解得多么透彻,这都是没有任何实际意义的。
围绕在这些技能之外的是编程。编程是贯穿数据科学项目各个环节的一项技能。数据科学 家不一定是编程专家,但掌握更多的编程技能总是有好处的,因为这样你就能够对日常任务进行自动处理,并且非常轻松地解决新的问题。
你将在所有的数据科学项目中用到这些工具,但对于多数项目来说,这些工具还不够。这大致符合 80/20 定律:你可以使用从本书中学到的工具来解决每个项目中 80% 的问题,但你还需要其他工具来解决其余 20% 的问题。我们将在本书中为你提供资源,让你能够学到更多的技能。
本书的组织结构
前面对数据科学工具的描述大致是按照我们在分析中使用它们的顺序来组织的(尽管你肯 定会多次使用它们)。然而,根据我们的经验,这并不是学习它们的最佳方式,具体原因 如下。
• 从数据导入和数据整理开始学习并不是最佳方式,因为对于导入和整理数据来说,80% 的时间是乏味和无聊的,其余 20% 的时间则是诡异和令人沮丧的。在学习一项新技术时, 这绝对是一个糟糕的开始!相反,我们将从数据可视化和数据转换开始,此时的数据已经导入并且是整理完毕的。这样一来,当导入和整理自己的数据时,你就会始终保持高 昂的斗志,因为你知道这种痛苦终有回报。
• 有些主题最好结合其他工具来解释。例如,如果你已经了解可视化、数据整理和编程,那么我们认为你会更容易理解模型是如何工作的。
• 编程工具本身不一定很有趣,但它们确实可以帮助你解决更多非常困难的问题。在本书 的中间部分,我们会介绍一些编程工具,它们可以与数据科学工具结合起来以解决非常 有趣的建模问题。
我们尽量在每一章中使用同一种模式:先给出一些引人入胜的示例,以便你大体了解这一章 的内容,然后再深入细节。本书的每一节都配有习题,以帮助你实践所学到的知识。虽然跳 过这些习题是个非常有诱惑力的想法,但使用真实问题进行练习绝对是最好的学习方式。
本书未包含的内容
本书并未涉及一些重要主题。我们深信,重要的是将注意力坚定地集中在最基本的内容上, 这样你就可以尽快入门并开展实际工作。这也就是说,本书不会涵盖每一个重要主题。
大数据
本书主要讨论那些小规模的、能够驻留在内存中的数据集。这是开始学习数据科学的正确方式,因为只有处理过小数据集,你才能处理大数据集。你从本书中学到的工具可以轻松地处理几百兆字节的数据,处理 1~2 GB 的数据也不会有什么大问题。如果你的日常工作是处理更大的数据(如 10~100 GB),那么你应该更多地学习一下 data.table(https://github."target="_blank">https://github.com/Rdatatable/data.table)。本书不会介绍 data.table,因为它的界面太过简洁,几乎没有语言提示,这使得学习起来很困难。但是如果你需要处理大数据,为了获得性能上的回报,多付出一些努力来学习它还是值得的。
如果你的数据比这还大,那么就需要仔细思考一下了,这个大数据问题是否其实就是一个小数据问题。虽然整体数据非常大,但回答特定问题所需要的数据通常较小。你可以找出一个子集、子样本或者摘要数据,该数据既适合在内存中处理,又可以回答你感兴趣的问题。此时的挑战就是如何找到合适的小数据,这通常需要多次迭代。
另外一种可能是,你的大数据问题实际上就是大量的小数据问题。每一个问题都可以在内存中处理,但你有数百万个这样的问题。举例来说,假设你想为数据集中的每个人都拟合一个模型。如果只有 10 人或 100 人,那这是小菜一碟,但如果有 100 万人,情况就完全不同了。好在每个问题都是独立于其他问题的(这种情况有时称为高度并行,embarrassingly parallel),因此你只需要一个可以将不同数据集发送到不同计算机上进行处理的系统(如 Hadoop 或 Spark)即可。如果已经知道如何使用本书中介绍的工具来解决独立子集的问题,那么你就可以学习一下新的工具(比如 sparklyr、rhipe 和 ddr)来解决整个数据集的问题。
Python、Julia以及类似的语言
在本书中,你不会学到有关 Python、Julia 以及其他用于数据科学的编程语言的任何内容。这并不是因为我们认为这些工具不好,它们都很不错!实际上,多数数据科学团队都会使用多种语言,至少会同时使用 R 和 Python。
但是,我们认为最好每次只学习并精通一种工具。如果你潜心研究一种工具,那么会比同时泛泛地学习多个工具掌握得更快。这并不是说你只应该精通一种工具,而是说每次专注于一件事情时,通常你会进步得更快。在整个职业生涯中,你都应该努力学习新事物,但是一定要在充分理解原有知识后,再去学习感兴趣的新知识。
我们认为 R 是你开始数据科学旅程的一个非常好的起点,因为它从根本上说就是一种用来支持数据科学的环境。R 不仅仅是一门编程语言,它还是进行数据科学工作的一种交互式环境。为了支持交互性,R 比多数同类语言灵活得多。虽然会导致一些缺点,但这种灵活性的一大好处是,可以非常容易地为数据科学过程中的某些环节量身定制语法。这些微型语言有助于你从数据科学家的角度来思考问题,还可以在你的大脑和计算机之间建立流畅的交流方式。
非矩形数据
本书仅关注矩形数据。矩形数据是值的集合,集合中的每个值都与一个变量和一个观测相关。很多数据集天然地不符合这种规范,比如图像、声音、树结构和文本。但是矩形数据框架在科技与工业领域是非常普遍的。我们认为它是开始数据科学旅途的一个非常好的起点。
假设验证
数据分析可以分为两类:假设生成和假设验证(有时称为验证性分析)。无须掩饰,本书的重点就在于假设生成,或者说是数据探索。我们将对数据进行深入研究,并结合专业知识生成多种有趣的假设来帮助你对数据的行为方式作出解释。你可以对这些假设进行非正式的评估,凭借自己的怀疑精神从多个方面向数据发起挑战。
假设验证与假设生成是互补的。假设验证比较困难,原因如下。
•你需要一个精确的数学模型来生成可证伪的预测,这通常需要深厚的统计学修养。
•为了验证假设,每个观测只能使用一次。一旦使用观测的次数超过了一次,那么就回到了探索性分析。这意味着,若要进行假设验证,你需要“预先注册”(事先拟定好)自己的分析计划,而且看到数据后也不能改变计划。在本书的第四部分中,我们将讨论一些相关的策略,你可以使用它们让假设验证变得更容易。
经常有人认为建模是用来进行假设验证的工具,而可视化是用来进行假设生成的工具。这种简单的二分法是错误的:模型经常用于数据探索;只需稍作处理,可视化也可以用来进行假设验证。核心区别在于你使用每个观测的频率:如果只用一次,那么就是假设验证;如果多于一次,那么就是数据探索。
准备工作
为了最有效地利用本书,我们对你的知识结构做了一些假设。你应该具有一定的数学基础,如果有一些编程经验也会有所帮助。如果从来没有编写过程序,那么你应该学习一下Garrett 所著的《R 语言入门与实践》1,它可以作为本书的有益补充。
为了运行本书中的代码,你需要 4 个工具:R、RStudio、一个称为 tidyverse 的 R 包集合,以及另外几个 R 包。包是可重用 R 代码的基本单位,它们包括可重用的函数、描述函数使用方法的文档以及示例数据。