excel Python标准差检查

3yhwsihp  于 2023-11-20  发布在  Python
关注(0)|答案(3)|浏览(113)

我写了一个python代码来计算一列数字的标准差。我在excel上检查了我的答案,它似乎是关闭的。我不确定我是否错过了一个步骤,或者我是否应该担心,但如果有人有时间查看代码,看看他们是否注意到错误,请让我知道。谢谢。

city_population = [2123,1284,7031,30788,147,2217,10000]

mean = sum(city_population,0.0)/len(city_population)

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
        result = (total_sum/(length-1))
        return sqrt(result)
stan_dev = stdev(city_population)
print "The standard deviation is",(stan_dev)

字符串
输出:The standard deviation is 9443.71609738
Excel:9986.83890663

zazmityj

zazmityj1#

你的问题主要是由于你的循环中计算总和的代码。在这个循环中,你也在计算每次迭代的结果,然后从函数返回。这意味着循环中只有一次迭代运行。
当运行你的代码时,我得到的结果是2258.72114877,它是仅从第一个值计算的。通过将代码更改为以下内容,可以生成正确的样本标准差:

city_population = [2123,1284,7031,30788,147,2217,10000]

mean = sum(city_population,0.0)/len(city_population)

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
    # total_sum is 698158659.4285713
    result = (total_sum/(length-1))
    # result is 116359776.57142855
    # sqrt(result) is 10787.01889177119
    return sqrt(result)

stan_dev = stdev(city_population)
print "The standard deviation is",(stan_dev)

字符串
此新结果与Excel中的值不同的原因是Excel返回的是总体标准差。作为快速参考,以下页面可能对您有用:
https://statistics.laerd.com/statistical-guides/measures-of-spread-standard-deviation.php
如果没有从头开始编写代码的要求,我建议使用Numpy来避免重新发明轮子:http://www.numpy.org/。有了这个,你的代码变成:

import numpy
city_population = [2123,1284,7031,30788,147,2217,10000]
numpy.std(city_population, ddof=1)


几个额外的提示:为了避免将来的混淆和潜在的问题,尽量避免将函数参数命名为全局变量。2尽量不要依赖于函数中以前设置的变量(就像你在这里使用“mean”一样)。

xa9qqrwz

xa9qqrwz2#

问题是你在循环中有return!
应采取以下措施:

def stdev(city_population):
    length = len(city_population)
    total_sum = 0
    for i in range(length):
        total_sum += pow((city_population[i]-mean),2)
    result = (total_sum/(length))
    return sqrt(result)

字符串
而不是标准差,你需要除以长度而不是长度-1(如果你有一个样本,而不是整个人口)。

erhoui1w

erhoui1w3#

考虑缩短你的函数以提高可读性!

def standard_dev(nums):
return (sum([(num - (sum(nums) / len(nums))) ** 2 for num in nums]) / len(nums)) ** (1 / 2)

字符串

相关问题