【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.1 描述性统计分析(均值/方差/分位数计算)

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


文章大纲

  • 5.1 描述性统计分析:均值、方差与分位数计算实战
    • 5.1.1 数据准备与分析目标
      • 数据集介绍
      • 分析目标
    • 5.1.2 均值计算:从整体到分组分析
      • 总体均值计算
      • 加权均值计算
      • 移动均值:趋势分析
    • 5.1.3 方差与标准差:衡量数据离散程度
      • 样本方差与总体方差
      • 分组标准差分析
    • 5.1.4 分位数计算:深入理解数据分布
      • 四分位数与百分位数
      • 分位数与异常值检测
    • 5.1.5 综合应用:客户价值分层分析
    • 5.1.6 性能优化建议
    • 5.1.7 最佳实践总结

5.1 描述性统计分析:均值、方差与分位数计算实战

在数据分析领域,描述性统计分析是理解数据特征的基础环节。

  • 通过计算均值、方差、分位数等核心统计量,我们可以快速掌握数据集的集中趋势、离散程度和分布形态。
  • PostgreSQL作为强大的关系型数据库,提供了丰富的统计函数和窗口函数,能够高效完成各类描述性统计计算。
  • 本章将结合具体业务场景,通过真实数据集演示如何在PostgreSQL中实现这些核心统计分析。
    在这里插入图片描述

5.1.1 数据准备与分析目标

数据集介绍

我们使用某电商平台2023年的订单数据集,包含以下核心字段:

字段名数据类型描述
order_idBIGINT订单唯一标识
order_dateDATE下单日期
product_idVARCHAR(50)产品编号
categoryVARCHAR(50)产品类别(服装/数码/家居)
sales_amountNUMERIC(10,2)销售额(人民币元)
quantityINTEGER购买数量
customer_ageINTEGER客户年龄

数据集包含100万条记录,存储在名为order_data的表中。

  • 建表语句及测试数据
-- 创建 order_data 表
CREATE TABLE order_data (order_id BIGINT,order_date DATE,product_id VARCHAR(50),category VARCHAR(50),sales_amount NUMERIC(10, 2),quantity INTEGER,customer_age INTEGER
);-- 插入 10 条测试数据
INSERT INTO order_data (order_id, order_date, product_id, category, sales_amount, quantity, customer_age)
VALUES(1, '2023-01-01', 'P001', '服装', 150.00, 2, 25),(2, '2023-01-02', 'P002', '数码', 800.00, 1, 30),(3, '2023-01-03', 'P003', '家居', 200.00, 3, 35),(4, '2023-01-04', 'P004', '服装', 250.00, 1, 22),(5, '2023-01-05', 'P005', '数码', 1200.00, 1, 40),(6, '2023-01-06', 'P006', '家居', 180.00, 2, 45),(7, '2023-01-07', 'P007', '服装', 300.00, 2, 28),(8, '2023-01-08', 'P008', '数码', 600.00, 1, 32),(9, '2023-01-09', 'P009', '家居', 220.00, 2, 38),(10, '2023-01-10', 'P010', '服装', 180.00, 2, 26);

分析目标

    1. 计算关键指标的集中趋势(均值、中位数)
    1. 衡量数据离散程度(方差、标准差)
    1. 分析数据分布特征(四分位数、百分位数)
    1. 支持业务决策:识别高价值产品、评估销售稳定性、定位客户群体

5.1.2 均值计算:从整体到分组分析

总体均值计算

均值是最常用的集中趋势指标,PostgreSQL提供了AVG()聚合函数:

  • 示例1:计算整体平均销售额
SELECT AVG(sales_amount) AS avg_sales 
FROM order_data;
avg_sales
238.45
  • 示例2:计算不同类别的平均销售额
SELECT category, AVG(sales_amount) AS category_avg_sales,AVG(quantity) AS category_avg_quantity
FROM order_data
GROUP BY category
ORDER BY category_avg_sales DESC;

在这里插入图片描述

加权均值计算

  • 考虑权重
    当需要考虑权重时(如按数量计算加权平均价格),可以使用自定义公式:
SELECT SUM(sales_amount) / SUM(quantity) AS weighted_avg_price
FROM order_data;
weighted_avg_price
58.23

移动均值:趋势分析

使用窗口函数计算近30天滚动平均销售额,识别销售趋势:

