チャレンジ AI×100業務(製造業)、#01 Pythonで始める工程能力分析
日々の品質管理で避けて通れないのが「工程能力分析」です。スタンダードなのは、Excelで管理図かと思います。工場では;
「工程能力が低いことが判明する」より
「工程能力が低い兆候がある」
が大切なので、データベース化して管理するならばアプリ化もメリットがあります(と思います)。
*これは次回以降生成AIに聞いてここで記載します。
それでは、スタートです。
*執筆者は以下を参照してください。
使ったツール・準備したこと
Visual Studio Code環境下でのPython
やってみたこと|コード・ステップ紹介
実行した内容の簡単な流れ
①(いきなり)ChatGPT 4oへ質問
工程能力分析のアプリを生成してください。 入力はデータn=30まで可能で、かつ、仕様の上限値、下限値 アウトプットは、Cp及びCpk
②アプリにて Cp・Cpkの算出
③工程能力値の確認
コードは以下でした。
import tkinter as tk
from tkinter import messagebox
import statistics
import re
def calculate_cp_cpk():
try:
raw_data = entry_data.get("1.0", tk.END)
# 改行・空白・タブをすべてカンマに変換してから分割
cleaned_data = re.sub(r"[\s\n\t]+", ",", raw_data.strip())
data = [float(x) for x in cleaned_data.split(',') if x.strip() != '']
if len(data) < 2:
messagebox.showerror("エラー", "2点以上のデータを入力してください。")
return
if len(data) > 30:
messagebox.showerror("エラー", "30点までのデータにしてください。")
return
usl = float(entry_usl.get())
lsl = float(entry_lsl.get())
mean = statistics.mean(data)
stdev = statistics.stdev(data)
cp = (usl - lsl) / (6 * stdev)
cpu = (usl - mean) / (3 * stdev)
cpl = (mean - lsl) / (3 * stdev)
cpk = min(cpu, cpl)
label_result.config(text=f"Cp: {cp:.3f}\nCpk: {cpk:.3f}")
except ValueError:
messagebox.showerror("入力エラー", "数値を正しく入力してください。")
def on_enter(event):
calculate_cp_cpk()
# GUI 作成
root = tk.Tk()
root.title("工程能力分析アプリ")
root.geometry("400x400")
# データ入力欄
tk.Label(root, text="測定データ(エクセルの列をコピー&貼り付け可能、最大30点):").pack()
entry_data = tk.Text(root, height=5, width=40)
entry_data.pack()
entry_data.bind("<Return>", on_enter)
# 仕様上下限
tk.Label(root, text="上限値 (USL):").pack()
entry_usl = tk.Entry(root)
entry_usl.pack()
entry_usl.bind("<Return>", on_enter)
tk.Label(root, text="下限値 (LSL):").pack()
entry_lsl = tk.Entry(root)
entry_lsl.pack()
entry_lsl.bind("<Return>", on_enter)
# 計算ボタン
btn_calc = tk.Button(root, text="計算", command=calculate_cp_cpk)
btn_calc.pack(pady=10)
btn_calc.bind("<Return>", on_enter)
# 結果表示
label_result = tk.Label(root, text="Cp: \nCpk: ")
label_result.pack()
# メインループ
root.mainloop()
GUIはこちら。

*計算値は統計ソフトでも同じでした。
