数据清洗基础:质量维度与流程概览
各位同学,欢迎来到第二章。上一章我们聊了非结构化数据的“乱象”,这一章咱们得把“清洗”这件事本身掰开揉碎了讲清楚。
数据清洗不是瞎折腾,它背后有一套衡量标准。我刚开始做数据项目时,也以为清洗就是“把空值填上、把格式统一一下”。后来被坑过几次才明白——没有质量维度,你根本不知道要洗到什么程度。
数据质量四大维度
数据质量,说白了就是数据“好不好用”。我习惯从四个维度去衡量,你想想看,是不是每个项目都逃不开这四点:
| 维度 | 定义 | 非结构化场景举例 |
|---|---|---|
| 准确性 | 数据是否真实反映客观事实 | OCR识别出的身份证号是否与原图一致 |
| 完整性 | 数据是否存在缺失或空值 | PDF中某页表格的单元格内容为空 |
| 一致性 | 同一数据在不同来源或格式下是否统一 | “北京市”和“北京”是否被当作同一个城市 |
| 时效性 | 数据是否在有效时间范围内 | 新闻文本的发布时间是否超过业务截止日期 |
我的经验:这四个维度不是孤立的。我在处理一批客户邮件时,发现“完整性”问题往往掩盖了“准确性”问题——字段缺失可能是因为上游系统根本没采集到正确值。所以,清洗时别只盯着一个维度看。
准确性
准确性是数据清洗的底线。数据错了,后面所有分析都是白搭。我记得有一次做电商评论清洗,一条评论里“好评”两个字被OCR识别成了“好坪”,这就是典型的准确性问题。
完整性
完整性不是要求所有字段都必须有值,而是“业务需要的字段不能缺”。比如,处理简历PDF时,如果“工作年限”字段为空,那后续的筛选模型就没法跑。
一致性
一致性最容易被忽略。我遇到过最头疼的情况是:同一个客户,在CRM系统里叫“张三”,在邮件附件里叫“Zhang San”,在聊天记录里叫“三哥”。你说这是同一个人吗?清洗时就得把这些统一起来。
时效性
时效性在非结构化数据里特别重要。新闻、社交媒体帖子、传感器日志——这些数据过了时间窗口就没价值了。我曾经处理一批过期的股票评论数据,模型训练出来预测准确率还不如抛硬币。
清洗流程概览
数据清洗不是一锤子买卖,它是个流程。我个人习惯把它分成五个阶段,你照着这个流程走,基本不会漏掉关键步骤。
- 数据探查——先看看数据长什么样。用
df.info()、df.describe()摸个底。 - 问题识别——根据四大维度,标记出问题数据。比如空值、重复、异常值。
- 清洗策略制定——针对不同问题,决定是删除、填充、还是转换。
- 执行清洗——写代码动手洗。这一步最耗时。
- 验证与迭代——清洗完再检查一遍,确保没引入新问题。
避坑指南:我曾经跳过“数据探查”这一步,直接上手清洗。结果洗了半天才发现,数据源已经换了格式,我洗的全是垃圾。记住:先看再洗,别急着动手。
Python环境准备
工欲善其事,必先利其器。咱们这门课主要用Python,下面这几个库是清洗非结构化数据的“四大金刚”。
| 库名 | 用途 | 安装命令 |
|---|---|---|
| Pandas | 结构化表格数据处理,CSV/Excel/JSON清洗 | pip install pandas |
| NumPy | 数值计算,处理缺失值、数组操作 | pip install numpy |
| NLTK | 自然语言处理,文本分词、去停用词 | pip install nltk |
| OpenCV | 图像处理,OCR预处理、图片去噪 | pip install opencv-python |
注意:安装NLTK后,还需要手动下载语料库。在Python里执行 nltk.download('punkt') 和 nltk.download('stopwords')。我第一次用NLTK时忘了这步,结果分词函数一直报错,折腾了半小时才发现。
快速验证环境
装完库后,我习惯跑一个简单的验证脚本,确保所有库都能正常导入:
import pandas as pd
import numpy as np
import nltk
import cv2
print("Pandas version:", pd.__version__)
print("NumPy version:", np.__version__)
print("NLTK version:", nltk.__version__)
print("OpenCV version:", cv2.__version__)
# 下载NLTK必要数据(首次运行)
nltk.download('punkt', quiet=True)
nltk.download('stopwords', quiet=True)
print("✅ 环境准备就绪!")
我的习惯:我会把这个脚本保存为 check_env.py,每次新建项目时先跑一遍。省得写到一半才发现某个库没装,打断思路。
关于版本
Python版本建议用3.8以上。Pandas 1.3+、NumPy 1.21+、NLTK 3.6+、OpenCV 4.5+。这些版本我都在项目中验证过,兼容性没问题。