【趣学SQL】第三章:数据处理与管理 3.1数据清洗技术——给数据库做“数据SPA“的魔幻之旅

news/2025/1/24 6:25:45/

在这里插入图片描述

第三章:数据处理与管理

3.1 数据清洗技术——给数据库做"数据SPA"的魔幻之旅

欢迎来到「数据库美容院」!今天我们将化身"数据美容师",用一家虚拟网红餐厅的翻车案例,教你如何把脏乱差的原始数据变成清爽整洁的"素颜美女"。🧼✨


3.1.1 数据清洗的重要性——当餐厅吃出蟑螂

真实惨案
某餐厅因数据混乱导致:

  • 顾客生日祝福短信发给了已注销用户
  • 素食者收到牛排优惠券
  • 订单系统把"2023-02-30"当作有效日期

数据清洗的三大使命

  1. 删除重复:消灭克隆人订单(同一用户秒下5单佛跳墙)
  2. 填补空白:给缺失电话号码的顾客发不了外卖
  3. 格式整形:把"138一二三四5678"变成标准手机号

📌 行业金句:“Garbage in, garbage out”(垃圾进,垃圾出)——脏数据会让AI推荐香菜奶茶配螺蛳粉!


3.1.2 删除重复数据——消灭"影分身之术"

sql">-- 发现重复订单(同一用户+同一菜品+5分钟内)  
SELECT  customer_id,  dish_name,  COUNT(*) AS clone_count  
FROM orders  
GROUP BY customer_id, dish_name, DATE_FORMAT(order_time, '%Y%m%d%H%i')  
HAVING clone_count > 1;  -- 核弹级去重(保留最新记录)  
DELETE t1 FROM orders t1  
INNER JOIN orders t2   
WHERE t1.id < t2.id   AND t1.customer_id = t2.customer_id  AND t1.dish_name = t2.dish_name  AND TIMESTAMPDIFF(MINUTE, t1.order_time, t2.order_time) < 5;  

搞笑案例
某顾客因手抖连续提交12次"死亡辣度"火锅订单,后因厨房报警被列入黑名单!


3.1.3 更新缺失值——给失忆数据打补丁

sql">-- 用默认值填充空地址(暂存为"地址待补充")  
UPDATE customers  
SET address = '地址待补充'  
WHERE address IS NULL;  -- 用平均值替代异常价格(防止-999元漏洞)  
UPDATE menu  
SET price = (  SELECT ROUND(AVG(price), 2)   FROM menu   WHERE price BETWEEN 10 AND 1000  
)  
WHERE price < 0;  

高级技巧

sql">-- 三套车填充法  
COALESCE(phone, '未知号码') -- 优先级填充  
IFNULL(email, 'default@restaurant.com') -- 简单替换  
CASE WHEN birthdate IS NULL THEN '2000-01-01' ELSE birthdate END -- 条件判断  

3.1.4 格式化数据——强迫症患者的福音

sql">-- 手机号标准化(131-2345-6789 → 13123456789)  
UPDATE customers  
SET phone = REPLACE(REPLACE(phone, '-', ''), ' ', '');  -- 日期统一格式化(美式/中式混搭 → 标准ISO格式)  
UPDATE orders  
SET order_date = DATE_FORMAT(STR_TO_DATE(order_date, '%m/%d/%Y'), '%Y-%m-%d')  
WHERE order_date LIKE '%/%';  

经典乱象

  • 手机号:138一二三4五六78138 1234 5678138-1234-5678
  • 日期:2023年12月32日(是的,真有勇士这么存!)

3.1.5 数据类型转换——数据界的"变形记"

sql">-- 修复价格字段(varchar误存了¥符号)  
ALTER TABLE menu MODIFY price DECIMAL(10,2);  
UPDATE menu  
SET price = CAST(REPLACE(price, '¥', '') AS DECIMAL(10,2));  -- 时间戳转换(字符串转真实时间)  
UPDATE user_actions  
SET action_time = FROM_UNIXTIME(CAST(action_time_str AS UNSIGNED))  
WHERE action_time_str REGEXP '^[0-9]{10}$';  

血泪教训
某系统用varchar存库存数量,直到出现"库存充足"、"约100件"等文本值,导致促销活动崩溃!


