品质协会(www.PinZhi.org)

 找回密码
 加入协会

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: martinxiao

Python for Quality

[复制链接]

0

主题

1万

回帖

0

精华

品质协会高级会员

Rank: 4

积分
15320
品质币
0
职位
22
发表于 昨天 10:48 | 显示全部楼层
感谢分享

2

主题

57

回帖

0

精华

品质协会中级会员

Rank: 3Rank: 3

积分
1269
品质币
1210
职位
25
发表于 昨天 15:04 | 显示全部楼层
楼主,求某个图表的演示代码,之前有这想法,不知道咋开始

69

主题

4120

回帖

8

精华

品质协会高级会员

Rank: 4

积分
4361
品质币
12
职位
26
发表于 昨天 15:53 | 显示全部楼层
感谢分享

2

主题

15

回帖

1

精华

品质协会中级会员

Rank: 3Rank: 3

积分
2322
品质币
2285
职位
27
 楼主| 发表于 昨天 21:43 | 显示全部楼层
黄牛大人 发表于 2026-6-24 15:04
楼主,求某个图表的演示代码,之前有这想法,不知道咋开始

1. 安装Python以及IDE,如Anaconda、PyCharm或Jupyter Noteboook,网上教程很多,选择一个
2. 安装必要的库,网络教程或者AI教程都有
3. 打开你的IDE,开始写代码
第一步:导包(导入常用的库)
  1. # import libraries
  2. import pandas as pd
  3. pd.set_option('display.unicode.ambiguous_as_wide', True)
  4. pd.set_option('display.unicode.east_asian_width', True)
  5. import numpy as np
  6. import matplotlib.pyplot as plt
  7. from scipy import stats
  8. import statsmodels.api as sm
  9. from statsmodels.formula.api import ols
  10. import pylab
  11. import seaborn as sns
  12. import openpyxl

  13. plt.rcParams['font.sans-serif'] = ['SimHei']
  14. plt.rcParams['axes.unicode_minus'] = False
复制代码
第二步:准备数据
我是将基本的数据放到了EXCEL文件中
PartAppraiserTrialMeasurement
1A10.29
1A20.41
1A30.64
2A1-0.56
2A2-0.68
2A3-0.58
3A11.34
3A21.17
3A31.27
4A10.47
4A20.50
4A30.64
5A1-0.80
5A2-0.92
5A3-0.84
6A10.02
6A2-0.11
6A3-0.21
7A10.59
7A20.75
7A30.68
8A1-0.31
8A2-0.20
8A3-0.17
9A12.26
9A21.99
9A32.01
10A1-1.36
10A2-1.25
10A3-1.31
1B10.08
1B20.25
1B30.07
2B1-0.47
2B2-1.22
2B3-0.68
3B11.19
3B20.94
3B31.34
4B10.01
4B21.03
4B30.20
5B1-0.56
5B2-1.20
5B3-1.28
6B1-0.20
6B20.22
6B30.06
7B10.47
7B20.55
7B30.83
8B1-0.63
8B2-0.08
8B3-0.34
9B11.80
9B22.12
9B32.19
10B1-1.68
10B2-1.82
10B3-1.50
1C10.04
1C2-0.11
1C3-0.15
2C1-1.38
2C2-1.13
2C3-0.96
3C10.88
3C21.09
3C30.67
4C10.14
4C20.20
4C30.11
5C1-1.46
5C2-1.07
5C3-1.45
6C1-0.29
6C2-0.67
6C3-0.49
7C10.02
7C20.01
7C30.21
8C1-0.46
8C2-0.66
8C3-0.49
9C11.77
9C21.45
9C31.87
10C1-1.49
10C2-1.77
10C3-2.16


