知识点:数据的描述性统计
-
数据的集中趋势
-
众数
描述:数据中出现次数最多的数
一组数据中,可能存在多个众数,也可能不存在众数
如:2、6、6、8、8 、10,众数是 6和 8
如:1、3、5、7、9、11,没有众数
-
中位数
描述:中位数就是将数据按大小顺序排列后,处于中间位置的数
如果数据总个数为奇数,中位数就是中间位置的数
如果数据总个数为偶数,中位数就是中间两个数据的平均值
-
平均数
若干个数的平均数,是用这些数的和除以数的个数
-
分位数
四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。
1. 第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字
2. 第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字
3. 第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字
第三四分位数与第一四分位数的差距又称四分位距
-
极差
x=xmax-xmin(xmax为最大值,xmin为最小值)用来来评价一组数据的离散度
-
算数平均数
An=(a1+a2+...+an)/n
-
加权平均数
所有数值乘以自己的权重后相加 除以 权重的和
b = (x1 * w1 + ... + xn * wn) / (w1 + ... + wn)
-
几何平均数
-
几何平均数
-
几何平均数多用于计算平均比率和平均速度。如:平均利率、平均发展速度、平均合格率等。
-
几何平均数受极端值的影响较算术平均数小。
-
它仅适用于具有等比或近似等比关系的数据。
-
几何平均数的计算举例
-
假定某地储蓄年利率(按复利计算):5%持续1.5年,3%持续2.5年,2.2%持续1年。请问此5年内该地平均储蓄年利率。该地平均储蓄年利率:
-
数据的离中趋势
-
方差
-
方差用于衡量随机变量或一组数据的离散程度,方差在在统计描述和概率分布中有不同的定义和计算公式。①概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度;②统计中的方差(样本方差)是每个样本值与全体样本均值之差的平方值的平均数,代表每个变量与总体均值间的离散程度。
-
总体方差,也叫做有偏估计,其实就是我们从初高中就学到的那个标准定义的方差:
-
-
其中,n表示这组数据个数,x1、x2、x3……xn表示这组数据具体数值。
-
-
其中,为数据的平均数,n为数据的个数,为方差。
-
样本方差,无偏方差,在实际情况中,总体均值是很难得到的,往往通过抽样来计算,于是有样本方差,计算公式如下:
-
-
-
标准差
-
标准差也被称为标准偏差,在中文环境中又常称均方差,是数据偏离均值的平方和平均后的方根,用σ表示。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度,只是由于方差出现了平方项造成量纲的倍数变化,无法直观反映出偏离程度,于是出现了标准差,标准偏差越小,这些值偏离平均值就越少,反之亦然。
-
平均差
-
平均差,英文为average deviation(A.D.)或mean deviation(M.D.),是一种平均离差,是总体所有单位与其算术平均数的离差绝对值的算术平均数。离差是总体各单位的标志值与算术平均数之差。因离差和为零,离差的平均数不能将离差和除以离差的个数求得,而必须将离差取绝对数来消除正负号。
-
平均差是反映各标志值与算术平均数之间的平均差异。平均差越大,表明各标志值与算术平均数的差异程度越大,该算术平均数的代表性就越小;平均差越小,表明各标志值与算术平均数的差异程度越小,该算术平均数的代表性就越大。
-
计算公式为:
-
平均差(MD)=,其中Σ为总计的符号,为变量 ,为算术平均数, 为变量值的个数。
-
顺序数据:四分位差
-
四分位差(quartile deviation),它是上四分位数(Q3,即位于75%)与下四分位数(Q1,即位于25%)的差。
-
计算公式为:Q = Q3-Q1
-
四分位差反映了中间50%数据的离散程度,其数值越小,说明中间的数据越集中;其数值越大,说明中间的数据越分散。四分位差不受极值的影响。此外,由于中位数处于数据的中间位置,因此,四分位差的大小在一定程度上也说明了中位数对一组数据的代表程度。四分位差主要用于测度顺序数据的离散程度。对于数值型数据也可以计算四分位差,但不适合分类数据。
-
分类数据:异众比率
-
异众比率(variation ratio)是统计学名词,是统计学当中研究现象离中趋势的指标之一。异众比率指的是总体中非众数次数与总体全部次数之比。换句话说,异众比率指非众数组的频数占总频数的比例。
-
-
其中为变量值的总频数,为众数组的频数。异种比率越大,说明非众数组的频数占总频数的比重越大,众数的代表性越差,即占比越小,异种比率越小,说明众数的代表性越好,即占比越大。异种比率主要适合度量分类数据的离散程度,当然连续数据可以计算异种比率。
-
相对离散程度
-
离散系数
-
即变异系数,针对不同数据样本的标准差和方差,因数据衡量单位不同其结果自然无法直接进行对比,为出具一个相同的衡量指标,则进行了离散系数的计算。离散系数为一组数据的标准差与平均数之比。离散系数大,说明数据的离散程度也大;离散系数小,说明数据的离散程度也小。
-
分布的形状
-
偏态系数
-
看长尾在哪边就是往哪偏
-
偏度为0表示其数据分布形态与正态分布的偏斜程度相同;偏度大于0表示其数据分布形态与正态分布相比为正偏或右偏,即有一条长尾巴拖在右边,数据右端有较多的极端值;偏度小于0表示其数据分布形态与正态分布相比为负偏或左偏,即有一条长尾拖在左边,数据左端有较多的极端值。偏度的绝对值数值越大表示其分布形态的偏斜程度越大。
-
偏度的具体计算公式为:
-
-
正偏态分布,mean > median,对于负偏态,mean < median
-
-
峰态系数
-
峰度是描述总体中所有取值分布形态陡缓程度的统计量。这个统计量需要与正态分布相比较,峰度为0表示该总体数据分布与正态分布的陡缓程度相同;峰度大于0表示该总体数据分布与正态分布相比较为陡峭,为尖顶峰;峰度小于0表示该总体数据分布与正态分布相比较为平坦,为平顶峰。峰度的绝对值数值越大表示其分布形态的陡缓程度与正态分布的差异程度越大。
-
峰度的具体计算公式为:
-
-
代码展示
import numpy as np
import stats as sts
scores = [31, 24, 23, 25, 14, 25, 13, 12, 14, 23,
32, 34, 43, 41, 21, 23, 26, 26, 34, 42,
43, 25, 24, 23, 24, 44, 23, 14, 52,32,
42, 44, 35, 28, 17, 21, 32, 42, 12, 34]
#集中趋势的度量
print('求和:',np.sum(scores))
print('个数:',len(scores))
print('平均值:',np.mean(scores))
print('中位数:',np.median(scores))
print('众数:',sts.mode(scores))
print('上四分位数',sts.quantile(scores,p=0.25))
print('下四分位数',sts.quantile(scores,p=0.75))
#离散趋势的度量
print('最大值:',np.max(scores))
print('最小值:',np.min(scores))
print('极差:',np.max(scores)-np.min(scores))
print('四分位差',sts.quantile(scores,p=0.75)-sts.quantile(scores,p=0.25))
print('标准差:',np.std(scores))
print('方差:',np.var(scores))
print('离散系数:',np.std(scores)/np.mean(scores))
#偏度与峰度的度量
print('偏度:',sts.skewness(scores))
print('峰度:',sts.kurtosis(scores))
#几何平均数
def GeometricMean(data):
len_d = len(data)
product = 1.0
for i in range(len_d):
product = product * data[i]
# the next line is equal to calculate the n-root
result = product ** (1.0/len_d)
return result
#偏度峰度实现
import matplotlib.pyplot as plt
import math
import numpy as np
def calc(data):
n = len(data)
niu = 0.0
niu2 = 0.0
niu3 = 0.0
for a in data:
niu += a
niu2 += a**2
niu3 += a**3
niu/= n #这是求E(X)
niu2 /= n #这是E(X^2)
niu3 /= n #这是E(X^3)
sigma = math.sqrt(niu2 - niu*niu) #这是D(X)的开方,标准差
return [niu,sigma,niu3] #返回[E(X),标准差,E(X^3)]
def calc_stat(data):
[niu,sigma,niu3] = calc(data)
n = len(data)
niu4 = 0.0
for a in data:
a -= niu
niu4 += a ** 4
niu4 /= n
skew = (niu3 - 3*niu*sigma**2 - niu**3)/(sigma**3)
kurt = niu4/(sigma**2)
return [niu,sigma,skew,kurt] #返回了均值,标准差,偏度,峰度
if __name__== "__main__":
data = list(np.random.randn(10000))#关于此处的数组与列表
data2 = list(2*np.random.randn(10000))
data3 = [x for x in data if x> -0.5]
data4 = list(np.random.uniform(0,4,10000))
[niu,sigma,skew,kurt] = calc_stat(data)
[niu2,sigma2,skew2,kurt2] = calc_stat(data2)
[niu3,sigma3,skew3,kurt3] = calc_stat(data3)
[niu4,sigma4,skew4,kurt4] = calc_stat(data4)
print niu,sigma,skew,kurt
print niu2,sigma2,skew2,kurt2
print niu3,sigma3,skew3,kurt3
print niu4,sigma4,skew4,kurt4
info = r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$'%(niu,sigma,skew,kurt)
info2 =r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$'%(niu2,sigma2,skew2,kurt2)
plt.text(1,0.38,info,bbox=dict(facecolor='red',alpha=0.25))
plt.text(1,0.35,info2,bbox=dict(facecolor='green',alpha=0.25))
#plt.text(x的位置,y的位置,面板内写的信息,标签框的属性=dict(facecolor='面板颜色',alpha='深浅度'))
plt.hist(data,50,normed=True,facecolor='r',alpha=0.9)
#hist直方图/箱式图(
#将data中的元素分到50个等间隔的范围内,返回每个范围内元素的个数作为一个行向量,
#50代表要分的元素的个数
#
#facecolor,alpha都是代表颜色的)
plt.hist(data2,80,normed=True,facecolor='g',alpha = 0.8)
plt.grid(True)
plt.show()
网友评论