python作为数据分析的利器,求极差、平均数、中位数、众数与方差是很常用的,然而,在python进行统计往往要使用外部的python库numpy,这个库不难装,然而,如果单纯只是求极差、平均数、中位数、众数与方差,还是自己写比较好,因为,给一个.py程序别人的机器,别人的机器上没有python库numpy,又要别人折腾一番,这很不好。不过看情况咯,如果你要处理上亿级的数据,还是配置一下外部的python库numpy吧。

先给大家回归一下极差、平均数、中位数、众数与方差是什么鬼:

1、极差:最大值与最小值之差。它是标志值变动的最大范围。英文:range

公式:R=Xmax-Xmin(其中,Xmax为最大值,Xmin为最小值)

2、平均数:一组数据中所有数据之和再除以数据的个数。反映数据集中趋势的一项指标。英文:average

公式:

3、中位数:对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。英文:median

公式:

从小到大排序为

 则N为奇数时,

N为偶数时,

4、众数:众数是样本观测值在频数分布表中频数最多的那一组的组中值,主要应用于大面积普查研究之中。英文:mode

例如:1,2,3,3,4的众数是3。

但是,如果有两个或两个以上个数出现次数都是最多的,那么这几个数都是这组数据的众数。

例如:1,2,2,3,3,4的众数是2和3。

还有,如果所有数据出现的次数都一样,那么这组数据没有众数。

例如:1,2,3,4,5没有众数。

5、方差:方差是实际值与期望值之差平方的平均值,方差是在概率论和统计方差衡量随机变量或一组数据是离散程度的度量。英文:variance

公式:

或者

(就是在《概率论与数理统计》中那条,方差就是平方的期望-期望的平方)

因此,根据上述的理论,得到如下的代码:

#-*-coding:utf-8-*-

import time;

import random;

class Math:

#求极差

@staticmethod

def range(l):

return max(l)-min(l);

#求平均数

@staticmethod

def avg(l):

return float(sum(l))/len(l);

#求中位数

@staticmethod

def median(l):

l=sorted(l);#先排序

if len(l)%2==1:

return l[len(l)/2];

else:

return (l[len(l)/2-1]+l[len(l)/2])/2.0;

#求众数

@staticmethod

def mode(l):

#统计list中各个数值出现的次数

count_dict={};

for i in l:

if count_dict.has_key(i):

count_dict[i]+=1;

else:

count_dict[i]=1;

#求出现次数的最大值

max_appear=0

for v in count_dict.values():

if v>max_appear:

max_appear=v;

if max_appear==1:

return;

mode_list=[];

for k,v in count_dict.items():

if v==max_appear:

mode_list.append(k);

return mode_list;

#求方差

@staticmethod

def variance(l):#平方的期望-期望的平方

s1=0;

s2=0;

for i in l:

s1+=i**2;

s2+=i;

return float(s1)/len(l)-(float(s2)/len(l))**2;

#求方差2

@staticmethod

def variance2(l):#平方-期望的平方的期望

ex=float(sum(l))/len(l);

s=0;

for i in l:

s+=(i-ex)**2;

return float(s)/len(l);

#主函数,测试

arr=[1,2,3,2,3,1,4];

print "极差为:{0}".format(Math.range(arr));

print "平均数为:{0:.2f}".format(Math.avg(arr));

print "中位数为:{0}".format(Math.median(arr));

print "众数为:{0}".format(Math.mode(arr));

print "方差为:{0:.2f}".format(Math.variance(arr));

print "方差为:{0:.2f}".format(Math.variance2(arr));

print;

#性能测试

arraylist=[];

for i in range(1,1000000):

arraylist.append(i);

random.shuffle(arraylist);

time_start=time.time();

print "方差为:{0:.2f}".format(Math.variance(arraylist));

time_end=time.time();

print "{0}s".format(time_end-time_start);

time_start=time.time();

print "方差为:{0:.2f}".format(Math.variance2(arraylist));

time_end=time.time();

print "{0}s".format(time_end-time_start);

运行结果如下:

关于这个程序有几点说明的:

(1)开头引入time与random主要是为了最后部分测试两种求方差的方式那种性能较优使用,一般情况下使用上述我自定义的Math类,无须引入任何python包。

(2)求任何一个统计量,用到除法,注意先将int先转float,否则精度损失严重,你是得到不到最后的正确答案的。

(3)python中自带有求list所有元素之和的sum,求list中的最值max,min,对list中的元素进行从小到大的排序sort()都用了,其余只能让我们自己现实了。

(4)这里无须考虑如果形式参数被传入一个字符串数组怎么办,因为这些工具类都是我们自己使用了,自己控制好要传递的数值,无须考虑这么多。

(5)求众数最艰难,因为用不到任何python自带的方法,还要返回一个list,因为众数的个数不定,统计数组中出现次数最多的数的时候,用到了python中的字典dict,《【Python】容器类》(点击打开链接),这个字典中,key是list中的数字,values是该数字出现的次数。然后要求出现次数的最大值,最后再求出改最大值对应的key。其中用count_dict.items()返回字典中的key-value对的数组集,count_dict.values()返回字典中的value集,当然同时也有count_dict.keys()返回key集。

(6)由于求方差的方法有两种,此程序在最后部分生成了一个百万级、打乱顺序的list,对两种求方差的方法进行测试,令人吃惊的是,万万没想到是我们愚蠢的人类最不爱用,也最难用的,最不好用的

平方-期望的平方的期望,优于更好记忆的、更常用的平方的期望-期望的平方:。