第三步:写代码
  1. # 均值极差法
  2. # 重复性和再现性,不能分析交互作用
  3. # 3人10件各3次测量
  4. # 样件能代表过程实际变差或预期范围
  5. study_name = 'Repeatability and Reproducibility Study(Xbar-R)' # 研究名称
  6. df_GRR = pd.read_excel("MSA1_GRR.xlsx", sheet_name = "GRR2") # 读取存储的EXCEL数据
  7. # print(df_GRR)

  8. Xbarbar = df_GRR["Measurement"].mean() # 计算测量值的平均值
  9. Xmax = df_GRR["Measurement"].max() # 计算测量值的最大值
  10. Xmin = df_GRR["Measurement"].min() # 计算测量值的最小值
  11. Xbar_ij = df_GRR.groupby(["Appraiser","Part"]).agg(Xbar_ij=("Measurement","mean")).reset_index() # 按照检验员、零件计算测量值的平均值
  12. # print(Xbar_ij)
  13. R_ij = df_GRR.groupby(["Appraiser","Part"]).agg(R_ij=("Measurement", lambda x: x.max()-x.min())).reset_index() # 按照检验员、零件计算测量值的极差
  14. Rmax = R_ij["R_ij"].max() # 计算极差的最大值
  15. # print(R_ij)

  16. fig, ax = plt.subplots(nrows=2, ncols=2, figsize= [14,6], layout = "tight") # 创建画布,为绘图做准备
  17. ax = ax.ravel()

  18. Xbar_Aj = Xbar_ij.query("Appraiser=='A'")["Xbar_ij"] # 从Xbar_ij中提取检验员A的平均值
  19. Xbar_Bj = Xbar_ij.query("Appraiser=='B'")["Xbar_ij"] # 从Xbar_ij中提取检验员B的平均值
  20. Xbar_Cj = Xbar_ij.query("Appraiser=='C'")["Xbar_ij"] # 从Xbar_ij中提取检验员C的平均值
  21. std_X = 0.05 # 计算标准差,为了控制图上控制线计算做准备,我这里直接假设标准差为0.05
  22. UCL_Xbar = Xbarbar + 3 * std_X # 上控制线,这里直接采用的3倍标准差,实际按照控制图去计算
  23. LCL_Xbar = Xbarbar - 3 * std_X # 下控制线,这里直接采用的3倍标准差,实际按照控制图去计算

  24. R_Aj = R_ij.query("Appraiser=='A'")["R_ij"] # 从R_ij中提取检验员A的极差
  25. R_Bj = R_ij.query("Appraiser=='B'")["R_ij"] # 从R_ij中提取检验员B的极差
  26. R_Cj = R_ij.query("Appraiser=='C'")["R_ij"] # 从R_ij中提取检验员C的极差
  27. R_Abar = R_ij.query("Appraiser=='A'")["R_ij"].mean() # 计算检验员A的极差平均值
  28. R_Bbar = R_ij.query("Appraiser=='B'")["R_ij"].mean() # 计算检验员B的极差平均值
  29. R_Cbar = R_ij.query("Appraiser=='C'")["R_ij"].mean() # 计算检验员C的极差平均值
  30. Rbarbar = (R_Abar + R_Bbar + R_Cbar) / 3 # 计算整体极差的平均值
  31. D4 = 2.58 #
  32. UCL_R = Rbarbar * D4 # 计算极差控制图的控制上线
  33. LCL_R = 0

  34. # 下面是绘图代码
  35. # 均值图(重叠)
  36. ax[0].plot(range(1,11), Xbar_Aj, marker = "o", linestyle = "--", label ="Appraiser A") # 绘制检验员A的均值图
  37. ax[0].plot(range(1,11), Xbar_Bj, marker = "s", linestyle = "-.", label ="Appraiser B") # 绘制检验员B的均值图
  38. ax[0].plot(range(1,11), Xbar_Cj, marker = "d", linestyle = ":", label ="Appraiser C") # 绘制检验员C的均值图
  39. ax[0].axhline(Xbarbar, color="g", linestyle = "-") # 添加平均值的参考线
  40. ax[0].axhline(UCL_Xbar, color="r", linestyle = "-.") # 添上控制限的参考线
  41. ax[0].axhline(LCL_Xbar, color="r", linestyle = "-.") # 添加下控制限的参考线
  42. ax[0].text(10.5, UCL_Xbar, "UCL", va="bottom") # 添加控制限文字
  43. ax[0].text(10.5, LCL_Xbar, "LCL", va="top") # 添加控制限文字
  44. ax[0].legend(loc="best") # 显示图例
  45. ax[0].set_xticks(range(1,11)) # 设置X轴刻度
  46. ax[0].set_xlabel("Part") # 设置X轴标签
  47. ax[0].set_ylabel("Average") # 设置Y轴标签
  48. ax[0].set_title("Average Chart") # 设置图表名称
  49. # 均值图(展开)
  50. ax[1].plot(range(1,11), Xbar_Aj, marker = "o", linestyle = "--", label ="Appraiser A")
  51. ax[1].plot(range(11,21), Xbar_Bj, marker = "s", linestyle = "--", label ="Appraiser B")
  52. ax[1].plot(range(21,31), Xbar_Cj, marker = "d", linestyle = "--", label ="Appraiser C")
  53. ax[1].text(1, Xmax,"Appraiser A", va="bottom")
  54. ax[1].text(11, Xmax,"Appraiser B", va="bottom")
  55. ax[1].text(21, Xmax,"Appraiser C", va="bottom")
  56. ax[1].axhline(Xbarbar, color="g", linestyle = "-")
  57. ax[1].axhline(UCL_Xbar, color="r", linestyle = "-.")
  58. ax[1].axhline(LCL_Xbar, color="r", linestyle = "-.")
  59. ax[1].axvline(10.5, color = "b", linestyle = "--")
  60. ax[1].axvline(20.5, color = "b", linestyle = "--")
  61. ax[1].text(31.5, UCL_Xbar, "UCL", va="bottom")
  62. ax[1].text(31.5, LCL_Xbar, "LCL", va="top")
  63. ax[1].set_xticks(ticks=np.arange(1,31),labels=[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10])
  64. ax[1].set_xlabel("Appraiser - Part")
  65. ax[1].set_ylabel("Average")
  66. ax[1].set_title("Average Chart")
  67. # 极差图(重叠)
  68. ax[2].plot(range(1,11), R_Aj, marker = "o", linestyle = "--", label ="Appraiser A")
  69. ax[2].plot(range(1,11), R_Bj, marker = "s", linestyle = "-.", label ="Appraiser B")
  70. ax[2].plot(range(1,11), R_Cj, marker = "d", linestyle = ":", label ="Appraiser C")
  71. ax[2].axhline(Rbarbar, color="g", linestyle = "-")
  72. ax[2].axhline(UCL_R, color="r", linestyle = "-.")
  73. ax[2].axhline(LCL_R, color="r", linestyle = "-.")
  74. ax[2].text(10.5, UCL_R, "UCL", va="bottom")
  75. ax[2].text(10.5, LCL_R, "LCL", va="top")
  76. ax[2].legend(loc="best")
  77. ax[2].set_xticks(range(1,11))
  78. ax[2].set_xlabel("Part")
  79. ax[2].set_ylabel("Range")
  80. ax[2].set_title("Range Chart")
  81. # 极差图(展开)
  82. ax[3].plot(range(1,11), R_Aj, marker = "o", linestyle = "--", label ="Appraiser A")
  83. ax[3].plot(range(11,21), R_Bj, marker = "s", linestyle = "--", label ="Appraiser B")
  84. ax[3].plot(range(21,31), R_Cj, marker = "d", linestyle = "--", label ="Appraiser C")
  85. ax[3].text(1, Rmax,"Appraiser A", va="bottom")
  86. ax[3].text(11, Rmax,"Appraiser B", va="bottom")
  87. ax[3].text(21, Rmax,"Appraiser C", va="bottom")
  88. ax[3].axhline(Rbarbar, color="g", linestyle = "-")
  89. ax[3].axhline(UCL_R, color="r", linestyle = "-.")
  90. ax[3].axhline(LCL_R, color="r", linestyle = "-.")
  91. ax[3].axvline(10.5, color = "b", linestyle = "--")
  92. ax[3].axvline(20.5, color = "b", linestyle = "--")
  93. ax[3].text(31.5, UCL_R, "UCL", va="bottom")
  94. ax[3].text(31.5, LCL_R, "LCL", va="top")
  95. ax[3].set_xticks(ticks=np.arange(1,31),labels=[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10])
  96. ax[3].set_xlabel("Appraiser - Part")
  97. ax[3].set_ylabel("Range")
  98. ax[3].set_title("Range Chart")

  99. plt.show()
