Python自动化质量分析:3行代码生成正态分布报告(含Matplotlib可视化)
Python自动化质量分析3行代码生成正态分布报告含Matplotlib可视化在工业生产与质量管控领域正态分布分析是评估产品合格率的核心工具。传统方法依赖纸质表格查询和手工计算不仅效率低下还容易出错。本文将展示如何用Python的scipy.stats和matplotlib库通过简洁的代码实现动态正态分布分析让质量工程师从繁琐的手工操作中解放出来。1. 环境准备与基础概念在开始编写代码前需要确保已安装必要的Python库。推荐使用Anaconda发行版它已包含我们所需的大部分科学计算工具pip install numpy scipy matplotlib正态分布又称高斯分布由两个关键参数决定μ均值决定分布曲线的中心位置σ标准差决定曲线的胖瘦程度其概率密度函数为$$ f(x) \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{1}{2}(\frac{x-\mu}{\sigma})^2} $$提示在质量控制中通常将μ设为规格中心值σ反映制程波动大小。当μ0且σ1时称为标准正态分布。2. 核心代码实现2.1 生成正态分布曲线使用scipy.stats的norm模块只需3行代码即可生成完整的正态分布曲线import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt # 核心代码 mu, sigma 0, 1 # 可调整参数 x np.linspace(mu-4*sigma, mu4*sigma, 1000) plt.plot(x, norm.pdf(x, mu, sigma))这段代码会生成μ0、σ1的标准正态分布曲线x轴范围覆盖±4σ区间。2.2 动态调整参数通过交互式控件可以实时观察参数变化对曲线的影响from ipywidgets import interact interact(mu(-2, 2, 0.1), sigma(0.5, 2, 0.1)) def plot_normal(mu0, sigma1): x np.linspace(mu-4*sigma, mu4*sigma, 1000) plt.plot(x, norm.pdf(x, mu, sigma)) plt.title(f正态分布 (μ{mu}, σ{sigma})) plt.grid(True)运行后会显示滑动条调整μ和σ时曲线会实时更新这对理解参数作用非常直观。3. 高级分析功能3.1 自动计算合格率传统方法需要查表计算合格率而Python可以直接积分计算def calculate_yield(lower, upper, mu, sigma): return norm.cdf(upper, mu, sigma) - norm.cdf(lower, mu, sigma) # 示例计算±3σ区间的合格率 yield_3sigma calculate_yield(-3, 3, 0, 1) print(f±3σ区间合格率: {yield_3sigma*100:.2f}%)输出结果±3σ区间合格率: 99.73%3.2 可视化关键区间添加标注可以直观显示重要公差区间def plot_with_annotations(mu0, sigma1): x np.linspace(mu-4*sigma, mu4*sigma, 1000) plt.plot(x, norm.pdf(x, mu, sigma)) # 标注±1σ, ±2σ, ±3σ区间 for n in [1, 2, 3]: lower, upper mu-n*sigma, mun*sigma plt.axvline(lower, colororange, linestyle--) plt.axvline(upper, colororange, linestyle--) yield_pct calculate_yield(lower, upper, mu, sigma)*100 plt.text(mu, norm.pdf(mu, mu, sigma)*0.9-n*0.05, f±{n}σ: {yield_pct:.2f}%, hacenter) plt.title(f带标注的正态分布 (μ{mu}, σ{sigma})) plt.grid(True)4. 实战应用案例4.1 批量生成检验报告以下函数可以自动生成包含关键统计量的PDF报告from matplotlib.backends.backend_pdf import PdfPages def generate_reports(parameters_list, filenamequality_reports.pdf): with PdfPages(filename) as pdf: for mu, sigma in parameters_list: plt.figure(figsize(8, 6)) plot_with_annotations(mu, sigma) # 添加统计表格 col_labels [区间, 合格率] cell_text [ [f±1σ ({mu-sigma:.2f}~{musigma:.2f}), f{calculate_yield(mu-sigma, musigma, mu, sigma)*100:.2f}%], [f±2σ ({mu-2*sigma:.2f}~{mu2*sigma:.2f}), f{calculate_yield(mu-2*sigma, mu2*sigma, mu, sigma)*100:.2f}%], [f±3σ ({mu-3*sigma:.2f}~{mu3*sigma:.2f}), f{calculate_yield(mu-3*sigma, mu3*sigma, mu, sigma)*100:.2f}%] ] plt.table(cellTextcell_text, colLabelscol_labels, locbottom, bbox[0.1, -0.4, 0.8, 0.3]) pdf.savefig() plt.close()使用示例process_data [(10, 0.5), (15, 1.2), (20, 0.8)] # 多组(μ, σ)参数 generate_reports(process_data)4.2 制程能力指数计算CPK是衡量制程能力的重要指标可以轻松扩展我们的分析工具def calculate_cpk(usl, lsl, mu, sigma): 计算制程能力指数 cpu (usl - mu) / (3*sigma) cpl (mu - lsl) / (3*sigma) return min(cpu, cpl) # 示例规格上限12下限8实际μ10.2σ0.5 cpk calculate_cpk(12, 8, 10.2, 0.5) print(fCPK值: {cpk:.2f})将CPK分析加入报告plt.text(mu, norm.pdf(mu, mu, sigma)*0.6, fCPK: {cpk:.2f}, hacenter, bboxdict(facecolorwhite, alpha0.8))5. 性能优化技巧当需要处理大量数据时可以考虑以下优化方法向量化计算利用numpy的向量运算替代循环# 同时计算多个点的概率密度 x_values np.array([-2, -1, 0, 1, 2]) densities norm.pdf(x_values, 0, 1)并行处理对于独立的质量分析任务from concurrent.futures import ThreadPoolExecutor def analyze_process(params): mu, sigma params return calculate_yield(mu-3*sigma, mu3*sigma, mu, sigma) with ThreadPoolExecutor() as executor: results list(executor.map(analyze_process, process_data))缓存计算结果对于重复使用的中间结果from functools import lru_cache lru_cache(maxsize100) def cached_cdf(x, mu, sigma): return norm.cdf(x, mu, sigma)在实际项目中我发现将常用分析函数封装成类可以更好地组织代码class NormalDistributionAnalyzer: def __init__(self, mu, sigma): self.mu mu self.sigma sigma def pdf(self, x): return norm.pdf(x, self.mu, self.sigma) def cdf(self, x): return norm.cdf(x, self.mu, self.sigma) def yield_between(self, lower, upper): return self.cdf(upper) - self.cdf(lower) def plot(self, axNone, **kwargs): x np.linspace(self.mu-4*self.sigma, self.mu4*self.sigma, 1000) if ax is None: ax plt.gca() ax.plot(x, self.pdf(x), **kwargs) return ax
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424416.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!