三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

供应链建模数据预处理实战:Excel与SPSS协同清洗标准化流程

供应链建模数据预处理实战:Excel与SPSS协同清洗标准化流程

1. 项目概述:供应链建模的基石——数据预处理

供应链建模听起来是个挺“高大上”的词,很多刚入行的朋友可能会立刻联想到复杂的算法、专业的建模软件。但干了十几年供应链分析,我最大的体会是:模型建得再好,如果喂进去的是“垃圾数据”,那吐出来的也只能是“垃圾结论”。这个“垃圾数据”指的就是未经处理的原始数据。今天,我们不谈那些高深的算法,就聊聊最接地气、也最考验基本功的环节——如何用Excel和SPSS这两款几乎人人电脑里都有的工具,把供应链原始数据“收拾”得服服帖帖。

供应链的原始数据有多杂?从ERP系统导出的订单明细、从仓库管理系统拉取的库存流水、从物流服务商那里拿到的运输轨迹、甚至是从销售那里手工填写的Excel预测表。这些数据格式不一、单位混乱、存在大量缺失和错误。直接把它们丢进SPSS或者任何建模工具,结果要么是报错跑不下去,要么就是得出一个完全偏离实际的荒谬结论。因此,数据处理,或者说数据预处理,是整个供应链建模流程中耗时最长、最需要耐心,也最决定成败的一步。Excel以其无与伦比的灵活性和普及度,承担了数据采集、清洗、整合和初步探索的重任;而SPSS则以其强大的统计和规范化处理能力,在数据转换、标准化以及为后续建模做准备方面发挥着关键作用。掌握这两者的组合拳,你就掌握了开启任何供应链建模项目的钥匙。

2. 核心思路:从“脏数据”到“干净数据”的标准化流水线

面对一堆杂乱无章的原始数据,新手容易陷入“哪里有问题就改哪里”的混乱状态。我的经验是,必须建立一套标准化的处理流水线,像工厂的质检车间一样,让数据依次通过不同的“工位”,每个工位解决一类问题。这套流水线的核心目标,是产出一份符合“干净数据”标准的数据集,为后续的统计分析或建模(如需求预测、库存优化、网络设计)打下坚实基础。

2.1 理解“干净数据”的四大标准

在动手之前,我们必须明确目标:什么样的数据才算“干净”,可以直接用于建模?

  1. 完整性:关键字段没有缺失值。例如,订单数据中的“产品SKU”、“数量”、“日期”必须100%存在。对于非关键字段的缺失,需要有合理的填补策略或标记。
  2. 一致性:相同含义的数据,其格式和内容必须统一。比如,“运输方式”这一列,不能同时出现“空运”、“AIR”、“Air Freight”等多种表述;日期不能有的是“2023-01-01”,有的是“2023年1月1日”。
  3. 准确性:数据真实反映业务事实。这包括剔除明显的异常值(如库存数量为负数)、修正逻辑错误(如发货日期早于下单日期)。
  4. 适用性:数据的结构和内容适合后续分析。例如,将文本型分类变量(如“区域”:华东、华南)转换为数值型或虚拟变量;将数据聚合到合适的分析粒度(如按天、按周汇总订单)。

基于这四大标准,我们的数据处理流水线可以清晰地划分为几个阶段,而Excel和SPSS在其中扮演着不同角色。

2.2 Excel与SPSS的职责分工与协同逻辑

