TDengine 数据函数 CORR 用户手册

CORR 函数

语法

sql 复制代码
CORR(expr1, expr2)

功能说明

计算两列数据之间的皮尔逊相关系数(Pearson correlation coefficient),该数值反映了两个序列之间的线性关系强度和方向。

版本

v3.3.8.0

返回结果类型

DOUBLE

适用数据类型

  • expr1:数值类型。
  • expr2:数值类型。

嵌套子查询支持

适用于内层查询和外层查询。

适用于

表和超级表。

使用说明

  • expr1expr2 为 NULL,返回 NULL。
  • 皮尔逊相关系数的取值范围为 [-1, 1]。
  • 返回值为 1 表示完全正相关,-1 表示完全负相关,0 表示无线性相关。
  • 只能与普通列、TAG 列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
  • 计算相关系数需要至少两个数据点,否则返回 NULL。

示例所用表与数据(可直接复制执行)

sql 复制代码
-- 建库与使用
CREATE DATABASE IF NOT EXISTS power;
USE power;

-- 智能电表表结构
CREATE STABLE meters (
  ts TIMESTAMP,
  current FLOAT,
  voltage INT,
  phase FLOAT,
  power DOUBLE
) TAGS (
  groupid INT,
  location VARCHAR(64)
);

-- 子表
CREATE TABLE d1001 USING meters TAGS (1, 'California.SanFrancisco');
CREATE TABLE d1002 USING meters TAGS (2, 'California.LosAngeles');
CREATE TABLE d1003 USING meters TAGS (1, 'California.SanFrancisco');

-- 写入数据(模拟不同负载特征)
INSERT INTO d1001 VALUES
  ('2024-01-01 00:00:00.000', 10.3, 220, 30.0, 2266.0),
  ('2024-01-01 00:15:00.000', 12.6, 221, 32.0, 2784.6),
  ('2024-01-01 00:30:00.000', 11.5, 222, 31.0, 2553.0),
  ('2024-01-01 00:45:00.000', 13.2, 223, 33.0, 2943.6),
  ('2024-01-01 01:00:00.000', 14.8, 224, 35.0, 3315.2);

INSERT INTO d1002 VALUES
  ('2024-01-01 00:00:00.000',  9.0, 219, 28.0, 1971.0),
  ('2024-01-01 00:15:00.000', 14.5, 218, 40.0, 3161.0),
  ('2024-01-01 00:30:00.000',  8.2, 220, 25.0, 1804.0),
  ('2024-01-01 00:45:00.000', 15.1, 217, 42.0, 3276.7),
  ('2024-01-01 01:00:00.000',  7.8, 221, 23.0, 1723.8);

INSERT INTO d1003 VALUES
  ('2024-01-01 00:00:00.000', 10.5, 220, 30.0, 2310.0),
  ('2024-01-01 00:15:00.000', 10.8, 221, 31.0, 2386.8),
  ('2024-01-01 00:30:00.000', 11.2, 221, 32.0, 2475.2),
  ('2024-01-01 00:45:00.000', 11.5, 222, 32.0, 2553.0),
  ('2024-01-01 01:00:00.000', 11.9, 222, 33.0, 2641.8);

基础示例

示例 1: 计算两列的相关系数

sql 复制代码
-- 计算电流和电压的相关系数
taos> SELECT CORR(current, voltage) FROM d1001;
   corr(current,voltage)   |
============================
         0.986138358995449 |

示例 2: 验证完全正相关

sql 复制代码
-- 电流与功率应该高度正相关
taos> SELECT CORR(current, power) FROM d1003;
    corr(current,power)    |
============================
         0.999999999999999 |

示例 3: 分析不同变量的相关性

sql 复制代码
-- 计算多个变量对的相关系数
SELECT 
    CORR(current, voltage) AS current_voltage_corr,
    CORR(current, power) AS current_power_corr,
    CORR(voltage, power) AS voltage_power_corr
FROM d1001;
复制代码
 current_voltage_corr | current_power_corr | voltage_power_corr |
======================================================================
     0.986138358995449 |  0.999642229606833 |   0.989643019747214 |

示例 4: 按位置分组统计

sql 复制代码
-- 按位置分组计算电流与功率的相关性
SELECT location,
       CORR(current, power) AS corr_coefficient
FROM meters
GROUP BY location;
复制代码
        location        | corr_coefficient  |
===============================================
 California.LosAngeles  | -0.577350269189626 |
 California.SanFrancisco|  0.998618735938662 |

智能电表场景示例

示例 5: 负载特性分析

目的:通过分析电流与功率的相关性,识别不同类型的用电负载。

sql 复制代码
-- 识别负载类型
SELECT tbname,
       CORR(current, power) AS load_correlation,
       CASE
         WHEN ABS(CORR(current, power)) > 0.95 THEN '线性负载'
         WHEN ABS(CORR(current, power)) > 0.80 THEN '准线性负载'
         WHEN ABS(CORR(current, power)) > 0.60 THEN '非线性负载'
         ELSE '复杂负载'
       END AS load_type
