数据描述(一)


数据描述主要有三部分:

  • 集中趋势的测度
  • 离散程度的测度
  • 分布形态的测度

集中趋势的测度

平均数也叫做集中趋势量数(measures of central tendency),一般有三种形式:均值、中位数和众数。

  • 均值(mean):数据组中所有数值的总和除以该组数值的个数。
  • 中位数(median):一系列数据的中点。中位数对极值不敏感,均值对极值敏感。
  • 众数(mode) :出现数据最多的数值。如果每个数字都相同则没有众数。

numpy

numpy的基本的数组统计方法

方法说明
sum求和
mean均值
std,var标准差和方差
min,max最小值和最大值
argmin,argmax最小值和最大值的索引
cumsum累积和
cumprod累积积

python3 代码实现


    import numpy as np  
    import operator  
    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]  

def get_mode(arr):  
    mode = [];  
    arr_appear = dict((a, arr.count(a)) for a in arr);  # 统计各个元素出现的次数  
    if max(arr_appear.values()) == 1:  # 如果最大的出现为1  
        return;  # 则没有众数  
    else:  
        for k, v in arr_appear.items():  
        # 否则,出现次数最大的数字,就是众数  
            if v == max(arr_appear.values()):  
                mode.append(k);  
    return mode; 
    print("mean number:",np.mean(scores))
    print ('median:\t', np.median(scores))
    print("mode nodes:",get_mode(scores))
>运行结果 >
mean number: 28.425
median:  25.5
mode nodes: [23]

离散程度的测度

  • 方差
  • 标准差
  • 极差(最大值最小值)
  • 四分位数

    百度百科解释

    四分位数(Quartile)是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。多应用于统计学中的箱线图绘制。
  • 变异系数:变异性(variability)反映数值之间的不同。如三组数据(7,6,3,3,1)、(3,4,4,5,4)和(4,4,4,4,4),它们的均值都是4, 第一组数据变异性最大,第二组次之,第三组没有变异性。平均数和变异性可共同描述数据分布的特征,并说明数据分布之间的差异。变异性的三种量数:极差(range)、标准差(standard deviation,缩写s或SD)、方差(variance 标准差的平方)。这三组量数用于反映一组数据的变异性、散布或者离散度。

python3 代码实现(承接上边那部分代码)


print("max :\t",np.max(scores)) 
print ('min: \t', np.min(scores)  )
print ('sum: \t', np.sum(scores))  
print ('mean:\t', np.mean(scores)  )
print("std:\t",np.std(scores))
print ("var:\t",np,var(scores))

运行结果


max :    52
min:     12
sum:     1137
mean:    28.425
std:     10.3123409079
var:     106.344375
​

分布形态

偏度和峰度都是统计量
偏度Skewness(三阶) ——三阶中心距除以标准差的三次方
峰度Kurtosis (四阶) —— 概率密度在均值处峰值高低的特征,常定义四阶中心矩除以方差的平方,减去三;

  • 偏度
  • 峰度

python3 代码如下

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

运行结果:
Alt text

-0.00241190361881 1.0059141362583934 -0.00347353634748 3.02650097917 -0.0406145249329 1.9987755488361851 0.00397656086968 12.05297778 0.514274840973 0.6981234945311516 0.806392176818 1.67244275992 2.00400226754 1.13943015382368 0.00731046737307 2.37842465848

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值