在python中计算数字的标准偏差

在python中计算数字的标准偏差,python,Python,我试图计算文档中一组数字的标准偏差。 以下是我目前得到的信息: with open("\\Users\\xxx\\python_courses\\1DV501\\assign3\\file_10000integers_B.txt", "r") as f: total2 = 0 number_of_ints2 = 0 deviation = 0.0 variance = 0.0 for line in f: for num in line.split

我试图计算文档中一组数字的标准偏差。 以下是我目前得到的信息:

with open("\\Users\\xxx\\python_courses\\1DV501\\assign3\\file_10000integers_B.txt", "r") as f:
total2 = 0
number_of_ints2 = 0
deviation = 0.0
variance = 0.0
for line in f:
    for num in line.split(':'):
        total2 += int(num)
        number_of_ints2 += 1
average = total2/number_of_ints2
for line in f:
    for num in line.split(":"):
        devation += [(int(num) - average) **2
但我完全被卡住了。我不知道怎么做。数学不是我的强项,所以这很难。 此外,如果有任何区别,文档中会混合负数和正数。

您可以使用该功能,这是官方文档:

在列表中设置数字,然后应用函数:

from statistics import stdev
mylist = [1,2,5,10,100]
std = stdev(mylist)

您可以使用一些可用的库,例如,如果我有从某处获得的数据

>>> import random
>>> data = [random.randint(1,100) for _ in range(100)]  # assume from your txt file
我可以使用
statistics.stdev

>>> import statistics
>>> statistics.stdev(data)
28.453646514989956
numpy.std

>>> import numpy as np
>>> np.std(data)
28.311020822287563
>>> import scipy.stats
>>> scipy.stats.tstd(data)
28.453646514989956
或者
scipy.stats.tstd

>>> import numpy as np
>>> np.std(data)
28.311020822287563
>>> import scipy.stats
>>> scipy.stats.tstd(data)
28.453646514989956
或者如果你想自己滚

def stddev(data):
    mean = sum(data) / len(data)
    return math.sqrt((1/len(data)) * sum((i-mean)**2 for i in data))

>>> stddev(data)
28.311020822287563

请注意,计算值的细微差异将取决于您想要的是“样本”标准偏差还是“总体”标准偏差。

问题在于您在文件上迭代了两次,并且在第二次循环之前没有将读取器重置为文件的开头。您可以使用
f.seek(0)
来执行此操作

total2 = 0
number_of_ints2 = 0
deviation = 0.0
variance = 0.0

with open("numbers.txt", "r") as f:
    for line in f:
        for num in line.split(':'):
            total2 += int(num)
            number_of_ints2 += 1
    average = total2 / number_of_ints2
    f.seek(0)  # Move back to the beginning of the file.
    for line in f:
        for num in line.split(":"):
            deviation += (int(num) - average) ** 2

为什么不能使用内置模块的功能来实现此功能?这是一个限制您使用外部库的家庭作业问题吗?您的代码有什么问题(除了“with”后面的缩进错误之外)?到目前为止,我觉得还可以。您应该将偏差除以整数-1得到方差,然后取平方根得到标准值deviation@Stefan它不像程序中那样缩进,它是在网站上格式化时发生的:)。。。如果你出于某种原因使用Python2,你的除法可能是整数除法。是有一个特殊的编程问题,还是你只是不知道如何计算?