python实现非标准正态分布下概率密度有关计算

总目录:Python数据分析整理

之后马上要学习朴素贝叶斯算法了,为之后的学习做好铺垫,重新用python实现了一下数据正态性的检验。根据数据的均值方差,求出小于某个值的概率,或者根据概率求出这个值是多少。

python实现非标准正态分布下概率密度有关计算


原理

参考文章正态分布下的累积概率
在这里插入图片描述
在这里插入图片描述

代码实现

normal_eval.py(我自己命名的,后面会导入)

from scipy import stats

# 前提!!!!!数据服从正态分布

# 求小于x的概率,即x左侧的面积
# mean,std为平均值和标准差,默认0,1,即标准正态分布
# std > 0
def get_p(x, mean=0, std=1):
    z = (x-mean)/std
    p = stats.norm.cdf(z)
    return p

# 求概率密度大于p时,x的值;即左侧面积为p时,x的值
# mean,std为平均值和标准差,默认0,1,即标准正态分布
# 0 < p < 1, std > 0
def get_x(p, mean=0, std=1):
    z = stats.norm.ppf(p)
    x = z*std + mean
    return x

# 测试
if __name__ == '__main__':
    print(get_p(2))
    print(get_x(0.3))
    # 非标准正态分布计算
    print('此分布下值小于89的概率:', get_p(89, 83, 7))
    print('此分布下95%置信区间:', get_x(0.025, 83, 7), '-', get_x(0.975, 83, 7))

实例

数据集

test.txt

编号	班级	语文成绩
1	1	86
2	1	90
3	1	89
4	1	79
5	1	73
6	1	91
7	1	94
8	1	85
9	1	86
10	1	77
11	2	94
12	2	88
13	2	79
14	2	67
15	2	87
16	2	84
17	2	82
18	2	71
19	2	86
20	2	74
21	3	86
22	3	93
23	3	91
24	3	85
25	3	79
26	3	73
27	3	81
28	3	83
29	3	89
30	3	90

这是在SPSS生成的图,可以直观展示之后的分析
在这里插入图片描述

代码分析

import pandas as pd
from scipy import stats
import normal_eval

data = pd.read_csv('test.txt', sep='\t')
print(data.head())
# 均值
mean = data['语文成绩'].mean()
print('均值:', mean)
# 方差
std = data['语文成绩'].std()
print('标准差:', std)

# 正态检验
d, p = stats.kstest(data['语文成绩'], 'norm', (mean, std))
# 如果p<0.05,拒绝原假设,认为数据不符合正态分布,不用后面继续分析了,下班
# 如果p>0.05,接受原假设,认为数据符合正态分布,继续分析
print('p值:', p)

print('随便抽个小朋友成绩小于80分的概率:', normal_eval.get_p(80, mean, std))
print('随便抽个小朋友成绩大于87分的概率:', 1 - normal_eval.get_p(87, mean, std))
print('班上成绩前30%应该大于的分数:', normal_eval.get_x(0.7, mean, std))
print('班上成绩后30%应该小于的分数:', normal_eval.get_x(0.3, mean, std))

输出结果:

   编号  班级  语文成绩
0   1   1    86
1   2   1    90
2   3   1    89
3   4   1    79
4   5   1    73
均值: 83.73333333333333
标准差: 7.143520494649069
p值: 0.5789764316726012
随便抽个小朋友成绩小于80分的概率: 0.3006200101601507
随便抽个小朋友成绩大于87分的概率: 0.32373099736401
班上成绩前30%应该大于的分数: 87.4793991432677
班上成绩后30%应该小于的分数: 79.98726752339897

猜你喜欢

转载自blog.csdn.net/weixin_44255182/article/details/108785628