检查数字是否形成钟形曲线(高斯分布)Python 3

Check if numbers form bell curve (gauss distribution) Python 3

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

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

对于正态分布,有normality tests

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

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

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

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

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

只是用代码示例来补充给定的答案:可以使用 Kolmogorov-Smirnov test to obtain a measure for the "distance" between two distributions. SciPy offers a neat interface for this, called 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.

中实现的分布进行类似测试