复制代码
我这里写的代码是最简单的入门代码,没有使用循环去绘图,使用循环绘图代码会简短一些,等后面再去优化更新。
其实现在Python的教程资料很多,AI也能帮忙写代码。
希望上面的代码可以帮到你,有问题再联系。

10

主题

315

回帖

0

精华

品质协会中级会员

Rank: 3Rank: 3

积分
1022
品质币
697
职位
28
发表于 8 小时前 | 显示全部楼层
看起来很复杂的样子

2

主题

57

回帖

0

精华

品质协会中级会员

Rank: 3Rank: 3

积分
1269
品质币
1210
职位
30
发表于 5 小时前 | 显示全部楼层
martinxiao 发表于 2026-6-24 21:43
1. 安装Python以及IDE,如Anaconda、PyCharm或Jupyter Noteboook,网上教程很多,选择一个
2. 安装必要的 ...

感谢大佬
您需要登录后才可以回帖 登录 | 加入协会

本版积分规则

手机版|品质币|万年历|Calendar|品质B2B|联系我们|加入协会|品质协会(www.PinZhi.org) |网站地图

GMT+8, 2026-6-25 15:11 , Processed in 0.041717 second(s), 6 queries , Gzip On, Redis On.

Powered by 品质协会 © 2010-2099

品质人,让生活和环境变得更美好!!!

快速回复 返回顶部 返回列表