用python解决鸢尾属植物数据集问题

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

求出鸢尾属植物萼片长度(Sepal.Length)的平均值、中位数和标准差:(我用的python中的spyder敲的代码)

import csv
filename=csv.reader(open('iris.csv',encoding='utf-8'))
a=[]
for row in filename:
    a.append(row[1])
del a[0]  #删除标题行
a=list(map(float,a))  #将字符串转化为浮点型数据
# print("除标题后的萼片长度:",a)

#求平均数
pingjun=sum(a)/len(a)
print("平均数是:",pingjun)

#求中位数
a=sorted(a,reverse=False)  #从小到大排列
if (type(len(a)/2)==int):  #判断有偶数个数据还是奇数个数据
    zhongwei=(a[len(a)/2]+a[len(a)/2+1])/2
    print("中位数是:",zhongwei)
else:
    zhongwei=a[len(a)//2+1]
    print("中位数是:",zhongwei)

#求百分位数
print("第10百分位数是:",a[9])
print("第80百分位数是:",a[79])

#求标准差
c=0
for i in range(0,len(a)):
    b=(a[i]-zhongwei)**2
    c=c+b
c=(c/len(a))**0.5
print("标准差是:",c)

下面的这个是我的结果:

把iris_data数据集中的30个随机位置修改为np.nan值:

#修改nan值
import csv
import random
import numpy as np
filename=csv.reader(open('iris.csv',encoding='utf-8'))
data=[]
for row in filename:
    data.append(row)
# print(data)
s=sum(data,[])  #转为一维数组
s1=random.sample(s,30)
print("选取的30个数据分别是:",s1)
count=0
for m in range(0,len(s)):
    for n in range(0,len(s1)):
        if (s[m]==s1[n] and count<=30):  #当修改到30次后跳出循环
            s[m]=np.nan
            count+=1
        else:
            break
s=np.array(s)
s=s.reshape(151,6)
print("修改过后的数组为:",s)

下面是修改了nan值的结果:

 最后的要求就是筛选具有 sepallength(第1列)< 6.0 并且 petallength(第3列)> 1 的 iris_data行:

import csv
import numpy as np
from itertools import chain
filename=csv.reader(open('iris.csv',encoding='utf-8'))
demo=[]
for row in filename:
    demo.append(row)
demo=np.array(demo)
demo=np.delete(demo,-1,axis=1)  #删除最后一列
demo=np.delete(demo,0,axis=0)   #删除第一行
demo=list(chain.from_iterable(demo))  #转化为列表
demo=list(map(float,demo))  #将列表中的字符串类型转化为浮点型
demo=np.array(demo)  #转为矩阵
demo=demo.reshape(150,5)  #转为和表格一样的矩阵维度
np.set_printoptions(suppress=True)  #不以科学计数法显示
row_index=np.logical_and(demo[:,1]<6.0,demo[:,3]>1.0)  #逻辑与的应用
print("满足条件的行有:",demo[row_index])

很明显可以看见一些行已经没有再展现出来:

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值