Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条形图的峰度、偏度?-python_Python_Numpy_Scipy - Fatal编程技术网

条形图的峰度、偏度?-python

条形图的峰度、偏度?-python,python,numpy,scipy,Python,Numpy,Scipy,在python中,确定条形图的倾斜/峰度的有效方法是什么?考虑到条形图没有装箱(与直方图不同),这个问题没有多大意义,但我想做的是确定图的高度与距离(而不是频率与装箱)的对称性。换句话说,给定沿距离(x)测量的高度(y)值,即 在距离(x)上测量的高度(y)分布(偏度)和峰值(峰度)的对称性是什么?偏度/峰度测量是否适合确定真实值的正态分布?或者scipy/numpy是否提供了类似的测量方法 我可以通过以下方法实现高度(y)频率值沿距离(x)的倾斜/峰度估计 freq=list(chain(*[

在python中,确定条形图的倾斜/峰度的有效方法是什么?考虑到条形图没有装箱(与直方图不同),这个问题没有多大意义,但我想做的是确定图的高度与距离(而不是频率与装箱)的对称性。换句话说,给定沿距离(x)测量的高度(y)值,即

在距离(x)上测量的高度(y)分布(偏度)和峰值(峰度)的对称性是什么?偏度/峰度测量是否适合确定真实值的正态分布?或者scipy/numpy是否提供了类似的测量方法

我可以通过以下方法实现高度(y)频率值沿距离(x)的倾斜/峰度估计

freq=list(chain(*[[x_v]*int(round(y_v)) for x_v,y_v in zip(x,y)]))
x.extend([x[-1:][0]+x[0]])          #add one extra bin edge 
hist(freq,bins=x)
ylabel("Height Frequency")
xlabel("Distance(km) Bins")
print "Skewness,","Kurtosis:",stats.describe(freq)[4:]

Skewness, Kurtosis: (-0.019354300509997705, -0.7447085398785758)

在这种情况下,高度分布在中点距离周围是对称的(倾斜0.02),并以平缓(-0.74峰度,即宽)分布为特征


考虑到我将每次出现的x值乘以它们的高度y来创建一个频率,结果列表的大小有时会变得非常大。我想知道是否有更好的方法来解决这个问题?我想我总是可以尝试将数据集y规范化为0-100的范围,而不会丢失关于数据集歪斜/峰度的太多信息。

这不是python问题,也不是真正的编程问题,但答案很简单。而不是歪斜和峰度,让我们首先考虑更容易的值基础上的较低的时刻,和。为了使其具体化,并符合您的问题,让我们假设您的数据如下所示:

X = 3, 3, 5, 5, 5, 7 = x1, x2, x3 ....
{3:2, 5:3, 7:1} = {k1:p1, k2:p2, k3:p3}
这将产生一个“条形图”,看起来像:

X = 3, 3, 5, 5, 5, 7 = x1, x2, x3 ....
{3:2, 5:3, 7:1} = {k1:p1, k2:p2, k3:p3}
平均值u由下式给出

E[X] = (1/N) * (x1 + x2 + x3 + ...) = (1/N) * (3 + 3 + 5 + ...)
但是,我们的数据有重复的值,因此可以将其重写为

E[X] = (1/N) * (p1*k1 + p2*k2 + ...) = (1/N) * (3*2 + 5*3 + 7*1)
下一个术语,标准开发,就是

sqrt(E[(X-u)^2]) = sqrt((1/N)*( (x1-u)^2 + (x2-u)^3 + ...))
但是我们可以对
E[(X-u)^2]
项应用相同的缩减,并将其写成

E[(X-u)^2] = (1/N)*( p1*(k1-u)^2 + p2*(k2-u)^2 + ... )
           = (1/6)*( 2*(3-u)^2 + 3*(5-u)^2 + 1*(7-u)^2 )
这意味着我们不必像您在问题中所指出的那样,拥有每个数据项的多个副本来进行求和

和非常简单,如下所示:

skew     = E[(x-u)^3] / (E[(x-u)^2])^(3/2)
kurtosis = ( E[(x-u)^4] / (E[(x-u)^2])^2 ) - 3

您可以用
numpy.repeat(y,np.round(x).astype(int)替换列表理解
哪个应该更快。但是,我不记得看到过一个具有加权偏斜和峰度的函数。我从来没有见过它用于分布函数以外的函数。这是什么
x
y
?我的意思是,你不能有图形的偏斜(正如你的标题所说),这根本没有意义。你能在问题中编辑一些解释吗?添加了一些额外的注释来声明x和y…也许我在错误的论坛中问了这个问题,应该重新发布统计堆栈溢出,以询问如何测量实值的正态分布,而不是测试一组随机数是否正态分布泰德。如果我们把高度与距离的关系看作是一种空间分布,那么我们就得到了分布的偏斜和峰度的标准解释。这可以作为一种具有有限个支撑点的分布,并按照胡克的答案进行计算,也可以使用密度的平滑估计器来得到分布在一个连续的距离上的贡献。