4. 数据准备与清洗:JMP的“表”与“列”操作,Minitab的“工作表”与“堆叠/拆分”功能
在半导体良率分析中,原始数据往往来自多个机台、多个批次,格式混乱、结构不统一。数据准备与清洗是良率分析的第一步,也是决定分析质量的关键环节。JMP 和 Minitab 在数据整理上各有侧重:JMP 以“表”和“列”为核心,操作直观灵活;Minitab 以“工作表”为基础,通过“堆叠/拆分”实现数据结构转换。本章将系统对比两者的数据准备方法,帮助你在实际工作中高效完成数据清洗。
4.1 JMP 的“表”与“列”操作
JMP 的数据表(Data Table)是一个集数据存储、编辑、可视化于一体的交互式环境。每一列(Column)不仅存储数据,还携带属性(如数据类型、建模类型、公式、值标签等),这使得数据清洗可以在“列”层面直接完成。
4.1.1 表操作:数据源管理与合并
JMP 的表操作主要包括数据表的创建、连接、合并和子集提取。在良率分析中,最常用的是“表 > 连接”(Join)和“表 > 子集”(Subset)。
| 操作 | 菜单路径 | 良率应用场景 |
|---|---|---|
| 连接(Join) | 表 > 连接 | 将批次信息表与测试数据表按批次号匹配合并 |
| 子集(Subset) | 表 > 子集 | 筛选出特定机台或特定产品的良率数据 |
| 堆叠(Stack) | 表 > 堆叠 | 将多列测试参数合并为一列,便于后续分析 |
| 拆分(Split) | 表 > 拆分 | 将一列分类数据拆分为多列,用于分组对比 |
4.1.2 列操作:属性设置与公式清洗
JMP 的列操作是其数据清洗的核心优势。右键点击列标题,即可快速设置列属性、添加公式、重编码异常值。
- 列属性设置: 数据类型(数值/字符/多值)、建模类型(连续/名义/有序)、值标签(如将 0/1 映射为 Pass/Fail)。
- 公式列: 通过公式编辑器创建新列,例如计算良率 = Pass_Count / Total_Count,或根据测试条件自动分类。
- 列重编码: 使用“列 > 重编码”将异常值(如 -999、9999)统一标记为缺失值,避免影响后续分析。
- 列筛选: 在列面板中勾选/取消勾选列,快速隐藏无关字段,聚焦关键参数。
// JMP 公式列示例:根据测试结果自动标记良品/不良品
If( :Test_Result == 1, "Pass", "Fail" )
4.1.3 JMP 数据清洗流程 SVG 图
4.2 Minitab 的“工作表”与“堆叠/拆分”功能
Minitab 的数据组织以“工作表”(Worksheet)为单位,每个工作表包含若干列(C1, C2, ...)和行。Minitab 的数据准备更强调结构转换,其“堆叠”(Stack)和“拆分”(Unstack)功能是良率数据清洗的两大利器。
4.2.1 工作表管理:数据导入与列操作
Minitab 的工作表操作包括数据导入、列命名、列类型设置和列计算。与 JMP 不同,Minitab 的列操作更偏向批量和脚本化。
| 操作 | 菜单路径 | 说明 |
|---|---|---|
| 数据导入 | 文件 > 打开工作表 | 支持 Excel、CSV、文本文件,可指定导入范围 |
| 列命名 | 双击列标题 | 建议使用英文或拼音,避免特殊字符 |
| 列类型设置 | 数据 > 更改数据类型 | 数值/文本/日期/时间 |
| 列计算 | 计算 > 计算器 | 支持函数、条件判断、随机数生成 |
4.2.2 堆叠(Stack):多列合并为一列
在良率分析中,经常遇到多个测试参数分别存储在不同列的情况(如 CP1、CP2、CP3 分别代表三次测试的良率)。堆叠操作可以将这些列合并为一列,同时生成一个“下标”列来标识原始列名。
// Minitab 堆叠操作示例
// 原始数据:C1(批次), C2(CP1), C3(CP2), C4(CP3)
// 堆叠后:C1(批次), C5(测试阶段), C6(良率)
// 操作路径:数据 > 堆叠 > 列
// 堆叠列:C2 C3 C4
// 存储堆叠数据到:新工作表
// 存储下标到:C5(测试阶段)
4.2.3 拆分(Unstack):一列拆分为多列
拆分是堆叠的逆操作。当数据以“长格式”存储(一列包含所有测试阶段,另一列包含对应良率),需要按阶段拆分为多列进行对比分析时,使用拆分功能。
// Minitab 拆分操作示例
// 原始数据:C1(批次), C2(测试阶段), C3(良率)
// 拆分后:C1(批次), C4(CP1), C5(CP2), C6(CP3)
// 操作路径:数据 > 拆分 > 列
// 拆分列:C3(良率)
// 分组列:C2(测试阶段)
// 分组顺序:CP1 CP2 CP3
4.2.4 Minitab 堆叠/拆分流程 SVG 图
4.3 JMP 与 Minitab 数据准备功能对比
为了帮助你在实际工作中快速选择工具,下表从多个维度对比 JMP 和 Minitab 在数据准备与清洗方面的差异。
| 对比维度 | JMP | Minitab |
|---|---|---|
| 数据表结构 | 列携带属性(类型、公式、标签),交互性强 | 列以 C1/C2 编号为主,命名需手动设置 |
| 列操作方式 | 右键菜单 + 列面板,可视化程度高 | 菜单命令 + 计算器,适合批量处理 |
| 堆叠/拆分 | 表 > 堆叠 / 表 > 拆分,支持多列同时操作 | 数据 > 堆叠 / 数据 > 拆分,需指定分组列 |
| 公式列 | 动态公式,自动更新,支持条件判断 | 计算器生成静态列,需手动重新计算 |
| 异常值处理 | 列 > 重编码,支持条件筛选和批量替换 | 数据 > 条件格式,或使用计算器 IF 函数 |
| 数据合并 | 表 > 连接,支持左连接、右连接、内连接 | 数据 > 合并工作表,需指定关键列 |
| 适用场景 | 交互式探索、快速清洗、小批量数据 | 批量处理、标准化流程、大批量数据 |
4.4 良率数据清洗实战案例
假设我们有一份半导体测试数据,包含以下字段:批次号(LotID)、晶圆编号(WaferID)、测试站点(Site)、测试参数(Param1~Param10)和最终良率(Yield)。数据中存在缺失值、异常值和格式不一致问题。
4.4.1 JMP 清洗步骤
- 导入数据: 文件 > 打开,选择 CSV 文件。
- 设置列属性: 将 LotID 和 WaferID 设为“名义”类型,Yield 设为“连续”类型。
- 创建公式列: 添加新列“良率等级”,公式为
If( :Yield >= 0.95, "A", If( :Yield >= 0.85, "B", "C" ) )。 - 重编码异常值: 选中 Yield 列,列 > 重编码,将 -999 和 9999 替换为缺失值。
- 子集提取: 表 > 子集,筛选出 Site = "CP1" 的数据,用于后续分析。
4.4.2 Minitab 清洗步骤
- 导入数据: 文件 > 打开工作表,选择同一 CSV 文件。
- 列命名: 双击列标题,将 C1~C13 分别命名为 LotID、WaferID、Site、Param1~Param10、Yield。
- 堆叠参数列: 数据 > 堆叠 > 列,将 Param1~Param10 堆叠为一列“ParamValue”,下标列命名为“ParamName”。
- 拆分站点数据: 数据 > 拆分 > 列,将 Yield 按 Site 拆分为 CP1_Yield、CP2_Yield、CP3_Yield。
- 缺失值处理: 计算 > 计算器,使用 IF 函数将异常值替换为缺失值符号 *。
4.5 数据准备常见问题与避坑指南
- 缺失值处理: 不要直接删除含缺失值的行,先分析缺失模式(随机缺失/系统缺失),再决定填充或删除。
- 数据类型错误: 良率数据应为数值型,如果导入后显示为文本,检查原始数据中是否包含“%”符号或空格。
- 列名冲突: 合并多个数据表时,确保关键列名一致,否则连接结果可能出错。
- 堆叠/拆分顺序: 堆叠时注意下标列的顺序,拆分时确保分组列的值唯一且完整。
- 备份原始数据: 无论使用 JMP 还是 Minitab,始终保留一份原始数据副本,避免清洗操作不可逆。