当前位置: 首页 > 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%以上。记住:垃圾数据进,垃圾结论出!清洗是数据价值挖掘的第一道防线。


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

相关文章:

  • C++ 设计模式-外观模式
  • openharmony中HDF驱动框架关键流程说明-观察者模式
  • Redis7——基础篇(四)
  • 安卓鸿蒙应用开发架构变迁
  • HTML之JavaScript Form表单事件
  • [生活杂项][运动教程]自由泳
  • 【拥抱AI】GPT Researcher的诞生
  • qemu-kvm源码解析-cpu虚拟化
  • 基于SpringBoot+Vue的在线电影购票系统的设计与实现
  • Linux中进程的状态2
  • 【杂谈】加油!!!!
  • 根据研究主题自动生成研究报告,Open Deep Research远程服务器云部署
  • Medians
  • vscode通过ssh连接服务器实现免密登录+删除
  • 【DeepSeek三部曲】DeepSeek-R1论文详细解读
  • Python 基础-使用dict和set
  • Elon Musk的AI公司xAI重磅发布Grok 3,挑战OpenAI和Google
  • [文末数据集]ML.NET库学习010:URL是否具有恶意性分类
  • Cherry Studio 接入deepseek
  • 未来AI方向落地场景:小语言模型,super_private_agent
  • 新华时评:中国维护国际经贸秩序的立场坚定不移
  • 巴军事行动致印度70%电网瘫痪
  • 五粮液董事长:茅台1935已脱离千元价位带,五粮液在千元价位已逐步摆脱其他竞品纠缠
  • 江西暴雨强对流明显,专家:落雨区高度重叠,地质灾害风险高
  • 来论|建设性推进缅北和平进程——中国的智慧与担当
  • 无人机穿越大理千年古塔落券洞内,涉事“飞手”被行拘10日