您的位置:首页 > 其它

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

2019-07-21 07:30 113 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_40241667/article/details/96685738

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

  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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: