资料:浅笑古今的博客 https://blog.csdn.net/u012735708/article/details/84750295
1、 矩
对于随机变量X,X的K阶原点矩为
X的K阶中心矩为
期望实际上是随机变量X的1阶原点矩,方差实际上是随机变量X的2阶中心矩
变异系数(Coefficient of Variation):标准差与均值(期望)的比值称为变异系数,记为C.V
偏度Skewness(三阶)
峰度Kurtosis(四阶)
2、偏度与峰度
3、利用matplotlib模拟偏度和峰度
3.1计算期望和方差
import matplotlib.pyplot as plt
import math
import numpy as np
def calc(data):
n=len(data) # 10000个数
niu=0.0 # niu表示平均值,即期望.
niu2=0.0 # niu2表示平方的平均值
niu3=0.0 # niu3表示三次方的平均值
for a in data:
niu += a
niu2 += a**2
niu3 += a**3
niu /= n
niu2 /= n
niu3 /= n
sigma = math.sqrt(niu2 - niu*niu)
return [niu,sigma,niu3]
- 其中,返回值为[期望,标准差,]
3.2 计算偏度和峰度
def calc_stat(data):
[niu, sigma, niu3]=calc(data)
n=len(data)
niu4=0.0 # niu4计算峰度计算公式的分子
for a in data:
a -= niu
niu4 += a**4
niu4 /= n
skew =(niu3 -3*niu*sigma**2-niu**3)/(sigma**3) # 偏度计算公式
kurt=niu4/(sigma**4) # 峰度计算公式:下方为方差的平方即为标准差的四次方
return [niu, sigma,skew,kurt]
3.3 利用matplotlib模拟图像
if __name__ == "__main__":
data = list(np.random.randn(10000)) # 满足高斯分布的10000个数
data2 = list(2*np.random.randn(10000)) # 将满足好高斯分布的10000个数乘以两倍,方差变成四倍
[niu, sigma, skew, kurt] = calc_stat(data)
[niu_2, sigma2, skew2, kurt2] = calc_stat(data2)
print (niu, sigma, skew, kurt)
print (niu_2, sigma2, skew2, kurt2)
info = r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$' %(niu,sigma, skew, kurt) # 标注
info2 = r'$\mu=%.2f,\ \sigma=%.2f,\ skew=%.2f,\ kurt=%.2f$' %(niu_2,sigma2, skew2, kurt2)
plt.figure(figsize=(10,10))
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.hist(data,100,normed=True,facecolor='r',alpha=0.9)
plt.hist(data2,100,normed=True,facecolor='g',alpha=0.8)
plt.grid(True)
plt.show()
4、 python中已实现的方法
import numpy as np
from scipy.stats import norm
from matplotlib import pyplot as plt
import seaborn as sns
data = list(np.random.randn(10000)) # 满足高斯分布的10000个数
sns.distplot(data, fit=norm)
(mu, sigma) = norm.fit(data)
print( '\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma))
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],loc='best')
plt.ylabel('Frequency')
plt.title('Distribution')
5、总结
偏度判左右,峰度判高度(极端值的多少)
根据偏度与峰度这两个指标,我们可以判断数据系列的分布是否满足正态性,进而评价平均数指标的使用价值。