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

统计学方差,中位数,方差,标准差,协方差等的计算

程序员文章站 2022-07-11 15:33:41
...

# coding=utf-8


import numpy as np
import pandas as pd

datas = [98,83,65,72,79,76,75,94,91,77,63,83,89,69,64,78,63,86,91,72,71,72,70,80,65,70,62,74,71,76]


#平均数
aver = np.mean(datas)

#中位数
mid = np.mean(np.sort(datas)[14:16])

#众数
def get_general(datas):

    mode = [] #保存众数

    arr_apper = dict((item, datas.count(item)) for item in datas)

    if max(arr_apper.values()) == 1:
        return ;
    else:
        for k,v in arr_apper.items():
            if v == max(arr_apper.values()):
                mode.append(k)

    return mode

print(get_general(datas))
#a = dict([(1,2),(2,3)])
#print(a)


#方差
_var = np.var(datas)


#标准差
_std = np.std(datas)


#偏度
'''
    偏度与峰度类似,它也是描述数据分布形态的统计量,其描述的是某总体取值分布的对称性。
    这个统计量同样需要与正态分布相比较,偏度为0表示其数据分布形态与正态分布的偏斜程度相同;
    偏度大于0表示其数据分布形态与正态分布相比为正偏或右偏,即有一条长尾巴拖在右边,
    数据右端有较多的极端值;偏度小于0表示其数据分布形态与正态分布相比为负偏或左偏,
    即有一条长尾拖在左边,数据左端有较多的极端值。
    偏度的绝对值数值越大表示其分布形态的偏斜程度越大。
    
    E[(数据-均值)/标准差]^3
'''

#偏度(skewness),是统计数据分布偏斜方向和程度的度量,
# 是统计数据分布非对称程度的数字特征。偏度(Skewness)亦称偏态、偏态系数。
#右偏(正偏)时一般算术平均数>中位数>众数,左偏(负偏)时相反,即众数>中位数>平均数

a = pd.Series(datas)
print(a.skew())


#峰度
'''
    峰度是描述总体中所有取值分布形态陡缓程度的统计量。这个统计量需要与正态分布相比较,
    峰度为0表示该总体数据分布与正态分布的陡缓程度相同;峰度大于0表示该总体数据分布与正态分布相比较为陡峭,
    为尖顶峰;峰度小于0表示该总体数据分布与正态分布相比较为平坦,为平顶峰。
    峰度的绝对值数值越大表示其分布形态的陡缓程度与正态分布的差异程度越大。

    E[(数据-均值)/标准差]^4
'''
print(a.kurt())


#分位数
'''
    讲数据x_i按照从小到大的顺序分为两组,较小的一组的元素个数占整个样本元素个数的a,
    分组的临界值为a分位数x_a,P{X<x_a} = F(x_a) = a
    
    上四分位数  25%的位置
    下四分位数  75%的位置
    
'''


'''
    describe():
        count    样本量
        mean     均值
        std      标准差
        min      最小值
        25%      25%分位数
        50%      中位数
        75%      75%分位数
        max      最大值 
'''

print(a.describe())


'''
    协方差与相关系数
        cov  协方差
        corr 相关系数  -1 ~ 1 接近1相关性大  0相关性小
'''
df = pd.DataFrame({'data1':np.random.randn(5),
                'data2':np.random.randn(5)})
#print(df.cov())
#print(df.corr())


最大值、最小值

获得整个矩阵、行或列的最大最小值。

  • 获得元素最大值的函数:max
  • 获得元素最小值的函数:min

示例代码:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.max()) #获取整个矩阵的最大值 结果: 6
print(a.min()) #结果:1

# 可以指定关键字参数axis来获得行最大(小)值或列最大(小)值
# axis=0 行方向最大(小)值,即获得每列的最大(小)值
# axis=1 列方向最大(小)值,即获得每行的最大(小)值
# 例如

print(a.max(axis=0))
# 结果为 [4 5 6]

print(a.max(axis=1))
# 结果为 [3 6]

# 要想获得最大最小值元素所在的位置,可以通过argmax函数来获得
print(a.argmax(axis=1))
# 结果为 [2 2]

平均值

可以获得整个矩阵、行或列的平均值。

  • 获得矩阵中元素的平均值:mean()。

示例代码:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.mean()) #结果为: 3.5

# 同样地,可以通过关键字axis参数指定沿哪个方向获取平均值
print(a.mean(axis=0)) # 结果 [ 2.5  3.5  4.5]
print(a.mean(axis=1)) # 结果 [ 2.  5.]

方差

  • 函数为var()

方差函数var()相当于函数mean(abs(x - x.mean())**2),其中x为矩阵。

示例代码:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.var()) # 结果 2.91666666667

print(a.var(axis=0)) # 结果 [ 2.25  2.25  2.25]
print(a.var(axis=1)) # 结果 [ 0.66666667  0.66666667]

标准差

  • 函数:std()

std()相当于sqrt(mean(abs(x - x.mean())**2)),或相当于sqrt(x.var())。

示例代码:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])
print(a.std()) # 结果 1.70782512766

print(a.std(axis=0)) # 结果 [ 1.5  1.5  1.5]
print(a.std(axis=1)) # 结果 [ 0.81649658  0.81649658]

中值

中值指的是将序列按大小顺序排列后,排在中间的那个值,如果有偶数个数,则是排在中间两个数的平均值。

  • 函数:median()
  • 调用方法为numpy.median(x,[axis]),axis可指定轴方向,默认axis=None,对所有数取中值。

示例代码:

import numpy as np
x = np.array([[1,2,3],[4,5,6]])

print(np.median(x))  # 对所有数取中值
# 结果
3.5

print(np.median(x,axis=0))  # 沿第一维方向取中值
# 结果
[ 2.5  3.5  4.5]

print(np.median(x,axis=1))  # 沿第二维方向取中值
# 结果
[ 2.  5.]

求和

  • 函数:sum()

示例代码:

import numpy as np

a = np.array([[1,2,3],[4,5,6]])

print(a.sum())           # 对整个矩阵求和
# 结果 21

print(a.sum(axis=0)) # 对行方向求和
# 结果 [5 7 9]

print(a.sum(axis=1)) # 对列方向求和
# 结果 [ 6 15]

累积和

  • 某位置累积和指的是该位置之前(包括该位置)所有元素的和。

例如序列[1,2,3,4,5],其累计和为[1,3,6,10,15],即第一个元素为1,第二个元素为1+2=3,……,第五个元素为1+2+3+4+5=15。

  • 函数:cumsum()
import numpy as np

a = np.array([[1,2,3],[4,5,6]])

print(a.cumsum())            # 对整个矩阵求累积和
# 结果 [ 1  3  6 10 15 21]

print(a.cumsum(axis=0))  # 对行方向求累积和
# 结果
[[1 2 3]
 [5 7 9]]

print(a.cumsum(axis=1))  # 对列方向求累积和
# 结果
[[ 1  3  6]
 [ 4  9 15]]