見出し画像

チャレンジ 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はこちら。

測定データのコラムにデータを入れ、仕様値(上限、下限)を入力し「計算」
*計算値は統計ソフトでも同じでした。

今後の展開・アイデア

次回取り組みたいこと;

エクセル管理と比べてアプリ化のメリットについて


いいなと思ったら応援しよう!