3.1.6 常见的数据清洗工具——瑞士军刀套装

工具名称适用场景经典操作
SQL基础清洗DELETE/UPDATE+正则表达式
Python复杂逻辑清洗Pandas的fillna()+apply()
OpenRefine可视化清洗聚类相似值
dbt自动化清洗流水线测试断言+文档生成

工具选型段子

  • SQL就像厨房菜刀——基础但万能
  • Python像料理机——能打碎一切复杂问题
  • OpenRefine是雕花工具——专治各种"视觉洁癖"

课后彩蛋:数据清洗冷知识

  • 最离奇的数据污染案例:某电商数据库出现"怀孕的男性用户"(性别字段被篡改)
  • MySQL的utf8其实是阉割版,真正支持emoji的是utf8mb4
  • 1970年代的数据清洗需要物理擦除打孔卡片

现在你已经成为"数据清洗界的保洁战神"!下一章我们将进入《分区表与分区索引——给数据库做"分舱救灾"的硬核指南》的魔幻现实主义领域,记得戴上防毒面具——脏数据的味道可比鲱鱼罐头还刺激! 🚀


http://www.ppmy.cn/news/1565699.html

相关文章

Web安全:缓存欺骗攻击;基于缓存、CDN的新型Web漏洞

基于缓存、CDN的新型Web漏洞 漏洞原理利用方式解决方法 Web缓存欺骗漏洞&#xff08;Web Cache Deception&#xff09;是一种利用不安全的缓存机制来泄露用户敏感信息的攻击方式。攻击者通过操控请求URL诱导缓存系统将敏感信息缓存并对其他用户公开&#xff0c;可能导致用户数据…

【Julia】在Julia中优雅地配置Artifacts

引言 &#x1f31f; 在Julia包开发中&#xff0c;我们经常需要处理外部依赖和数据文件。Julia的Artifacts系统提供了一个优雅的解决方案&#xff0c;让我们可以轻松管理这些依赖。本文将介绍如何在Julia项目中正确配置和使用Artifacts。 什么是Artifacts&#xff1f; &#x…

vue和reacts数据响应式的差异

Vue 的数据响应式&#xff1a; 原理&#xff1a; Vue 使用 Object.defineProperty 或 Proxy&#xff08;在 Vue 3 中&#xff09;来实现数据的响应式。当创建 Vue 实例时&#xff0c;会对 data 对象中的属性进行遍历&#xff0c;将其转换为响应式属性。对于 Object.definePro…

2【选修】再探宝可梦、数码宝贝分类器

1 Pokemon/Digimon Classifier 1.1 Observation 1.2 Function 1.3 Loss 1.4 Training Examples – OOPS what do we want? 2 What is the probability of sampling bad D t r a i n D_{train} Dtrain​ 2.1 Theroy – Larger N N N smaller ∣ H ∣ |H| ∣H∣ 2.2…

Web3 与数据隐私:如何让用户掌控个人信息

随着数字化时代的快速发展&#xff0c;互联网已经渗透到我们生活的方方面面&#xff0c;个人数据的收集与使用也变得越来越普遍。与此同时&#xff0c;数据隐私问题逐渐成为全球关注的焦点。传统的互联网平台通常将用户的数据存储在中心化的服务器上&#xff0c;这意味着平台拥…

Linux 进程环境变量:深入理解与实践指南

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 在 Linux 系统里…

分词器的词表大小以及如果分词器的词表比模型的词表大,那么模型的嵌入矩阵需要被调整以适应新的词表大小。

分词器的词表大小是怎么来的 分词器的词表大小是由分词器在训练过程中使用的数据集决定的。具体来说&#xff0c;分词器会根据输入的文本数据集进行分词&#xff0c;然后构建一个词汇表。这个词汇表包含了所有分词器能够识别和处理的词语或子词的集合。词表大小就是这个集合中…

docker安装elk6.7.1-搜集java日志

docker安装elk6.7.1-搜集java日志 如果对运维课程感兴趣&#xff0c;可以在b站上、A站或csdn上搜索我的账号&#xff1a; 运维实战课程&#xff0c;可以关注我&#xff0c;学习更多免费的运维实战技术视频 0.规划 192.168.171.130 tomcat日志filebeat 192.168.171.131 …