Ubuntu環境下通過pgAdmin進行數據清洗的步驟
數據清洗是提升數據質量的核心環節,主要包括缺失值處理、異常值修正、重復數據去重、格式規范化等操作。在Ubuntu系統中,可通過pgAdmin的SQL控制臺或查詢工具直接執行SQL語句完成清洗,以下是具體方法:
NULL
值。-- 數值字段(如“工資”)用中位數填充
UPDATE 表名 SET 工資 = (SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 工資) FROM 表名)
WHERE 工資 IS NULL;
-- 分類型字段(如“性別”)用眾數填充
UPDATE 表名 SET 性別 = (SELECT MODE() WITHIN GROUP (ORDER BY 性別) FROM 表名)
WHERE 性別 IS NULL;
DELETE FROM 表名 WHERE 工資 IS NULL OR 性別 IS NULL;
WHERE
子句篩選異常值,并用合理值替換(如年齡超過100歲設為中位數,工資為負數設為中位數)。-- 年齡異常(>100歲)修正
UPDATE 表名 SET 年齡 = (SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 年齡) FROM 表名)
WHERE 年齡 > 100;
-- 工資異常(<0)修正
UPDATE 表名 SET 工資 = (SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 工資) FROM 表名)
WHERE 工資 < 0;
DELETE FROM 表名
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM 表名
GROUP BY 姓名, 性別, 年齡, 工資, 入職日期 -- 列出所有字段,確保唯一性
);
注:ctid
是PostgreSQL的系統列,表示行的物理位置,用于唯一標識行。DATE
或TIMESTAMP
類型(如“2022-01-05”“20220110”統一為YYYY-MM-DD
)。UPDATE 表名 SET 入職日期 = TO_DATE(入職日期, 'YYYYMMDD')
WHERE 入職日期 ~ '^\d{8}$'; -- 匹配8位數字格式(如20220110)
UPDATE 表名 SET 入職日期 = TO_DATE(入職日期, 'YYYY-MM-DD')
WHERE 入職日期 ~ '^\d{4}-\d{2}-\d{2}$'; -- 匹配YYYY-MM-DD格式
NUMERIC
類型(如“5000”“6000”轉為數值)。UPDATE 表名 SET 工資 = CAST(工資 AS NUMERIC)
WHERE 工資 ~ '^\d+(\.\d+)?$'; -- 匹配整數或小數
UPDATE 表名 SET 性別 = CASE
WHEN 性別 IN ('男', 'male') THEN 'M'
WHEN 性別 = '女' THEN 'F'
ELSE 性別
END;
執行清洗操作后,通過SELECT
語句檢查數據是否符合預期:
-- 檢查缺失值是否處理完成
SELECT COUNT(*) FROM 表名 WHERE 工資 IS NULL OR 性別 IS NULL;
-- 檢查異常值是否修正
SELECT * FROM 表名 WHERE 年齡 > 100 OR 工資 < 0;
-- 檢查重復數據是否去重
SELECT 姓名, 性別, 年齡, COUNT(*)
FROM 表名
GROUP BY 姓名, 性別, 年齡
HAVING COUNT(*) > 1;
-- 檢查日期格式是否規范
SELECT 入職日期 FROM 表名 WHERE 入職日期 !~ '^\d{4}-\d{2}-\d{2}$';
BEGIN;
開啟事務,清洗后通過COMMIT;
提交或ROLLBACK;
回滾,確保操作可逆。.sql
文件,通過pgAdmin的“查詢工具”→“保存”→“計劃任務”(pgAgent)設置定時執行。通過以上步驟,可在Ubuntu系統的pgAdmin中高效完成數據清洗,為后續數據分析或建模奠定基礎。