欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

No.01统计学之数据的描述性统计

程序员文章站 2022-03-05 15:01:42
...

数据的描述性统计主要包括以下几部分:

  1. 数据的集中趋势:
    • 众数、中位数、平均数、分位数
    • 算术平均数、加权平均数、几何平均数
  2. 数据的离中趋势:
    • 数值型数据:方差、标准差、极差、平均差
    • 顺序数据:四分位差
    • 分类数据:异众比率
  3. 相对离散程度:
    • 离散系数
  4. 分布的形状:偏态系数,峰态系数

一、数据的集中趋势

  • 众数
    众数(Mode)描述一组数据的集中趋势,是一组数据中出现次数最多的那个数。注意:众数可以没有也可以有多个。
  • 中位数
    中位数(Median)代表一个样本、种群或概率分布中的一个数值,其通过其数值集合划分为相等的上下两部分。
    假设一组数据排序后为X1,X2,X3…Xn
    如果n为偶数,则中位数为(X(n/2)+X(n/2+1))/2 ,如果n为奇数,则中位数为X(N+1)/2
  • 平均数
    平均数(average)代表一组数据的平均水平,其值为所有的数据之和除于个数,即(N1+N2+…+Nn)/n
  • 分位数
    分位数(Quantile)也指分位点,是指一个随机变量的概率分布范围内分为的几个数值点,常用的有二分位数(中位数),四分位数,百分位数。
    四分位数是统计学分位数中的一种,既把一组数值从小到大排序并分成四等份,位于三个分割点的值就是四分位数。
    第一四分位数Q1,又称较小四分位数,等于样本排序后的第25%的数字。其值为(n+1)/4
    第二四分位数Q2,又称中位数,等于样本排序后的第50%的数字。其值为2(n+1)/4
    第三四分位数Q3,又称较大四分位数,等于样本第75%的数字。其值为3(n+1)/4
    eg:12 23 34 45 56 67 78 89
    Q1为第(8+1)/4个数字,其值为23+(34-23)*0.25=25.75
    Q2为第2(8+1)/4个数字,其值为45+(56-45)*0.5=50.5
    Q3为第3(8+1)/4个数字,其值为67+(78-67)*0.75=75.25
  • 算术平均值
    算术平均值(arithmetic mean)也叫平均值,为所有数值之和除于个数。
  • 加权平均值
    加权平均值(weight mean)即个数值乘以权重后的数值之和除于个数的值。
    eg:语文100 数学120 英语100
    各权重为0.3 0.4 0.3
    最后加权平均值为(1000.3+1200.4+100*0.3)/3=36
  • 几何平均数
    几何平均数(Geometric Mean)即每个每个变量值的连乘积开项数次方根。

二、数据的离中趋势

  • 方差
    方差(variance)是每个样本值与全体样本值的平均数之差的平方值的平均数
  • 标准差
    标准差(Standard Deviation)是方差的算术平方根。
  • 极差
    极差(Range)又称为范围误差或者全距,其值为最大值减最小值。
  • 平均差
    平均差(Mean Deviation)是表示各个变量值之间差异程度的数值之一。指各个变量值同平均数的离差绝对值的算术平均数。
  • 四分位差
    四分位差(quartile deviation)指的是四分位的Q3与Q1的差值。其公式为Q=Q3-Q1
  • 异众比率差
    异众比率指的是样本中非众数个数占样本个数的比率。计算公式为Vm0=(N-Fm0)/N

三、相对离散程度

  • 离散系数
    离散系数(variation coefficient)它是一组数据的标准差与其相应的均值之比,是测度数据离散程度的相对指标.通常使用Vs表示,其计算公式为Vs=S/X.离散系数越大,说明变量分布的离散程度越强,平均数的代表性越差;离散系数越小,说明变量分布的离散程度越弱,平均数的代表性越好。

四、分布的形状##

  • 偏态系数
    偏态系数(deviation coefficient)用来衡量数据的偏斜程序。

  • 峰态系数
    峰态系数用来衡量数据的扁平程度。

