No.01统计学之数据的描述性统计
程序员文章站
2022-03-05 15:01:42
...
数据的描述性统计主要包括以下几部分:
- 数据的集中趋势:
- 众数、中位数、平均数、分位数
- 算术平均数、加权平均数、几何平均数
- 数据的离中趋势:
- 数值型数据:方差、标准差、极差、平均差
- 顺序数据:四分位差
- 分类数据:异众比率
- 相对离散程度:
- 离散系数
- 分布的形状:偏态系数,峰态系数
一、数据的集中趋势
-
众数
众数(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))