【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
英文地址,請注明出處:http://en.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;自此網絡穩定性的評估廣受大家歡迎。本系列將介紹網絡穩定性之魯棒性…