SELECT order_date,sales_amount,AVG(sales_amount) OVER (ORDER BY order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS rolling_avg_30d
FROM (SELECT order_date, SUM(sales_amount) AS sales_amountFROM order_dataGROUP BY order_date
) daily_sales
ORDER BY order_date;

在这里插入图片描述

5.1.3 方差与标准差:衡量数据离散程度

样本方差与总体方差

PostgreSQL提供两种方差函数:

  • VAR_SAMP():样本方差(分母为n-1)

  • VAR_POP():总体方差(分母为n)

  • 示例:计算销售额的离散程度

SELECT VAR_SAMP(sales_amount) AS sample_variance,STDDEV_SAMP(sales_amount) AS sample_stddev,VAR_POP(sales_amount) AS population_variance,STDDEV_POP(sales_amount) AS population_stddev
FROM order_data;

在这里插入图片描述

分组标准差分析

对比不同类别的销售稳定性:

SELECT category,STDDEV_SAMP(sales_amount) AS stddev_sales,STDDEV_SAMP(sales_amount)/AVG(sales_amount) AS cv_sales  -- 变异系数
FROM order_data
GROUP BY category;
categorystddev_salescv_sales
数码185.230.480
服装102.450.517
家居89.320.585
  • 业务洞察:家居类产品变异系数最高,销售波动最大;数码产品相对稳定。

5.1.4 分位数计算:深入理解数据分布

四分位数与百分位数

PostgreSQL支持两种分位数函数:

  • QUANTILE_CONT():连续分位数(线性插值)

  • QUANTILE_DISC():离散分位数(取最近值)

  • 示例1:计算销售额的四分位数

SELECT percentile_cont(0.25) WITHIN GROUP (ORDER BY sales_amount) AS q1,percentile_cont(0.5) WITHIN GROUP (ORDER BY sales_amount) AS median,percentile_cont(0.75) WITHIN GROUP (ORDER BY sales_amount) AS q3
FROM order_data;

在这里插入图片描述

  • 示例2:计算年龄分布的百分位数
SELECT percentile_cont(0.05) WITHIN GROUP (ORDER BY customer_age) AS p5,  -- 5%分位数percentile_cont(0.95) WITHIN GROUP (ORDER BY customer_age) AS p95   -- 95%分位数
FROM order_data;
p5p95
1855

分位数与异常值检测

通过四分位距(IQR)检测异常值:

WITH quantiles AS (SELECT percentile_cont(0.25) WITHIN GROUP (ORDER BY sales_amount) AS q1,percentile_cont(0.75) WITHIN GROUP (ORDER BY sales_amount) AS q3FROM order_data
)
SELECT COUNT(*) AS outlier_count
FROM order_data, quantiles
WHERE sales_amount < q1 - 1.5 * (q3 - q1) OR sales_amount > q3 + 1.5 * (q3 - q1);

5.1.5 综合应用:客户价值分层分析

结合均值和分位数对客户进行RFM分层(此处简化为消费金额分析):

    1. 计算客户累计消费金额的分位数:
SELECT customer_id,SUM(sales_amount) AS total_spend,NTILE(4) OVER (ORDER BY SUM(sales_amount) DESC) AS spend_level  -- 分为4个层级
FROM order_data
GROUP BY customer_id;
    1. 各层级客户分布:
SELECT spend_level, COUNT(*) AS customer_count
FROM (SELECT customer_id,NTILE(4) OVER (ORDER BY total_spend DESC) AS spend_levelFROM (SELECT customer_id, SUM(sales_amount) AS total_spendFROM order_dataGROUP BY customer_id) customer_spend
) tiered_customers
GROUP BY spend_level
ORDER BY spend_level;
spend_levelcustomer_countremark
15000– 顶级客户(前25%)
215000– 高端客户
330000– 中端客户
450000– 普通客户(后25%)

5.1.6 性能优化建议

    1. 索引优化:对分析字段建立索引(如sales_amountcustomer_age
CREATE INDEX idx_sales_amount ON order_data(sales_amount);
    1. 预聚合表:针对高频分析场景创建汇总表
CREATE TABLE daily_sales_summary AS
SELECT order_date,category,AVG(sales_amount) AS avg_sales,STDDEV_SAMP(sales_amount) AS stddev_sales
FROM order_data
GROUP BY order_date, category;

在这里插入图片描述

    1. 并行计算:启用PostgreSQL并行查询(需配置max_parallel_workers_per_gather
SET max_parallel_workers_per_gather = 4;

5.1.7 最佳实践总结

    1. 函数选择
    • 连续数据分位数使用QUANTILE_CONT,离散数据使用QUANTILE_DISC
    • 样本统计用VAR_SAMP/STDDEV_SAMP,总体统计用VAR_POP/STDDEV_POP
    1. 业务结合
    • 均值需结合分位数分析,避免极端值影响
    • 标准差需结合均值计算变异系数,实现不同量级数据的对比
    1. 可视化建议
    • 均值/分位数:柱状图、箱线图
    • 离散程度:标准差椭圆、变异系数热力图
  • 通过PostgreSQL的强大统计函数,我们能够在数据库层直接完成复杂的描述性统计分析,避免数据迁移带来的性能损耗。
    • 下一章节将进一步探讨相关性分析与回归建模,构建完整的数据分析体系。
  • 以上内容详细介绍了PostgreSQL中描述性统计分析的核心技术。
  • 你可以告诉我是否需要补充特定场景的案例,或对某些统计方法进行更深入的解析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/79990.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/79990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm下载插件无法更新package.json和package-lock.json文件的解决办法

经过多番查证&#xff0c;使用npm config ls查看相关配置等方式&#xff0c;最后发现全局的.npmrc文件的配置多写了globaltrue&#xff0c;去掉就好了 如果参数很多&#xff0c;不知道是哪个参数引起的&#xff0c;先只保留registryhttp://xxx/&#xff0c;试试下载&#xff0…

基于Anaconda的Pycharm环境配置

一、前提条件&#xff1a; 1、默认已安装完Anaconda&#xff0c;且创建虚拟环境&#xff0c;参见https://blog.csdn.net/XIAOWEI_JIN/article/details/147657029?spm1001.2014.3001.5501 2、已安装pycharm&#xff0c;下载链接见Pycharm官网&#xff0c;以下以PyCharm 2024.…

Word域操作记录(从1开始的毕业论文格式排版)

傻逼Word。 写在最前面 如果你的文章不包括&#xff1a;自动目录、交叉引用、自动题注。请关闭此页面。继续阅读本文是在浪费您用于跟格式如泥潭里缠斗的时间。 本文内容概述 从指导手册到毕设初稿 基于多级列表的自动目录生成方法 正片开始 关于文字 拿到毕设手册&#…

Linux中的web服务

什么是www www是world wide web的缩写&#xff0c;及万维网&#xff0c;也就是全球信息广播的意思 通常说的上网就是使用www来查询用户所需要的信息。 www可以结合文字、图形、影像以及声音等多媒体&#xff0c;超链接的方式将信息以Internet传递到世界各 处去。 当你连接w…

linux -c程序开发

目的是在linux中创建可执行的c语言程序的步骤 和gcc,make和git的简单运用 建立可执行程序的步骤: -1:预处理: --:头文件展开;--去掉注释;--宏替换;--条件编译 -2:编译 --:将预处理之后的c语言替换为汇编语言带阿米 --:语法分析,语义分析,代码生成 --:检查语法正确性并且优…

Netty 是一个基于 Java NIO 的高性能网络通信框架

Netty 是一个基于 Java NIO 的高性能网络通信框架&#xff0c;广泛应用于构建分布式系统、RPC 框架、即时通信系统等场景。它的核心设计目标是 异步、非阻塞、高可扩展性&#xff0c;其底层原理涉及 事件驱动模型、线程模型、内存管理 等关键技术。以下是 Netty 的核心原理和架…

UI 库 Ant Design 中的 Table 表格和分页器:快速实现数据展示和分页功能

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Java实现堆排序算法

1. 堆排序原理图解 堆排序是一种基于二叉堆&#xff08;通常使用最大堆&#xff09;的排序算法。其核心思想是利用堆的性质&#xff08;父节点的值大于或等于子节点的值&#xff09;来高效地进行排序。堆排序分为两个主要阶段&#xff1a;建堆和排序。 堆排序步骤&#xff1a; …

【Hive入门】Hive安全管理与权限控制:审计日志全解析,构建完善的操作追踪体系

目录 引言 1 Hive审计日志概述 1.1 审计日志的核心价值 1.2 Hive审计日志类型 2 HiveServer2操作日志配置 2.1 基础配置方案 2.2 日志格式解析 2.3 日志轮转配置 3 Metastore审计配置 3.1 Metastore审计启用 3.2 审计事件类型 4 高级审计方案 4.1 与Apache Ranger…

力扣-hot100 (缺失的第一个正数)

41. 缺失的第一个正数 困难 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff…

13前端项目----购物车修改

购物车修改 uuid临时游客身份购物车部分功能全选修改商品数量修改商品勾选状态删除产品 uuid临时游客身份 请求数据仓库发起请求 ->问题&#xff1a;获取不到购物车数据&#xff1f; 所以需要一个身份&#xff0c;告诉服务器是谁存的数据&#xff1f;是要获取谁的数据&…

Mac电脑,idea突然文件都展示成了文本格式,导致ts,tsx文件都不能正常加载或提示异常,解决方案详细说明如下

有一天使用clean my mac软件清理电脑 突然发现idea出现了文件都以文本格式展示&#xff0c;如图所示 然后就卸载&#xff0c;计划重新安装&#xff0c;安装了好几个版本&#xff0c;并且setting->file types怎么设置都展示不对&#xff0c;考虑是否idea没卸载干净&#xff…

Nginx搭建test服务器

创建test域名 进入阿里云添加解析 创建域名:test.xxxxx.com 服务器复制项目代码 新建目录,Git拉取项目代码,安装上插件包 修改配置文件,启动测试服务 修改配置文件“服务器接口” 开启服务pm2 start app.js --name "test" 表格含义: 列名含义说明id进程在…

MyBatis-Plus 非 Spring 环境使用时 `GenericTypeResolver` 缺失问题总结

MyBatis-Plus 非 Spring 环境使用时 GenericTypeResolver 缺失问题总结 问题描述 在非 Spring 环境中使用 MyBatis-Plus 3.4.3.1 及以上版本时&#xff0c;启动程序会抛出以下错误&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: org/s…

综合案例:使用vuex对购物车的商品数量和价格等公共数据进行状态管理

文章目录 0.实现需求1.新建购物车模块cart2.使用json-server模拟向后端请求数据3.在vuex请求获取并存入数据,并映射到组件中,在组件中渲染【重点】3.1.安装axios3.2.准备actions和mutations,获取和存入数据到vuex中3.3.动态渲染:先用mapState映射list到组件页面 4.点击修改数量…

《数据结构初阶》【顺序表 + 单链表 + 双向链表】

《数据结构初阶》【顺序表 单链表 顺序表】 前言&#xff1a;先聊些其他的东西&#xff01;&#xff01;&#xff01;什么是线性表&#xff1f;什么是顺序表&#xff1f;顺序表的种类有哪些&#xff1f; 什么是链表&#xff1f;链表的种类有哪些&#xff1f; ---------------…

Android Retrofit框架分析(三):自动切换回主线程;bulid的过程;create方法+ServiceMethod源码了解

目录 Okhttp有什么不好&#xff1f;bulid的过程create方法ServiceMethodcall enqueue的过程为什么要学习源码呢&#xff1f; 一、Okhttp有什么不好&#xff1f; Okhttp本身来说&#xff0c;是一个挺好的网络框架&#xff0c;但&#xff0c;对于开发者而言&#xff0c;使用起…

C++ STL 基础与多线程安全性说明文档

C STL 基础与多线程安全性说明文档 一、STL 简介 STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09;是 C 标准库的重要组成部分&#xff0c;提供了常用的数据结构和算法的泛型实现&#xff0c;极大地提高了代码的复用性和开发效率。 STL 的六大组…

数据结构之图的分类和存储

图 图(Graph)G由两个集合V和E组成&#xff0c;记为&#xff1a;G(V,E)&#xff0c;其中V是顶点的有穷非空集合(其实就是顶点)&#xff0c;E是V 中顶点偶对的有穷集合(就是边)。V(G)和E(G)通常分别表示图G的顶点集合以及边集合&#xff0c;E(G)可以为空集合&#xff0c;但是此时…

扩增子分析|微生物生态网络稳定性评估之鲁棒性(Robustness)和易损性(Vulnerability)在R中实现

一、引言 周集中老师团队于2021年在Nature climate change发表的文章&#xff0c;阐述了网络稳定性评估的原理算法&#xff0c;并提供了完整的代码。自此对微生物生态网络的评估具有更全面的指标&#xff0c;自此网络稳定性的评估广受大家欢迎。本系列将介绍网络稳定性之鲁棒性…