4. 数据清洗与预处理:处理缺失值、去重、标准化供应商名称与物料编码
数据清洗与预处理是采购支出分析项目中耗时最长、但价值最高的环节。原始数据通常来自 ERP、SRM、财务系统等多个源头,存在缺失、重复、格式不统一等问题。如果跳过这一步骤直接分析,后续的节约跟踪指标将失去可信基础。本节将系统讲解缺失值处理、重复数据去重、供应商名称标准化和物料编码统一四个核心任务。
4.1 缺失值处理策略
缺失值在采购数据中普遍存在,常见于物料描述、供应商分类、合同编号等字段。处理缺失值需要根据字段的业务含义和缺失比例选择不同策略。
| 缺失字段类型 | 常见缺失比例 | 推荐处理策略 | 业务说明 |
|---|---|---|---|
| 物料描述 | 5% - 15% | 根据物料编码回填标准描述 | 从主数据系统或历史记录中匹配 |
| 供应商分类 | 10% - 30% | 按采购金额或品类推断分类 | 设置默认分类后由业务确认 |
| 合同编号 | 20% - 40% | 标记为"无合同",单独归集 | 用于分析合同覆盖率 |
| 单价/数量 | < 5% | 按历史均价或同类物料均值填充 | 需记录填充逻辑以备审计 |
| 采购日期 | < 1% | 删除该行记录 | 日期缺失无法参与时间序列分析 |
实践建议:建立缺失值处理日志,记录每条缺失数据的处理方式、填充来源和责任人。这不仅是数据治理的要求,也是后续节约指标可追溯性的基础。
4.2 重复数据识别与去重
重复数据通常由系统间数据同步延迟、人工多次录入或接口异常导致。去重需要先定义"重复"的判断标准,再执行合并或删除操作。
去重判断层级:
- 完全重复:所有字段完全一致,直接删除保留一条。
- 关键字段重复:采购订单号 + 物料编码 + 供应商编码 相同,但其他字段有差异,需合并或标记。
- 近似重复:供应商名称或物料描述存在拼写差异,需标准化后再判断。
去重执行步骤:
-- 示例:基于采购订单号和物料编码去重,保留最新记录
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY purchase_order_no, material_code
ORDER BY record_date DESC, system_load_time DESC
) AS rn
FROM raw_purchase_data
)
SELECT * FROM ranked WHERE rn = 1;
4.3 供应商名称标准化
供应商名称不统一是采购数据清洗中最棘手的环节。同一家供应商可能以全称、简称、含特殊字符、含分公司后缀等多种形式出现。标准化需要建立规则引擎和对照表。
标准化规则示例:
- 去除公司类型后缀(有限公司、有限责任公司、股份有限公司 → 统一为"有限公司")
- 统一全角/半角字符、去除首尾空格
- 将"("和"("统一为英文括号
- 建立"简称→标准全称"映射表,如"华为"→"华为技术有限公司"
常见陷阱:不要完全依赖自动化规则。对于高频供应商(前20%的供应商覆盖80%的采购金额),建议人工核对并建立标准名称库。自动化规则处理低频供应商,人工审核高频供应商,效率与质量兼顾。
4.4 物料编码统一
物料编码在不同系统间可能存在编码规则不同、位数不一致、含前导零等问题。统一物料编码是后续品类分析和节约计算的前提。
物料编码清洗流程:
- 格式标准化:去除前导零、统一字母大小写、去除分隔符
- 编码映射:建立旧编码→新编码的对照表,确保跨系统可追溯
- 层级归类:将物料编码映射到统一的品类树(如:编码前4位=大类,中间3位=中类,后3位=小类)
物料编码标准化示例(Python):
def standardize_material_code(code):
# 去除前导零和空格
code = code.strip().lstrip('0')
# 统一为大写
code = code.upper()
# 去除特殊字符
import re
code = re.sub(r'[^A-Z0-9]', '', code)
# 补足固定长度(如10位)
code = code.zfill(10)
return code
4.5 数据清洗整体流程
将上述四个任务整合为一个可执行的清洗流水线,确保每一步的输出都经过质量校验。
4.6 清洗质量评估指标
数据清洗完成后,需要用量化指标评估清洗效果,确保数据达到分析就绪状态。
| 评估维度 | 指标名称 | 目标值 | 计算方式 |
|---|---|---|---|
| 完整性 | 字段缺失率 | < 5% | 缺失记录数 / 总记录数 |
| 唯一性 | 重复记录率 | < 1% | 重复记录数 / 总记录数 |
| 一致性 | 供应商名称匹配率 | > 95% | 自动匹配成功数 / 总供应商数 |
| 准确性 | 物料编码覆盖率 | 100% | 有标准编码记录数 / 总记录数 |
关键提醒:数据清洗不是一次性工作。在采购支出分析项目中,建议每月或每季度执行一次增量清洗,将新接入的数据纳入标准化体系。同时,将清洗规则沉淀为可复用的数据清洗脚本,减少重复劳动。