03_numpy学习笔记(下):统计相关

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%的数字。

第三四分位数与第一四分位数的差距又称四分位距

求解分位数的步骤大致分为三步:

  1. 将数据从小到大排列
  2. 确定p分位数的位置
  3. 确定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=(n1)(XXˉ)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中的位置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值