import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris=load_iris()
iris_data=iris.data
target=iris.target
iris_data
iris_target=load_iris.target
鸢尾属植物数据集处理.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O9C6hQXc-1606835684849)(https://img.shields.io/badge/python-3.8-blue)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VSuJLkbX-1606835684855)(https://img.shields.io/badge/numpy-1.18.5-pink)]
- sepallength:萼片长度
- sepalwidth:萼片宽度
- petallength:花瓣长度
- petalwidth:花瓣宽度
导入鸢尾属植物数据集,保持文本不变
所用知识,numpy的输入与输出
import numpy as np
with open('Iris数据集/iris.csv',encoding = 'utf-8') as f:
data = np.loadtxt(f,str,delimiter = ",")
data = data[:,1:]
求出鸢尾属植物萼片长度的平均值、中位数和标准差(第1列,sepallength)
所用知识,统计相关
print(data[:,0])
# ['"Sepal.Length"' '5.1' '4.9' '4.7' '4.6' '5.0' '5.4' '4.6' '5.0' '4.4'
# '4.9' '5.4' '4.8' '4.8' '4.3' '5.8' '5.7' '5.4' '5.1' '5.7' '5.1' '5.4'
# '5.1' '4.6' '5.1' '4.8' '5.0' '5.0' '5.2' '5.2' '4.7' '4.8' '5.4' '5.2'
# '5.5' '4.9' '5.0' '5.5' '4.9' '4.4' '5.1' '5.0' '4.5' '4.4' '5.0' '5.1'
# '4.8' '5.1' '4.6' '5.3' '5.0' '7.0' '6.4' '6.9' '5.5' '6.5' '5.7' '6.3'
# '4.9' '6.6' '5.2' '5.0' '5.9' '6.0' '6.1' '5.6' '6.7' '5.6' '5.8' '6.2'
# '5.6' '5.9' '6.1' '6.3' '6.1' '6.4' '6.6' '6.8' '6.7' '6.0' '5.7' '5.5'
# '5.5' '5.8' '6.0' '5.4' '6.0' '6.7' '6.3' '5.6' '5.5' '5.5' '6.1' '5.8'
# '5.0' '5.6' '5.7' '5.7' '6.2' '5.1' '5.7' '6.3' '5.8' '7.1' '6.3' '6.5'
# '7.6' '4.9' '7.3' '6.7' '7.2' '6.5' '6.4' '6.8' '5.7' '5.8' '6.4' '6.5'
# '7.7' '7.7' '6.0' '6.9' '5.6' '7.7' '6.3' '6.7' '7.2' '6.2' '6.1' '6.4'
# '7.2' '7.4' '7.9' '6.4' '6.3' '6.1' '7.7' '6.3' '6.4' '6.0' '6.9' '6.7'
# '6.9' '5.8' '6.8' '6.7' '6.7' '6.3' '6.5' '6.2' '5.9']
a = data[1:,0].astype(float)
print(a.mean()) # 5.843333333333334
print(np.median(a)) # 5.8
print(np.std(a)) # 0.8253012917851409
创建一种标准化形式的鸢尾属植物萼片长度,其值正好介于0和1之间,这样最小值为0,最大值为1(第1列,sepallength)
所用知识,统计相关
print((a - np.min(a)) / (np.max(a)-np.min(a)))
# [0.22222222 0.16666667 0.11111111 0.08333333 0.19444444 0.30555556
# 0.08333333 0.19444444 0.02777778 0.16666667 0.30555556 0.13888889
# 0.13888889 0. 0.41666667 0.38888889 0.30555556 0.22222222
# 0.38888889 0.22222222 0.30555556 0.22222222 0.08333333 0.22222222
# 0.13888889 0.19444444 0.19444444 0.25 0.25 0.11111111
# 0.13888889 0.30555556 0.25 0.33333333 0.16666667 0.19444444
# 0.33333333 0.16666667 0.02777778 0.22222222 0.19444444 0.05555556
# 0.02777778 0.19444444 0.22222222 0.13888889 0.22222222 0.08333333
# 0.27777778 0.19444444 0.75 0.58333333 0.72222222 0.33333333
# 0.61111111 0.38888889 0.55555556 0.16666667 0.63888889 0.25
# 0.19444444 0.44444444 0.47222222 0.5 0.36111111 0.66666667
# 0.36111111 0.41666667 0.52777778 0.36111111 0.44444444 0.5
# 0.55555556 0.5 0.58333333 0.63888889 0.69444444 0.66666667
# 0.47222222 0.38888889 0.33333333 0.33333333 0.41666667 0.47222222
# 0.30555556 0.47222222 0.66666667 0.55555556 0.36111111 0.33333333
# 0.33333333 0.5 0.41666667 0.19444444 0.36111111 0.38888889
# 0.38888889 0.52777778 0.22222222 0.38888889 0.55555556 0.41666667
# 0.77777778 0.55555556 0.61111111 0.91666667 0.16666667 0.83333333
# 0.66666667 0.80555556 0.61111111 0.58333333 0.69444444 0.38888889
# 0.41666667 0.58333333 0.61111111 0.94444444 0.94444444 0.47222222
# 0.72222222 0.36111111 0.94444444 0.55555556 0.66666667 0.80555556
# 0.52777778 0.5 0.58333333 0.80555556 0.86111111 1.
# 0.58333333 0.55555556 0.5 0.94444444 0.55555556 0.58333333
# 0.47222222 0.72222222 0.66666667 0.72222222 0.41666667 0.69444444
# 0.66666667 0.66666667 0.55555556 0.61111111 0.52777778 0.44444444]
找到鸢尾属植物萼片长度的第5和第95百分位数(第1列,sepallength)
所用知识,统计相关
print(np.percentile(a, [5, 95])) # [4.6 7.255]
把iris_data数据集中的20个随机位置修改为np.nan值
所用知识,随机抽用
site = np.random.randint(low=5,high=len(data) * 5,size=20)
x = (site / 5).astype(int)
y = site % 5
print(x) # [137 4 81 13 51 123 134 56 54 31 29 64 74 24 134 110 98 73 145 23]
print(y) #[2 3 1 2 1 1 3 1 1 3 2 2 1 4 2 4 1 1 3 3]
data[x,y] = np.nan
#截取nan化的一段
print(data)
# ['5.1', '3.5', '1.4', '0.2', '"setosa"'],
# ['4.9', '3', '1.4', '0.2', '"setosa"'],
# ['4.7', '3.2', '1.3', '0.2', '"setosa"'],
# ['4.6', '3.1', '1.5', 'nan', '"setosa"'],
# ['5', '3.6', '1.4', '0.2', '"setosa"'],
# ['5.4', '3.9', '1.7', '0.4', '"setosa"'],
# ['4.6', '3.4', '1.4', '0.3', '"setosa"'],
# ['5', '3.4', '1.5', '0.2', '"setosa"'],
# ['4.4', '2.9', '1.4', '0.2', '"setosa"'],
# ['4.9', '3.1', '1.5', '0.1', '"setosa"'],
# ['5.4', '3.7', '1.5', '0.2', '"setosa"'],
# ['4.8', '3.4', '1.6', '0.2', '"setosa"'],
# ['4.8', '3', 'nan', '0.1', '"setosa"'],
在iris_data的sepallength中查找缺失值的个数和位置(第1列)
所用知识:逻辑函数与搜索
a = data[1:,0].astype(float) # 4
np.isnan(a).sum()
筛选具有 sepallength(第1列)< 5.0 并且 petallength(第3列)> 1.5 的 iris_data行
所用知识:搜索
a = data[1:,0:4].astype(float)
np.where((a[:,0]<5) & (a[:,2]>1.5))
# (array([ 11, 24, 29, 30, 57, 106], dtype=int64),)
选择没有任何 nan 值的 iris_data行。
所用知识:逻辑函数、搜索
a = data[1:,:4].astype(float)
index = np.where(np.isnan(a))
np.delete(a,index[0],axis=0)
计算 iris_data 中sepalLength(第1列)和petalLength(第3列)之间的相关系数。
a = data[1:,:4].astype(float)
print(np.corrcoef(a[:,0], a[:,2]))
# array([[1. , 0.87175378],
# [0.87175378, 1. ]])
Q10判断空值
np.isnan(iris_data).any()
Q11填充0
iris_data[np.isnan(iris_data)]=0
Q12唯一值数量
np.unique(iris_data)
array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
1.7, 1.8, 1.9, 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9,
3. , 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4. , 4.1, 4.2,
4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, 5. , 5.1, 5.2, 5.3, 5.4, 5.5,
5.6, 5.7, 5.8, 5.9, 6. , 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8,
6.9, 7. , 7.1, 7.2, 7.3, 7.4, 7.6, 7.7, 7.9])
Q13唯一值数量
df=pd.DataFrame(iris_data[:,2],columns=[‘f3’])
df[‘str’]=‘small’
df.loc[(df[‘f3’]>=3)&(df[‘f3’]<=5),‘str’]=‘medium’
df.loc[df[‘f3’]>5,‘str’]=‘large’
df
Q14创建一个新列
volume = np.pi*iris_data[:,2]*iris_data[:,1]**2/3
np.c_[iris_data,volume]
volume
Q15随机抽鸢尾属植物的种类,使得Iris-setosa的数量是Iris-versicolor和Iris-virginica数量的两倍
species = np.array([‘Iris‐setosa’, ‘Iris‐versicolor’, ‘Iris‐virginica’])
species_out = np.random.choice(species, 10000, p=[0.5, 0.25, 0.25])
print(np.unique(species_out, return_counts=True))
Q16根据 sepallength 列对数据集进行排序
sepallength = iris_data[:,0]
index = np.argsort(sepallength)
iris_data[index][0:10]
Q17在鸢尾属植物数据集中找到最常见的花瓣长度值(第3列)
petallength = iris_data[:, 2]
vals, counts = np.unique(petallength, return_counts=True)
print(vals[np.argmax(counts)])
print(np.amax(counts))
Q18在鸢尾花数据集的 petalwidth(第4列)中查找第一次出现的值大于1.0的位置
petalWidth = iris_data[:, 3]
index = np.where(petalWidth > 1.0)
print(index)
print(index[0][0])