3.1.3 数据统计
函数 | 元素及描述 |
---|---|
amin | 数组中的元素沿指定轴的最小值 |
amax | 数组中的元素沿指定轴的最大值 |
ptp | 计算数组中元素最大值与最小值的差 |
percentile | 百分位数 |
median | 数组中元素的中位数 |
mean | 数组中元素的算术平均值 |
std | 数组中元素的标准差 |
var | 数组中元素的方差 |
amin() 用于计算数组中的元素沿指定轴的最小值。
amax() 用于计算数组中的元素沿指定轴的最大值。
实例
import numpy as np
x = np.random.randint(1, high = 10, size=(3,4))
print ('原始数组:\n', x)
print ('调用 amin() 函数,找出轴 0 最小值:\n', np.amin(x,0))
print ('调用 amax() 函数,找出轴 0 最大值:\n', np.amax(x,0))
输出结果为:
原始数组:
[[5 7 2 5]
[5 2 9 8]
[8 9 9 9]]
调用 amin() 函数,找出轴 0 最小值:
[5 2 2 5]
调用 amax() 函数,找出轴 0 最大值:
[8 9 9 9]
ptp() 函数计算数组中元素最大值与最小值的差。
实例
import numpy as np
x = np.random.randint(1, high = 10, size=(3,4))
print ('原始数组:\n', x)
print ('沿轴 0,调用 ptp() 函数:\n', np.ptp(x,0))
print ('对整个数组,调用 ptp() 函数:\n', np.ptp(x))
输出结果为:
原始数组:
[[7 5 1 3]
[7 4 5 3]
[8 1 3 4]]
沿轴 0,调用 ptp() 函数:
[1 4 4 1]
对整个数组,调用 ptp() 函数:
7
percentile() 百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。第 p 个百分位数是这样一个值,它使得至少有 p% 的数据项小于或等于这个值,且至少有 (100-p)% 的数据项大于或等于这个值。比方说输入一笔数据里面是本次考试语文的成绩,如要得到前 30% 的分数,我们就可以利用这个函数来取得。
percentile(a, q, axis)
- a: 输入数组
- q: 要计算的百分位数,在 0 ~ 100 之间
- axis: 沿着它计算百分位数的轴
实例
import numpy as np
x = np.random.randint(0, high = 100, size=(20))
print ('原始数组:\n', x)
print ('调用 percentile() 函数:')
# 70% 的分位数
print (np.sort(x))
print (np.arange(1,len(x)+1))
below_70 = np.percentile(x, 70)
print ("70% 的分位数 \n", below_70)
# 删除前 70% 的记录
print ("删除前 70% 的记录\n", x[x>below_70])
输出结果为:
原始数组:
[30 79 21 11 93 78 59 13 70 9 15 13 75 26 33 45 84 1 26 77]
调用 percentile() 函数:
[ 1 9 11 13 13 15 21 26 26 30 33 45 59 70 75 77 78 79 84 93]
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
70% 的分位数
71.5
删除前 70% 的记录
[79 93 78 75 84 77]
median() 函数用于计算数组中元素的中位数(中值),若数组 x 元素个数 n 为奇数,则中位数为 (n+1)/2;若元素个数为偶数,则中位数为 (x[n/2]+x[(n/2)+1])/2。
实例
import numpy as np
x = np.random.randint(60, high = 100, size=(11))
print ('原始数组:\n', x)
print (np.sort(x))
print (np.arange(1,len(x)+1))
print ('调用 median() 函数:\n', np.median(x))
print('将数量修改成10个')
x1 = np.resize(x,10)
print (np.sort(x1))
print (np.arange(1,len(x1)+1))
print ('调用 median() 函数:\n', np.median(x1))
输出结果为:
原始数组:
[81 86 88 85 99 98 69 65 73 83 76]
[65 69 73 76 81 83 85 86 88 98 99]
[ 1 2 3 4 5 6 7 8 9 10 11]
调用 median() 函数:
83.0
将数量修改成10个
[65 69 73 81 83 85 86 88 98 99]
[ 1 2 3 4 5 6 7 8 9 10]
调用 median() 函数:
84.0
mean() 函数返回数组中元素的算术平均值。算术平均值是沿轴的元素的总和除以元素的数量。如果提供了轴,则沿其计算。以下实例可以发现,算术平均值有可能因为数据的集中,而导致偏离中位数,所以为了要让算术平均数有意义,通常会先分数个百分位数,在针对百分数来记算算术平均数。
实例
import numpy as np
x = np.random.randint(0, high = 100, size=(11))
print ('原始数组:\n', x)
print (np.sort(x))
print (np.arange(1,len(x)+1))
print ('调用 mean() 函数:\n', np.mean(x))
输出结果为:
原始数组:
[96 80 70 26 71 80 47 87 78 31 84]
[26 31 47 70 71 78 80 80 84 87 96]
[ 1 2 3 4 5 6 7 8 9 10 11]
调用 mean() 函数:
68.18181818181819
average() 加权平均值函数可以根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。比方说考虑数组 [1,2,3,4] 和相应的权重 [2,3,2,1] ,通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。此外,该函数可以接受一个轴参数。 如果没有指定轴,则数组会被展开。
加权平均值 = (1*2 + 2*3 + 3*2 + 4*1 )/(2 + 3 + 2 + 1)
实例
import numpy as np
x = np.array([1,2,3,4])
print ('原始数组:\n', x)
wts = np.array([2,3,2,1])
print ('权重数组:\n', wts)
print ('计算加权平均值,调用 average() 函数:')
print (np.average(a,weights = wts))
输出结果为:
原始数组:
[1 2 3 4]
权重数组:
[2 3 2 1]
计算加权平均值,调用 average() 函数:
2.25
统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。以下实例我们用 randint() 函数来观察,如果设定的随机整数范围较大,那方差的值应该有较大的几率会较大。
实例
import numpy as np
x = np.random.randint(0, high = 100, size=(11))
print ('数组 1,数值范围 0 ~ 100:\n', x)
print ('样本方差为:',np.var(x))
x1 = np.random.randint(0, high = 10, size=(11))
print ('数组 2,数值范围 0 ~ 10:\n', x)
print ('样本方差为:',np.var(x1))
输出结果为:
数组 1,数值范围 0 ~ 100:
[18 73 56 69 77 31 34 8 87 23 65]
样本方差为: 670.512396694215
数组 2,数值范围 0 ~ 10:
[18 73 56 69 77 31 34 8 87 23 65]
样本方差为: 8.066115702479339
标准差是一组数据平均值分散程度的一种度量。因此,设定的随机整数范围较大,那标准差的值会较大。标准差是方差的算术平方根。
标准差公式如下:
std = sqrt(mean((x - x.mean())**2))
实例
import numpy as np
x = np.random.randint(0, high = 100, size=(11))
print ('数组 1,数值范围 0 ~ 100:\n', x)
print ('样本标准差为:',np.std(x))
x1 = np.random.randint(0, high = 10, size=(11))
print ('数组 2,数值范围 0 ~ 10:\n', x)
print ('样本标准差为:',np.std(x1))
输出结果为:
数组 1,数值范围 0 ~ 100:
[77 68 25 40 94 0 75 12 20 27 14]
样本标准差为: 30.353836197436834
数组 2,数值范围 0 ~ 10:
[77 68 25 40 94 0 75 12 20 27 14]
样本标准差为: 3.2320706972056685