03_numpy学习笔记(下):统计相关
文章目录
一、次序统计
1. 最小值
numpy.amin(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue])
Return the minimum of an array or minimum along an axis.
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.amin(x)
print(y)
y = np.amin(x, axis=0)
print(y)
y = np.amin(x, axis=1)
print(y)
2. 最大值
numpy.amax(a[, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue])
Return the maximum of an array or maximum along an axis.
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.amax(x)
print(y) # 35
y = np.amax(x, axis=0)
print(y) # [31 32 33 34 35]
y = np.amax(x, axis=1)
print(y) # [15 20 25 30 35]
3. 极差
numpy.ptp(a, axis=None, out=None, keepdims=np._NoValue)
Range of values (maximum - minimum) along an axis. The name of the function comes from the acronym for ‘peak to peak’.
极差又称范围误差或全距(Range),以R表示,是用来表示统计资料中的变异量数(measures of variation),其最大值与最小值之间的差距,即最大值减最小值后所得之数据。
例:求下列数据集的极差
65、81、73、85、94、79、67、83、82
解:极差指的是这些数字分开得有多远,计算方法是:用其中最大的数减去最小的数。
极差是: 94−65=29
这个数字越大,表示分得越开,最大数和最小数之间的差就越大;该数越小,数字间就越紧密,这就是极差的概念。
import numpy as np
np.random.seed(20201126)
x = np.random.randint(0, 20, size=[4, 5])
print(x)
print(np.ptp(x))
print(np.ptp(x, axis=0))
print(np.ptp(x, axis=1))
4. 分位数
numpy.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=False)
Compute the q-th percentile of the data along the specified axis. Returns the q-th percentile(s) of the array elements.- a:array,用来算分位数的对象,可以是多维的数组。
- q:介于0-100的float,用来计算是几分位的参数,如四分之一位就是25,如要算两个位置
的数就[25,75]。 - axis:坐标轴的方向,一维的就不用考虑了,多维的就用这个调整计算的维度方向,取值范
围0/1。
统计上,分位数亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。分位数指的就是连续分布函数中的一个点,这个点对应概率p。若概率0<p<1,随机变量X或它的概率分布的分位数Za,是指满足条件p(X≤Za)=α的实数。
四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;
3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。
第三四分位数与第一四分位数的差距又称四分位距。
求解分位数的步骤大致分为三步:
- 将数据从小到大排列
- 确定p分位数的位置
- 确定p分位数具体的数值
具体如何计算可参考这篇文章https://blog.csdn.net/juliarjuliar/article/details/81082934
利用p分位数进行等频分箱:
import numpy as np
import pandas as pd
#百分位数实现数据分箱
data = pd.DataFrame(columns=['l','s'])
data['l'] = np.random.randint(0,999,size = 1000) #生成给定上下限范围的随机数
data['s'] = 1 #便于下一步的统计总数
#print(data)
#通过np.percentile找到分位点
l_bin=[]
for i in range(0,101,10):
l_bin.append(np.percentile(data['l'],i))
#对随机数进行切分,right=False时左闭右开
data['box']=pd.cut(data['l'],l_bin,right=False)
tj=data.groupby('box')['s'].agg('sum')
print('分箱统计')
print(tj)
二、均值与方差
1. 中位数
numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=False)
Compute the median along the specified axis. Returns the median of the array elements.
import numpy as np
np.random.seed(20200623)
x = np.random.randint(0, 20, size=[4, 5])
print(x)
# [[10 2 1 1 16]
# [18 11 10 14 10]
# [11 1 9 18 8]
# [16 2 0 15 16]]
print(np.percentile(x, 50))
print(np.median(x))
# 10.0
print(np.percentile(x, 50, axis=0))
print(np.median(x, axis=0))
# [13.5 2. 5. 14.5 13. ]
print(np.percentile(x, 50, axis=1))
print(np.median(x, axis=1))
2. 平均值
numpy.mean(a[, axis=None, dtype=None, out=None, keepdims=np._NoValue)])
Compute the arithmetic mean along the specified axis.
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.mean(x)
print(y) # 23.0
y = np.mean(x, axis=0)
print(y) # [21. 22. 23. 24. 25.]
y = np.mean(x, axis=1)
print(y)
3. 加权平均值
numpy.average(a[, axis=None, weights=None, returned=False])
Compute the weighted average along the specified axis.
mean 和average 都是计算均值的函数,在不指定权重的时候average 和mean 是一样的。指定权重后, average 可以计算加权平均值。
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.average(x)
print(y) # 23.0
y = np.average(x, axis=0)
print(y) # [21. 22. 23. 24. 25.]
y = np.average(x, axis=1)
print(y) # [13. 18. 23. 28. 33.]
y = np.arange(1, 26).reshape([5, 5])
print(y)
z = np.average(x, weights=y)
print(z)
z = np.average(x, axis=0, weights=y)
print(z)
z = np.average(x, axis=1, weights=y)
print(z)
4. 方差
- numpy.var(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue]) Compute the variance along the specified axis.
- ddof=0:是“Delta Degrees of Freedom”,表示自由度的个数。
要注意方差和样本方差的无偏估计,方差公式中分母上是n ;样本方差无偏估计公式中分母上是n‐1 ( n 为样本个数)。
方差(variance): 是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。
- 在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异(离散)程度。
- 总体方差计算公式:
σ 2 = ∑ ( X − μ ) 2 N \sigma^2 = \frac{\sum {(X - \mu)^2}}{N} σ2=N∑(X−μ)2
其中 σ 2 \sigma^2 σ2为总体方差,X为变量, μ \mu μ为总体均值,N为总体例数;
- 实际工作中,总体均数难以得到时,应用样本统计量代替总体参数,经校正后,样本方差计算公式:
S 2 = ∑ ( X − X ˉ ) 2 ( n − 1 ) S^2 = \frac{\sum {(X - \bar{X})^2}}{(n-1)} S2=(n−1)∑(X−Xˉ)2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Svde3U2w-1606408729243)(https://www.zhihu.com/equation?tex=S%5E%7B2%7D)] 为样本方差,X为变量, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRbNmDrI-1606408729266)(https://www.zhihu.com/equation?tex=%5Cbar%7BX%7D)] 为样本均值,n为样本例数;
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.var(x)
print(y) # 52.0
y = np.mean((x ‐ np.mean(x)) ** 2)
print(y) # 52.0
y = np.var(x, ddof=1)
print(y) # 54.166666666666664
y = np.sum((x ‐ np.mean(x)) ** 2) / (x.size ‐ 1)
print(y) # 54.166666666666664
y = np.var(x, axis=0)
print(y) # [50. 50. 50. 50. 50.]
y = np.var(x, axis=1)
print(y) # [2. 2. 2. 2. 2.]
5. 标准差
numpy.std(a[, axis=None, dtype=None, out=None, ddof=0, keepdims=np._NoValue])
Compute the standard deviation along the specified axis.
标准差是一组数据平均值分散程度的一种度量,是方差的算术平方根。
(1)方差和标准差的关系很简单,标准差(也称均方差)的平方就是方差。
- 标准差能反映一个数据集的离散程度(或理解为数据集的波动大小)。
- 既然都能反映数据集的离散程度,既生瑜何生亮?因为我们发现,方差与我们要处理的数据的量纲是不一致的(单位不一致),虽然能很好的描述数据与均值的偏离程度,但是处理结果是不符合我们的直观思维的。
- 比如一个班男生的平均身高是170cm,标准差是10cm,那么方差就是100cm^2。可以简便的描述为本班男生身高分布在170±10cm,方差就无法做到这点。
(2)标准差的应用
- 基金
衡量基金波动程度的工具就是标准差(StandardDeviation)。标准差是指基金可能的变动程度。标准差越大,基金未来净值可能变动的程度就越大,稳定度就越小,风险就越高。
- 股市分析
股票价格的波动是股票市场风险的表现,因此股票市场风险分析就是对股票市场价格波动进行分析。波动性代表了未来价格取值的不确定性,这种不确定性一般用方差或标准差来刻画。
- 企业债券
企业债务性资金和权益性资金完全正相关,即相关系数pDE为1。
- 衡量球员发挥水平的稳定性
一支值得信赖的球员队伍,他最不想要的就是表现时好时坏,水平反复无常,波动很大的队员。他需要的是评分高且发挥稳定的球员。
import numpy as np
x = np.array([[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35]])
y = np.std(x)
print(y) # 7.211102550927978
y = np.sqrt(np.var(x))
print(y) # 7.211102550927978
y = np.std(x, axis=0)
print(y)
# [7.07106781 7.07106781 7.07106781 7.07106781 7.07106781]
y = np.std(x, axis=1)
print(y)
三、相关
1. 协方差矩阵
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,aweights=None)
Estimate a covariance matrix, given data and weights.
2. 相关系数
numpy.corrcoef(x, y=None, rowvar=True, bias=np._NoValue, ddof=np._NoValue)
Return Pearson product-moment correlation coefficients.
3. 直方图
numpy.digitize(x, bins, right=False)
Return the indices of the bins to which each value in input array belongs.- x:numpy数组
- bins:一维单调数组,必须是升序或者降序
- right:间隔是否包含最右
- 返回值:x在bins中的位置。