大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
极差是指一组数据内的最大值和最小值之间的差异。
创新互联是一家专注网站建设、网络营销策划、小程序制作、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十年以来,已经为上千成都木制凉亭各业的企业公司提供互联网服务。现在,服务的上千客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
平均差是说明集中趋势的,标准差是说明一组数据的离中趋势的。
一组数据中各数据与平均数的差的平方和的平均数叫做这组数据的方差;
极差越大,平均差的代表性越小,反之亦然;标准差越大,平均差的代表性越小,反之亦然。
方差的算术平方根=标准差
Python内置函数有很多,为大家推荐5个神仙级的内置函数:
(1)Lambda函数
用于创建匿名函数,即没有名称的函数。它只是一个表达式,函数体比def简单很多。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了。
Lamdba的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
利用Lamdba函数,往往可以将代码简化许多。
(2)Map函数
会将一个函数映射到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词,然后将此函数应有到列表colors中的所有元素。
我们还可以使用匿名函数lamdba来配合map函数,这样可以更加精简。
(3)Reduce函数
当需要对一个列表进行一些计算并返回结果时,reduce()是个非常有用的函数。举个例子,当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现。
它与函数的最大的区别就是,reduce()里的映射函数(function)接收两个参数,而map接收一个参数。
(4)enumerate函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
它的两个参数,一个是序列、迭代器或其他支持迭代对象;另一个是下标起始位置,默认情况从0开始,也可以自定义计数器的起始编号。
(5)Zip函数
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
当我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
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
公式:或者(就是在《概率论与数理统计》中那条,方差就是平方的期望-期望的平方)
因此,根据上述的理论,得到如下的代码:
[python] view plain copy
#-*-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 vmax_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的过程中,有几个比较重要的内置函数:help()函数、dir()函数、input()与raw_input()函数、print()函数、type()函数。
第一、help()函数
Help()函数的参数分为两种:如果传一个字符串做参数的话,它会自动搜索以这个字符串命名的模块、方法等;如果传入的是一个对象,就会显示这个对象的类型的帮助。比如输入help(‘print’),它就会寻找以‘print’为名的模块、类等,找不到就会看到提示信息;而print在Python里是一个保留字,和pass、return同等,而非对象,所以help(print)也会报错。
第二、dir()函数
dir()函数返回任意对象的属性和方法列表,包含模块对象、函数对象、字符串对象、列表对象、字典对象等。尽管查找和导入模块相对容易,但是记住每个模块包含什么却不是这么简单,您并不希望总是必须查看源代码来找出答案。Python提供了一种方法,可以使用内置的dir()函数来检查模块的内容,当你为dir()提供一个模块名的时候,它返回模块定义的属性列表。dir()函数适用于所有对象的类型,包含字符串、整数、列表、元组、字典、函数、定制类、类实例和类方法。
第三、input与raw_input函数
都是用于读取用户输入的,不同的是input()函数期望用户输入的是一个有效的表达式,而raw_input()函数是将用户的输入包装成一个字符串。
第四、Print()函数
Print在Python3版本之间是作为Python语句使用的,在Python3里print是作为函数使用的。
第五、type()函数
Type()函数返回任意对象的数据类型。在types模块中列出了可能的数据类型,这对于处理多种数据类型的函数非常有用,它通过返回类型对象来做到这一点,可以将这个类型对象与types模块中定义类型相比较。
import math
r=math.floor(3.2) #向下取整
print(r)
r=math.ceil(4.5) #向上取整
print(r)
r=abs(-2)
r=round(4.5) #四舍五入
r=math.pow(3,2) #幂运算
r=math.sqrt(25) #开平方
其中 函数fabs和abs的区别:函数fabs的作用是求浮点数x的绝对值;函数abs的作用是求x的绝对值。fabs函数原型:double fabs(double x);abs函数原型:int fabs(int x)。fabs函数参数:参数x是一个浮点数;abs函数参数:参数x是一个整数
1. 常用函数库
scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了。这个模块被重写并成为了现在独立的statsmodels包。
scipy的stats包含一些比较基本的工具,比如:t检验,正态性检验,卡方检验之类,statsmodels提供了更为系统的统计模型,包括线性模型,时序分析,还包含数据集,做图工具等等。
2. 小样本数据的正态性检验
(1) 用途
夏皮罗维尔克检验法 (Shapiro-Wilk) 用于检验参数提供的一组小样本数据线是否符合正态分布,统计量越大则表示数据越符合正态分布,但是在非正态分布的小样本数据中也经常会出现较大的W值。需要查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。
正态性检验是数据分析的第一步,数据是否符合正态性决定了后续使用不同的分析和预测方法,当数据不符合正态性分布时,我们可以通过不同的转换方法把非正太态数据转换成正态分布后再使用相应的统计方法进行下一步操作。
(2) 示例
(3) 结果分析
返回结果 p-value=0.029035290703177452,比指定的显著水平(一般为5%)小,则拒绝假设:x不服从正态分布。
3. 检验样本是否服务某一分布
(1) 用途
科尔莫戈罗夫检验(Kolmogorov-Smirnov test),检验样本数据是否服从某一分布,仅适用于连续分布的检验。下例中用它检验正态分布。
(2) 示例
(3) 结果分析
生成300个服从N(0,1)标准正态分布的随机数,在使用k-s检验该数据是否服从正态分布,提出假设:x从正态分布。最终返回的结果,p-value=0.9260909172362317,比指定的显著水平(一般为5%)大,则我们不能拒绝假设:x服从正态分布。这并不是说x服从正态分布一定是正确的,而是说没有充分的证据证明x不服从正态分布。因此我们的假设被接受,认为x服从正态分布。如果p-value小于我们指定的显著性水平,则我们可以肯定地拒绝提出的假设,认为x肯定不服从正态分布,这个拒绝是绝对正确的。
4.方差齐性检验
(1) 用途
方差反映了一组数据与其平均值的偏离程度,方差齐性检验用以检验两组或多组数据与其平均值偏离程度是否存在差异,也是很多检验和算法的先决条件。
(2) 示例
(3) 结果分析
返回结果 p-value=0.19337536323599344, 比指定的显著水平(假设为5%)大,认为两组数据具有方差齐性。
5. 图形描述相关性
(1) 用途
最常用的两变量相关性分析,是用作图描述相关性,图的横轴是一个变量,纵轴是另一变量,画散点图,从图中可以直观地看到相关性的方向和强弱,线性正相关一般形成由左下到右上的图形;负面相关则是从左上到右下的图形,还有一些非线性相关也能从图中观察到。
(2) 示例
(3) 结果分析
从图中可以看到明显的正相关趋势。
6. 正态资料的相关分析
(1) 用途
皮尔森相关系数(Pearson correlation coefficient)是反应两变量之间线性相关程度的统计量,用它来分析正态分布的两个连续型变量之间的相关性。常用于分析自变量之间,以及自变量和因变量之间的相关性。
(2) 示例
(3) 结果分析
返回结果的第一个值为相关系数表示线性相关程度,其取值范围在[-1,1],绝对值越接近1,说明两个变量的相关性越强,绝对值越接近0说明两个变量的相关性越差。当两个变量完全不相关时相关系数为0。第二个值为p-value,统计学上,一般当p-value0.05时,可以认为两变量存在相关性。
7. 非正态资料的相关分析
(1) 用途
斯皮尔曼等级相关系数(Spearman’s correlation coefficient for ranked data ),它主要用于评价顺序变量间的线性相关关系,在计算过程中,只考虑变量值的顺序(rank, 值或称等级),而不考虑变量值的大小。常用于计算类型变量的相关性。
(2) 示例
(3) 结果分析
返回结果的第一个值为相关系数表示线性相关程度,本例中correlation趋近于1表示正相关。第二个值为p-value,p-value越小,表示相关程度越显著。
8. 单样本T检验
(1) 用途
单样本T检验,用于检验数据是否来自一致均值的总体,T检验主要是以均值为核心的检验。注意以下几种T检验都是双侧T检验。
(2) 示例
(3) 结果分析
本例中生成了2列100行的数组,ttest_1samp的第二个参数是分别对两列估计的均值,p-value返回结果,第一列1.47820719e-06比指定的显著水平(一般为5%)小,认为差异显著,拒绝假设;第二列2.83088106e-01大于指定显著水平,不能拒绝假设:服从正态分布。
9. 两独立样本T检验
(1) 用途
由于比较两组数据是否来自于同一正态分布的总体。注意:如果要比较的两组数据不满足方差齐性, 需要在ttest_ind()函数中添加参数equal_var = False。
(2) 示例
(3) 结果分析
返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.19313343989106416,比指定的显著水平(一般为5%)大,不能拒绝假设,两组数据来自于同一总结,两组数据之间无差异。
10. 配对样本T检验
(1) 用途
配对样本T检验可视为单样本T检验的扩展,检验的对象由一群来自正态分布独立样本更改为二群配对样本观测值之差。它常用于比较同一受试对象处理的前后差异,或者按照某一条件进行两两配对分别给与不同处理的受试对象之间是否存在差异。
(2) 示例
(3) 结果分析
返回结果的第一个值为统计量,第二个值为p-value,pvalue=0.80964043445811551,比指定的显著水平(一般为5%)大,不能拒绝假设。
11. 单因素方差分析
(1) 用途
方差分析(Analysis of Variance,简称ANOVA),又称F检验,用于两个及两个以上样本均数差别的显著性检验。方差分析主要是考虑各组之间的平均数差别。
单因素方差分析(One-wayAnova),是检验由单一因素影响的多组样本某因变量的均值是否有显著差异。
当因变量Y是数值型,自变量X是分类值,通常的做法是按X的类别把实例成分几组,分析Y值在X的不同分组中是否存在差异。
(2) 示例
(3) 结果分析
返回结果的第一个值为统计量,它由组间差异除以组间差异得到,上例中组间差异很大,第二个返回值p-value=6.2231520821576832e-19小于边界值(一般为0.05),拒绝原假设, 即认为以上三组数据存在统计学差异,并不能判断是哪两组之间存在差异 。只有两组数据时,效果同 stats.levene 一样。
12. 多因素方差分析
(1) 用途
当有两个或者两个以上自变量对因变量产生影响时,可以用多因素方差分析的方法来进行分析。它不仅要考虑每个因素的主效应,还要考虑因素之间的交互效应。
(2) 示例
(3) 结果分析
上述程序定义了公式,公式中,"~"用于隔离因变量和自变量,”+“用于分隔各个自变量, ":"表示两个自变量交互影响。从返回结果的P值可以看出,X1和X2的值组间差异不大,而组合后的T:G的组间有明显差异。
13. 卡方检验
(1) 用途
上面介绍的T检验是参数检验,卡方检验是一种非参数检验方法。相对来说,非参数检验对数据分布的要求比较宽松,并且也不要求太大数据量。卡方检验是一种对计数资料的假设检验方法,主要是比较理论频数和实际频数的吻合程度。常用于特征选择,比如,检验男人和女人在是否患有高血压上有无区别,如果有区别,则说明性别与是否患有高血压有关,在后续分析时就需要把性别这个分类变量放入模型训练。
基本数据有R行C列, 故通称RC列联表(contingency table), 简称RC表,它是观测数据按两个或更多属性(定性变量)分类时所列出的频数表。
(2) 示例
(3) 结果分析
卡方检验函数的参数是列联表中的频数,返回结果第一个值为统计量值,第二个结果为p-value值,p-value=0.54543425102570975,比指定的显著水平(一般5%)大,不能拒绝原假设,即相关性不显著。第三个结果是自由度,第四个结果的数组是列联表的期望值分布。
14. 单变量统计分析
(1) 用途
单变量统计描述是数据分析中最简单的形式,其中被分析的数据只包含一个变量,不处理原因或关系。单变量分析的主要目的是通过对数据的统计描述了解当前数据的基本情况,并找出数据的分布模型。
单变量数据统计描述从集中趋势上看,指标有:均值,中位数,分位数,众数;从离散程度上看,指标有:极差、四分位数、方差、标准差、协方差、变异系数,从分布上看,有偏度,峰度等。需要考虑的还有极大值,极小值(数值型变量)和频数,构成比(分类或等级变量)。
此外,还可以用统计图直观展示数据分布特征,如:柱状图、正方图、箱式图、频率多边形和饼状图。
15. 多元线性回归
(1) 用途
多元线性回归模型(multivariable linear regression model ),因变量Y(计量资料)往往受到多个变量X的影响,多元线性回归模型用于计算各个自变量对因变量的影响程度,可以认为是对多维空间中的点做线性拟合。
(2) 示例
(3) 结果分析
直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P0.05则认为自变量具有统计学意义,从上例中可以看到收入INCOME最有显著性。
16. 逻辑回归
(1) 用途
当因变量Y为2分类变量(或多分类变量时)可以用相应的logistic回归分析各个自变量对因变量的影响程度。
(2) 示例
(3) 结果分析
直接通过返回结果中各变量的P值与0.05比较,来判定对应的解释变量的显著性,P0.05则认为自变量具有统计学意义。