python画spc控制图_SPC系列8:如何选择计数型数据的SPC控制图?

SPC控制图可以分为计量型和计数型。计量型控制图的选择已经在另一篇文章中解释。这里来讨论一下计数型控制图的选择。

AIAG的SPC手册中介绍了4种计量型控制图:p控制图,np控制图,u控制图,c控制图。而用到计数型控制图的情况可以归类为两种:

1) 一种是需要把被测量对象归类,例如合格/不合格,一等品/二等品/次品,bin 1/bin 2/bin 3...等等,

2) 另一种是需要对被测量对象计数,例如产品上存在多少个缺陷,一年发生多少次火灾...等等

下面分别来讨论下这两种情况应如何选择控制图。

需要把测量对象归类的情况

这一类控制图常见的情况有两种

1)需要监控子组样本中不合格品产品的数量,例如每次抽检100个产品,统计该子组中有多少个不合格品,将不合格品的数量绘制在控制图中。这个时候应该选择np控制图

2)需要监控子组样本中产品的不合格率,例如每次抽检100个产品,统计该子组中有多少个不合格品,将不合格品的比例绘制在控制图中。这个时候应该选择p控制图。

在SPC手册中有提到使用以上两种控制图时,都要求子组中不合格品的数量

equation?tex=%5Cgeq5 比较小,因为只有在这个条件下,样本中的不合格率或不合格品数量才可以用正态分布来近似,本文最下面公式1和2中的控制限才成立。所以当不合格率比较低时,使用p图或np图时样本容量需要足够大,如果无法得到足够大的样本,则不应该使用这两类控制图。

注:以上的讨论是基于产品分为合格/不合格两类的情况。而当需要把产品分成n(

equation?tex=n%5Cgeq3 )个类别时,应按照上面的要求对其中的n-1个类别都分别建立控制限,任何一个类别的控制图出现异常的时候,都应该采取措施以消除特殊原因。

需要对测量对象计数的情况

这一类控制图常见的情况有两种

1) 需要监控子组样本中缺陷的数量,例如每次抽检一个产品,统计该产品上的缺陷总数,将每次抽样的样品的缺陷总数绘制在控制图中。这个时候应该选择c控制图。

2)需要监控子组样本中缺陷的密度,例如每次抽检一个产品,统计单位面积上的缺陷数量,将每次抽样的样品的缺陷密度绘制在控制图中。这个时候应该选择u控制图。

在SPC手册中有提到使用以上两种控制图时,都要求缺陷数为0的样本数量比较小,因为只有在这个条件下,样本的缺陷总数或缺陷密度才可以用正态分布近似,下面公式3和4中的控制限才成立。所以当多数产品的缺陷数为0的时候,不应该选用这两类控制图。

额外说明

如果不合格率

equation?tex=%5Cbar%7Bp%7D 很低的话,u图和p图是一样的,而c图和np图是一样的。因为根据下面的控制限的计算公式,当

equation?tex=%5Cbar%7Bp%7D 很小的时候,p图的控制限为

equation?tex=%5Cbar%7Bp%7D%5Cpm3%5Csqrt%7B%5Cfrac%7B%5Cbar%7Bp%7D%7D%7Bn%7D%7D ,np图的控制限为

equation?tex=n%5Cbar%7Bp%7D%5Cpm3%5Csqrt%7Bn%5Cbar%7Bp%7D%7D ,令u=p,c=np,就得到了以上结论。p控制图:

equation?tex=%5Cbar%7Bp%7D%5Cpm3%5Csqrt%7B%5Cfrac%7B%5Cbar%7Bp%7D%281-%5Cbar%7Bp%7D%29%7D%7Bn%7D%7D (公式1)

np控制图:

equation?tex=n%5Cbar%7Bp%7D%5Cpm3%5Csqrt%7Bn%5Cbar%7Bp%7D%281-%5Cbar%7Bp%7D%29%7D (公式2)

u控制图:

equation?tex=%5Cbar%7Bu%7D%5Cpm3%5Csqrt%7B%5Cfrac%7B%5Cbar%7Bu%7D%7D%7Bn%7D%7D (公式3)

c控制图:

equation?tex=%5Cbar%7Bc%7D%5Cpm3%5Csqrt%7B%5Cbar%7Bc%7D%7D (公式4)

好的,下面是一段利用Python编写的u与c控制的代码: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt # 生成数据 data = np.random.normal(loc=10, scale=2, size=100) df = pd.DataFrame(data, columns=['Value']) # 计算统计量 mean = df['Value'].mean() std = df['Value'].std() # 计算控制限 ucl = mean + 3 * std / np.sqrt(len(df)) lcl = mean - 3 * std / np.sqrt(len(df)) cl = mean # 绘制u控制 fig, ax = plt.subplots() ax.axhline(ucl, color='r', linestyle='--', label='UCL') ax.axhline(cl, color='b', linestyle='--', label='CL') ax.axhline(lcl, color='r', linestyle='--', label='LCL') ax.plot(df['Value'], 'o-', label='Value') ax.legend() ax.set_title('U Chart') # 计算c值 df['Count'] = 1 count_mean = df['Count'].mean() count_std = df['Count'].std() # 计算控制限 cucl = count_mean + 3 * count_std clcl = count_mean cl = count_mean - 3 * count_std # 绘制c控制 fig, ax = plt.subplots() ax.axhline(cucl, color='r', linestyle='--', label='UCL') ax.axhline(cl, color='b', linestyle='--', label='CL') ax.axhline(clcl, color='r', linestyle='--', label='LCL') ax.plot(df['Count'], 'o-', label='Count') ax.legend() ax.set_title('C Chart') ``` 这段代码会生成两个,一个是u控制,一个是c控制。其中,u控制用于监控连续数据的变化,c控制用于监控计数数据的变化。需要注意的是,这段代码中生成的数据是随机的,实际应用时需要根据具体的业务场景来生成数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值