数据分析--数据清洗

devtools/2025/2/20 20:57:46/

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

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.ppmy.cn/devtools/160103.html

相关文章

一些网络编程的补充知识

1.INADDR_ANY 由于云服务器的IP地址是由对应的云厂商提供的&#xff0c;这个IP地址并不一定是真正的公网IP&#xff0c;这个IP地址是不能直接被绑定的&#xff0c;如果需要让外网访问&#xff0c;此时我们需要bind 0。系统当当中提供的一个INADDR_ANY&#xff0c;这是一个宏值…

工控网络安全介绍 工控网络安全知识题目

31.PDR模型与访问控制的主要区别(A) A、PDR把对象看作一个整体 B、PDR作为系统保护的第一道防线 C、PDR采用定性评估与定量评估相结合 D、PDR的关键因素是人 32.信息安全中PDR模型的关键因素是(A) A、人 B、技术 C、模型 D、客体 33.计算机网络最早出现在哪个年代(B) A、20世…

【RK3588嵌入式图形编程】-SDL2-构建模块化UI

构建模块化UI 文章目录 构建模块化UI1、概述2、创建UI管理器3、嵌套组件4、继承5、多态子组件6、总结在本文中,将介绍如何使用C++和SDL创建一个灵活且可扩展的UI系统,重点关注组件层次结构和多态性。 1、概述 在前面的文章中,我们介绍了应用程序循环和事件循环,这为我们的…

JavaScript(JS)

介绍 JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言。是用来控制网页行为的&#xff0c;它能使网页可交互 JavaScript 和Java 是完全不同的语言&#xff0c;不论是概念还是设计。但是基础语法类似 JS引入方式 内部脚本:将JS代码定义在HTML页面中 JavaScript代码…

【基础架构篇十五】《DeepSeek权限控制:RBAC+ABAC混合鉴权模型》

某天深夜,电商平台运营总监误触按钮,把价值千万的优惠券设置成全员可领。当你想追究责任时,却发现系统日志写着"操作人:admin"。这血淋淋的事故告诉我们:权限控制不是选择题,而是生死攸关的必答题。本文将深挖DeepSeek的RBAC+ABAC混合鉴权体系,看看他们如何做…

matlab齿轮传动

实现齿轮啮合分析&#xff0c;齿轮传动非线性分析&#xff0c;对扭转振动方程组进行求解&#xff0c;可得到齿轮扭转角随时间变化相关参数 列表 齿轮传动非线性分析&#xff0c;对扭转振动方程组进行求解&#xff0c;可得到齿轮扭转角随时间变化相关参数/niu_gou_yuan_Rg.m , …

网络安全专业好就业吗?

网络安全是一个涉及领域非常广泛的行业&#xff0c;几乎涵盖了所有行业。无论是金融、医疗、互联网&#xff0c;还是教育、政府机构等&#xff0c;都需要网络安全人才来保障其安全运行&#xff0c;因此也得到了个人及企业的高度重视。那么网络安全专业好就业吗?我们一起来看看…

el-table已经选中的项,通过selectable属性不可以再次选择

示例&#xff1a; 1、表格当前行状态已完成时&#xff0c;不可选择 <el-table-column type"selection" width"55" :selectable"isRowSelectable"></el-table-column>// 表格行是否可选 isRowSelectable (row, index) {// 根据row的…