。从上述的运行结果可以看出

这种求方差的方法速度是

的一倍!这就是聪明的计算机与愚蠢的人类的区别吧~

(7)最后,python的打印到控制台,其实你完全可以print得更好的,你不换行还要在print后面补逗号吗,再print一个什么东东,或者将数值用str先转字符串才能与纯正的字符串连接起来,而字符串的format方法,配合print相当于C语言的printf,同时python的format用{0},{1}…代表后面的第0、1……参数。{0:.2f}代表这个参数以保留2位小数的方式输出。

python求均值方差不用numpy_【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印到控制台...相关推荐

  1. python平均数 中位数函数_R和python语言如何求平均值,中位数和众数

    均值是通过取数值的总和并除以数据序列中的值的数量来计算. R语言平均值公式: mean(x, trim = 0, na.rm = FALSE, ...) #x - 是输入向量.trim - 用于从排序 ...

  2. 【Python】两种方法计算平均值、中值、众数、方差、标准差、百分位数

    目录 数据特征 数据集 均值(Mean) - 平均值 中值(Median) - 中点值,又称中位数 众数(Mode) - 最常见的值 方差 标准差(欧式距离) 百分位数 数据特征 特征探索主要是对数据 ...

  3. python --机器学习(基本算法详解)SciPy、Numpy、Matplotlib

    介绍 数据集 在计算机中,数据集指的是任何数据集合.它可以是从数组到完整数据库的任何内容. 一个数组的例子: [99,86,87,88,111,86,103,87,94,78,77,85,86] 一个 ...

  4. python数组和函数的区别_真假美猴王-Numpy数据与Python数组的区别与联系!

    Numpy,是python中的一个矩阵计算包,功能类似matlab的矩阵计算.Numpy的诞生弥补了下面提到的两项的不足,numpy提供了两种基本的对象:ndarray(N-dimensional a ...

  5. 过采样和求均值提高ADC分辨率

    MARK一下 相关器件 本应用笔记适用于下列器件 C8051F000 C8051F001 C8051F002 C8051F005 C8051F006 C8051F010 C8051F011 C8051 ...

  6. python求均值标准差不用numpy_【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印...

    python作为数据分析的利器,求极差.平均数.中位数.众数与方差是很常用的,然而,在python进行统计往往要使用外部的python库numpy,这个库不难装,然而,如果单纯只是求极差.平均数.中位 ...

  7. [转载] 【Python】不用numpy用纯python求极差、平均数、中位数、众数与方差,python的打印到控制台

    参考链接: 在没有库的Python中查找均值,中位数,众数 python作为数据分析的利器,求极差.平均数.中位数.众数与方差是很常用的,然而,在python进行统计往往要使用外部的python库nu ...

  8. Python求均值,方差,标准差

    import numpy as np arr = [1,2,3,4,5,6]# 求均值 arr_mean = np.mean(arr)# 求方差 arr_var = np.var(arr)# 求总体标 ...

  9. Python numpy 求均值 标准差 方差 及参数介绍

    MID:MA(CLOSE,20);//求N个周期的收盘价均线,称为布林通道中轨 TMP2:=STD(CLOSE,20);//求M个周期内的收盘价的标准差 TOP:MID+2*TMP2;//布林通道上轨 ...

  10. python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数

    python求平均数.方差.中位数的例子 CalStatistics.py def getNum(): #获取用户不定长度的输入 nums = [] iNumStr = input("请输入 ...

最新文章

  1. linux pcre-devel,ubuntu - 我应该为'pcre-devel'安装什么软件包? - Ubuntu问答
  2. bazel源码编译Tensorflow
  3. Confluence 6 导入 SSL 证书和问题解决
  4. 0.C++之RAII技术解析
  5. 高效的深度学习:将深度学习模型变得更小、更快、更好的综述
  6. 菜鸟网络技术专家:技术架构的战略和战术原则
  7. 深度学习之基于卷积神经网络(VGG16)实现性别判别
  8. 50万数据生成6位数不重复字符串_R语言系列3:高级数据管理
  9. 玩转lib-notify (转自PT牛的博客)
  10. 我的docker随笔27:基于容器的sqlite测试
  11. arduino和python对接_Python:与Arduino进行交互-后续
  12. ArrayList类源码阅读
  13. 联想计算机怎么改为光驱启动,联想笔记本光驱启动设置方法
  14. ae合成设置快捷键_AE设计首选快捷键大全+解析
  15. [生存志] 第6节 第一篇 以史为鉴 明朝事的读后心得
  16. 纳睿雷达IPO过会:拟募资近10亿 包晓军夫妇为加拿大人
  17. 你是如何转行的?转行容易吗? 1
  18. windows server 2016域控屏保策略设置
  19. 程序员如何动手打造属于自己的智能家居
  20. 家庭版取消灰色勾选加密内容以便保护数据的方法

热门文章

  1. VMware ESXi 7.0 U2 SLIC Unlocker USB 网卡驱动集成镜像 202109 更新
  2. 黑科技网站推荐 第一弹 RemoveBg [一键抠图]
  3. 教你如何购买阿里云香港服务器(教程)
  4. jmp指令流程图怎么写_NS流程图是什么?规范实用的流程图工具
  5. RabbitMQ基础
  6. icon 做成html形式,CSS icon的各种做法
  7. 原码、反码、补码以及补码是怎么来的
  8. 区块链项目需要服务器吗,区块链需要服务器吗
  9. 【C语言每日练习】——3.回文数、特殊回文数(三种方法详解)
  10. C++ 设置字体颜色