FROM meters
GROUP BY tbname;

应用价值

  • 识别用电设备类型
  • 评估负载稳定性
  • 指导用电管理

示例 6: 电压质量评估

目的:分析电压与功率的相关性,评估供电质量。

sql 复制代码
-- 评估电压稳定性对功率的影响
SELECT location,
       AVG(voltage) AS avg_voltage,
       STDDEV(voltage) AS voltage_variation,
       CORR(voltage, power) AS voltage_power_corr,
       CASE
         WHEN CORR(voltage, power) > 0.9 AND STDDEV(voltage) < 3 THEN '优秀'
         WHEN CORR(voltage, power) > 0.8 AND STDDEV(voltage) < 5 THEN '良好'
         ELSE '需改善'
       END AS quality_grade
FROM meters
GROUP BY location;

应用价值

  • 评估供电质量
  • 识别电压波动问题
  • 优化电网运行

示例 7: 设备异常检测

目的:监测相关系数的突变,及时发现设备异常。

sql 复制代码
-- 检测相关系数异常的电表
SELECT tbname,
       CORR(current, power) AS current_power_corr,
       AVG(current) AS avg_current,
       AVG(power) AS avg_power
FROM meters
GROUP BY tbname
HAVING ABS(CORR(current, power)) < 0.7
ORDER BY current_power_corr ASC;

应用价值

  • 早期故障预警
  • 异常行为识别
  • 设备健康监测

示例 8: 时间段特征分析

目的:分析不同时段电力参数的相关性变化。

sql 复制代码
-- 按时间窗口分析相关性
SELECT _wstart AS time_window,
       CORR(current, voltage) AS corr_i_v,
       CORR(current, power) AS corr_i_p,
       AVG(current) AS avg_current
FROM meters
WHERE ts >= '2024-01-01 00:00:00'
  AND ts < '2024-01-01 02:00:00'
INTERVAL(30m);

应用价值

  • 识别用电规律
  • 发现周期性特征
  • 优化负荷预测

示例 9: 相位角影响分析

目的:分析相位角与其他参数的关系,评估功率因数影响。

sql 复制代码
-- 分析相位角与功率的关系
SELECT location,
       CORR(phase, power) AS phase_power_corr,
       AVG(phase) AS avg_phase,
       STDDEV(phase) AS phase_variation
FROM meters
GROUP BY location;

应用价值

  • 评估功率因数稳定性
  • 指导无功补偿
  • 优化能效管理

示例 10: 多电表协同分析

目的:分析同一区域不同电表的运行协同性。

sql 复制代码
-- 分析同一位置不同电表的功率相关性
SELECT m1.tbname AS meter1,
       m2.tbname AS meter2,
       CORR(m1.power, m2.power) AS power_correlation
FROM 
  (SELECT ts, power, tbname FROM meters WHERE tbname = 'd1001') m1,
  (SELECT ts, power, tbname FROM meters WHERE tbname = 'd1003') m2
WHERE m1.ts = m2.ts;

应用价值

  • 评估区域负荷协同性
  • 识别共同用电模式
  • 优化区域供电

示例 11: 能效评估

目的:通过相关性分析评估用电效率。

sql 复制代码
-- 计算电流与功率效率指标
SELECT location,
       CORR(current, power) AS efficiency_correlation,
       AVG(power / current) AS avg_power_per_amp,
       STDDEV(power / current) AS power_efficiency_variation
FROM meters
WHERE current > 0
GROUP BY location;

应用价值

  • 评估用电效率
  • 识别能效改进机会
  • 指导节能措施

示例 12: 数据质量检测

目的:利用相关性分析检测数据采集质量。

sql 复制代码
-- 检测数据一致性
SELECT tbname,
       CORR(voltage, power) AS data_consistency,
       COUNT(*) AS sample_count,
       CASE
         WHEN CORR(voltage, power) IS NULL THEN '数据不足'
         WHEN ABS(CORR(voltage, power)) < 0.3 THEN '数据异常'
         ELSE '数据正常'
       END AS data_quality
FROM meters
GROUP BY tbname;

应用价值

  • 监测数据质量
  • 识别传感器故障
  • 保证数据可靠性

生产场景应用

场景 A: 智能运维系统

目的:构建基于相关性分析的智能运维预警系统。

应用示例

sql 复制代码
-- 生成设备健康评估报告
SELECT tbname AS meter_id,
       CORR(current, power) AS health_indicator,
       AVG(current) AS avg_current,
       STDDEV(current) AS current_stability,
       CASE
         WHEN CORR(current, power) IS NULL THEN '数据不足'
         WHEN ABS(CORR(current, power)) < 0.6 THEN '需要维护'
         WHEN ABS(CORR(current, power)) < 0.8 THEN '关注'
         ELSE '正常'
       END AS maintenance_status
FROM meters
WHERE ts >= NOW - 24h
GROUP BY tbname
ORDER BY health_indicator ASC;

