清理数据是数据预处理的关键步骤,目的是提高数据质量,确保后续分析和建模的准确性。以下是系统化的清理流程及方法,结合常见场景和注意事项:
1. 理解数据(探索性分析)
- 目标:初步了解数据结构、分布和潜在问题。
- 方法:
- 查看数据概览:使用
df.head()
、df.info()
(Python/pandas)查看字段类型、缺失情况。 - 统计描述:
df.describe()
分析数值型数据的分布(均值、标准差、极值)。 - 可视化检查:直方图、箱线图(检测异常值)、热力图(缺失值分布)。
- 查看数据概览:使用
2. 处理缺失值
- 常见原因:数据未采集、传输错误、人为遗漏。
- 处理方法:
- 直接删除:
- 删除缺失率高的列(如缺失 >70%):
df.drop(columns=['列名'])
。 - 删除含缺失值的行:
df.dropna()
(慎用,避免丢失过多数据)。
- 删除缺失率高的列(如缺失 >70%):
- 填充缺失值:
- 固定值填充:用0、均值、中位数、众数填充。
df['列名'].fillna(df['列名'].mean(), inplace=True)
- 前后值填充:时间序列数据常用
ffill
或bfill
。 - 模型预测填充:使用KNN、随机森林等算法预测缺失值(如
sklearn
的KNNImputer
)。
- 固定值填充:用0、均值、中位数、众数填充。
- 标记缺失值:将缺失作为一个特殊类别(如“Unknown”)。
- 直接删除:
3. 处理重复数据
- 检查重复:
df.duplicated()
识别完全重复的行。 - 处理方式:
- 删除重复值:
df.drop_duplicates()
。 - 注意:确认是否因数据采集错误导致重复(如订单重复提交)。
- 删除重复值:
4. 处理异常值(离群值)
- 检测方法:
- 统计方法:
- Z-Score:绝对值 >3 视为异常。
- IQR法:超过 [Q1-1.5IQR, Q3+1.5IQR] 的范围。
- 可视化:箱线图、散点图。
- 统计方法:
- 处理策略:
- 删除:
df = df[(df['列名'] < upper_bound) & (df['列名'] > lower_bound)]
。 - 替换:用中位数或分箱处理(如将年龄分为“0-18, 19-30”等区间)。
- 保留:在欺诈检测等领域,异常值可能是关键信息。
- 删除:
5. 数据格式化与标准化
- 统一格式:
- 日期格式:转换为
datetime
类型(pd.to_datetime()
)。 - 文本格式:统一大小写、去除空格、单位统一(如“kg”转“千克”)。
- 日期格式:转换为
- 标准化/归一化(适用于机器学习):
- 标准化(Z-Score):
(x - mean)/std
,适用于数据方差较大时。 - 归一化(Min-Max):缩放到 [0,1],适合图像处理等场景。
- 工具:
sklearn.preprocessing.StandardScaler
或MinMaxScaler
。
- 标准化(Z-Score):
6. 文本数据清洗
- 常见操作:
- 去除特殊字符:使用正则表达式剔除URL、标点等。
df['text'] = df['text'].str.replace(r'[^\w\s]', '', regex=True)
- 停用词过滤:移除“的”、“是”等无意义词(中文可用
jieba
分词 + 停用词表)。 - 分词与词干化:英文可用NLTK的
PorterStemmer
,中文用jieba
。
- 去除特殊字符:使用正则表达式剔除URL、标点等。
7. 验证数据逻辑
- 业务规则校验:
- 数值范围:如年龄不应 >150。
- 时间逻辑:订单日期不能晚于发货日期。
- 外键约束:用户ID需在用户表中存在。
- 处理方法:编写条件语句筛选错误数据,或使用断言(
assert
)检查。
8. 自动化工具推荐
- 数据处理库:
- Python:
pandas
、numpy
(基础处理),pyjanitor
(简化清洗代码)。 - 大数据:
PySpark
(分布式处理)。
- Python:
- 数据质量工具:
- Great Expectations:定义数据质量规则并自动验证。
- OpenRefine:交互式清洗工具(适合非编程用户)。
9. 迭代与验证
- 交叉检查:清理后重新运行
df.info()
、可视化,确认无残留问题。 - 业务方确认:关键字段(如金额、日期)需与业务团队核对逻辑。
示例场景
假设清理电商订单数据:
- 缺失值:填充“用户所在城市”为“未知”。
- 异常值:删除“订单金额”为负数的记录。
- 重复值:保留最新订单,删除重复订单ID。
- 格式化:将“下单时间”从字符串转为
datetime
类型。
注意事项
- 保留原始数据:清理前备份,避免不可逆操作。
- 权衡利弊:处理缺失/异常时需考虑数据量损失与业务需求。
- 文档记录:记录清理逻辑,便于后续追溯。
通过系统化清理,数据将更干净、一致,为后续分析和建模奠定可靠基础。