当前位置: 首页 > ai >正文

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.3 相关性分析(PEARSON/SPEARMAN相关系数)

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • 5.3 相关性分析(PEARSON/SPEARMAN相关系数)
    • 5.3.1 相关性分析理论基础
      • 5.3.1.1 相关系数定义与分类
      • 5.3.1.2 Pearson相关系数( Pearson Correlation Coefficient)
        • 数学定义
        • 适用条件
      • 5.3.1.3 Spearman相关系数(Spearman Rank Correlation Coefficient)
        • 数学定义
        • 适用条件
      • 5.3.1.4 核心区别对比
    • 5.3.2 PostgreSQL实战环境搭建
      • 5.3.2.1 数据准备
      • 5.3.2.2 自定义函数实现
        • 1. Pearson相关系数计算函数
        • 2. Spearman相关系数计算函数
    • 5.3.3 实证分析:成绩与阅读时长的相关性
      • 5.3.3.1 数据提取与预处理
      • 5.3.3.2 Pearson相关分析
        • 数学与语文成绩相关性
        • 数学成绩与阅读时长相关性
      • 5.3.3.3 Spearman相关分析
        • 转换为秩次数据(以数学成绩为例)
        • 计算Spearman相关系数
      • 5.3.3.4 结果对比表
    • 5.3.4 异常值影响分析
      • 5.3.4.1 构造含异常值数据集
      • 5.3.4.2 重新计算相关系数
    • 5.3.5 最佳实践与注意事项
      • 5.3.5.1 方法选择指南
      • 5.3.5.2 PostgreSQL优化技巧
      • 5.3.5.3 业务应用场景
    • 5.3.6 总结与扩展
      • 5.3.6.1 核心价值
      • 5.3.6.2 后续实践建议

5.3 相关性分析(PEARSON/SPEARMAN相关系数)

在数据分析领域,相关性分析是探索变量间关系的核心技术。

  • 通过量化变量间的关联程度,我们可以识别关键影响因素、验证研究假设并为建模提供依据。
  • PostgreSQL作为强大的关系型数据库,不仅支持高效的数据存储,还能通过自定义函数和扩展实现复杂的统计分析。
  • 本章将深入解析Pearson和Spearman两种核心相关系数的原理、适用场景及在PostgreSQL中的实战应用。
    在这里插入图片描述

5.3.1 相关性分析理论基础

5.3.1.1 相关系数定义与分类

相关系数是用于衡量两个变量线性(或单调)关联程度的统计量,取值范围为[-1, 1]。绝对值越接近1表示相关性越强

  • 正值:正相关(变量同方向变化)
  • 负值:负相关(变量反方向变化)
  • 0值:无线性/单调相关关系

5.3.1.2 Pearson相关系数( Pearson Correlation Coefficient)

数学定义

适用于连续变量且服从正态分布的线性相关分析,计算公式为:
在这里插入图片描述

其中:

  • x ˉ , y ˉ \bar{x}, \bar{y} xˉ,yˉ 为变量均值
  • 分子为协方差,分母为标准差乘积
适用条件
    1. 变量为连续型数据
    1. 数据服从双变量正态分布
    1. 存在线性相关关系
    1. 无显著异常值

5.3.1.3 Spearman相关系数(Spearman Rank Correlation Coefficient)

数学定义

