数据科学与机器学习:数学与统计方法
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.7 习题

在尝试这些习题之前,请确保已安装最新版本的Python相关软件包,特别是matplotlibpandasseaborn。一种简单的方法是通过Anaconda Navigator更新软件包,详见附录D。

1.访问UCI机器学习数据库https://archive.ics.uci.edu/。阅读数据说明并下载Mushroom(蘑菇)数据集agaricus-lepiota.data。使用pandasread_csv命令将数据读入名为mushroom的数据帧(DataFrame)。

(a)数据集中包含多少特征?

(b)特征的初始名称和类型是什么?

(c)将第一个特征(索引为0)重命名为edibility,将第六个特征(索引为5)重命名为odor。(提示:pandas中的列名是不可变的,所以单个列不能直接修改。但是,可以通过mushroom.columns=newcols对整个列名列表赋值。)

(d)第六列列出了蘑菇的各种气味,编码为ac等,试着用almondcreosote等名称代替这些编码(从网站上可以找到每个字母对应的类别)。同样将edibilityep替换成ediblepoisonous

(e)制作一张关于edibilityodor的列联表。

(f)采集食用蘑菇时,应避免哪种气味的蘑菇?

(g)无气味的蘑菇样本中,能安全食用的蘑菇占多大比例?

2.根据表1.2修改nutri数据集中变量的类型和数值,并保存为CSV文件。修改后的数据应该有8个分类特征、3个浮点数类型特征和2个整数类型特征。

3.通常情况下,在使用标准统计软件分析数据之前,需要重新构造数据表。以表1.3中学生成绩为例,考虑上专业课前后5名学生的考试成绩。

表1.3 学生成绩

这不是1.1节中描述的标准格式。特别是,学生的成绩被分成两列,而标准格式要求将成绩收集在一列,例如,收集在标签为Score的列。手动将此表重新格式化为具有如下三个特征的标准格式:

Score,取连续值。

Time,取值为BeforeAfter

Student,取值为1到5。

pandas中有用的表重构方法有meltstackunstack

4.创建一个类似图1.5所示的条形图,但是现在要绘制出三个类别中男性和女性的相应比例。也就是说,具有同样“性别”的条形图,每个条形图的高度总和应该为1。(提示:seaborn没有这样的内置函数,然而,你可以先创建一个列联表,再使用matplotlib.pyplot方法来生成图形。)

5.1.1节中提到的iris数据集包含三种鸢尾花的各种特征,鸢尾花的类别有setosa、versicolor和virginica,花的特征包括Petal.LengthSepal.Length等。

(a)将数据集加载为pandasDataFrame对象。

(b)使用matplotlib.pyplot函数,在一个图形中绘制三种花的Petal.Length箱形图。

(c)为Petal.Length特征绘制具有20个分箱的直方图。

(d)制作Sepal.Length相对Petal.Length的散点图,类似图1.9a。注意,数据点应根据Species特征进行着色,颜色与图1.9b的图例一致。

(e)使用seaborn包的kdeplot方法,复现图1.9b关于Petal.Length的核密度图。

图1.9 Sepal.Length相对Petal.Length的散点图以及三种鸢尾花Petal.Length特征的核密度估计

6.从与上述iris数据集相同的网站导入数据集EuStockMarkets。该数据集包含20世纪90年代四只欧洲股票的指数数据,包含每年260个工作日的收盘价。

(a)创建股票价格的时间向量(工作日),向量范围为1991.496到1998.646,增量为1/260。

(b)复现图1.10。[提示:使用字典将列名(即股票指数)映射为不同的颜色。]

图1.10 欧洲股市的收盘指数

7.考虑UCI机器学习数据库中的KASANDR数据集(网址为https://archive.ics.uci.edu/ml/machine-learning-databases/00385/de.tar.bz2)。该数据集文件大小为900MB,下载可能需要一些时间。使用7-Zip等解压缩文件,生成一个文件目录de,目录下包含两个大型CSV文件test_de.csvtrain_de.csv,两个文件的大小分别为372MB和3GB。只要内存足够,这样大的数据文件仍然可以在pandas中高效地处理。这些文件包含德国Kelkoo网站日志的用户信息记录,以及用户、供货商和商家的元数据。数据集有7个属性,两个文件分别有1919561和15844717行。数据集通过十六进制字符串进行匿名化。

(a)使用如下命令加载train_de.csvpandas数据帧对象de

如果可用内存不够大,则加载test_de.csv。注意,这里的条目用制表符而不是逗号分隔。使用time软件包记录加载文件所用的时间。(在我们的计算机上加载train_de.csv花了38秒。)

(b)这个数据集中有多少独立用户和商家?

8.两种以上特征的数据可视化需要精心设计,这往往更像是一门艺术而不是科学。

(a)访问Vincent Arel-Bundocks的网站(URL详见1.1节),并将Orange数据集读入pandas名为orange的数据帧对象。删除未命名的第一列。

(b)该数据集包含了5棵橘子树在不同发育阶段的树干周长。请查找特征的名称。

(c)在Python中,导入seaborn并使用regplotFacetGrid方法可视化树的生长曲线(树干周长与树龄的关系)。