![数据科学与机器学习:数学与统计方法](https://wfqqreader-1252317822.image.myqcloud.com/cover/83/47684083/b_47684083.jpg)
1.2 类型结构特征
我们一般将特征分为定量特征和定性特征。定量特征具有“数值量”,如身高、年龄、出生人数等,它可以是连续的,也可以是离散的。连续的定量特征在可能的连续范围内取值,如身高、电压或农作物产量,这种特征体现了总是可以进行更精确测量的思想。离散的定量特征具有可数的可能性,如计数。
与此相反,定性特征没有数值含义,但它们可能的取值可以划分成固定数量的类别,如{M,F}表示性别,{蓝色, 黑色, 棕色, 绿色}表示眼睛的颜色。因此,这样的特征也称为分类特征。一个简单的经验法则是,如果对数据进行平均没有意义,那么它就是分类特征。例如,对眼睛颜色进行平均是没有意义的。当然,我们仍然可以用数字来表示分类数据,比如,1表示蓝色,2表示黑色,3表示棕色,但是这样的数字没有量化意义。分类特征通常称为因子(factor)。
在操作、汇总和显示数据时,正确指定变量(特征)的类型十分重要。我们使用文献[73]提供的nutrition_elderly数据集来说明这一点,该数据集是有关老人营养的研究结果,它包含226名老人(行)的13个特征(列)的营养测量数据。该数据集可以通过网址http://www.biostatisticien.eu/springeR/nutrition_elderly.xls获得。
Excel文件可以通过read_excel方法直接读入pandas:
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/17_01.jpg?sign=1739520652-PgmuJ3qxEmshGK2dgpDAqUd9DHLhxFDa-0-fb90e75a4f3de4e47340a2ed3fb0f818)
这将创建一个DataFrame对象nutri。nutri的前三行数据如下:
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/17_02.jpg?sign=1739520652-9wbAH08ar1hKaSlXWfpN4xR33pvD82Ul-0-0e61ce257af6337510c2ac81a627c542)
我们可以通过nutri的info方法来查看变量的类型或结构:
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/17_03.jpg?sign=1739520652-S5JtAhXZ2GFaNhOU13OhvN3O45GWsKQp-0-ff541c0865469627cfa7e6439018c5d2)
nutri中的13个特征全部都被Python解释为定量变量,实际上是整数,因为它们是作为整数输入的。表1.1显示了应如何对变量类型进行分类。当我们考虑表1.2给出的特征描述时,这些数字的含义就变得很清楚了。
表1.1 DataFrame对象nutri的特征类型
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/18_01.jpg?sign=1739520652-cWGIr1hZ8hciaduiVGi2tPRq1v8dJtFl-0-b1766280e8664ab4ad185ab1d661e89c)
请注意,表1.1中定性特征第二行的类别变量meat到chocol有一个自然顺序。这样的定性特征有时称为序数特征,相反,没有序数属性的定性特征称为标称特征。我们在本书中不做这样的区分。
表1.2 营养研究中的变量说明[73]
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/18_02.jpg?sign=1739520652-hDA4APADBu963dxhMue1fCnjKU94GNMR-0-bd0719c293a937a3c8301c04e812ff93)
我们可以使用Python中的replace和astype方法修改每个分类特征的值和类型。对于分类特征,比如gender,我们可以将1替换为'Male',将2替换为'Female',并将变量的类型修改为'category',方法如下:
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/18_03.jpg?sign=1739520652-RBiTxct0EKShEXohljQ3UFQeCAOsljet-0-24c355535d83fe75c84e2c98c7e54121)
其他分类特征的结构也可以用类似的方式改变。像height这样的连续特征,其类型应为float:
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/19_01.jpg?sign=1739520652-caWfgDbsh7dPRLRatmWdO39yn9HxJTyG-0-c627ef72474750d46139fb5bcb30798a)
我们可以对其他变量重复这样的操作(见习题2),并使用pandas的to_csv方法将修改后的数据帧保存为CSV文件。
![](https://epubservercos.yuewen.com/C30954/27086998107751806/epubprivate/OEBPS/Images/19_02.jpg?sign=1739520652-5iiQcT5PEbsfBmrEl3s23LbU8W84hi1q-0-4e66dc1ea1ffc75c45b7838a779f356e)