1.1 简介
数据的形式多种多样,但通常可以认为是某些随机实验的结果。随机实验结果无法事先确定,但其工作原理仍可以分析。随机实验的数据通常存储在表格或电子表格中。统计学中的惯例是将变量(通常称为特征)表示为列,将单个项目(或单元)表示为行。在电子表格中,如下三种类型的列比较有用:
•第一列通常是标识或索引列,该列中每个单元或行都有唯一的名称或ID。
•某些列(特征)可以与实验设计相对应,例如,指定该单元属于哪个实验组。这些列中的条目通常是确定的;也就是说,如果要进行重复实验,这些条目将保持不变。
•其他列表示实验的测量值。通常,这些测量结果具有可变性;也就是说,如果进行重复实验,它们会发生变化。
有许多数据集可通过互联网和软件包获得。一个著名的数据集存储库是加利福尼亚大学欧文分校(University of California at Irvine,UCI)维护的机器学习库,网址为https://archive.ics.uci.edu/。
这些数据集通常以CSV(逗号分隔值)格式存储,我们可以很容易地将其读入Python。例如,用Python访问该网站的abalone数据集,需要将文件下载到你的工作目录,通过如下命令导入pandas包:
按如下方式读入数据:
添加header=None很重要,因为这样可以让Python知道CSV文件的第一行不包含特征名称,而pandas默认数据的第一行是由特征名称组成的标题行。abalone数据集最初用于通过壳的重量和直径等物理测量结果来预测鲍鱼的年龄。
另一个有用的数据集存储库是由Vincent Arel-Bundock收集的,它包含1000多个数据集,这些数据集来自各种R语言软件包,该库的网址为https://vincentarelbundock.github.io/Rdatasets/datasets.html。
例如,要将R语言datasets软件包中由Fisher提出的著名iris(鸢尾花)数据集读入Python,需要输入命令:
iris数据集包含150个数据样本,对应3类鸢尾花:setosa、versicolor和virginica。每类有50个样本,每个样本包含四种物理测量值(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。请注意,这个例子中包含了标题行。read_csv函数的输出是一个DataFrame对象,它是pandas对电子表格的实现,参见附录D。DataFrame的head方法显示了DataFrame的前几行数据,包括特征名称组成的标题行。要显示的行数可以作为参数传入,默认值为5。对于iris的DataFrame,我们有:
特征的名称可以通过DataFrame对象的columns属性获得,如iris.columns。请注意,第一列是重复的索引列,其名称由pandas指定为'Unnamed:0'。我们可以删除此列,按如下方式重新指定iris的DataFrame对象:
每个特征的数据(与其具体名称对应)可以通过Python的切片符号[]来访问。例如,iris['Sepal.Length']对象包含150个花萼长度的数值。
UCI库中abalone数据集的前三行数据如下:
这里,缺失的标题行是按照自然数的顺序指定的。根据UCI网站上名为abalone.names的文件描述,这些特征名称分别对应性别(Sex)、长度(Length)、直径(Diameter)、高度(Height)、整体重量(Whole weight)、去壳重量(Shucked weight)、脏器重量(Viscera weight)、壳的重量(Shell weight)和环数(Rings)。我们可以通过重新指定列属性,手动将特征名称添加到DataFrame中,方法如下: