TDengine 数据函数 CORR 用户手册

CORR 函数
语法
CORR(expr1, expr2)
功能说明
计算两列数据之间的皮尔逊相关系数(Pearson correlation coefficient),该数值反映了两个序列之间的线性关系强度和方向。
版本
v3.3.8.0
返回结果类型
DOUBLE
适用数据类型
expr1:数值类型。expr2:数值类型。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 若
expr1或expr2为 NULL,返回 NULL。 - 皮尔逊相关系数的取值范围为 [-1, 1]。
- 返回值为 1 表示完全正相关,-1 表示完全负相关,0 表示无线性相关。
- 只能与普通列、TAG 列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- 计算相关系数需要至少两个数据点,否则返回 NULL。
示例所用表与数据(可直接复制执行)
-- 建库与使用
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: 计算两列的相关系数
-- 计算电流和电压的相关系数
taos> SELECT CORR(current, voltage) FROM d1001;corr(current,voltage) |
============================0.986138358995449 |
示例 2: 验证完全正相关
-- 电流与功率应该高度正相关
taos> SELECT CORR(current, power) FROM d1003;corr(current,power) |
============================0.999999999999999 |
示例 3: 分析不同变量的相关性
-- 计算多个变量对的相关系数
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: 按位置分组统计
-- 按位置分组计算电流与功率的相关性
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: 负载特性分析
目的:通过分析电流与功率的相关性,识别不同类型的用电负载。
-- 识别负载类型
SELECT tbname,CORR(current, power) AS load_correlation,CASEWHEN 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: 电压质量评估
目的:分析电压与功率的相关性,评估供电质量。
-- 评估电压稳定性对功率的影响
SELECT location,AVG(voltage) AS avg_voltage,STDDEV(voltage) AS voltage_variation,CORR(voltage, power) AS voltage_power_corr,CASEWHEN 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: 设备异常检测
目的:监测相关系数的突变,及时发现设备异常。
-- 检测相关系数异常的电表
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: 时间段特征分析
目的:分析不同时段电力参数的相关性变化。
-- 按时间窗口分析相关性
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: 相位角影响分析
目的:分析相位角与其他参数的关系,评估功率因数影响。
-- 分析相位角与功率的关系
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: 多电表协同分析
目的:分析同一区域不同电表的运行协同性。
-- 分析同一位置不同电表的功率相关性
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: 能效评估
目的:通过相关性分析评估用电效率。
-- 计算电流与功率效率指标
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: 数据质量检测
目的:利用相关性分析检测数据采集质量。
-- 检测数据一致性
SELECT tbname,CORR(voltage, power) AS data_consistency,COUNT(*) AS sample_count,CASEWHEN 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: 智能运维系统
目的:构建基于相关性分析的智能运维预警系统。
应用示例:
-- 生成设备健康评估报告
SELECT tbname AS meter_id,CORR(current, power) AS health_indicator,AVG(current) AS avg_current,STDDEV(current) AS current_stability,CASEWHEN 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: 负荷预测优化
目的:通过相关性分析优化负荷预测模型的特征选择。
应用示例:
-- 评估预测特征的相关性
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;
注意事项
-
数据要求:计算相关系数需要至少两个有效数据点,数据点过少会导致结果不可靠。
-
NULL 值处理:任一输入列包含 NULL 值时,该数据点会被忽略,不参与计算。
-
线性关系限定:皮尔逊相关系数只能衡量线性相关性,对于非线性关系需要其他分析方法。
-
相关不等于因果:高相关系数不意味着存在因果关系,需结合业务逻辑判断。
-
异常值敏感性:相关系数对异常值敏感,建议先进行数据清洗。
-
样本大小影响:样本量过小可能导致相关系数不稳定,建议至少30个数据点。
-
计算精度:返回 DOUBLE 类型,存在浮点精度限制。
-
分组计算:在超级表上使用时,建议配合 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:求和函数,用于协方差计算
函数意义与价值
数学意义
皮尔逊相关系数是统计学中最常用的相关性度量指标,用于衡量两个变量之间线性关系的强度和方向。它通过标准化协方差,消除了量纲影响,使得不同单位的变量可以进行比较。
实际应用价值
-
关系发现
- 识别变量间的线性关系
- 发现隐藏的数据模式
- 验证业务假设
-
特征工程
- 机器学习特征选择
- 多重共线性检测
- 模型优化
-
异常检测
- 监测相关性异常变化
- 识别设备故障前兆
- 数据质量评估
-
质量控制
- 评估测量一致性
- 验证设备准确性
- 监控系统稳定性
-
决策支持
- 指导资源配置
- 优化运营策略
- 风险评估
本用户手册提供了 CORR 函数的完整使用说明,特别针对电力系统中的设备监测、质量评估、负荷预测等实际需求,所有示例均符合 TDengine 语法规范,方便用户快速上手并应用于生产环境。
关于 TDengine
TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。
它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。