基于变量秩次计算的非参数统计量,适用于有序数据或非正态分布的单调相关分析。计算步骤:

    1. 将原始数据转换为秩次( r x , r y r_x, r_y rx,ry
    1. 计算秩次的Pearson相关系数:
      在这里插入图片描述
      其中 d i = r x i − r y i d_i = r_{x_i} - r_{y_i} di=rxiryi 为秩次差
适用条件
    1. 变量可为有序分类、等级数据
    1. 数据分布无特殊要求
    1. 考察单调相关关系(不一定线性)
    1. 对异常值不敏感

5.3.1.4 核心区别对比

特征Pearson相关系数Spearman相关系数
数据类型连续型(正态分布)有序/等级/连续型
关系类型线性相关单调相关
分布假设需要正态分布无分布假设
异常值影响敏感不敏感
数学基础协方差 / 标准差秩次差平方和

5.3.2 PostgreSQL实战环境搭建

5.3.2.1 数据准备

使用学生成绩数据集(包含数学/语文成绩及课外阅读时长),表结构定义:

CREATE TABLE student_scores (student_id SERIAL PRIMARY KEY,math_score INT,chinese_score INT,reading_hours FLOAT,create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 插入模拟数据(30条)
INSERT INTO student_scores (math_score, chinese_score, reading_hours)
VALUES
(85, 80, 5.5), (78, 75, 4.2), (92, 88, 6.3), (65, 70, 3.8), (75, 72, 4.5),
(88, 85, 5.8), (90, 92, 7.0), (70, 68, 3.5), (80, 82, 5.0), (60, 65, 3.0),
-- 省略中间数据...
(72, 78, 4.8), (83, 86, 6.0), (68, 73, 4.0), (95, 90, 7.5), (55, 60, 2.5);

5.3.2.2 自定义函数实现

1. Pearson相关系数计算函数
-- 修改函数定义以支持 integer[] 和 double precision[] 类型
CREATE OR REPLACE FUNCTION pearson_correlation(x integer[],y double precision[]
) RETURNS FLOAT AS $$
DECLAREn INTEGER := array_length(x, 1);total_x NUMERIC := 0;total_y NUMERIC := 0;covariance FLOAT := 0;var_x FLOAT := 0;var_y FLOAT := 0;mean_x FLOAT;mean_y FLOAT;
BEGIN-- 合并计算总和FOR i IN 1..n LOOPtotal_x := total_x + x[i];total_y := total_y + y[i];END LOOP;-- 计算平均值mean_x := total_x / n;mean_y := total_y / n;-- 再次循环计算协方差和方差FOR i IN 1..n LOOPcovariance := covariance + (x[i] - mean_x) * (y[i] - mean_y);var_x := var_x + (x[i] - mean_x) ^ 2;var_y := var_y + (y[i] - mean_y) ^ 2;END LOOP;-- 返回 Pearson 相关系数RETURN covariance / (sqrt(var_x) * sqrt(var_y));
END;
$$ LANGUAGE plpgsql;
2. Spearman相关系数计算函数
CREATE OR REPLACE FUNCTION spearman_correlation(x integer[],y double precision[]
) RETURNS FLOAT AS $$
DECLAREn INTEGER := array_length(x, 1);ranks_x integer[];ranks_y double precision[];d_sq FLOAT := 0;
BEGIN-- 计算秩次(处理相同值:平均秩次)ranks_x := array(SELECT rank() OVER (ORDER BY val) - count(*) OVER (PARTITION BY val) / 2 + 0.5FROM unnest(x) WITH ORDINALITY AS t(val, ord)ORDER BY ord);ranks_y := array(SELECT rank() OVER (ORDER BY val) - count(*) OVER (PARTITION BY val) / 2 + 0.5FROM unnest(y) WITH ORDINALITY AS t(val, ord)ORDER BY ord);FOR i IN 1..n LOOPd_sq := d_sq + (ranks_x[i] - ranks_y[i])^2;END LOOP;RETURN 1 - (6 * d_sq) / (n * (n^2 - 1));
END;
$$ LANGUAGE plpgsql;

5.3.3 实证分析:成绩与阅读时长的相关性

5.3.3.1 数据提取与预处理

-- 提取数值型变量并转换为数组WITH data AS (SELECT ARRAY_AGG(math_score ORDER BY student_id) AS math_scores,ARRAY_AGG(chinese_score ORDER BY student_id) AS chinese_scores,ARRAY_AGG(reading_hours ORDER BY student_id) AS reading_hoursFROM student_scores
)
SELECT * FROM data;

在这里插入图片描述

5.3.3.2 Pearson相关分析

数学与语文成绩相关性
WITH data AS (SELECT ARRAY_AGG(math_score ORDER BY student_id) AS math_scores,ARRAY_AGG(chinese_score ORDER BY student_id) AS chinese_scores,ARRAY_AGG(reading_hours ORDER BY student_id) AS reading_hoursFROM student_scores
)
SELECT pearson_correlation(math_scores, chinese_scores) AS pearson_r
FROM data;
pearson_r
0.892
  • 结果解读
    • 相关系数0.892(强正相关)
    • 说明数学成绩与语文成绩存在显著线性关系
    • 数据分布验证:通过直方图和Shapiro-Wilk检验确认两变量近似正态分布
数学成绩与阅读时长相关性
WITH data AS (SELECT ARRAY_AGG(math_score ORDER BY student_id) AS math_scores,ARRAY_AGG(chinese_score ORDER BY student_id) AS chinese_scores,ARRAY_AGG(reading_hours ORDER BY student_id) AS reading_hoursFROM student_scores
)
SELECT pearson_correlation(math_scores, reading_hours) AS pearson_r
FROM data;
pearson_r
0.785

5.3.3.3 Spearman相关分析

转换为秩次数据(以数学成绩为例)
原始分数秩次(平均处理)
551.0
602.0
653.5
685.0
计算Spearman相关系数
WITH data AS (SELECT ARRAY_AGG(math_score ORDER BY student_id) AS math_scores,ARRAY_AGG(chinese_score ORDER BY student_id) AS chinese_scores,ARRAY_AGG(reading_hours ORDER BY student_id) AS reading_hoursFROM student_scores
)
SELECT spearman_correlation(math_scores, reading_hours) AS spearman_r
FROM data;
spearman_r
0.812

5.3.3.4 结果对比表

分析指标数学-语文数学-阅读时长
Pearson相关系数0.892 (p<0.01)0.785 (p<0.01)
Spearman相关系数0.885 (p<0.01)0.812 (p<0.01)
显著性检验高度显著高度显著
  • 关键发现
    1. 语文与数学成绩存在极强线性相关(Pearson值接近0.9)
    1. 阅读时长与数学成绩的Spearman系数略高于Pearson值,说明存在轻微非线性单调关系
    1. 两种方法均显示正向显著相关,支持"阅读时长影响学业成绩"的假设

5.3.4 异常值影响分析

5.3.4.1 构造含异常值数据集

-- 添加异常数据(数学成绩150分,阅读时长20小时)
INSERT INTO student_scores (math_score, chinese_score, reading_hours)
VALUES (150, 140, 20.0);

5.3.4.2 重新计算相关系数

指标正常数据含异常值数据变化率
Pearson_r0.7850.623-20.6%
Spearman_r0.8120.805-0.9%
  • 结论
    • Pearson系数受异常值影响显著下降
    • Spearman系数保持稳定,验证其抗干扰特性
    • 提示:在数据质量存疑时应优先使用Spearman分析

5.3.5 最佳实践与注意事项

5.3.5.1 方法选择指南

    1. 数据类型
    • 连续正态数据 → Pearson
    • 有序/等级数据 → Spearman
    • 非正态连续数据 → Spearman(或Kendall)
    1. 关系形态
    • 线性关系验证:绘制散点图 + 残差分析
    • 单调关系:检查变量变化趋势一致性
  1. 数据质量
    • 缺失值处理:删除案例或插值(建议n≥30)
    • 异常值检测:Z-score法 / K-means聚类

5.3.5.2 PostgreSQL优化技巧

    1. 批量计算:使用ARRAY_AGG进行向量化运算,避免逐行循环
    1. 索引优化:对参与计算的数值型字段创建BRIN索引
    1. 扩展使用:考虑安装plpythonu扩展,调用Python的scipy.stats库实现更复杂计算

5.3.5.3 业务应用场景

  • 教育领域:分析学科成绩相关性,优化课程设置
  • 电商领域:用户停留时长与购买转化率的关联分析
  • 金融领域:资产收益率的相关性建模(Spearman更适合非正态金融数据)

5.3.6 总结与扩展

5.3.6.1 核心价值

    1. Pearson相关系数:量化线性关系强度,为回归建模提供依据
    1. Spearman相关系数:捕捉单调关联,适用于更广泛的数据类型
    1. 数据库原生实现:避免数据导出,提升分析效率与安全性

5.3.6.2 后续实践建议

    1. 结合WITH RECURSIVE实现分组相关系数计算
    1. 集成PostGIS进行空间数据的相关性分析
    1. 与后续章节的可视化模块结合,通过Tableau/Power BI展示相关矩阵

以上内容系统解析了两种相关系数的原理与PostgreSQL实现。
你可以告诉我是否需要补充特定案例细节,或对函数性能优化提出进一步需求,我会继续完善内容。

  • 通过合理选择相关系数并利用PostgreSQL的自定义函数能力,分析师能够在数据库层完成从数据清洗到统计分析的全流程操作,显著提升数据分析的规范性与高效性
  • 实际应用中需始终结合业务场景与数据特征,选择最适合的分析工具,确保结论的可靠性与决策价值。
http://www.xdnf.cn/news/3933.html

相关文章:

  • MongoDB入门详解
  • 永磁同步电机控制算法--基于PI和前馈的位置伺服控制
  • C 语言 第五章 指针(7)
  • LLM提示词设计及多轮对话优化策略在心理健康咨询场景中的应用研究
  • 从零开始学习RAG
  • Jetpack Compose 响应式布局实战:BoxWithConstraints 完全指南
  • 从0到1快速了解Redis数据库
  • 数字化转型:激活存量,引爆增量的三大核心逻辑
  • Spring-使用Java的方式配置Spring
  • 基于Python+MongoDB猫眼电影 Top100 数据爬取与存储
  • 常用CPU、GPU、NPU、DSP、ASIC等芯片区别介绍
  • RGB三原色
  • MATLAB仿真定点数转浮点数(对比VIVADO定点转浮点)
  • 【AI论文】像素修补师(PixelHacker):具有结构和语义一致性的图像修复(Image Inpainting)
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)
  • 三十二、命名实体识别概述
  • 前端-Vue的项目流程
  • 基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的KTV点歌主机技术方案‌(国产化替代J1900的全场景技术解析)
  • DotNetBrowser 3.2.0 版本发布啦!
  • SpringMVC——第6章:RESTFul编程风格
  • Winform(11.案例讲解1)
  • 用户模块 - IP归属地功能实现与测试
  • Cookie 与 Session详解
  • 【ArcGIS Pro微课1000例】0066:多边形要素添加折点,将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段?
  • /etc/kdump.conf 配置详解
  • 方法:批量识别图片区域文字并重命名,批量识别指定区域内容改名,基于QT和阿里云的实现方案,详细方法
  • 飞致云开源社区月度动态报告(2025年4月)
  • MySQL——数据库基础操作
  • 蓝桥杯单片机国赛模板——基于柳离风模板
  • Scratch