#3.8本章实训
#求花瓣长度均值最大的品种和花瓣长度方差最小的品种
#导入模块
import numpy as np
import csv
#获取数据
iris_data=[]
with open("D:\python test\iris.csv") as csvfile:
csv_reader=csv.reader(csvfile)
birth_header=next(csv_reader)
for row in csv_reader:
iris_data.append(row) #循环遍历每一行,将每一行的数据都加到列表中
iris_data #输出列表
#数据清除:去掉索引号
iris_list=[]
for row in iris_data:
iris_list.append(tuple(row[1:])) #对元组切片并将其加入到列表中
iris_list #输出列表
#创建数据类型
datatype=np.dtype([("Sepal.Leng",float),
("Sepal.Width",float),
("Petal.Leng",float),
("Petal.Width",float),
("Species",np.str_,40)])
print(datatype)
#创建二维数组
iris_data_array=np.array(iris_list,dtype=datatype)
print(iris_data_array) #输出二维数组
#取出花瓣长度和种类放入一个列表
petal_species=iris_data_array[["Petal.Leng","Species"]]
petal_species
#等级去重
petal_species_unique=np.unique(petal_species["Species"])
#用list来存放每种品种的均值和方差,便于后面转为array和采用sort函数
species_mean_var_list=[] #创建一个空列表
#针对每个品种,采用np.mean和np.var函数
for i in petal_species_unique:
mean=np.mean(petal_species[petal_species["Species"]==i]["Petal.Leng"]) #求平均值
var=np.var(petal_species[petal_species["Species"]==i]["Petal.Leng"]) #求方差
species_mean_var_list.append((i,mean,var)) #将种类和所求的平均值、方差加到列表中
print(species_mean_var_list)
#将列表转为ndarry
datatype=np.dtype([("Species",np.str_,40),("mean",float),("var",float)])
species_mean_var_array=np.array(species_mean_var_list,dtype=datatype)
print(species_mean_var_array)
#找出所有品种中花瓣长度均值最大的品种和方差最小的品种
print("花瓣长度均值最大的品种:",np.sort(species_mean_var_array,order="mean")[-1])
print("花瓣长度方差最小的品种:",np.sort(species_mean_var_array,order="var")[0])