ETL的过程
1、数据抽取:确定数据源,定义数据接口,选择数据抽取方法(主动抽取或由源系统推送)。
2、数据清洗:处理不完整数据、错误数据、重复数据等,确保数据的准确性和一致性。(是数据转换的一部分)
3、数据转换:进行空值处理、数据标准统一、数据拆分、数据验证、数据替换和数据关联等操作。
4、规则检查:根据业务需求进行数据质量和业务规则的校验。
5、数据加载:将数据缓冲区的数据加载到目标数据库或数据仓库中,可能是全量加载或增量加载。
2、数据清洗
数据清理这个步骤的难点在于:需要对数据进行观察,处理不完整数据、错误数据、重复数据等问题。
数据清洗是确保数据质量的关键步骤,主要包括处理缺失值、删除重复记录、修正错误数据、标准化数据格式和处理异常值等操作。
数据清洗的主要任务
-
处理缺失值
- 填充默认值(如用
0
填充缺失的数值,用Unknown
填充缺失的文本)。 - 删除包含缺失值的记录(如果缺失值比例较高或对分析影响较大)。
- 填充默认值(如用
-
删除重复数据
- 识别并删除完全重复的记录。
- 根据业务规则删除部分重复的记录(如保留最新的一条记录)。
-
修正错误数据
- 修正格式错误(如日期格式不一致、电话号码格式错误)。
- 修正逻辑错误(如年龄为负数、订单金额为 0)。
-
标准化数据格式
- 统一字段格式(如日期统一为
YYYY-MM-DD
,金额统一为两位小数)。 - 统一编码(如性别字段统一为
Male
和Female
)。
- 统一字段格式(如日期统一为
-
处理异常值
- 识别并处理异常值(如年龄超过 150 岁,订单金额为负数)。
- 根据业务规则修正或剔除异常值。
-
数据拆分与合并
- 拆分字段(如将地址字段拆分为省、市、区)。
- 合并字段(如将姓和名字段合并为全名)。
数据清洗的具体流程
-
数据质量评估
- 对原始数据进行初步分析,识别数据质量问题(如缺失值、重复值、异常值)。
- 使用统计方法(如描述性统计)或可视化工具(如直方图、箱线图)评估数据质量。
-
制定清洗规则
- 根据业务需求和数据质量问题,制定清洗规则(如缺失值填充规则、异常值处理规则)。
-
执行清洗操作
- 根据清洗规则,对数据进行清洗(如填充缺失值、删除重复记录、修正错误数据)。
-
验证清洗结果
- 检查清洗后的数据是否符合预期(如缺失值是否已填充,重复记录是否已删除)。
- 记录清洗过程中的错误和警告。
-
输出清洗后的数据
- 将清洗后的数据保存到目标系统(如数据库、文件)。
数据清理例子
假设我们有一个包含用户信息的 CSV 文件 users.csv
,需要进行以下清洗操作:
- 处理缺失值:将缺失的年龄字段填充为默认值
0
。 - 删除重复记录:根据
id
字段删除完全重复的记录。 - 修正错误数据:将性别字段统一为
Male
和Female
。 - 标准化数据格式:将日期字段统一为
YYYY-MM-DD
格式。 - 处理异常值:删除年龄超过 100 岁的记录。
原始数据 (users.csv
)
id | name | age | gender | join_date |
---|---|---|---|---|
1 | Alice | 25 | F | 2023-01-01 |
2 | Bob | M | 2023-02-15 | |
3 | Charlie | 30 | Male | 2023-03-10 |
4 | David | 28 | M | 2023-04-20 |
5 | Eve | 120 | F | 2023-05-25 |
1 | Alice | 25 | F | 2023-01-01 |
清洗后的数据
id | name | age | gender | join_date |
---|---|---|---|---|
1 | Alice | 25 | Female | 2023-01-01 |
2 | Bob | 0 | Male | 2023-02-15 |
3 | Charlie | 30 | Male | 2023-03-10 |
4 | David | 28 | Male | 2023-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)
运行结果
清洗后的数据如下:
id | name | age | gender | join_date |
---|---|---|---|---|
1 | Alice | 25 | Female | 2023-01-01 |
2 | Bob | 0 | Male | 2023-02-15 |
3 | Charlie | 30 | Male | 2023-03-10 |
4 | David | 28 | Male | 2023-04-20 |
总结
数据清洗是确保数据质量的关键步骤,主要包括处理缺失值、删除重复记录、修正错误数据、标准化数据格式和处理异常值等操作。通过 Python 和 pandas
,可以高效地完成数据清洗任务。清洗后的数据可以用于后续的分析、建模或加载到目标系统中。希望这个例子能帮助你更好地理解数据清洗的过程!
原文地址:码农小站
公众号:[码农小站]