sql:计算相关性并将行转换为列

Posted

技术标签:

【中文标题】sql:计算相关性并将行转换为列【英文标题】:sql: Calculate the correlations and convert rows into columns 【发布时间】:2021-09-13 19:33:55 【问题描述】:

所以我当前的表有 100 多个字段,我正在尝试计算输入变量和输出变量之间的相关性,然后将所有这些列转换为行。 例如,我当前的表如下所示:

input_1 input_2 output
3 6 5
4 7 5
6 4 4
6 9 3
7 10 5
9 9 2
2 9 4

我想要实现的是:

categories correlation
input_1 -0.594
input_2 -0.27

我在下面编写的查询为每个计算提供了一个相关性。但是,我是把它们转换成行,

select (Avg(input1 * output) - (Avg(input1) * Avg(output))) / (stddev(input1) * stddev(output)) AS correlation

from a

您能帮助实现这一目标吗? 谢谢!

【问题讨论】:

@MikhailBerlyant 这是我们上次评论的问题 【参考方案1】:

考虑以下方法

execute immediate (select '''
select categories, correlation
from (
  select ''' || 
    string_agg('corr(' || category || ', output) as ' || category , ', ')
|| '''  from `project.dataset.table`
)
unpivot (correlation for categories in (''' || string_agg(category) || '''))
'''
from (
  select category from (
    select 
      array(
        select category
        from unnest(regexp_extract_all(to_json_string(t), r'"(\w+)":')) category
        where category != 'output'
      ) arr
    from `project.dataset.table` t
    limit 1
  ), unnest(arr) category
))    

如果应用于您问题中的样本数据 - 输出是

如您所见 - 我没有使用您的繁重公式 - 而是使用 CORR 内置函数

【讨论】:

以上是关于sql:计算相关性并将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章

保留现有列并将行转换为列[重复]

在 MySQL 中创建视图并将行转换为列

如何 dcast pandas 数据框并将行转换为列

在 SQL 中将行转换为列

SQL:将行转换为列

如何在 SQL 中将行转换为列值 [关闭]