当前位置: 首页>前端>正文

偏度与峰度的Python程序

资料:浅笑古今的博客  https://blog.csdn.net/u012735708/article/details/84750295

1、 矩

  • 对于随机变量X,X的K阶原点矩为偏度与峰度的Python程序,E(X^k),第1张

  • X的K阶中心矩为 偏度与峰度的Python程序,E(|X-E(X)|^k),第2张

  • 期望实际上是随机变量X的1阶原点矩,方差实际上是随机变量X的2阶中心矩

  • 变异系数(Coefficient of Variation):标准差与均值(期望)的比值称为变异系数,记为C.V

  • 偏度Skewness(三阶)

  • 峰度Kurtosis(四阶)

2、偏度与峰度

偏度与峰度的Python程序,第3张
偏度与峰度的Python程序,第4张
偏度与峰度的Python程序,第5张

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]

  • 其中,返回值为[期望,标准差,偏度与峰度的Python程序,E(X^3),第6张]
    偏度与峰度的Python程序,第7张

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()

偏度与峰度的Python程序,第8张

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、总结

偏度判左右,峰度判高度(极端值的多少)
根据偏度与峰度这两个指标,我们可以判断数据系列的分布是否满足正态性,进而评价平均数指标的使用价值。


https://www.xamrdz.com/web/29h1877955.html

相关文章: