用python求数据表中数据的均值与方差

Python018

用python求数据表中数据的均值与方差,第1张

以下为代码:

numstr = input("请输入全部数据:用英文逗号(,),中文逗号(,),\

空格( ),制表符(tab键)或换行(请一次性复制过来)中的一种统一分隔数据:")

if "," in numstr:

  numlist = numstr.split(",")

elif "," in numstr:

  numlist = numstr.split(",")

elif "\t" in numstr:

  numlist = numstr.split("\t")

elif "\n" in numstr:

  numlist = numstr.split("\n")

elif " " in numstr:

  numlist = numstr.split(" ")

else:

  numlist = [numstr]

numlist = list(map(lambda x:x.strip(",").strip(",").\

                 strip("\t").strip("\n").strip(" "), numlist))

for i in numlist.copy():

  try:

      a = float(i)

  except:

      numlist.remove(i)

      print("已过滤字符串:%s"%i)

#好了,上面很多只是方便用户而已(但还是有一些有用的),主要是下面

numlist = list(map(lambda x:float(x), numlist))#所有字符串转为浮点

print("最终数列:",numlist)#输出最终数列,进行核对

average = sum(numlist)/len(numlist)#用数列和除以出列长度得到平均数

variance = 0#方差,先记为0

for i in numlist:#遍历列表

  variance += (i - average) ** 2#反正就是公式对吧,先加进去

variance /= len(numlist)#还是公式,那一长串还得除以一个数列长度

print("均值:%.2f\n方差:%.2f"%(average, variance))#分两行输出

以下为输出效果:

请输入全部数据:用英文逗号(,),中文逗号(,),空格( ),制表符(tab键)或换行(请一次性复制过来)中的一种统一分隔数据:38,22,99,10,99,7, 25,,40

已过滤字符串:

最终数列: [38.0, 22.0, 99.0, 10.0, 99.0, 7.0, 25.0, 40.0]

均值:42.50

方差:1181.75

以下为解析:

平均值的思路就是总和除以列表长度,方差的思路就是把所有的(x-均值)²加起来,最后再除以一个长度即可。

本程序的优点:输入时逗号后出现空格与不小心多打逗号等情况都不会出问题,可以接受小数,可以先输出最终数列以供核对。

def fangcha():

a=float(raw_input("请输入a:"))

b=float(raw_input("请输入b:"))

c=float(raw_input("请输入C:"))

d=(a+b+c)/3.0

e=((a-d)**2+(b-d)**2+(c-d)**2)/3.0

print "平均数是:%f方差是:%f" %(d,e)

fangcha()

Python2.7可用

可以用numpy模块实现:

import numpy

def cal_mean_std(sum_list_in):

    # type: (list) -> tuple

    N = sum_list_in.__len__()

    narray = numpy.array(sum_list_in)

    sum = narray.sum()

    mean = sum / N

    narray_dev = narray - mean

    narray_dev = narray_dev * narray_dev

    sum_dev = narray_dev.sum()

    DEV = float(sum_dev) / float(N)

    STDEV = numpy.math.sqrt(DEV)

    print "mean:", mean, " DEV:", DEV, " STDEV:", STDEV

    return mean, DEV, STDEV

均值为mean,方差为DEV,标准差是STDEV

传入数据是一个list:sum_list_in