ETL系列-数据清洗(Transform)

ETL的过程
1、数据抽取:确定数据源,定义数据接口,选择数据抽取方法(主动抽取或由源系统推送)。
2、数据清洗:处理不完整数据、错误数据、重复数据等,确保数据的准确性和一致性。(是数据转换的一部分)
3、数据转换:进行空值处理、数据标准统一、数据拆分、数据验证、数据替换和数据关联等操作。
4、规则检查:根据业务需求进行数据质量和业务规则的校验。
5、数据加载:将数据缓冲区的数据加载到目标数据库或数据仓库中,可能是全量加载或增量加载。

1、ETL系列-数据抽取

2、数据清洗

数据清理这个步骤的难点在于:需要对数据进行观察,处理不完整数据、错误数据、重复数据等问题。
数据清洗是确保数据质量的关键步骤,主要包括处理缺失值、删除重复记录、修正错误数据、标准化数据格式和处理异常值等操作。

数据清洗的主要任务

  1. 处理缺失值

    • 填充默认值(如用 0 填充缺失的数值,用 Unknown 填充缺失的文本)。
    • 删除包含缺失值的记录(如果缺失值比例较高或对分析影响较大)。
  2. 删除重复数据

    • 识别并删除完全重复的记录。
    • 根据业务规则删除部分重复的记录(如保留最新的一条记录)。
  3. 修正错误数据

    • 修正格式错误(如日期格式不一致、电话号码格式错误)。
    • 修正逻辑错误(如年龄为负数、订单金额为 0)。
  4. 标准化数据格式

    • 统一字段格式(如日期统一为 YYYY-MM-DD,金额统一为两位小数)。
    • 统一编码(如性别字段统一为 MaleFemale)。
  5. 处理异常值

    • 识别并处理异常值(如年龄超过 150 岁,订单金额为负数)。
    • 根据业务规则修正或剔除异常值。
  6. 数据拆分与合并

    • 拆分字段(如将地址字段拆分为省、市、区)。
    • 合并字段(如将姓和名字段合并为全名)。

数据清洗的具体流程

  1. 数据质量评估

    • 对原始数据进行初步分析,识别数据质量问题(如缺失值、重复值、异常值)。
    • 使用统计方法(如描述性统计)或可视化工具(如直方图、箱线图)评估数据质量。
  2. 制定清洗规则

    • 根据业务需求和数据质量问题,制定清洗规则(如缺失值填充规则、异常值处理规则)。
  3. 执行清洗操作

    • 根据清洗规则,对数据进行清洗(如填充缺失值、删除重复记录、修正错误数据)。
  4. 验证清洗结果

    • 检查清洗后的数据是否符合预期(如缺失值是否已填充,重复记录是否已删除)。
    • 记录清洗过程中的错误和警告。
  5. 输出清洗后的数据

    • 将清洗后的数据保存到目标系统(如数据库、文件)。

数据清理例子

假设我们有一个包含用户信息的 CSV 文件 users.csv,需要进行以下清洗操作:

  • 处理缺失值:将缺失的年龄字段填充为默认值 0
  • 删除重复记录:根据 id 字段删除完全重复的记录。
  • 修正错误数据:将性别字段统一为 MaleFemale
  • 标准化数据格式:将日期字段统一为 YYYY-MM-DD 格式。
  • 处理异常值:删除年龄超过 100 岁的记录。

原始数据 (users.csv)

idnameagegenderjoin_date
1Alice25F2023-01-01
2BobM2023-02-15
3Charlie30Male2023-03-10
4David28M2023-04-20
5Eve120F2023-05-25
1Alice25F2023-01-01

清洗后的数据

idnameagegenderjoin_date
1Alice25Female2023-01-01
2Bob0Male2023-02-15
3Charlie30Male2023-03-10
4David28Male2023-04-20

使用 Python 和 pandas 实现上述清洗任务的代码:

import pandas as pd

# 读取数据
df = pd.read_csv('users.csv')

# 1. 处理缺失值:将缺失的年龄字段填充为默认值 0
df['age'] = df['age'].fillna(0)

# 2. 删除重复记录:根据 id 字段删除完全重复的记录
df = df.drop_duplicates(subset=['id'])

# 3. 修正错误数据:将性别字段统一为 Male 和 Female
df['gender'] = df['gender'].replace({'M': 'Male', 'F': 'Female'})

# 4. 标准化数据格式:将日期字段统一为 YYYY-MM-DD 格式
df['join_date'] = pd.to_datetime(df['join_date']).dt.strftime('%Y-%m-%d')

# 5. 处理异常值:删除年龄超过 100 岁的记录
df = df[df['age'] <= 100]

# 输出清洗后的数据
print("清洗后的数据:")
print(df)

# 保存清洗后的数据到新文件
df.to_csv('cleaned_users.csv', index=False)


运行结果

清洗后的数据如下:

idnameagegenderjoin_date
1Alice25Female2023-01-01
2Bob0Male2023-02-15
3Charlie30Male2023-03-10
4David28Male2023-04-20

总结

数据清洗是确保数据质量的关键步骤,主要包括处理缺失值、删除重复记录、修正错误数据、标准化数据格式和处理异常值等操作。通过 Python 和 pandas,可以高效地完成数据清洗任务。清洗后的数据可以用于后续的分析、建模或加载到目标系统中。希望这个例子能帮助你更好地理解数据清洗的过程!

原文地址:码农小站
公众号:[码农小站]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值