繁体   English   中英

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

[英]How to find percentage of values within given range in python?

问题陈述 - 变量 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 将是具有 99.7% 值的 3 个标准偏差。

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

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

您基本上想知道从 x1=8 到 x2=17 的概率密度 Function (PDF) 下的区域。

你知道PDF的面积是积分,所以它是累积密度Function(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)

和 plot 来看看

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()

在此处输入图像描述

所以,我们想要的值是那个面积,我们可以计算为

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%}")

这给出了84.1%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM