“基本统计值计算“实例分析

需求:给出一组数,对他们有个概要理解。

总个数:len()

求和:for ---in

平均值:求和/总个数

方差:各数据与平均数差的平方的和的平均数

中位数:排序,然后如果奇数个的话找中间一个,偶数个的话找中间两个取平均。

函数:getnumber,作用为获得用户的每一个数据输入,直到用户输入一个空的回车即止。

代码示例如下:

def getNum():
    nums=[]   #创建一个空列表
    iNumStr=input("请输入数字(回车退出):")  #将所输入的数赋值给iNumStr函数
    while iNumStr  !="":
        nums.append(eval(iNumStr))
        iNumStr=input("请输入数字(回车退出):")
    return nums
def mean(numbers):   #计算平均值
    s=0.0
    for num in numbers:
        s=s+num
    return s/len(numbers)
def de(numbers,mean):   #计算方差
    sd=0.0
    for num in numbers:
        sd=sd+(num-mean)**2
    return sd/len(numbers)
def dev(numbers,mean):   #计算标准差
    sdev=0.0
    for num in numbers:
        sdev=sdev+(num-mean)**2
    return pow(sdev/(len(numbers)-1),0.5)
def median(numbers):
    sorted(numbers)
    size=len(numbers)
    if size%2==0:
        med=(numbers[size//2-1]+numbers[size//2])/2
    else:
        med=numbers[size//2]
    return med
n=getNum()
m=mean(n)
print("平均数:{},方差:{},标准差:{},中位数:{}".format(m,de(n,m),dev(n,m),median(n)))

运行界面如下所示:

通过以上程序可知,我们根据模块化设计思想,首先,我们确立函数的输入,即进行列表的输入,

在实现该模块设计的时候,我们先创建一个列表,即一个空列表,然后将输入值赋值给一个函数,利用while循环进行判断,如果输入不为空,则继续输入,同时利用append函数将输入值增加到列表后面,如果输入为空,则直接返回该列表。这就达到了输入的效果。具体的这一模块的代码如下:

def getNum():
    nums=[]   #创建一个空列表
    iNumStr=input("请输入数字(回车退出):")  #将所输入的数赋值给iNumStr函数
    while iNumStr  !="":
        nums.append(eval(iNumStr))
        iNumStr=input("请输入数字(回车退出):")
    return nums

之后,在实现输入值模块的基础上,我们进行增加所实现的功能,其中首先增加求取平均值的模块功能。求取平均值需要先求他们的总体的和,然后再用和去除以元素的个数。我们采用for循环进行求取,我们用for循环进行遍历元素的每一个值,同时设立一个值,即和初始值为s=0.0,在我们遍历每一个元素的时候,我们将和加遍历的每一个元素,遍历结束后,和也相加完毕,即结果即为元素的和,然后我们采用len函数去判断列表的个数,将和与列表个数进行相除即为平均值。

功能实现如下:

def mean(numbers):   #计算平均值
    s=0.0
    for num in numbers:
        s=s+num
    return s/len(numbers)

之后我们进行方差功能的实现,求取方差的时候,需要求取各数据与平均数差的平方的和的平均数,平均数的功能在上一模块里面我们已经实现了,所以我们需要进行调用mean函数,即作为我们方差函数的参数,而且也要调用输入函数,即该函数有两个参数,首先我们设立各数据与平均数差的平方的和的初始值sd为0,之后我们通过遍历将各值进行相加,结果即为他们的和,遍历完毕后,我们采用len函数确定元素的个数,进行求取各数据与平均数差的平方的和的平均数。

功能模块实现如下:

def de(numbers,mean):   #计算方差
    sd=0.0
    for num in numbers:
        sd=sd+(num-mean)**2
    return sd/len(numbers)

下面我们进行求取标准差的计算,求取标准差的时候,需要求取各数据与平均数差的平方的和的平均数,平均数的功能在上一模块里面我们已经实现了,所以我们需要进行调用mean函数,即作为我们标准差函数的参数,而且也要调用输入函数,即该函数有两个参数,首先我们设立各数据与平均数差的平方的和的初始值sdev为0,之后我们通过遍历将各值进行相加,结果即为他们的和,遍历完毕后,我们采用len函数确定元素的个数,进行求取各数据与平均数差的平方的和的平均数。求解出来后,我们还要进行将结果进行开方,即为标准差。这里我们需要增加一点,在数学中,求标准差确实有两个公式,一个是除以 n ,一个是除以 n-1 , 当数据个数n较多时,也就是 n 很大时,计算的结果差别不是很大,因此选择哪个公式都可以。 但当数据个数不多,n 不是很大时,结果的差异还有明显地。 数学上已经证明,除以 n-1 的公式可以更真实地反映总体的特征,因此一般较多采用。所以我们这里采用n-1求解标准差。

功能模块实现如下:

def dev(numbers,mean):   #计算标准差
    sdev=0.0
    for num in numbers:
        sdev=sdev+(num-mean)**2
    return pow(sdev/(len(numbers)-1),0.5)

下来我们进行中位数的计算,首先我们将数据进行排序,然后如果奇数个的话找中间一个,偶数个的话找中间两个然后求取这两个数的平均值。首先我们将数据进行排序,采用sorted方法,将数据从小到大进行排列,并且我们将长度赋值给size这个函数,之后我们采用if -else语句进行判断,如果长度为偶数个,我们通过对列表进行索引取中间两个数,将他们相加求取平均值,如果不为偶数,则取他们的中间值,这里需要注意的是,索引是从0开始索引,所以奇数个的中间值我们除以2,例如7//2,取整为3,索引从0开始,刚好为第4个值,即中间值。

def median(numbers):    #计算中位数
    sorted(numbers)   #将数据进行升序排列,即从小到大。
    size=len(numbers)
    if size%2==0:
        med=(numbers[size//2-1]+numbers[size//2])/2
    else:
        med=numbers[size//2]
    return med

之后我们对这些值进行输出,将输入值赋值给n,平均值赋值给m,求取方差需要调用输入值和平均值,而中位数需要调用输入值,运行之后,输入数据,即可求取这些值。

n=getNum()
m=mean(n)
print("平均数:{},方差:{},中位数:{}".format(m,dev(n,m),median(n)))

技术能力扩展:

获取多个数据:从控制台获取多个不确定数据的方法

分割多个函数:模块化设计方法

充分利用函数:充分利用python提供的内容函数

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值