跳到主内容

第 4 步 · 共 8 步

数据清洗

清洗不是把数据改成“好看”的样子,而是把每个处理决定写清楚:改了什么、为什么改、影响多少行、结果会不会变。

约 6 分钟读完最后更新:2026-10-31

本步要解决的问题

数据里哪些地方会悄悄把结果带偏?

做完这一步,你会得到

  • 一次逐列对数:行数、列数、ID 唯一性、取值范围与分类水平
  • 缺失值处理方案与影响行数记录
  • 异常值清单:来源调查、处理决定与敏感性分析
  • 反向计分、哑变量和必要的变量变换

一、导入后先对数

拿到 CSV 的第一件事不是跑分析,而是核对:行数、列数、ID 是否唯一、每个变量的取值范围、 分类变量的水平数。对数能在五分钟内发现大部分导出错误。

  • 行数:原始 220 行,与发放记录是否一致?
  • 列数:14 列,字段名是否和字典一致?有没有多出平台自带的序号列?
  • ID:S001–S220 是否唯一、有没有重复或跳号?
  • 取值范围:依赖与睡眠题项是否都在 1–5?有没有 0、99 或空字符串?
  • 分类水平:性别是否只有 0/1,年级是否只有 1–4?

这一步可以用频数分析看分类变量,用描述性统计看连续变量的最小值、最大值和缺失数。

核对和清洗尽量用脚本完成,不要在 Excel 里手工改单元格。手工修改没有记录、无法复现, 也容易因为排序或筛选错行。把清洗步骤写成可重复运行的脚本,或至少按顺序记录每一步操作, 才能在换一批数据时重跑,也才能在答辩时回答“这一行到底是怎么处理的”。

二、缺失值:先看模式,再选方法

缺失处理没有统一答案,但有三条底线:不要默认填 0;要说明缺失比例和模式;要记录处理方法。 如果缺失与某个变量系统相关(例如高分学生更可能不填),整行删除会引入偏差。

方法适用情形注意
整行删除(listwise)缺失比例低、分散,且近似随机样本量下降;非随机缺失会引入偏差
均值 / 中位数 / 众数填充少量缺失,只需近似估计会低估方差;不要用于关键结局
指定值 / 插值有明确规则或时间序列指定值必须有依据;插值要说明方法
多重插补缺失比例较高、近似 MAR需外部工具;MNAR 下仍会有偏,需另做敏感性分析

站内数据处理支持整行删除、均值 / 中位数 / 众数 / 指定值 / 插值填充,并会给出处理前后的行数。 无论用哪种方法,都要在清洗日志里写清影响行数。

缺失比例的经验边界

缺失低于 5% 且分散时,整行删除通常可以接受;5%–20% 要谨慎解释并考虑插补; 超过 20% 时,任何处理都可能明显改变结论,需要把缺失机制纳入讨论。

三、异常值:先调查,再决定

异常值不一定是错误。它可能是录入错误,也可能是真实但少见的观测。正确顺序是: 检测 → 回查来源 → 判断保留或剔除 → 做敏感性分析。直接删除会掩盖问题,也会让结果看起来比实际更稳。

三种常见检测方法

  • IQR 法:低于 Q1 − 1.5×IQR 或高于 Q3 + 1.5×IQR 记为轻度异常,超出 3×IQR 记为极端异常。
  • Z-score 法:|z| 大于 2 或 3 作为提示,适合近似正态的变量。
  • Grubbs 检验:检验“是否存在一个离群值”,适合单变量、近似正态的样本。

案例中的异常值

日均使用时长的 Q1 = 2.1,Q3 = 4.1,IQR = 2.0,IQR 法上下界为 -0.9 与 7.1 小时。

S088 报告 14.2 小时,属于极端异常;S041 报告 7.7 小时,属于轻度偏离。 回查后未发现录入错误,主分析保留两者。

敏感性分析剔除极端值后(n = 217), 依赖与睡眠的相关为 r = -0.694, 主分析为 r = -0.685; 分层回归的 ΔR² 从 0.533 变为 0.534。方向和量级都稳定,因此保留主分析。

四、变量处理:反向、编码、哑变量与变换

清洗阶段常见的变量操作有四类。每做一步,都应在日志里留下“原变量 → 新变量”的对照, 避免分析时说不清用的是哪一版。

  • 反向计分:反向题先转换(如 6 − x),再与其他题项相加。
  • 分类合并:小类别合并要有理论依据,不要为了让卡方显著而合并。
  • 哑变量:多分类变量进入回归前转成 k−1 个 0/1 变量,并指定参照组。
  • 变量变换:右偏变量可尝试对数、平方根或倒数;变换后要重新检查分布。

数据处理可以完成编码、哑变量和缺失值处理;数据转换提供常用变换;异常值检测提供 IQR、Z-score 与 Grubbs。变换后别只看 p 值,用正态性检验和图形一起判断。

五、清洗日志与交付物

清洗结束,交付两份文件:清洗后的 CSV 和一份清洗日志。日志至少包含:处理的变量、 方法、影响行数、处理前后关键统计量的变化、做出该决定的理由;末尾注明生成日期和执行人。

步骤处理影响理由
缺失整行删除220 → 218 行缺失 0.9%,分散于睡眠题项
异常值保留,另做敏感性分析主分析 218 行;敏感性 217 行回查无录入错误,结论稳定
量表依赖 5 题合成均分新增 dep 均分按操作化定义;第 5 题后续复核

在本案例中

案例原始数据有 220 行,其中 2 行各缺 1 个睡眠题项。 缺失比例约 0.9%,且分散在不同题项,采用整行删除(listwise),保留 218 行。

异常值检测发现日均使用时长存在 1 个极端值(S088,14.2 小时) 和 1 个轻度偏离值(S041,7.7 小时)。主分析保留, 另做剔除极端值的敏感性分析,主要结论不变。

在完整案例里看这一步的实际操作 →

常见误区

  • 静默丢行:清洗脚本删掉了缺失行,却没有在日志里记录,最后样本量对不上。
  • 异常值直接删:看到 14 小时就删掉,不调查来源,也不看删除后结论是否改变。
  • 反向题未反向:计分方向相反,信度偏低却归因于“量表不好”。
  • 把缺失当类别:把空值编码成 0 或 9,模型把它当成真实取值。

本步工具

延伸阅读