开发者社区> 德哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PostgreSQL 计算 任意类型 字段之间的线性相关性

简介:
+关注继续查看

PostgreSQL自带了计算numeric和numeric字段的线性相关性的聚合函数corr(numeric, numeric)。
例如:

postgres=# select corr(c1,c2) from (values (1,2),(2,1),(100,90),(13,13),(25,27) ) t(c1,c2);
       corr        
-------------------
 0.998528203831946
(1 row)

postgres=# \df+ corr
                                                                             List of functions
   Schema   | Name | Result data type |        Argument data types         | Type | Security | Volatility |  Owner   | Language |   Source code   |       Description       
------------+------+------------------+------------------------------------+------+----------+------------+----------+----------+-----------------+-------------------------
 pg_catalog | corr | double precision | double precision, double precision | agg  | invoker  | immutable  | postgres | internal | aggregate_dummy | correlation coefficient
(1 row)

如果要计算多元的线性相关性,可以使用madlib提供的linregr_train函数来统计。
http://doc.madlib.net/latest/group__grp__linreg.html
注意不管是一元回归还是多元回归,都需要提供数字类型,如果是文本是不支持的,如下:

postgres=# select corr(c1,c3) from (values (1,2,'test'),(2,1,'digoal'),(100,90,'hello'),(13,13,'china'),(25,27,'hangzhou') ) t(c1,c2,c3);
ERROR:  function corr(integer, text) does not exist
LINE 1: select corr(c1,c3) from (values (1,2,'test'),(2,1,'digoal'),...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

那么怎么处理呢?
PostgreSQL提供了强大的窗口功能,因为任意字段都可以排序,所以只要使用窗口输出字段排序后的rank()就可以代表它的位置从而计算相关性。
例如

postgres=# select 
c1,rank() over(order by c1) rc1, 
c2, rank() over(order by c2) rc2, 
c3, rank() over(order by c3) rc3 
from (values (1,2,'test'),(2,1,'digoal'),(100,90,'hello'),(13,13,'china'),(25,27,'hangzhou') ) 
t(c1,c2,c3) order by c1; 
 c1  | rc1 | c2 | rc2 |    c3    | rc3 
-----+-----+----+-----+----------+-----
   1 |   1 |  2 |   2 | test     |   5
   2 |   2 |  1 |   1 | digoal   |   2
  13 |   3 | 13 |   3 | china    |   1
  25 |   4 | 27 |   4 | hangzhou |   3
 100 |   5 | 90 |   5 | hello    |   4
(5 rows)

这个例子要计算c1,c3的相关性,c1是数字字段,但是c3是text。 corr函数不支持这么操作。
因此我使用上面这条带窗口的SQL,把text字段根据rank抽象为数值,正好和其他字段可以匹配相关性。
来看计算结果:

postgres=# select corr(c1,rc3), corr(rc1,rc3) from (
select c1,rank() over(order by c1) rc1, 
c2, rank() over(order by c2) rc2, 
c3, rank() over(order by c3) rc3 
from (values (1,2,'test'),(2,1,'digoal'),(100,90,'hello'),(13,13,'china'),(25,27,'hangzhou') ) t(c1,c2,c3) 
) t;
       corr        | corr 
-------------------+------
 0.283302495025433 | -0.1
(1 row)

建议采用corr(rc1,rc3)的结果,这个比较有代表性。 代表被评测列的线性相关性。

应用场景大家猜一猜。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RDS MySQL 5.7三节点企业版重磅发布 企业级业务云上数据库首选
随着云计算技术的逐渐普及,使用云服务的客户行业、场景的边界也在不断地被拓宽,不断提出新的需求。
343 0
RDS MySQL 5.7三节点企业版重磅发布 企业级业务云上数据库首选
10月23日15:00 多名专家联袂讲解 https://yq.aliyun.com/live/1536 随着云计算技术的逐渐普及,使用云服务的客户行业、场景的边界也在不断地被拓宽,不断提出新的需求。
3385 0
RDS数据库与自建库的gtid主从同步
一、在centos7上部署MySQL数据库1、从MYSQL官网下载安装文件wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.
1928 0
阿里云云数据库RDS如何监控、备份及克隆实例?
监控报警及备份恢复是DBA日常工作里面用的最多的功能。这里我们来对这个功能进行一个简单的介绍。 点击监控与报警。监控类型包括资源监控及引擎监控。资源监控,包括CPU和内存利用率、磁盘空间、IOPS链接数和网络流量;引擎监控,主要针对数据库引擎内部的深度监控,由mysql里面提供TPS、QPS、命中率、读写量、缓存请求次数、日志读写以及更多的深入监控信息。
1977 0
RDS for MySQL8.0物理备份恢复到本地自建数据库
此文章是centos7下的恢复流程。 1、安装MySQL8.0(采用yum方式安装):wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm yum localinstall mysql80-community-release-el7-1.noarch.rpm yum -y install yum-utils 默认安装的就是8.0版本yum install mysql-community-server 安装好了不要启动数据库。
3123 0
【阿里云新品发布·周刊】第11期:云数据库 MySQL 8.0 重磅发布,更适合企业使用场景的RDS数据库
2019年5月29日15时,阿里云云数据库 MySQL 8.0 重磅发布,2倍以上性能提升,SQL窗口函数、JSON扩展语法等企业级新功能震撼上市!主要从技术层面介绍MySQL 8.0的优势和与过去版本对比。
3304 0
小微企业阿里云最佳实践系列(二):RDS 数据库与DMS 数据库管理(数据管理)
在上一篇博文中主要介绍了 ECS 服务器与 RDS 数据库,在本篇重点为大家讲解我们的数据如何进行管理、在日常的管理过程中存在哪些风险、遇到突然事件如何通过日志分析问题以及解决问题。
2886 0
小微企业阿里云最佳实践系列(一):ECS 服务器与 RDS 数据库
本博文主要使用传统服务器架构与云服务架构进行横向对比,解决企业在搭建软件系统中所遇到等问题和痛点,以及为小微企业降低成本的同时尽可能提高软件系统的高可通、低延迟、高规范、低人力投入。
2982 0
自建Percona5.7.23同步阿里云RDS(MySQL5.6)TokuDB数据库
阿里云RDS支持TokuDB引擎,具有高压缩,高写入性能,读性能和InnoDB差不多。本文详解Percona MySQL5.7.23(包含TokuDB引擎)二进制的搭建,以及使用RDS备份文件恢复数据和搭建GTID同步到自建Percona MySQL5.7.23的过程。
2333 0
+关注
德哥
公益是一辈子的事, I am digoal, just do it.
文章
问答
来源圈子
更多
让用户数据永远在线,让数据无缝的自由流动
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
PolarDB for PostgreSQL三节点功能介绍
立即下载
金融级 PostgreSQL监控及优化
立即下载
PostgreSQL Greemplum 数据上云
立即下载