@[云好晕啊]学习笔记
统计相关
次序统计
1.1 计算最小值
函数调用:
-
numpy.amin(a[,axis=None,out=None,keepdims=np._NoValue,initial=np._NoValue,where=np._NoValue])
- 函数返回指定维度最小值
- a:接收数组对象,表示需要查找最小值的对象
- axis:可选参数,指定查找轴,默认是全局查找,0表示按列查找,1表示按行查找。
- out:ndarray,可选。将结果放置在其中的替代输出数组。必须具有与预期输出相同的形状和缓冲区长度。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
import numpy as np
#计算最小值
print('计算最小值')
x=np.arange(11,36).reshape(5,5)
y=np.amin(x)
print('最小值:',y)
y=np.amin(x,axis=0)
print('轴0上最小值:',y)
y=np.amin(x,axis=1)
print('轴1上最小值:',y)
1.2 计算最大值
函数调用:
numpy.amax(a[,axis=None,out=None,keepdims=np._NoValue,initial=np._NoValue,where=np._NoValue])
- 函数返回指定维度最大值
- a:接收数组对象,表示需要查找最小值的对象
- axis:可选参数,指定查找轴,默认是全局查找,0表示按列查找,1表示按行查找。
- out:ndarray,可选。将结果放置在其中的替代输出数组。必须具有与预期输出相同的形状和缓冲区长度。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算最大值
print('计算最大值')
y=np.amax(x)
print('最大值:',y)
y=np.amax(x,axis=0)
print('轴0最大值:',y)
y=np.amax(x,axis=1)
print('轴1最大值:',y)
1.3 计算极差
极差又称范围误差或全距(Range),以R表示,是用来表示统计资料中的变异量数(measures of variation),其最大值与最小值之间的差距,即最大值减最小值后所得之数据。
函数调用:
numpy.ptp(a,axis=None,out=None,keepdims=np._NoValue)
- 函数返回指定维度极差
- a:接收数组对象,表示需要查找最小值的对象
- axis:可选参数,指定查找轴,默认是全局查找,0表示按列查找,1表示按行查找。
- out:ndarray,可选。将结果放置在其中的替代输出数组。必须具有与预期输出相同的形状和缓冲区长度。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算极差
print('计算极差')
np.random.seed(20201124)
x=np.random.randint(0,20,size=[4,5])
print('数组为:',x)
print('x极差为:',np.ptp(x))
print('x在轴0上极差为:',np.ptp(x,axis=0))
print('x在轴1上极差为:',np.ptp(x,axis=1))
1.4计算分位数
分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。
详细了解如何通俗理解分位数
函数调用:
-
numpy.percentile(a,q,axis=None,out=None,overwrite_input=False,interpolation='linear',keepdims=False)
- a:array,用来算分位数对象,可以是多维数组。
- q:介于0-100的float,用来计算是几分位的参数,如四分之一位就是25,如要算两个位置的数就[25,75]。
- axis:坐标轴的方向,一维的就不用考虑了,多维的就用这个调整计算的维度方向,取值范围0表示列,1表示行。
示例代码
#计算分位数
print('计算分位数')
np.random.seed(20201124)
x=np.random.randint(0,20,size=[4,5])
print('x数组为:',x)
print('计算20和50分位数:',np.percentile(x,[25,50]))
print('计算轴0上25和50分位数:',np.percentile(x,[25,50],axis=0))
print('计算轴1上25和5分位数:',np.percentile(x,[25,50],axis=1))
均值与方差
2.1 计算中位数
中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。
函数调用:
-
numpy.median(a,axis=None,out=None,overwrite_input=False,keepdims=False)
- 函数返回数组对象指定轴的中位数
- a:array,需要计算中位数的数组
- axis:指定计算中位数的轴方向,空表示全部,0表示沿列计算,1表示沿行计算。
- out:array,默认空。将结果放置在其中的替代输出数组。它具有与预期输出相同的形状和缓冲区长度,但如果有必要,类型(输出)将被转换。
- overwrite_input:boolean参数,可选。输入数组将通过对“中位数”的调用进行修改。当您不需要保存输入数组的内容时,这将节省内存。将输入视为未定义的,但可能会完全或部分排序。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算中位数
print('计算中位数')
np.random.seed(20201124)
x=np.random.randint(0,20,size=[4,5])
print('数组x:',x)
print('x上的中位数(percentile):',np.percentile(x,50))
print('x上的中位数(median):',np.median(x))
print('轴0上的中位数(percentile):',np.percentile(x,50,axis=0))
print('轴0上的中位数(median):',np.median(x,axis=0))
print('轴1上的中位数(percentile):',np.percentile(x,50,axis=1))
print('轴1上的中位数(median):',np.median(x,axis=1))
2.2 计算平均值
函数调用:
-
numpy.mean(a[,axis=None,dtype=None,out=None,keepdims=np._NoValue])
- 函数返回数组对象指定轴方向的平均值
- a:array,需要计算平均值的数组对象
- axis:可选参数,默认为全局平均值,0指定为列,1指定为行。
- dtype:可选参数,指定数组数据类型。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
#计算平均值
print('计算平均值')
x=np.arange(11,36).reshape(5,5)
y=np.mean(x)
print('数组x平均值为:',y)
y=np.mean(x,axis=0)
print('数组x沿轴0平均值为:',y)
y=np.mean(x,axis=1)
print('数组x沿轴1平均值为:',y)
2.3 计算加权平均值
函数调用:
-
numpy.average(a[,axis=None,weights=None,returned=False])
- 计算指定数组对象的加权平均值。
- a:array,计算加权平均值的数组对象。
- axis:可选参数,默认是整个数组,0表示沿列计算,1表示沿行计算。
- weights:array,可选。指定权重大小。不指定表示计算平均值
- returned:boolean,可选。若为True除了返回加权平均值外还会返回权重数组对象。
示例代码
(1)计算加权平均值(将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。)
#计算加权平均值
print('计算加权平均值')
y=np.average(x)
print('权值相等是x的平均值:',y)
y=np.average(x,axis=0)
print('沿轴0的x平均值',y)
y=np.average(x,axis=1)
print('沿轴1的x平均值',y)
y=np.arange(1,26).reshape([5,5])
print('权值y:',y)
z=np.average(x,weights=y)
print('加权平均值为:',z)
z=np.average(x,axis=1,weights=y)
print('沿轴1加权平均值:',z)
2.4 计算方差
方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。
方差是衡量源数据和期望值相差的度量值
但实际工作中,总体均数难以得到时,应用样本统计量代替总体参数,经校正后,样本方差计算公式:
函数调用:
-
numpy.var(a[,axis=None,dtype=None,out=None,ddof=0,keepdims=np._NoValue])
- 函数用来计算一个数组指定轴的方差
- a:array,用于计算方差的数组对象。
- axis:可选参数,默认表示整个数组对象,0表示按列计算,1表示按行计算。
- dtype:可选参数,表示用于计算方差时指定的数据类型。
- ddof:可选参数,默认为0,表示自由度个数。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
要注意方差和样本方差的无偏估计,方差公式中分母是n;样本无偏估计公式中分母是n-1(n为样本个数)
示例代码
(1)计算方差
#计算方差
print('计算方差')
y=np.var(x)
print('数组x的方差:',y)
y=np.mean((x-np.mean(x))**2)
print('使用定义计算方差:',y)
y=np.var(x,ddof=1)
print('标准差无偏估计为 1的样本方差:',y)
y=np.sum((x-np.mean(x))**2)/(x.size-1)
print('样本方差:',y)
y=np.var(x,axis=0)
print('x在轴0上的方差:',y)
y=np.var(x,axis=1)
print('x在轴1上的方差:',y)
2.5 计算标准差
标准差(Standard Deviation) ,是离均差平方的算术平均数(即:方差)的算术平方根,用σ表示。标准差也被称为标准偏差,或者实验标准差,在概率统计中最常使用作为统计分布程度上的测量依据。
标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。
函数调用:
numpy.std(a[,axis=None,dtype=None,out=None,ddof=0,keepdims=np._NoValue])
- 函数用来计算一个数组指定轴的标准差
- a:array,用于计算标准差的数组对象。
- axis:可选参数,默认表示整个数组对象,0表示按列计算,1表示按行计算。
- dtype:可选参数,表示用于计算方差时指定的数据类型。
- ddof:可选参数,默认为0,表示自由度个数。
- keepdims:接收boolean,可选。如果将其设置为True,则将缩小的轴作为尺寸为1的尺寸留在结果中。使用此选项,结果将在输入数组中正确广播。
示例代码
(1)计算标准差
#计算标准差
print('计算标准差')
y=np.std(x)
print('x数组的标准差为:',y)
y=np.sqrt(np.var(x))
print('x的标准差:',y)
y=np.std(x,axis=0)
print('x数组在轴0上的标准差为:',y)
y=np.std(x,axis=1)
print('x数组在轴1上的标准差为:',y)
相关
3.1 计算协方差矩阵
在概率论和统计学中,协方差用于衡量两个变量的总体误差。协方差矩阵的每个元素是各个向量元素之间的协方差,是从标量随机变量到高维度随机向量的自然推广。
函数调用:
-
numpy.cov(m,y=None,rowvar=True,bias=False,ddof=None,fweights=None,aweights=None)
- 函数用于计算一个给定数据以及权重系数的协方差矩阵。
- m:array,用于计算协方差的矩阵对象
- y:可选,若为空,则计算m的协方差矩阵,否则计算m和y的协方差矩阵。
- rowvar:boolean,可选。若为True,表示每一行代表一个变量,沿着列进行计算;否则,相反。
- ddof:可选参数,表示自由度个数。
- bias:boolean,可选。默认归一化(False)是‘
(N-1)’,其中
N‘是给出的观察数(无偏估计)。如果“偏见”是真实的,那么标准化就是“N”。可以通过在numpy版本中使用关键字‘ddof’>=1.5来覆盖这些值。 - fweights:可选参数,整数频率权值的一维数组;重复每一个向量的次数。
- aweights:一维阵列观测向量权重。对于被认为“重要”的观测,这些相对权重基本上很大,对于被认为“不那么重要”的观测,这些相对权重较小。如果‘ddof=0’,则权重数组可用于向观测向量分配概率。
####示例代码
import numpy as np
#计算协方差矩阵
print('计算协方差矩阵')
x=[1,2,3,4,6]
y=[0,2,5,6,7]
print('x的样本方差cov',np.cov(x))
print('y的样本方差cov',np.cov(y))
print('x与y的协方差:',np.cov(x,y))
print('x的方差:',np.var(x))
print('x的样本方差ddof=1',np.var(x,ddof=1))
print('y的方差:',np.var(y))
print('y的样本方差ddof:',np.var(y,ddof=1))
z=np.mean((x-np.mean(x))*(y-np.mean(y)))
print('x与y的协方差(公式法):',z)
z=np.sum((x-np.mean(x))*(y-np.mean(y)))/(len(x)-1)
print('样本的协方差:',z)
z=np.dot(x-np.mean(x),y-np.mean(y))/(len(x)-1)
print('样本协方差:',z)
3.2计算相关系数
相关关系是一种非确定性的关系,相关系数是研究变量之间线性相关程度的量。一般用字母r表示,用来度量两个变量间的线性关系。
另外附协方差与相关系数区别
函数调用:
-
numpy.corrcoef(x,y=None,rowvar=True,bias=np._NoValue,ddof=np._NoValue)
- 函数返回皮尔森相关系数矩阵
- x:array,用于计算相关系数的矩阵对象
- y:可选,若为空,则计算x的相关系数矩阵,否则计算x和y的相关系数矩阵。
- rowvar:boolean,可选。若为True,表示每一行代表一个变量,沿着列进行计算;否则,相反。
- ddof:可选参数,表示自由度个数。
- bias:boolean,可选。默认归一化(False)是‘
(N-1)’,其中
N‘是给出的观察数(无偏估计)。如果“偏见”是真实的,那么标准化就是“N”。可以通过在numpy版本中使用关键字‘ddof’>=1.5来覆盖这些值。
np.cov()描述的是两个向量协同变化的程度,它的取值可能非常大,也可能非常小,这就导致没法直观的衡量两者协同变化的程度。相关系数实际上是正则化的协方差,n个变量的相关系数形成一个n维方阵。
示例代码
(1)计算相关系数
#计算相关系数
print('计算相关系数')
np.random.seed(20201124)
x,y=np.random.randint(0,20,size=(2,4))
print('x:',x)
print('y:',y)
z=np.corrcoef(x,y)
print('x和y的相关系数:',z)
a=np.dot(x-np.mean(x),y-np.mean(y))
b=np.sqrt(np.dot(x-np.mean(x),x-np.mean(x)))
c=np.sqrt(np.dot(y-np.mean(y),y-np.mean(y)))
print('x和y的相关系数:',a/(b*c))
3.3 直方图
-
numpy.digitize(x,bins,rights=False)
- 返回每个值输入数组所属的回收箱的索引。
- x:numpy数组。
- bins:一维单调数组,必须是升序或者降序
- rights:间隔是否包含最右
- 返回值:x在bins中的位置
示例代码
#直方图
print('直方图')
x=np.array([0.2,6.4,3.0,1.6])
bins=np.array([0.0,1.0,2.5,4.0,10.0])
inds=np.digitize(x,bins)
print(inds)
for n in range(x.size):
print(bins[inds[n]-1],"<=",x[n],"<",bins[inds[n]])
x=np.array([1.2,10.0,12.4,15.5,20.])
bins=np.array([0,5,10,15,20])
inds=np.digitize(x,bins,right=True)
print(inds)
inds=np.digitize(x,bins,right=False)
print(inds)
总结
统计相关主要计算数组或者矩阵中的各种度量,包括最大最小值,平均值,分位数以及极差、方差、标准差还有协相关矩阵和相关系数等等,掌握好这些概念以及使用方法对于数据分析有十分重要的作用。