很多人问,既然SPSS也能做数据清洗,为什么还要用Excel?我的回答是:工具各有禀赋,协同效率最高

  • Excel:前端“粗加工”与“手术台”

    • 优势:界面直观,操作灵活,特别适合处理非结构化、格式混乱的初始数据。你可以像在手术台上一样,精确地定位到某个单元格进行修改、拆分、合并。
    • 核心职责
      • 数据接入与初步审视:从不同源系统导出CSV、TXT等格式,统一在Excel中打开,利用筛选、排序功能快速浏览,发现明显问题。
      • 大规模格式统一:使用“分列”功能处理混乱的日期、文本;用查找和替换批量修正不一致的表述;用TRIMCLEAN函数清除空格和不可见字符。
      • 复杂逻辑清洗:运用IFANDORVLOOKUP/XLOOKUP等函数,构建清洗规则。例如,用IFERROR配合VLOOKUP检查产品编码是否在主数据表中存在。
      • 初步探索与计算:使用数据透视表快速汇总、分析数据分布;用基础公式计算衍生指标(如满足率、周转率)。
  • SPSS:后端“精加工”与“质检站”

    • 优势:提供了一套完整、可记录、可重复的数据处理流程(语法),特别擅长基于统计规则的处理。
    • 核心职责
      • 缺失值诊断与处理:系统分析缺失模式(随机缺失、完全随机缺失等),并提供多种填补方法(序列均值、临近点均值、回归估计等),比Excel手动填补科学得多。
      • 变量转换与创建:方便地创建虚拟变量、计算变量(如生成对数变换以消除异方差)、重新编码(如将连续年龄分组)。
      • 异常值检测:利用箱线图、Z分数等统计方法系统识别异常值,并决定是修正、剔除还是保留。
      • 数据标准化/归一化:为消除量纲影响,使用“描述统计”过程中的“将标准化得分另存为变量”功能,快速实现Z-score标准化。

协同流程通常是:原始数据 →Excel(格式统一、简单清洗、逻辑校验、初步整合)→ 导出为CSV →SPSS(缺失值处理、异常值统计检测、变量转换、标准化)→ 得到建模用干净数据集。接下来,我们深入每个环节的实操细节。

3. Excel数据处理实战:从混乱到有序

假设我们手头有一份从公司ERP导出的近一年的销售订单明细表raw_sales.csv,和一份产品主数据表product_master.xlsx。我们的目标是清洗出一份可用于预测分析的销售数据。

3.1 数据导入与首次“体检”

不要一上来就修改原文件!永远先另存为一个工作副本,比如sales_cleaning_in_progress.xlsx

  1. 打开与审视:用Excel打开raw_sales.csv。首先关注以下几点:

    • 表头:第一行是否是合适的列名?有没有合并单元格?
    • 数据类型:选中整列,查看Excel左上角显示的格式。“日期”列是否被识别为日期?还是文本?“数量”、“金额”列是数字吗?
    • 明显错误:快速滚动,看看有没有#N/A#DIV/0!等错误值;有没有整行空白或明显不合理的数据(如金额为0)。
  2. 使用“表格”功能:选中数据区域,按Ctrl+T将其转换为“表格”。这能带来巨大好处:公式引用会自动结构化(如[@[产品编码]]),新增数据会自动扩展,筛选和汇总更方便。

3.2 数据清洗的“利器”:函数与功能

这是核心环节,我们针对常见问题逐一击破。

  • 问题一:不一致的日期格式原始数据中“订单日期”列混杂着“2023/12/01”、“20231201”、“Dec-23”等多种格式。

    • 处理:选中“订单日期”列 -> 数据选项卡 -> “分列” -> 下一步 -> 下一步 -> 在“列数据格式”中选择“日期”,并指定最接近的原始格式(如YMD)。对于“Dec-23”这种,可能需要先用DATEVALUE函数配合MIDFIND等文本函数进行提取转换。

    注意:分列功能是破坏性操作,务必在数据副本上操作,或先备份原列。

  • 问题二:产品信息不完整“产品编码”列是完整的,但我们还需要产品类别、单位成本等信息,这些在product_master.xlsx中。

    • 处理:使用XLOOKUP函数(Excel 365/2021及以上,若版本低则用VLOOKUP)进行匹配。
      =XLOOKUP([@产品编码], product_master!$A$2:$A$1000, product_master!$B$2:$B$1000, "未找到", 0)
      这个公式的意思是:在本行“产品编码”的值,到product_master表的A列(编码列)中查找,找到则返回同一行B列(类别列)的值,如果没找到则返回“未找到”,要求精确匹配。
    • 进阶技巧:为了处理匹配失败的情况,可以结合IFERROR
      =IFERROR(XLOOKUP(...), "数据缺失")
      这样,所有匹配不到主数据的产品都会清晰标记为“数据缺失”,方便后续集中处理。
  • 问题三:异常值与逻辑错误需要找出数量为负数、或金额异常大/小的记录。

    • 处理:添加辅助列“数据检查”。使用IFAND/OR函数设置规则。
      =IF(OR([@数量]<=0, [@单价]<=0), "异常:数值非正", IF([@金额]<>[@数量]*[@单价], "异常:金额计算错误", "正常"))

    然后筛选出所有标记为“异常”的行,逐一核查是数据错误还是特殊业务(如退货、冲销)。

  • 问题四:空白与重复

    • 处理空白:使用筛选功能,在关键列(如订单ID、产品编码)筛选“空白”。对于可推断的空白(如某些产品固定类别的缺失),可以用IF配合其他列信息填补;对于不可推断的,标记后可能需要在SPSS中处理。
    • 处理重复:使用“数据”选项卡下的“删除重复项”功能。但务必谨慎!供应链中的“重复”可能不是真重复,比如同一订单分多次发货。删除前,必须明确业务规则。

