presto-如何在一个查询中的所有列之间执行关联

f0brbegy  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(558)

我有一个表格,格式如下:

A   B   C   D 
7   7   2   12
2   2   3   4
2   2   2   4
2   2   2   3
5   5   2   7

我想使用内置的相关函数来计算每一列之间的相关性(https://prestodb.io/docs/current/functions/aggregate.html 腐 eclipse (y,x)→ 双倍)
我可以运行所有列,每次都使用以下内容执行corr计算: select corr(A,B) from table 但是如果可能的话,我想减少访问presto并在一个查询中运行它的次数。
是否有可能得到通过某个阈值的列名,或者至少是一个查询中所有可能组合之间的相关分数?
谢谢。

ebdffaop

ebdffaop1#

您可以使用横向联接来取消拆分表,然后使用自联接和聚合:

with v as (
      select v.*, t.id
      from (select t.*,
                   row_number() over (order by a) as id
            from t
           ) t cross join lateral
           (values ('a', a), ('b', b), ('c', c), ('d', d)
           ) v(col, val)
     )
select v1.col, v2.col, corr(v1.val, v2.val)
from v v1 join
     v v2
     on v1.id = v2.id and v1.which < v2.which
group by v1.col, v2.col;

这个 row_number() 只是为每一行生成一个唯一的id,然后用于自联接。您可能已经有了包含此信息的列,因此可能没有必要这样做。

hfwmuf9z

hfwmuf9z2#

我想计算每列之间的相关性
关联涉及两个系列的数据(在sql中是两列)。所以我把你的问题理解为:如何计算表中每一个可能的列组合的相关性。这看起来像:

select
    corr(a, b) corr_a_b,
    corr(a, c) corr_a_c,
    corr(a, d) corr_a_d,
    corr(b, c) corr_b_c,
    corr(b, d) corr_c_d,
    corr(c, d) corr_c_d
from mytable

相关问题