【Numpy学习17】统计相关
作者:互联网
Task08学习思维导图
注:为了节约行数,默认import numpy as np已经写在每段代码前,不再重复写入,如果有新的包引入,会在这里说明:
from scipy import stats
前言
在第十一章的学习:数学函数 中,我们已经大体介绍了一些统计函数的基本使用方法:
在本次学习中让我们来系统性地学习一下,明白它们到底是用来做什么的。
概率论是统计学的基础,而随机事件的概率是概率论研究的基本内容。
统计学不研究统计,它研究的是不确定性。我们的世界是一个充满不确定性的环境,整个世界并非严格按照某个制定好的路线运行的。多数事物之间也并非有因必有果,万物之间充满了不可控的随机事件,我们不会因为今天努力了明天就一定会成功。
不确定性事件唯一的规律就是概率,独立随机事件我们没办法预测或控制它在某个时刻一定会发生,但却可以用概率来描述它发生的可能性。以概率论作为理论基础,为我们提供了认识不确定世界的方法。
在上一章我们学了随机抽样在numpy中的实现,这一章我们学习统计相关内容在numpy中的实现,如果numpy没有直接的实现方式,我可能会用stats等其他Python包来实现。
数据分析中,最常见的场景,就是你手上拿到一组,一批或者一坨数据。不懂统计学的人,可能会不知所措,或者说,你不做些加工和处理,你不知道这些数据有啥用。这个时候,就需要通过这些描述性、概括性的度量指标,来帮我们从宏观上把握数据中的初步信息。
要全面把握数据分布就要反映数据分布特征的代表值。通常包含分布的集中趋势、分布的离散程度、分布形状。
一、描述性(概括性)统计
1、集中趋势
1)众数
众数(Mode)是指在统计分布上具有明显集中趋势点的数值,代表数据的一般水平。 也是一组数据中出现次数最多的数值,有时众数在一组数中有好几个。用M表示。
A、numpy实现
>>> nums = np.array([1,2,3,3,4,4])
>>> print(nums)
[1 2 3 3 4 4]
>>> counts = np.bincount(nums)
#求得最多次数
>>> indexs = np.where(counts == np.amax(counts))
>>> print(nums[indexs])
[3 4]
由于numpy中没有直接求众数的方法,所以这里利用numpy特性求得,注意众数可能不止一个。
B、scipy实现
>>> mode = stats.mode(nums)
>>> print("nums中最常见的成员为:{},出现了{}次。".format(mode[0][0], mode[1][0]))
2)中位数
中位数(Median)又称中值,是按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集:
- 奇数个:把所有观察值高低排序后找出正中间的一个作为中位数
- 偶数个:通常取最中间的两个数值的平均数作为中位数
在numpy中实现的方法是:
参数解释:
- a:目标数据
- axis:沿着哪里切割,默认为None,即平铺所有元素
对于axis的含义,我想我们可以通过图解来说明:
这里有人会产生疑问,你怎么知道是这样运作的,很简单,在上面的例子中原数组shape为(2,3),当axis=0时,结果为(3,),这样很容易理解为数组的行被“压缩”,为什么要在这里说明呢,因为人是三维生物,我们可以理解1,2,3维数据结构,但是如果之后要处理3维以上的数据的话,如果不知道axis真正的含义是很容易混淆的。
- out:用于放置求取中位数后的数组。 它必须具有与预期输出相同的形状和缓冲区长度
- overwrite_input:如果为True那么将直接在数组内存中计算,这意味着计算之后原数组没办法保存,但是好处在于节省内存资源。默认为False
- keepdims:是否保留当前轴。默认为False
即可以理解成,给不给列“压扁”,也可以理解成不降维度,只变维数。
3)分位数
参数解释(只介绍新的,重复的不再赘述):
- q:0-100的浮点数,指定要找的分位数位置
- interpolation:代表如果要求的位置夹在两个数之间的话如何取舍,默认为’linear’
以np.percentile(a, 70)
为例,探究其计算方式:
A、'linear’计算方式
- (数组长度-1)* 百分比 = (6-1) * 70% = 3.5 = a+b
- a = 3,b = 0.5
- result = arr[a] + b x (arr[a+1] - arr[a])= 4+(7-4) x 0.5 = 5.5
可以再简单理解一下:
result = V(A)+(V(B)-V(A))*PA/AB
这里面V(x)代表x的值,PA和AB代表对应两点的百分比差
B、'lower’计算方式
选值最小的那个点
C、'higher’计算方式
选值最大的那个点
D、'nearest’计算方式
选距离两个点百分比差最小的那个点
E、'midpoint’计算方式
两个点值的平均数
4)四分位数
四分位数(Quartile)也称四分位点,是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。多应用于统计学中的箱线图绘制。它是一组数据排序后处于25%和75%位置上的值。
5)算术平均数
又称均值,是统计学中最基本、最常用的一种平均指标,当各项权相等时,计算平均数就要采用算术平均数。
参数解释:
- dtype:用于计算的数据类型,同时用于输出
例子如下:
6)加权平均数
参数解释:
- weights:指定权重
- returned:若为True,返回权重之和。默认为False
例子如下:
算术平均数就是特殊的加权平均数:
7)几何平均数
根据统计资料的不同,几何平均数也有简单几何平均数和加权几何平均数之分。我们以简单几何平均数为例,简单几何平均数是n个变量值连乘积的n次方根。
我们来解下面这道题:
例如,生产某产品需连续经过4道工序,根据经验,各道工序的合格率分别为98%、95%、92%、90%,求该产品4道工序的平均合格率
平均合格率
=93.7%
A、numpy实现
numpy中没有直接实现的方法,但是我们可以通过乘和幂函数来计算:
B、scipy实现
我们都可以顺利地求出答案。
2、离散程度
1)异众比率
异众比率(variation ratio)是统计学名词,是统计学当中研究现象离中趋势的指标之一。异众比率指的是总体中非众数次数与总体全部次数之比。换句话说,异众比率指非众数组的频数占总频数的比例。
其中,表示异众比率,表示众数次数,N表示总体单位总数(即总体次数)。
由于numpy和scipy中都没有直接实现求异众比率的方法,所以这里以scipy方法为例,因为这里借用了求众数方法,所以只想用numpy计算的朋友可以进行方法替换:
2)四分位差
四分位差(quartile deviation),它是上四分位数(Q3,即位于75%)与下四分位数(Q1,即位于25%)的差。
计算公式为:Q = Q3-Q1
四分位差反映了中间50%数据的离散程度,其数值越小,说明中间的数据越集中;其数值越大,说明中间的数据越分散。四分位差不受极值的影响。此外,由于中位数处于数据的中间位置,因此,四分位差的大小在一定程度上也说明了中位数对一组数据的代表程度。四分位差主要用于测度顺序数据的离散程度。对于数值型数据也可以计算四分位差,但不适合分类数据。
3)极差
极差又称范围误差或全距(Range),以R表示,是用来表示统计资料中的变异量数(measures of variation),其最大值与最小值之间的差距,即最大值减最小值后所得之数据。
实现方法如下
例子如下:
4)平均差
平均差(Mean Deviation)是表示各个变量值之间差异程度的数值之一。指各个变量值同平均数的离差绝对值的算术平均数,计算公式:
平均差异大,表明各标志值与算术平均数的差异程度越大,该算术平均数的代表性就越小;平均差越小,表明各标志值与算术平均数的差异程度越小,该算术平均数的代表性就越大。因离差和为零,离差的平均数不能将离差和除以离差的个数求得,而必须将离差取绝对数来消除正负号。平均差是反应各标志值与算术平均数之间的平均差异。
由于numpy和scipy中都没有直接实现求异众比率的方法,所以这里以numpy方法为例:
5)方差
在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。总体方差计算公式:
参数解释:
- ddof:如果我们从较大的分布中选择N个元素的随机样本并计算方差,则除以N可能导致对实际方差的低估。为了解决这个问题,我们可以将我们除以(the degrees of freedom)的数字减小到小于N(通常为N-1)的数字。 ddof参数允许我们按照我们指定的值更改除数。
例子:
可以看到前者是2/3,后者是2/2,除数减去了ddof的值
6)标准差
标准差(Standard Deviation) ,是离均差平方的算术平均数(即:方差)的算术平方根,用σ表示。标准差也被称为标准偏差,或者实验标准差,在概率统计中最常使用作为统计分布程度上的测量依据。
标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。
例子如下:
7)离散系数(变异系数)
离散系数又称变异系数,是统计学当中的常用统计指标。离散系数是测度数据离散程度的相对统计量,主要是用于比较不同样本数据的离散程度。离散系数大,说明数据的离散程度也大;离散系数小,说明数据的离散程度也小。用标准差与平均数的比值(相对值)来比较:
由于numpy和scipy中都没有直接实现求异众比率的方法,所以这里以numpy方法为例:
3、分布形态
1)偏态系数
偏态系数又称偏差系数,说明随机系列分配不对称程度的统计参数,用Cs表示。和Cv只能反映频率密度分配曲线的平均情况和离散程度,而不能反映其对称(即偏态)情况,所以必须再引入一个参数,即偏差系数Cso。偏态系数绝对值越大,偏斜越严重。
- 偏态系数小于0,左偏,负偏
- 偏态系数大于0,右偏,正偏
偏态系数以平均值与中位数之差对标准差之比率来衡量偏斜的程度。
我们采用scipy方式实现验证:
是一个正偏态,所以系数大于0,用scipy.skew()方法
求得结果也是大于0的,验证成功。
2)峰态系数
在统计学中,峰度(Kurtosis)衡量实数随机变量概率分布的峰态。峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的。
峰度以bk表示,Xi是样本测定值,Xbar是样本n次测定值的平均值,s为样本标准差。正态分布的峰度为3。以一般而言,正态分布为参照,峰度可以描述分布形态的陡缓程度,若bk<3,则称分布具有不足的峰度,若bk>3,则称分布具有过度的峰度。若知道分布有可能在峰度上偏离正态分布时,可用峰度来检验分布的正态性。
在更通常的情况下,峰度被定义为四阶累积量除以二阶累积量的平方,它等于四阶中心矩除以概率分布方差的平方再减去3:
我们采用scipy方式实现:
其值小于0,说明datas数据分布密度形状为平坦。
二、其他相关
1、最大值
参数解释:
- initial:人为设置的输出的最小值,可配合where使用
- where:当为False时,不进行求最大值,仅输出inital
例子:
我们可以看到,由于initial没有默认值,所以使用where之前必须使用initial进行赋值。
2、最小值
使用方法同numpy.amax(),只不过要记得initial此时代表最大值:
1、计算协方差矩阵
2、计算相关系数
3、直方图
1)numpy实现
2)matplot实现
plt.hist()
参考文献
#数据的描述性统计
1、https://www.cnblogs.com/zgq25302111/p/11256142.html
#统计学知识大梳理(终极篇)
2、https://baijiahao.baidu.com/s?id=1666143636455092276&wfr=spider&for=pc
#数据的离散程度度量
3、https://blog.csdn.net/walking_visitor/article/details/83503008
#numpy数学函数-统计函数
4、https://blog.csdn.net/Xiao_Spring/article/details/109287278
#numpy中标准差std的神坑
5、https://blog.csdn.net/zbq_tt5/article/details/100054087
标签:离散,系数,17,数据,Numpy,学习,峰度,平均数,numpy 来源: https://blog.csdn.net/Xiao_Spring/article/details/110227334