峰度函数玩得不好 [英] Kurtosis function not playing nice
本文介绍了峰度函数玩得不好的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在玩Snowflake,当使用KURTOSIS函数时,我得到被零除的错误:-(
如果有1个以上不同的值(以及4个以上的值),则函数可以完美工作:
select
kurtosis(bob)
from
(select seq4() bob from table(generator(rowcount => 10)));
,但当所有值都相同时失败。在本例中为1:
select
kurtosis(bob)
from
(select 1 bob from table(generator(rowcount => 10)));
除了在每次评估前执行不同的计数或HLL测试外,还有谁能提出解决方案吗?
我确实看到这个article关于 pandas 滚动偏度和峰度的讨论在所有等值的样本上都失败了,但在Snowflake甚至是白日梦之前,这已经是近10年前的事了。
和SKEW函数具有相同的问题。
我的临时解决方案是:
select
DECODE(HLL(bob),1,0,SKEW(bob::FLOAT)) yucky_solution
from
(select 1 bob from table(generator(rowcount => 10)));
推荐答案
我认为这反映了kurtosis
函数的工作方式(与雪花无关)。
我在Wolfram Alpha和这个在线峰度计算器上进行了测试:https://www.socscistatistics.com/tests/skewness/default.aspx
从0到9的数字与Snowflake的值相同:
但有10个相同的数字返回NaN值:
从数学上讲,这是峰度的公式:
这是通过用标准差潜水得到的。一系列相同数字的标准差是0--因此除以0是错误的。因此,避免异常的SQL方法是首先计算stddev:
select
iff(stddev(bob)=0, null, kurtosis(bob))
from
(select 1 bob from table(generator(rowcount => 10)));
-- null
这篇关于峰度函数玩得不好的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文