过程能力指数(CPK)统计报表
把一批检验 / 检测 / 测量数据,按产品分组套用各自规格,算成一张带色标的 CPK 汇总表。
规格、指标、分组、列名全部写在 config.json 里,改业务不用改代码。
何时使用
- 用户给了一个目录(或单个文件)的检验数据,要「算一下 CPK / 出过程能力报表」。
- 数据形态:每批/每个产品有若干测点,需要对照上下规格限评估制程能力。
- 输入
.xlsx/.xls/.csv;输出带色标的.xlsx(可选.csv明细)。
快速开始
pip install openpyxl
python scripts/cpk_report.py \
--data <数据目录或文件> \
--config <config.json> \
--out CPK汇总.xlsx \
--csv-out CPK明细.csv # 可选
自带示例(建议先跑一遍确认环境):
python examples/make_sample_data.py # 生成合成的示例数据(sample_data.csv / .xlsx)
python scripts/cpk_report.py --data examples/sample_data.csv \
--config config/config.example.json \
--out examples/CPK汇总_示例.xlsx --csv-out examples/CPK明细_示例.csv
配置怎么写(唯一需要用户提供的东西)
{
"min_n": 10, // 有效样本数低于此值不出数
"good": 1.33, "warn": 1.0, // 色标阈值:≥good 绿;warn~good 橙;<warn 红
"header_row": 1, // 表头所在行(1-based)
"group_col": "产品型号", // 分组列:列名 或 1-based 列号;null = 用文件名做分组名
"file_patterns": ["*.xlsx", "*.csv"],
"recursive": false,
"font": "微软雅黑",
"columns": { // 指标名 -> 该指标在数据中的候选列名
"外径(mm)": ["外径(mm)", "外径"]
},
"specs": { // 规格档 -> 指标 -> 上下限(lsl/usl 可为 null = 单侧规格)
"高精度档": {
"外径(mm)": { "usl": 50.05, "lsl": 49.95 },
"表面粗糙度Ra": { "usl": 0.8, "lsl": null }
}
},
"groups": [ // 分组规则:命中 match 中任一关键字的原始数据合并为一组
{ "name": "P系列轴套", "spec": "高精度档", "match": ["P-100", "P-200"] }
]
}
方法论(脚本固定实现,勿随意更改)
- σ 取样本标准差(n−1);n=1 时 σ=0,Cp 记为「—」。
- Ca = (x̄ − M) / (T/2);Cp = T / (6σ);CPU = (USL − x̄)/3σ;CPL = (x̄ − LSL)/3σ。
- CPK = min(CPU, CPL),等价于 Cp × (1 − |Ca|)。
- 单侧规格(只有 USL 或只有 LSL)无 Ca / Cp 定义,报表显示「—」,CPK 取存在的那一侧。
- 一个
group可命中多个原始数据分组名(如 P-100 与 P-200),合并后算一个 CPK。 groups中未列出的分组自动剔除,并在控制台列出被剔除的分组名。- 有效样本 n <
min_n的指标不出数,标为n<10,避免小样本虚高。
报表结构
- 表头:标题 + 阈值说明;之后每个分组一段(橙底分组行 + 12 行统计量)。
- 行:规格上限 / 规格下限 / 样本量 / 平均值 / 标准差 / 规格公差 / 规格中心 / Ca / Cp / CPU / CPL / CPK。
- 列:该分组规格档下的全部指标。
- CPK 行带色标(≥1.33 绿 / 1.00–1.33 橙 / <1.00 红,阈值可配);负值表示均值已越限。
排错清单
| 现象 | 原因与处理 |
|---|---|
| 提示「没有任何分组命中」 | groups.match 的关键字与数据里的分组值对不上;看控制台打印的实际分组名样本 |
某指标整列 n<10 |
样本不足,或 columns 的候选列名没匹配上(列名有空格/单位差异) |
| 指标值全是「—」 | 该指标被配成单侧规格且判定为无 Cp;或数值列是文本且转换失败 |
| 报表里混进了上一次的输出 | 已自动排除输出文件与 ~$ 临时文件;若仍出现,把输出写到数据目录之外 |
| 列名有重名 | 脚本按候选列名匹配并取填充最全的一列,把更准确的列名排在 columns 数组前面 |
注意事项
- 本技能只做能力指数汇总,不画 SPC 控制图、不做正态性检验;如需请另做。
- 结论解读:CPK 只反映「相对规格限的能力」,规格限本身不合理时 CPK 无意义。
- 不要在数据目录里留下临时文件;输出建议与数据源分目录存放。