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

数据分析--数据清洗

一、数据清洗的重要性:数据质量决定分析成败

1.1 真实案例警示

  • 电商平台事故:2019年某电商大促期间,因价格数据未清洗导致错误标价,产生3000万元损失
  • 医疗数据分析:未清洗的异常血压值(如300mmHg)导致疾病预测模型准确率下降27%
  • 金融风控失效:重复借贷申请未去重,造成1.2亿元坏账

1.2 数据质量问题

在这里插入图片描述

二、数据分析全流程与清洗定位

2.1 六步分析法(清洗为核心)

  1. 需求定义:明确业务目标(如用户流失分析)
  2. 数据采集:数据库查询/API获取/日志收集
  3. 数据清洗:本阶段耗时占比达60-70%
  4. 探索分析:统计描述与可视化
  5. 建模分析:构建预测模型
  6. 报告输出:制作可视化看板

2.2 清洗流程标准化

企业级处理流程

在这里插入图片描述

三、Python数据清洗核心函数详解

3.1 Pandas清洗工具箱

# 缺失值处理
df.dropna(subset=['关键字段'])  # 删除关键字段缺失行
df['年龄'].fillna(df['年龄'].median(), inplace=True)  # 中位数填充# 重复值处理
df.drop_duplicates(subset=['订单ID'], keep='last')  # 保留最新记录# 异常值处理
df = df[(df['销售额'] > 0) & (df['销售额'] < 1e6)]  # 合理范围过滤# 格式转换
df['日期'] = pd.to_datetime(df['日期'], errors='coerce')  # 强制日期格式

3.2 高级清洗技巧

# 跨字段逻辑校验
df = df[~(df['会员等级'] == '黄金会员') & (df['累计消费'] < 5000)]  # 剔除矛盾数据# 文本清洗
df['地址'] = df['地址'].str.replace(r'\s+', '')  # 去除空白字符
df['手机号'] = df['手机号'].str.extract(r'(\d{11})')[0]  # 提取有效号码# 分类型数据处理
df['年龄段'] = pd.cut(df['年龄'], bins=[0,18,30,50,100],labels=['未成年','青年','中年','老年'])

四、电商数据清洗实战案例

4.1 原始数据样例

id: raw_data_sample
name: 原始数据示例
type: code.python
content: |-raw_data = [{"order_id": "A1001", "user_id": 101, "amount": 150.0, "date": "2023-02-30"},{"order_id": "A1001", "user_id": 101, "amount": -150.0, "date": "2023/02/28"},{"order_id": "A1002", "user_id": None, "amount": 300.0, "date": "2023-03-01"},{"order_id": "A1003", "user_id": 103, "amount": "二百元", "date": "2023-03-02"}]

4.2 分步清洗演示

# 步骤1:加载数据
import pandas as pd
df = pd.DataFrame(raw_data)# 步骤2:处理重复订单
print(f"清洗前数据量:{len(df)}")
df = df.drop_duplicates(subset=['order_id'], keep='last')# 步骤3:修复日期格式
df['date'] = pd.to_datetime(df['date'], errors='coerce')
df = df[df['date'].notnull()]# 步骤4:校验金额字段
df['amount'] = pd.to_numeric(df['amount'], errors='coerce')
df = df[(df['amount'] > 0) & (df['amount'] < 10000)]# 步骤5:处理用户缺失
df['user_id'] = df['user_id'].fillna(0).astype(int)print(f"清洗后有效数据:{len(df)}")
print(df)

4.3 清洗效果对比

在这里插入图片描述

五、数据清洗最佳实践

5.1 标准化检查清单

  1. 完整性检查:关键字段缺失率<5%
  2. 一致性验证:时间顺序逻辑正确
  3. 格式标准化:统一日期/数值格式
  4. 业务规则校验:符合业务逻辑约束

5.2 常见错误预防

  • 不要直接修改原始数据:始终保留原始副本
  • 建立数据血缘追踪:记录每次清洗操作
  • 自动化测试案例:验证清洗规则的准确性
# 单元测试示例
def test_phone_format():test_data = pd.Series(['138-1234-5678', 'abc123'])cleaned = test_data.str.replace(r'\D', '')assert cleaned[0] == '13812345678'assert pd.isna(cleaned[1])

工具推荐

  • 数据质量检测库:Great Expectations
  • 自动化清洗框架:PySpark
  • 可视化工具:Dataiku

通过系统化的数据清洗,可使分析结果可靠性提升40%以上。记住:垃圾数据进,垃圾结论出!清洗是数据价值挖掘的第一道防线。


若教眼底无离恨,不信人间有白头。 —辛弃疾

http://www.lryc.cn/news/539408.html

相关文章:

  • ✨1.HTML、CSS 和 JavaScript 是什么?
  • QT--常用对话框
  • 基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例
  • 图的最小生成树算法: Prim算法和Kruskal算法(C++)
  • WPS的AI助手进化跟踪(灵犀+插件)
  • 我用AI做数据分析之数据清洗
  • 一周学会Flask3 Python Web开发-request请求对象与url传参
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
  • 网络技术变迁:从IPv4走向IPv6
  • DeepSeek教unity------事件管理
  • 确保设备始终处于最佳运行状态,延长设备的使用寿命,保障系统的稳定运行的智慧地产开源了
  • RedisTemplate存储含有特殊字符解决
  • 28、深度学习-自学之路-NLP自然语言处理-做一个完形填空,让机器学习更多的内容程序展示
  • 【NLP 22、语言模型 language model】
  • 刚性平衡机建模
  • 【算法】双指针(上)
  • 【Linux Redis】关于用docker拉取Redis后,让虚拟机运行起来redis,并使得其可以连接到虚拟机外的navicat。
  • 用deepseek学大模型04-模型可视化与数据可视化
  • 一周学会Flask3 Python Web开发-post请求与参数获取
  • 第3章 .NETCore核心基础组件:3.1 .NET Core依赖注入
  • cs*n 网页内容转为html 加入 onenote
  • 平板作为电脑拓展屏
  • Pytorch实现论文之一种基于扰动卷积层和梯度归一化的生成对抗网络
  • 关系数据库标准语言SQL
  • AI工具篇:利用DeepSeek+Kimi 辅助生成综述汇报PPT
  • 学习总结2.18
  • electron下载文件,弹窗选择下载路径,并通知下载进度
  • 【Docker】容器被停止/删除的方式及命令:全面解析与实践指南
  • 线上就医全流程医药机构接入文档接口代码-医保就医接口php-demo版本
  • 缓存三大问题及其解决方案