如何在python中查找给定范围内的值百分比?

如何在python中查找给定范围内的值百分比?,python,numpy,scipy.stats,Python,Numpy,Scipy.stats,问题陈述-变量X的平均值为15,标准偏差为2 介于8和17之间的X值的最小百分比是多少 我知道68-95-99.7经验法则。我在谷歌上发现,1.5标准差范围内的数值百分比为86.64%。 到目前为止,我的代码是: import scipy.stats import numpy as np X=np.random.normal(15,2) 据我所知 13-17在1个标准偏差范围内,具有68%的值 9-21为3个标准偏差,其值为99.7% 7-23是4个标准偏差。所以8比平均值低3.5个标准差 如

问题陈述-变量X的平均值为15,标准偏差为2

介于8和17之间的X值的最小百分比是多少

我知道68-95-99.7经验法则。我在谷歌上发现,1.5标准差范围内的数值百分比为86.64%。 到目前为止,我的代码是:

import scipy.stats
import numpy as np
X=np.random.normal(15,2)
据我所知

13-17在1个标准偏差范围内,具有68%的值

9-21为3个标准偏差,其值为99.7%

7-23是4个标准偏差。所以8比平均值低3.5个标准差


如何找到从8到17的值的百分比?

您基本上想知道概率密度函数(PDF)下从x1=8到x2=17的面积

你知道PDF的面积是整数,所以它是累积密度函数(CDF)

因此,要找到x的两个特定值之间的区域,需要将这些值之间的PDF积分,这相当于做CDF[x2]-CDF[x1]

因此,在python中,我们可以

import numpy as np
import scipy.stats as sps
import matplotlib.pyplot as plt

mu = 15
sd = 2
# define the distribution
dist = sps.norm(loc=mu, scale=sd)
x = np.linspace(dist.ppf(.00001), dist.ppf(.99999))
# Probability Density Function
pdf = dist.pdf(x)
# Cumulative Density Function
cdf = dist.cdf(x)
并计划看一看

fig, axs = plt.subplots(1, 2, figsize=(12, 5))

axs[0].plot(x, pdf, color='k')
axs[0].fill_between(
    x[(x>=8)&(x<=17)],
    pdf[(x>=8)&(x<=17)],
    alpha=.25
)
axs[0].set(
    title='PDF'
)

axs[1].plot(x, cdf)
axs[1].axhline(dist.cdf(8), color='r', ls='--')
axs[1].axhline(dist.cdf(17), color='r', ls='--')
axs[1].set(
    title='CDF'
)
plt.show()

如果有人愿意回复,我将不胜感激。看看如何为你的
X=np.random.normal(15,2)
添加第三个参数,它对应于大量样本,然后计算高于和低于平均值+/-许多标准偏差。
cdf_at_8 = dist.cdf(8)

cdf_at_17 = dist.cdf(17)

cdf_between_8_17 = cdf_at_17 - cdf_at_8

print(f"{cdf_between_8_17:.1%}")