【问题标题】:Check if numbers form bell curve (gauss distribution) Python 3检查数字是否形成钟形曲线(高斯分布)Python 3
【发布时间】:2016-03-09 20:01:45
【问题描述】:

我有每天 24 小时每分钟测量一次的辐照度数据文件。 因此,如果有一天天空上没有任何云,数据会显示出漂亮的连续钟形曲线。 在寻找数据中没有任何云的一天时,我总是用 gnuplot 月复一月地绘制并检查漂亮的钟形曲线。

我想知道是否有 python 方法来检查,如果辐照度测量形成一个连续的钟形曲线。 不知道这个问题是否太含糊,但我只是在寻找有关该任务的一些想法:-)

【问题讨论】:

  • *.com/questions/11507028/… 并弄清楚比赛有多“好”?
  • 对我来说这个问题还不清楚。如果你得到你的数据并取平均值和标准偏差,你将得到继续曲线。你想看看你的数据有多好。是吗?

标签: python-3.x gaussian bell-curve


【解决方案1】:

对于正态分布,有normality tests

简而言之,我们滥用了一些关于正态分布的知识来识别它们。

  • 任何正态分布的kurtosis 都是 3。计算数据的峰度,它应该接近 3。

  • 正态分布的skewness 为零,因此您的数据应具有接近于零的偏度

  • 更一般地,您可以计算参考分布并使用Bregman Divergence 来评估分布之间的差异(分歧)。对数据进行分类,创建直方图,然后从 Jensen-Shannon 散度开始。

使用散度方法,您可以与任意分布进行比较。您可能会记录一千个晴天,并检查晴天与您测量的日期之间的差异是否低于某个阈值。

【讨论】:

  • 谢谢,这正是我想要的。
【解决方案2】:

只是用一个代码示例来补充给定的答案:可以使用Kolmogorov-Smirnov test 来获得两个分布之间“距离”的度量。 SciPy 为此提供了一个简洁的界面,称为kstest

from scipy import stats
import numpy as np

data = np.random.normal(size=100)  # Our (synthetic) dataset
D, p = stats.kstest(data, "norm")  # Perform a one-sided Kolmogorov-Smirnov test

在上面的例子中,D 表示我们的data 与高斯正态 (norm) 分布之间的距离(越小越好),p 表示相应的 p 值。其他发行版可以通过将norm 替换为scipy.stats 中实现的发行版进行类似的测试。

【讨论】: