NumPy学习日志5——结课大作业

NumPy学习日志5——结课大作业


前言:本博文为DateWhale组队学习日志记录,学习周期为半个月,学习内容为NumPy。

本部分学习为Numpy学习结课的大作业,考察的内容为之前4篇日志记录的学习内容,包括输入输出、随机抽样、统计相关和线性代数。共计18道题目,每个题目下方都标有此题目考察内容。


本次练习使用 鸢尾属植物数据集.\iris.data,在这个数据集中,包括了三类不同的鸢尾属植物:Iris Setosa,Iris Versicolour,Iris Virginica。每类收集了50个样本,因此这个数据集一共包含了150个样本。每个样本有四个特征,分别为:

  • sepallength:萼片长度
  • sepalwidth:萼片宽度
  • petallength:花瓣长度
  • petalwidth:花瓣宽度

以上四个特征的单位都是厘米(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

1. 导入鸢尾属植物数据集,保持文本不变。【知识点:输入和输出】

import numpy as np
outfile = r'.\iris_data.txt'
iris_data = np.loadtxt(outfile, dtype=object, delimiter=',', skiprows=1)
print(iris_data)

2. 求出鸢尾属植物萼片长度的平均值、中位数和标准差。(第1列,sepallength)【知识点:统计相关】

sepalLength = np.loadtxt(outfile, dtype=float, delimiter=',', usecols=[0], skiprows=1)    #读取数据
SLmean = np.mean(sepalLength)      #计算均值
SLmedian = np.median(sepalLength)     #计算中位数
SLstd = np.std(sepalLength)      #计算标准差
print(SLmean, SLmedian, SLstd)      #打包输出

3. 创建一种标准化形式的鸢尾属植物萼片长度,其值正好介于0和1之间,这样最小值为0,最大值为1。(第1列,sepallength)【知识点:统计相关】

Min = np.min(sepalLength)
Ptp = np.ptp(sepalLength)
sepalLength_1 = np.zeros(len(sepalLength))
for i in range(len(sepalLength)):
    sepalLength_1[i] = (sepalLength[i] - Min) / Ptp
print(sepalLength_1)

4. 找到鸢尾属植物萼片长度的第5和第95百分位数。(第1列,sepallength)【知识点:统计相关】

a, b = np.percentile(sepalLength, [5, 95])
print(a, b)

5. 把iris_data数据集中的20个随机位置修改为np.nan值。【知识点:随机抽样】

iris_data1 = np.loadtxt(outfile, dtype=object, delimiter=',', skiprows=1)
i, j = iris_data1.shape
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_data = np.loadtxt(outfile, dtype=float, delimiter=',', skiprows=1, usecols=[0, 1, 2, 3])
i, j = iris_data.shape
np.random.seed(20201201)
iris_data[np.random.randint(i, size=20), np.random.randint(j, size=20)] = np.nan
sepallength = iris_data[:, 0]
x = np.isnan(sepallength)
print(sum(x))
print(np.where(x))

7. 筛选具有 sepallength(第1列)< 5.0 并且 petallength(第3列)> 1.5 的 iris_data行。【知识点:搜索】

iris_data = np.loadtxt(outfile, dtype=float, delimiter=',', skiprows=1, usecols=[0, 1, 2, 3])
sepallength = iris_data[:, 0]
petallength = iris_data[:, 2]
index = np.where(np.logical_and(petallength > 1.5, sepallength < 5.0))
print(iris_data[index])

8. 选择没有任何 nan 值的 iris_data行。【知识点:逻辑函数、搜索】

iris_data = np.loadtxt(outfile, dtype=float, delimiter=',', skiprows=1, usecols=[0, 1, 2, 3])
i, j = iris_data.shape
np.random.seed(20201201)
iris_data[np.random.randint(i, size=20), np.random.randint(j, size=20)] = np.nan
x = iris_data[np.sum(np.isnan(iris_data), axis=1) == 0]
print(x)

9. 计算 iris_data 中sepalLength(第1列)和petalLength(第3列)之间的相关系数。【知识点:统计相关】

x = iris_data[:, 0]
y = iris_data[:, 1]
z = np.corrcoef(x, y)
print(z)

10. 找出iris_data是否有任何缺失值。【知识点:逻辑函数】

x = np.isnan(iris_data)
print(np.any(x))

11. 在numpy数组中将所有出现的nan替换为0。【知识点:逻辑函数】

iris_data = np.loadtxt(outfile, dtype=float, delimiter=',', skiprows=1, usecols=[0, 1, 2, 3])
i, j = iris_data.shape
np.random.seed(20201201)
iris_data[np.random.randint(i, size=20), np.random.randint(j, size=20)] = np.nan
index = np.where(np.isnan(iris_data))
iris_data[index] = 0
print(iris_data)

12. 找出鸢尾属植物物种中的唯一值和唯一值出现的数量。【知识点:数组操作】

x, N = np.unique(iris_data, return_counts=True)
print(x, N)

13. 将 iris_data 的花瓣长度(第3列)以形成分类变量的形式显示。定义:Less than 3 --> ‘small’;3-5 --> ‘medium’;’>=5 --> ‘large’。【知识点:统计相关】

要将数组中数字转换为文本(分类),我们可以通过字典映射方式来实现。具体是先通过bin()函数对区间进行分段,接着通过digitize()函数返回每个数据所在分段,接着我们可以通过分段位置建立字典,位置作为键值,文本作为值。依次循环就可以实现转换。

petallength = iris_data[:, 2]
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【知识点:数组操作】

petallength = iris_data[:, 0].astype(float)
sepallength = iris_data[:, 2].astype(float)
volume = (np.pi * petallength * sepallength ** 2) / 3
volume = volume[:, np.newaxis]
iris_data1 = np.concatenate([iris_data, volume], axis=1)
np.set_printoptions(precision=2)
print(iris_data1)

15. 随机抽鸢尾属植物的种类,使得Iris-setosa的数量是Iris-versicolor和Iris-virginica数量的两倍。【知识点:随机抽样】

species = ['Iris‐setosa', 'Iris‐versicolor', 'Iris‐virginica']
np.random.seed(20201201)
species_out = np.random.choice(species, 50000, p=[0.5, 0.25, 0.25])
print(np.unique(species_out, return_counts=True))

16. 根据 sepallength 列对数据集进行排序。【知识点:排序】

index = np.argsort(iris_data[:, 0])
print(iris_data[index])

17. 在鸢尾属植物数据集中找到最常见的花瓣长度值(第3列)。【知识点:数组操作】

petallength = iris_data[:, 2]
length, counts = np.unique(petallength, return_counts=True)
print(length[np.argmax(counts)])
print(np.amax(counts)) 

18. 在鸢尾花数据集的 petalwidth(第4列)中查找第一次出现的值大于1.0的位置。【知识点:搜索】

petalwidth = iris_data[:,3].astype(float)
index = np.where(petalwidth > 1.0)
print(index[0][0])

以上为此次NumPy大作业汇报的日志。

注:本次学习搭配NumPy操作手册看效果更好,也方便以后的学习,链接NumPy v1.19 Manual.


结束语:本次Numpy学习就告一段落了,收获了很多Numpy基础知识,接下来打算在CSDN上再找一下Numpy、matplotlib和Pandas的教程学习一下,加油吧!希望我们都能变得更强!

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页