赞
踩
本次练习使用 鸢尾属植物数据集.\iris.data
,在这个数据集中,包括了三类不同的鸢尾属植物:Iris Setosa,Iris Versicolour,Iris Virginica。每类收集了50个样本,因此这个数据集一共包含了150个样本。
以上四个特征的单位都是厘米(cm)。
sepallength sepalwidth petallength petalwidth species 0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa .. ... ... ... ... ... 145 6.7 3.0 5.2 2.3 Iris-virginica 146 6.3 2.5 5.0 1.9 Iris-virginica 147 6.5 3.0 5.2 2.0 Iris-virginica 148 6.2 3.4 5.4 2.3 Iris-virginica 149 5.9 3.0 5.1 1.8 Iris-virginica [150 rows x 5 columns]
1. 导入鸢尾属植物数据集,保持文本不变。
【知识点:输入和输出】
2. 求出鸢尾属植物萼片长度的平均值、中位数和标准差(第1列,sepallength)
【知识点:统计相关】
3. 创建一种标准化形式的鸢尾属植物萼片长度,其值正好介于0和1之间,这样最小值为0,最大值为1(第1列,sepallength)。
【知识点:统计相关】
4. 找到鸢尾属植物萼片长度的第5和第95百分位数(第1列,sepallength)。
【知识点:统计相关】
5. 把iris_data数据集中的20个随机位置修改为np.nan值。
【知识点:随机抽样】
6. 在iris_data的sepallength中查找缺失值的个数和位置(第1列)。
【知识点:逻辑函数、搜索】
7. 筛选具有 sepallength(第1列)< 5.0 并且 petallength(第3列)> 1.5 的 iris_data行。
【知识点:搜索】
8. 选择没有任何 nan 值的 iris_data行。
【知识点:逻辑函数、搜索】
9. 计算 iris_data 中sepalLength(第1列)和petalLength(第3列)之间的相关系数。
【知识点:统计相关】
10. 找出iris_data是否有任何缺失值。
【知识点:逻辑函数】
11. 在numpy数组中将所有出现的nan替换为0。
【知识点:逻辑函数】
12. 找出鸢尾属植物物种中的唯一值和唯一值出现的数量。
【知识点:数组操作】
13. 将 iris_data 的花瓣长度(第3列)以形成分类变量的形式显示。定义:Less than 3 --> 'small';3-5 --> 'medium';'>=5 --> 'large'。
【知识点:统计相关】
14. 在 iris_data 中创建一个新列,其中 volume 是 (pi x petallength x sepallength ^ 2)/ 3
。
【知识点:数组操作】
15. 随机抽鸢尾属植物的种类,使得Iris-setosa的数量是Iris-versicolor和Iris-virginica数量的两倍。
【知识点:随机抽样】
16. 根据 sepallength 列对数据集进行排序。
【知识点:排序】
17. 在鸢尾属植物数据集中找到最常见的花瓣长度值(第3列)。
【知识点:数组操作】
18. 在鸢尾花数据集的 petalwidth(第4列)中查找第一次出现的值大于1.0的位置。
【知识点:搜索】
- # 数据集中,包括了三类不同的鸢尾属植物:Iris Setosa,Iris Versicolour,Iris Virginica。
- # 每类收集了50个样本,因此这个数据集一共包含了150个样本。
- # sepallength:萼片长度
- # sepalwidth:萼片宽度
- # petallength:花瓣长度
- # petalwidth:花瓣宽度
-
- import numpy as np
- # from sklearn.datasets import load_iris
- # data = load_iris()
- # print(dir(data)) # 查看data所具有的属性或方法
- # print(data.DESCR) # 查看数据集的简介
-
-
-
- # 1.导入鸢尾属植物数据集
- outfile = r'.\iris.data'
- iris_data = np.loadtxt(outfile, dtype=object, delimiter=',')
- print(iris_data)
-
- # 2.求出鸢尾属植物萼片长度的平均值、中位数和标准差(第1列,sepallength)
- sepalLength = np.loadtxt(outfile, dtype=float, delimiter=',', usecols=[0])
- # print(sepalLength)
- print(np.mean(sepalLength)) # 均值 5.8483221476510066
- print(np.median(sepalLength)) # 中位数 5.8
- print(np.std(sepalLength)) # 标准差 0.8258088592766593
-
- # 3.创建一种标准化形式的鸢尾属植物萼片长度,其值正好介于0和1之间,这样最小值为0,最大值为1(第1列,sepallength)
- x = (sepalLength - np.amin(sepalLength))/np.ptp(sepalLength)
- print(x)
-
- # 4.找到鸢尾属植物萼片长度的第5和第95百分位数(第1列,sepallength)
- print(np.percentile(sepalLength, [5,95])) # [4.6 7.255]
-
- # 5.把iris_data数据集中的20个随机位置修改为np.nan值。
- iris_data1 = np.loadtxt(outfile, dtype=object, delimiter=',')
- i, j = iris_data1.shape
- np.random.seed(20201130)
- iris_data1[np.random.choice(i, size= 20), np.random.choice(j, size= 20)] = np.nan
- print(iris_data1)
-
- # 6.在iris_data的sepallength中查找缺失值的个数和位置(第1列)
- iris_data2 = np.loadtxt(outfile, dtype=float, delimiter=',', usecols=[0,1,2,3])
- i, j = iris_data2.shape
- np.random.seed(20201130)
- iris_data2[np.random.choice(i, size= 20), np.random.choice(j, size= 20)] = np.nan
-
- sepallength2 = iris_data2[:,0]
- print(sepallength2)
- print(sum(np.isnan(sepallength2))) # 缺失值个数 5
- print(np.where(np.isnan(sepallength2))) # 缺失值位置
- # (array([ 0, 28, 48, 78, 130], dtype=int64),)
-
- # 7.筛选具有 sepallength(第1列)< 5.0 并且 petallength(第3列)> 1.5 的 iris_data行
- iris_data3 = np.loadtxt(outfile, dtype=float, delimiter=',', usecols=[0,1,2,3])
- sepallength3 = iris_data3[:,0]
- petallength3 = iris_data3[:,2]
- index = np.where(np.logical_and(sepallength3 < 5.0, petallength3 > 1.5))
- print(iris_data3[index])
- # [[4.8 3.4 1.6 0.2]
- # [4.8 3.4 1.9 0.2]
- # [4.7 3.2 1.6 0.2]
- # [4.8 3.1 1.6 0.2]
- # [4.9 2.4 3.3 1. ]
- # [4.9 2.5 4.5 1.7]]
-
- # 8.选择没有任何 nan 值的 iris_data行
- x = iris_data2[np.sum(np.isnan(iris_data2), axis=1) == 0] # axis=1:将每行元素相加
- print(x)
-
- # 9.计算 iris_data 中sepalLength(第1列)和petalLength(第3列)之间的相关系数
- x = np.corrcoef(sepallength3, petallength3) # 相关系数
- print(x)
- # [[1. 0.87175416]
- # [0.87175416 1. ]]
-
- # 10. 找出iris_data是否有任何缺失值。
- x = np.isnan(iris_data3)
- print(np.any(x)) # False
-
- # 11.在numpy数组中将所有出现的nan替换为0
- print(iris_data2)
- iris_data2[np.isnan(iris_data2)] = 0
- print(iris_data2)
-
- # 12. 找出鸢尾属植物物种中的唯一值和唯一值出现的数量
- iris_data4 = np.loadtxt(outfile, dtype=object, delimiter=',', usecols=[4])
- x = np.unique(iris_data4, return_counts=True) # 返回重复值及其出现次数
- print(x)
- # (array(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype=object), array([50, 50, 50], dtype=int64))
-
- # 13.将 iris_data 的花瓣长度(第3列)以形成分类变量的形式显示
- # 定义:Less than 3 -->'small';3-5 --> 'medium';'>=5 --> 'large'。
- petallength = iris_data3[:,2] # 花瓣长度
- print(np.amin(petallength),np.amax(petallength)) # 1.0 6.9
- inds = np.digitize(petallength, [0,3,5,7])
- # print(inds)
- lable = {1: 'small',2: 'medium',3: 'large'}
- pl_lable = [lable[x] for x in inds]
- print(pl_lable)
- # 14.在 iris_data 中创建一个新列,其中 volume 是 (pi x petallength x sepallength ^ 2)/ 3
- iris_data5 = np.loadtxt(outfile, dtype=object, delimiter=',')
- sepallength5 = iris_data5[:, 0].astype(float)
- petallength5 = iris_data5[:, 2].astype(float)
- volume = (np.pi * petallength5 * sepallength5 ** 2) / 3
- volume = volume[:, np.newaxis] # np.newaxis在列上增加一维
- iris_data5 = np.concatenate([iris_data5, volume], axis=1) # 对应行的数组拼接
- print(iris_data5)
- # 15.随机抽鸢尾属植物的种类,使得Iris-setosa的数量是Iris-versicolor和Iris-virginica数量的两倍
- species = ['Iris‐setosa', 'Iris‐versicolor', 'Iris‐virginica']
- np.random.seed(20201130)
- species_out = np.random.choice(species, 50000, p=[0.5, 0.25, 0.25])
- print(np.unique(species_out, return_counts=True))
- # 16.根据 sepallength 列对数据集进行排序
- sepallength6 = iris_data[:, 0]
- index = np.argsort(sepallength6) # 返回排序后的索引
- # print(iris_data[index]) !!
- # 17.在鸢尾属植物数据集中找到最常见的花瓣长度值(第3列)
- petallength7 = iris_data[:, 2]
- length, counts = np.unique(petallength7, return_counts=True)
- # print(length, counts)
- print(length[np.argmax(counts)]) # np.argmax()返回数组中最大值的索引 1.5
- print(np.amax(counts)) # 14
- # 18.在鸢尾花数据集的 petalwidth(第4列)中查找第一次出现的值大于1.0的位置
- petalwidth = iris_data[:,3].astype(float)
- index = np.where(petalwidth > 1.0) # 返回tuple形式的坐标
- print(index[0][0]) # 50

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。