3.3 数据整合与初步聚合

清洗后的明细数据,往往需要聚合到适合分析的维度。

  1. 创建数据透视表:选中清洗后的表格 -> 插入 -> 数据透视表。
  2. 按需拖拽字段:例如,将“订单日期”拖到行(并组合为“月”),将“产品类别”拖到列,将“销售数量”拖到值(求和)。瞬间,你就得到了一张按月、按产品类别的交叉汇总表。
  3. 利用透视表分析:你可以快速计算月度占比、环比增长率等。这个聚合后的视图,是进入SPSS前非常好的探索性分析工具,能帮你发现趋势和宏观问题。

完成以上步骤后,将这份相对干净的数据另存为一个新的CSV文件,例如sales_cleaned_for_spss.csv,准备导入SPSS进行深加工。

4. SPSS数据处理精修:为建模做准备

sales_cleaned_for_spss.csv导入SPSS后,我们进入统计层面的数据精修阶段。

4.1 缺失值的高级处理

在Excel中,我们可能只是标记了缺失。在SPSS中,我们可以科学地处理它们。

  1. 分析缺失模式分析->缺失值分析。这个报告会告诉你每个变量缺失的比例,以及缺失模式是否是随机的。如果缺失是完全随机的,处理起来相对简单;如果是有模式的缺失,则需要更谨慎的模型。
  2. 处理缺失值转换->替换缺失值。SPSS提供了多种方法:
    • 序列均值:用整个序列的均值填补。适用于平稳序列。
    • 临近点的均值:用缺失值前后若干点的均值。适用于时间序列数据(如月度销售)。
    • 线性插值:用前后两个已知点做线性插值。适用于有明显趋势的数据。
    • 线性趋势:对整个序列做线性回归,用预测值填补。

    实操心得:对于供应链需求数据,我通常优先尝试“临近点的均值”或“线性插值”,因为它们能更好地保持局部趋势。填补后,务必创建一个新变量(如sales_imputed),并保留原变量(sales),以便对比。

4.2 异常值的统计识别与处理

Excel的逻辑检查能找到“硬错误”,SPSS则能发现统计意义上的“软异常”。

  1. 使用箱线图可视化图形->旧对话框->箱图。将需要检查的连续变量(如“销售额”)选入,可以按分类变量(如“产品类别”)分组查看。箱线图会清晰标出超出1.5倍四分位距的异常点。
  2. 计算Z分数分析->描述统计->描述,勾选“将标准化得分另存为变量”。这会为每个变量的每个个案生成一个Z分数(新变量如Z销售额)。通常,绝对值大于3的Z分数可被视为极端异常值。
  3. 决策与处理:识别出的异常值不能简单删除!首先要结合业务判断:是数据录入错误?还是真实的特殊事件(如大型促销、缺货导致的订单堆积)?如果是错误,可以用缺失值处理方法填补或修正;如果是真实事件,可能需要为建模创建哑变量(如“促销月”=1)来捕捉其影响,或者将这一时期的数据单独处理。

4.3 变量转换与创建

