1.1 结构化数据的要素
数据可以来自多种数据源:传感器测量、事件、文本、图像和视频,物联网(Internet of Things,IoT)则源源不断地喷涌出大量信息。多数数据是非结构化的。图像是一组像素,每个像素中都包含 RGB(红、绿、蓝)颜色信息。文本是一个由单词和非单词字符组成的序列,通常分为节、小节,等等。点击流是用户在与 app 或网页进行交互时产生的一个操作序列。实际上,数据科学的一个主要挑战就是将原始数据转化为可以操作的信息。要使用本书中介绍的统计学概念,就必须通过各种处理和操作,将非结构化的原始数据转换为结构化形式。结构化数据的一种最常见的形式就是带有行和列的表,比如关系数据库中的数据,或者为某项研究而收集的数据。
结构化数据有两种基本类型:数值型与分类型。数值型数据有两种形式:连续型,比如风速和持续时间;离散型,比如某个事件的发生次数。分类型数据只能在一个固定集合中取值,比如电视屏幕类型(等离子、LCD、LED 等)或州的名称(阿拉巴马、阿拉斯加等)。二元数据是分类型数据的一种重要特例,它只能在两个值之间任取其一,比如 0/1、是/否,或真/假。另一种有用的分类型数据是定序数据,其中的类别是有一定顺序的,例如数值评分(1、2、3、4 和 5)。
我们为什么要关心数据类型的分类呢?事实证明,对于数据分析和预测性建模,数据类型在帮助确定可视化、数据分析以及统计模型的类型方面有重要作用。实际上,像 R 和 Python 这样的数据科学软件就是在使用这些数据类型来提高计算性能。更重要的是,变量的数据类型决定了软件如何计算这个变量。
本节关键术语
数值型数据
在一个数值范围内进行表示的数据。
连续型数据
可以在一个区间内任意取值的数据。
同义词
区间数据、浮点数据、数值数据
离散型数据
只能取整数值的数据,比如计数。
同义词
整数数据、计数数据
分类型数据
只能从一组特定值中取值的数据,这些值表示一组可能的分类。
同义词
枚举数据、因子、名义数据
二元数据
分类型数据的一种特殊情况,它只有两个类别值,例如,0/1、真/ 假。
同义词
二分类数据、逻辑数据、指示型数据、布尔型数据
定序数据
具有明确排列顺序的分类型数据。
同义词
有序因子
软件工程师和数据库程序员可能会奇怪:为什么需要在分析中使用分类型数据和定序数据这两个概念?毕竟,类别只是一组文本值(或数值),底层数据库会自动处理它们的内部表示。然而,将数据明确地标识为分类型,使其区别于文本数据,确实有如下好处。
- 如果知道数据是分类型的,可以将其作为一种信号,告诉软件如何使用统计过程(如生成图表或拟合模型)。具体而言,在 R 中,定序数据可以表示为一个
ordered.factor
,在图形、表格和模型中都可以保持由用户确定的固定顺序。在 Python 中,scikit-learn
可以使用sklearn.preprocessing.OrdinalEnconder
来支持定序数据。 - 可以对存储和索引进行优化(就像在关系数据库中那样)。
- 在软件中,如果给定一个分类变量,那么它的可能取值就被限定了(比如枚举类型)。
第三条“好处”可能会导致一些出人意料的行为:在 R 中,数据导入函数(如 read.csv
)的默认行为是自动地将文本列转换为 factor
。在这个列上的后续操作会假定该列的值只能是初始导入的那些值,所以如果向该列分配一个新的文本值就会触发一条警告,并生成一个 NA
(缺失值)。Python 中的 pandas
包不会自动地进行这种转换,不过,你可以在 read_csv
函数中明确指定某一列为分类型数据。
本节要点
- 数据通常通过类型在软件中进行分类。
- 数据类型包括数值型(连续型、离散型)和分类型(二元数据、定序数据)。
- 软件中的数据类型可以作为一种信号,告诉软化如何处理这种数据。