数据的描述性统计(Python3 实现)

941 阅读7分钟

众数(Mode)

众数是统计学名词,在统计分布上具有明显集中趋势点的数值,代表数据的一般水平(众数可以不存在或多于一个)。简单来说就是指一组数据中出现次数最多的数据值。

import collections
def Mode(L):
    if L:
        result = []
        counter = collections.Counter(L)
        most = max(counter.values())
        for i in counter:
            if counter[i] == most:
                result += [i]
        return result
    else:
        return 'L 不能为空'

运行结果:

>>> Mode([1,2,3,3,3,44,4,4,4,5,5])
[3,4]

中位数(又称中值或者二分位数,英语:Median)

中位数是统计学中的专有名词,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。

对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,则中位数不唯一,通常取最中间的两个数值的平均数作为中位数。

一个数集中最多有一半的数值小于中位数,也最多有一半的数值大于中位数。如果大于和小于中位数的数值个数均少于一半,那么数集中必有若干值等同于中位数。

def Median(L):
    N = len(L)
    if N:
        L.sort()
        if N%2 == 0:
            return (L[int(N/2)-1]+L[int(N/2)])/2
        else:
            return L[int(N/2)]
    else:
        return 'L 不能为空'

运行结果:

>>> Median([1,4,3,5,6])
4

平均数(英语:Mean,或称平均值或算术平均数)

平均数是统计中的一个重要概念。为集中趋势的最常用测度值,目的是确定一组数据的均衡点。

def Mean(L):
    N = len(L)
    if N:
        return sum(L)/N
    else:
        return 'L 不能为空'

运行结果:

>>> Mean([1,4,3,5,6])
3.8

分位数(英语:Quantile),亦称分位点

分位点是指用分割点(cut point)将一个随机变量的概率分布范围分为几个具有相同概率的连续区间。

分割点的数量比划分出的区间少1,例如3个分割点能分出4个区间。常用的有中位数(即二分位数)、四分位数(quartile)等。

四分位数是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

def Quartile(L):
    N = len(L)
    if N:
        L.sort()
        if N%2:
             return [Median(L[:int(N/2)]), Median(L), Median(L[int(N/2)+1:])] # 直接调用上面写好的方法
             
        else:
            return [Median(L[:int(N/2)]), Median(L), Median(L[int(N/2):])]
        
    else:
        return 'L 不能为空'

运行结果:

>>>Quartile([7,15,36,39,40,41])
[15, 37.5, 40]

极差(英语:range,符号R)

极差又称全距,用来表示统计资料中的变异量数(英语:measures of variation),为最大值与最小值之间的差额,即最大值减最小值后所得数值。

def R(L):
    N = len(L)
    if N:
        return max(L)-min(L)
    else:
        return 'L 不能为空'

运行结果:

>>> R([2,3,5,6,7])
5

加权平均数

加权平均数与算术平均数类似,不同点在于,数据中的每个点对于平均数的贡献并不是相等的,有些点要比其他的点更加重要。 加权平均数的概念在描述统计学中具有重要的意义,并且在其他数学领域产生了更一般的形式。 如果所有的权重相同且等于一,那么加权平均数与算术平均数相同。 如果所有的权值皆等于1,此时加权平均数便等于算术平均数。

def WeightedAverage(L,W):
    N = len(L)
    M = len(W)
    if N and M:
        if M == N:
            return sum([L[i]*W[i] for i in range(N)])/sum(W)
        else:
            return 'L 和 W 的长度必须是相同的'
    else:
        return 'N 或 M 不能为空'

运行结果:

>>> WeightedAverage([1,2,3],[1,2,3])
2.3333333333333335

几何平均数

几何平均数是一种均值,它通过使用它们的值的乘积来指示一组数字的集中趋势或典型值,通过 n 个数据相乘后开 n 次方得到。

from functools import reduce
def GeometricMean(L):
    N = len(L)
    if N:
        product = reduce(lambda x,y:x*y, L)
        return pow(product, 1/N)
    else:
        return 'L 不能为空'

运行结果:

>>> GeometricMean([1,1,1,16])
2.0

方差(英语:Variance)

方差是应用数学里的专有名词。在概率论和统计学中,一个随机变量的方差描述的是它的离散程度,也就是该变量离其期望值的距离。

将各个误差将之平方(而非取绝对值,使之肯定为正数),相加之后再除以总数,透过这样的方式来算出各个数据分布、零散(相对中心点)的程度。

统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。

def Variance(L):
    N = len(L)
    if N:
        return sum(map(lambda x:(x-Mean(L))**2, L))/N
    else:
        return 'L 不能为空'
    
>>> Variance([1,2,3,4,5,6,7])
4.0

标准差(又称标准偏差、均方差,英语:Standard Deviation,缩写SD)

标准差是数学符号σ(sigma),在概率统计中最常使用作为测量一组数值的离散程度之用。

标准差定义:为方差开算术平方根,反映组内个体间的离散程度。

def Standard_Deviation(L):
    N = len(L)
    if N:
        return pow(Variance(L), 1/2)
    else:
        return 'L 不能为空'

运行结果:

>>> Standard_Deviation([1,0,1,2]) 
0.7071067811865476

平均差(Mean Deviation)

平均差是表示各个变量值之间差异程度的数值之一。指各个变量值同平均数的离差绝对值的算术平均数。

def Mean_Deviation(L):
    N = len(L)
    if N:
        return sum(map(lambda x:abs(x-Mean(L)), L))/N
    else:
        return 'L 不能为空'

运行结果:

>>> Mean_Deviation([1,2])
0.5

异众比率(variation ratio)

异众比率是统计学名词,是统计学当中研究现象离中趋势的指标之一。

异众比率指的是总体中非众数次数与总体全部次数之比。换句话说,异众比率指非众数组的频数占总频数的比例。

def Variation_Ratio(L):
    N = len(L)
    count = 0
    if N:
        mode = Mode(L)
        for i in L:
            if i not in mode:
                count+=1
        return count/N
            
    else:
        return 'L 不能为空'

运行结果:

>>> Variation_Ratio([1,2,3,3,4,4])
0.3333333333333333

离散系数(coefficient of variation)

离散系数是概率分布离散程度的一个归一化量度,其定义为标准差与平均值之比。

def Coefficient_Of_Variation(L):
    N = len(L)
    if N:
        mean = Mean(L)
        return Standard_Deviation(L)/mean
    else:
        return 'L 不能为空'

运行结果:

>>> Coefficient_Of_Variation([1,2])
0.3333333333333333

偏态系数

偏态系数以平均值与中位数之差对标准差之比率来衡量偏斜的程度,用SK表示偏斜系数:偏态系数小于0,因为平均数在众数之左,是一种左偏的分布,又称为负偏。偏态系数大于0,因为均值在众数之右,是一种右偏的分布,又称为正偏。

def Skew_Coefficient(L):
    N = len(L)
    if N:
        mean = Mean(L)
        median = Median(L)
        sd = Standard_Deviation(L)
        return (mean-median)/sd
    return 'L 不能为空'

运行结果:

>>> Skew_Coefficient([1,0,1,2,2,3,4,2,5,2,1])
0.06593804733957866

峰度(peakedness;kurtosis)又称峰态系数。

表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。样本的峰度是和正态分布相比较而言统计量,如果峰度大于三,峰的形状比较尖,比正态分布峰要陡峭。反之亦然。

在统计学中,峰度(Kurtosis)衡量实数随机变量概率分布的峰态。峰度高就意味着方差增大是由低频度的大于或小于平均值的极端差值引起的。

感谢支持 支付宝

支付宝

微信

微信