原始变量可能不适合直接放入模型。

  1. 创建虚拟变量(哑变量):对于分类变量,如“季节”(春、夏、秋、冬),需要转换为虚拟变量。转换->创建虚变量。SPSS会自动生成n-1个新变量(例如,以“冬季”为参照,生成“季节_春”、“季节_夏”、“季节_秋”)。
  2. 计算新变量转换->计算变量。例如,如果原始数据波动很大,可以创建对数变换变量以稳定方差:在“目标变量”输入ln_sales,在“数字表达式”输入LN(sales)。或者,创建滞后变量用于时间序列预测:sales_lag1=LAG(sales, 1)
  3. 数据标准化:如果后续建模涉及距离计算(如聚类分析)或使用梯度下降的算法,需要对连续变量标准化。分析->描述统计->描述,勾选“将标准化得分另存为变量”即可生成Z-score标准化后的变量。另一种方法是转换->准备建模数据->自动准备数据,SPSS会根据变量类型自动进行标准化、创建哑变量等预处理。

完成所有SPSS处理后,你得到的数据集已经高度规范化。此时,可以通过文件->导出,将数据保存为CSV或直接用于SPSS内置的建模模块(如回归、时间序列模型)。

5. 常见陷阱与实战经验分享

走过太多弯路,这里分享几个最容易踩坑的地方和应对技巧。

5.1 时间数据的“天坑”

供应链数据重度依赖时间,但时间处理陷阱最多。

  • 陷阱:时区不一致(如系统记录UTC时间,但分析需要本地时间)、财年与自然年混淆、工作日与自然日未区分。
  • 应对:在Excel清洗阶段,就建立明确的时间处理规范。使用NETWORKDAYS函数计算实际工作日;创建一个“日期维度表”,包含日期对应的年、月、周、季度、财年、是否节假日、是否周末等字段,通过VLOOKUP关联到主数据。在SPSS中,使用DATE函数族确保日期格式正确。

5.2 数据合并时的“多米诺骨牌”错误

从多个源合并数据是常态,但一个键值错误会导致整批数据错位。

  • 陷阱:使用VLOOKUP时未锁定查找区域(应用$符号),导致公式下拉时区域偏移;合并后未做一致性检查(如左右表记录数是否匹配)。
  • 应对永远、永远、永远VLOOKUP/XLOOKUP的查找区域使用绝对引用(如$A$2:$B$1000)。合并后,立即用COUNTIF或数据透视表核对关键指标的汇总数是否与合并前各源数据之和一致。在SPSS中合并文件时,仔细选择“按关键变量匹配个案”的选项,并勾选“指示个案来源变量”,以追踪合并后的数据来源。

5.3 过度清洗与信息损失

为了追求“干净”,有时会过度处理,反而抹杀了有价值的信息。

  • 陷阱:武断地删除所有异常值,可能就删除了“黑天鹅”事件或新的业务模式信号;用全局均值填补所有缺失值,可能扭曲了不同群体间的差异。
  • 应对:建立数据清洗的“审计轨迹”。在Excel中,使用辅助列记录每一步清洗操作的原因(如“删除,因数量为负且无退货记录”)。在SPSS中,使用语法(.sps文件)记录所有转换步骤,而不是仅通过菜单点击。这样,任何一步都可以追溯、复核和调整。对于异常值和缺失值,尝试多种处理方法,并比较不同处理下后续建模效果的差异。

5.4 工具依赖与思维缺失

最危险的陷阱是沉迷于工具操作,而忘记了业务思考。

  • 陷阱:学会了所有函数和菜单,但不理解为什么某个产品在促销期销量激增,也不清楚库存为负在系统中是如何产生的。
  • 应对:数据处理不是闭门造车。每发现一个异常,每处理一个缺失值,都应该去和业务部门(销售、采购、仓库)沟通确认。他们的解释往往能让你发现数据背后的真实业务逻辑,甚至可能暴露出更深刻的系统或流程问题。你的角色不是一个数据技工,而是一个用数据与业务对话的翻译官。

最后,我想强调的是,供应链数据预处理没有一成不变的“金科玉律”。今天分享的Excel和SPSS的这套组合流程,是我经过多年项目锤炼,认为在效率、效果和普适性上比较平衡的一套方法。真正的功力,在于你能在面对一份全新的、混乱的数据时,如何快速运用这些工具和思维,设计出针对性的清洗方案,并在这个过程中不断加深对业务本身的理解。记住,干净、可靠的数据是模型价值的唯一前提,而这份“干净”的背后,是你对业务的洞察和对细节的执着。

← 返回列表