绝对是一个统计问题-听起来你是想做一个概率测试,看看这个分布是否与正态分布、对数正态分布、二项式分布等有显著的相似性。最简单的方法是测试正常或对数正常,如下所述。
设置Pvalue截止值,通常如果Pvalue<;=0.05,则它不是正态分布的。
在Python use SciPy中,您只需要返回p值来测试,所以这个函数返回2个值(为了清楚起见,这里忽略了可选的(不需要的)输入):
import scipy.stats
[W, Pvalue] = scipy.stats.morestats.shapiro(x)
执行Shapiro-Wilk正态性测试。Shapiro-Wilk检验检验了数据来自正态分布的零假设。
如果要查看它是否为对数正态分布(前提是它未通过上面的p测试),可以尝试:
import numpy
[W, Pvalue] = scipy.stats.morestats.shapiro(numpy.log(x))
用同样的方法解释——我只是在一个已知的对数正态分布模拟上进行了测试,在np.log(x)测试中得到了0.17个p值,在标准shapiro(x)测试中得到了一个接近0的数字。这告诉我对数正态分布是更好的选择,正态分布失败惨重。
我把你要找的东西简单化了。对于其他发行版,您可能需要沿着Q-Q图https://en.wikipedia.org/wiki/Q%E2%80%93Q_plot的路线做更多的工作,而不是简单地遵循我提出的一些测试。这意味着你有一个你想要适应的分布图和你的数据图。下面是一个简单的例子,如果你愿意的话,可以让你走上这条路:import numpy as np
import pylab
import scipy.stats as stats
mydata = whatever data you are looking to fit to a distribution
stats.probplot(mydata, dist='norm', plot=pylab)
pylab.show()
上面的代码可以替换scipy库中的dist='norm'的任何内容http://docs.scipy.org/doc/scipy/reference/tutorial/stats/continuous.html#continuous-distributions-in-scipy-stats
然后找到它的scipy名称(必须根据文档添加形状参数,例如stats.probplot(mydata, dist='loggamma', sparams=(1,1), plot=pylab)或对于student Tstats.probplot(mydata, dist='t', sparams=(1), plot=pylab)),然后查看绘图并查看数据在该分布下的接近程度。如果数据点很接近,则可以找到分布。它在图上也会给你一个R^2值;一般来说,接近1的值越适合。
如果您想继续尝试使用数据帧,请尝试更改为:plt.hist(df['Frequency'].values)
如果这个答案回答了你的问题,请投赞成票:)需要一些赏金来回答我自己的编程难题。