)
一、先搞清楚报告里都有什么一份典型的 CMM 报告核心是一张特征表每一行是一个被测特征常见列有特征名、名义值、实测值、上偏差、下偏差、实测偏差最后还有合格与否的结论。我们做自动化的第一步就是把它读成一张 DataFrame后面所有统计都在这张表上做。不同软件表头不一样但结构都长这样。二、用 pandas 读进来pythonimport pandas as pd import matplotlib.pyplot as plt classclasscode-stringcode-comment# 假设导出的 CSV 表头是特征,名义值,实测值,上偏差,下偏差,实测偏差 df pd.read_csv(classcode-stringcmm_report.csv, encodingclasscode-stringutf-8) print(classcode-string共, len(df), classcode-string个特征) print(df[[classcode-string特征, classcode-string名义值, classcode-string实测值, classcode-string实测偏差]].head()) classclasscode-stringcode-comment# 简单判定合格实测偏差落在上下偏差之间 df[classcode-string合格] (df[classcode-string实测偏差] df[classcode-string下偏差]) (df[classcode-string实测偏差] df[classcode-string上偏差]) print(classcode-string合格率%.1f%% % (df[classcode-string合格].mean() * 100))这里有个坑要提醒不同测量软件导出的列名千奇百怪有的叫“DEV”有的叫“偏差(mm)”有的上偏差写“TOL”。别硬套字段名先 print(df.columns) 看一眼真实表头再改代码比盲写省十分钟也避免后面算错。三、画个偏差分布直方图周会上老板不想看表想看趋势。把偏差画成直方图一眼就知道这批是整体偏移还是个别点超标。中间画条零基准线偏左偏右一目了然。pythonplt.hist(df[classcode-string实测偏差], bins20, colorclasscode-stringclasscode-comment#2b7de9, edgecolorclasscode-stringwhite) plt.axvline(0, colorclasscode-stringk, lw1, linestyleclasscode-string--) plt.title(classcode-string测量偏差分布) plt.xlabel(classcode-string偏差 (mm)); plt.ylabel(classcode-string频次) plt.show()四、把超差最大的特征挑出来与其全列出来不如直接看最危险的几个。按偏差绝对值排序取前 10画个横向柱状图红的代表超差方向汇报时直奔主题老板也能秒懂。pythontop df.reindex(df[classcode-string实测偏差].abs().sort_values(ascendingFalse).index).head(10) plt.barh(top[classcode-string特征], top[classcode-string实测偏差], colorclasscode-stringclasscode-comment#f04142) plt.axvline(0, colorclasscode-stringk, lw0.8) plt.title(classcode-string偏差最大的 10 个特征) plt.xlabel(classcode-string偏差 (mm)) plt.gca().invert_yaxis() plt.show()五、再来一张“实测 vs 名义”散点图直方看整体分布散点看每个特征离目标多远。横轴名义值、纵轴实测值理想情况点应该贴着 yx 这条对角线明显偏离的点就是要重点查的。pythonplt.scatter(df[classcode-string名义值], df[classcode-string实测值], cclasscode-stringclasscode-comment#2b7de9) import numpy as np lim [df[[classcode-string名义值,classcode-string实测值]].min().min(), df[[classcode-string名义值,classcode-string实测值]].max().max()] plt.plot(lim, lim, classcode-stringk--, lw1, labelclasscode-string理想 yx) plt.xlabel(classcode-string名义值); plt.ylabel(classcode-string实测值); plt.legend() plt.show()Q软件导出的不是 CSV 是 DMIS 文本怎么办ADMIS 是标准测量语句用正则按 OUTPUT / END 段把特征和结果抠出来整理成上面的字段后面绘图逻辑完全复用不用重写。提示这只是入门。后面可以接 SPC 控制图做趋势预警超差项自动标红推送。把“测完即出图”跑通你每周能省下大半天手工活还不容易抄错数。