五、python程序代码##

import math
my_array=[12,23,45,56,78,23,45,80]
# 极差
def range(arr):
return max(arr)-min(arr);
# 平均数
def avg(arr):
return format(float(sum(arr)/len(arr)),'.2f');
# 中位数
def median(arr):
arr = sorted(arr);
if(len(arr)%2 == 0):
return (arr[int(len(arr)/2)]+arr[int((len(arr)-2)/2)])/2
return arr[int((len(arr)-1)/2)]
# 众数
def mode(arr):
dict = {}
result = []
max = 0
if arr and len(arr) > 0:
for num in arr:
if num in dict:
dict[num] += 1
else:
dict[num] = 1
d1 = sorted(dict.values(), reverse=True)
max = d1[0]
for num in dict:
count = dict.get(num, 0)
if count == max:
result.append(num)
return result
# 分位数   n=2 1/2   n=4 1/4 2/4 3/4
def quartile(arr,default_args=2):
arr=sorted(arr)
length=len(arr);
result=[];
if not default_args or (default_args == 2):
if length % 2 == 0:
return (arr[int(length/2-1)]+arr[int((length+2)/2)])/2
else:
return arr[int(length/2+1)]
else:
if length % default_args == 0:
i = default_args;
while i >1 :
result.append((arr[int(length/i -1)] + arr[int(length/i)])/2)
i -=1;
return result;
else:
i = default_args;
while i >1:
result.append(arr[int(length/i - 1)])
i -=1;
return result;
# print("数组为:",my_array)
# print("排序后为:",sorted(my_array))
# print("极差:",range(my_array))
# print("平均数:",avg(my_array))
# print("中位数:",median(my_array))
# print("众数:",mode(my_array))
# print("分位数:",quartile(my_array,3))


# 算术平均数:(n1+n2+n3)/n
def arith_mean(arr):
return format(float(sum(arr)/len(arr)),'.2f');
# 加权平均数:
def weig_aver(arr,weig):
result = 0;
i = 0;
for arr_list in arr:
result += arr_list*weig[i];
i += 1;
return result;
# 几何平均数:
def gen_mean(arr):
sum = 1;
for i in arr:
sum += sum * i;
return format(float(pow(sum,1/len(arr))),'.2f')
print("算术平均数为:",arith_mean(my_array))
print("几何平均数为:",gen_mean(my_array))
array=[80,90,100]
weight=[0.3,0.4,0.3]
print("加权平均数为:",weig_aver(array,weight));

# 方差
def variance(arr):
 avg_arr = avg(arr);
 sum = 0;
 for num in arr:
  sum += math.pow(float(num) - float(avg_arr),2)
 return format(float(sum/len(arr)),'.2f');

# 标准差
def standard_deviation(arr):
return format(float(math.pow(float(variance(arr)),1/2)),'.2f');

# 平均差
def average_deviation(arr):
airth_mean = arith_mean(arr);
sum = 0;
for num in arr:
if((float(num) - float(airth_mean)) > 0):
sum += (float(num) - float(airth_mean))
else:
sum += (float(airth_mean) - float(num))
return sum/len(arr)
# 四分位差
def quartile_deviation(arr):
return quartile(arr,4)[2]-quartile(arr,4)[0];

# 异众比率
def variation_ratio(arr):
count = 0;
for num in arr:
if(num not in mode(arr)):
count += 1;
return count/len(arr);
#离散系数
def coefficient_of_variation(arr):
return float(standard_deviation(arr))/float(arith_mean(arr))

print('方差为:',variance(my_array))
print('标准差为:',standard_deviation(my_array))
print('平均差为:',average_deviation(my_array))

print("四分位为:",quartile(my_array,4))
print("四分位差为:",quartile_deviation(my_array))
print("异众比率为:",variation_ratio(my_array))
print("离散系数为:",coefficient_of_variation(my_array))
相关标签: 统计学