我编写了这段代码来生成一组值1,2,3的正态分布:
import pandas as pd
import random
import numpy as np
df = pd.DataFrame({'col1':[1,2,3]})
print(df)
fig, ax = plt.subplots(1,1)
df.plot(kind='hist', normed=True, ax=ax)
返回:
X值是可能值的范围,但Y值是如何解释的?
阅读http://www.stat.yale.edu/Courses/1997-98/101/normal.htm Y值使用以下公式计算:
正态分布具有由其描述的钟形密度曲线 平均值和标准差。密度曲线是对称的, 以其平均值为中心,其标准由其标准决定 偏差。给定点x处的正常密度曲线的高度为 由
提供
这个公式的含义是什么?
答案 0 :(得分:1)
我认为你在这里混淆了两个概念。直方图将仅显示某个值出现的次数。因此,对于您的[1,2,3]
列表,1
和2
的值3
将出现一次,相同。如果您设置了Normed=False
,那么您将获得高度为1.0的情节。
但是,当您设置Normed=True
时,您将启用规范化。请注意,这与正态分布无关。请查看hist
的文档,您可以在此处找到它:http://matplotlib.org/api/pyplot_api.html?highlight=hist#matplotlib.pyplot.hist
在那里,您可以看到Normed
选项的作用,即:
如果为True,则返回元组的第一个元素将是规范化以形成概率密度的计数,即n /(len(x)`dbin),即直方图的积分将总和为1。 stacked也是True,直方图的总和标准化为1。
所以它在那里为你提供了公式。所以在你的情况下,你有三个点,即len(x)= 3。如果你看你的情节你可以看到你的箱子宽度为0.2,所以dbin = 0.2。对于1
,2
和3
,每个值只显示一次,您将得到n = 1。因此,条形图的高度应为1 /(3 * 0.2)= 1.67,这正是您在直方图中看到的。
现在对于正态分布,这只是一个特定的概率函数,定义为您给出的公式。它在许多领域都很有用,因为它与不确定性有关。例如,你会在统计数据中看到很多。 Wikipedia article on it有很多信息。
如果想要生成符合正态分布的值列表,我建议您阅读numpy.random.normal
的文档,该文档将为您执行此操作:https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html