场景 B: 负荷预测优化

目的:通过相关性分析优化负荷预测模型的特征选择。

应用示例

sql 复制代码
-- 评估预测特征的相关性
SELECT 
    'current-power' AS feature_pair,
    CORR(current, power) AS correlation
FROM meters
WHERE ts >= NOW - 7d
UNION ALL
SELECT 
    'voltage-power' AS feature_pair,
    CORR(voltage, power) AS correlation
FROM meters
WHERE ts >= NOW - 7d
UNION ALL
SELECT 
    'phase-power' AS feature_pair,
    CORR(phase, power) AS correlation
FROM meters
WHERE ts >= NOW - 7d
ORDER BY correlation DESC;

注意事项

  1. 数据要求:计算相关系数需要至少两个有效数据点,数据点过少会导致结果不可靠。

  2. NULL 值处理:任一输入列包含 NULL 值时,该数据点会被忽略,不参与计算。

  3. 线性关系限定:皮尔逊相关系数只能衡量线性相关性,对于非线性关系需要其他分析方法。

  4. 相关不等于因果:高相关系数不意味着存在因果关系,需结合业务逻辑判断。

  5. 异常值敏感性:相关系数对异常值敏感,建议先进行数据清洗。

  6. 样本大小影响:样本量过小可能导致相关系数不稳定,建议至少30个数据点。

  7. 计算精度:返回 DOUBLE 类型,存在浮点精度限制。

  8. 分组计算:在超级表上使用时,建议配合 GROUP BY 按子表或标签分组。


数学关系

基本定义

皮尔逊相关系数 r 的计算公式为:

复制代码
r = Cov(X,Y) / (σ_X × σ_Y)

其中:

  • Cov(X,Y) 是 X 和 Y 的协方差
  • σ_X 是 X 的标准差
  • σ_Y 是 Y 的标准差

取值范围与含义

  • r = 1:完全正相关(X 增大,Y 也增大)
  • r = -1:完全负相关(X 增大,Y 减小)
  • r = 0:无线性相关
  • |r| > 0.8:强相关
  • 0.5 < |r| ≤ 0.8:中等相关
  • 0.3 < |r| ≤ 0.5:弱相关
  • |r| ≤ 0.3:极弱相关或无相关

性质

  • 对称性:CORR(X,Y) = CORR(Y,X)
  • 量纲无关:不受变量单位影响
  • 线性变换不变性:对 X、Y 进行线性变换不改变相关系数

相关函数

  • STDDEV:标准差函数,相关系数计算的基础
  • AVG:平均值函数,协方差计算的基础
  • SUM:求和函数,用于协方差计算

函数意义与价值

数学意义

皮尔逊相关系数是统计学中最常用的相关性度量指标,用于衡量两个变量之间线性关系的强度和方向。它通过标准化协方差,消除了量纲影响,使得不同单位的变量可以进行比较。

实际应用价值

  1. 关系发现

    • 识别变量间的线性关系
    • 发现隐藏的数据模式
    • 验证业务假设
  2. 特征工程

    • 机器学习特征选择
    • 多重共线性检测
    • 模型优化
  3. 异常检测

    • 监测相关性异常变化
    • 识别设备故障前兆
    • 数据质量评估
  4. 质量控制

    • 评估测量一致性
    • 验证设备准确性
    • 监控系统稳定性
  5. 决策支持

    • 指导资源配置
    • 优化运营策略
    • 风险评估

本用户手册提供了 CORR 函数的完整使用说明,特别针对电力系统中的设备监测、质量评估、负荷预测等实际需求,所有示例均符合 TDengine 语法规范,方便用户快速上手并应用于生产环境。


关于 TDengine

TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。

它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。

相关推荐
倔强的石头_8 小时前
【金仓数据库】ksql 指南(四) —— 创建与管理表(KingbaseES 数据存储核心)
数据库
赵渝强老师8 小时前
【赵渝强老师】TiDB PD集群存储的信息
数据库·mysql·tidb
老纪的技术唠嗑局8 小时前
分库分表MyCat 架构迁移 OceanBase | 百丽核心财务系统迁移经验总结与问题汇总
数据库·架构·oceanbase
xrkhy14 小时前
微服务之ShardingSphere
数据库·微服务·oracle
隐语SecretFlow14 小时前
【隐语SecretFlow】由蚂蚁集团牵头制定的“隐私保护计算安全分级”IEEE国际标准已正式发布!
大数据·网络·安全
JIngJaneIL15 小时前
停车场管理|停车预约管理|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·停车场管理系统
煎蛋学姐15 小时前
SSM儿童福利院管理系统ys9w2d07(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·儿童福利院管理系统
sg_knight15 小时前
MySQL 空间索引(SPATIAL)详解:地理位置数据的高效查询利器
数据库·mysql·database·索引·关系型数据库·空间索引·spatial
梦子yumeko16 小时前
第五章Langchain4j之基于内存和redis实现聊天持久化
数据库·redis·缓存