見出し画像

チャレンジ AI×100業務(製造業)、#07 測定結果をデータベースへ保存

今日は、現場での測定値をどのように指定のファイルに保存するかです。
データベース的なものができないかの記事になります。
*小規模データベースであれば、csvファイルへ集約すると、後々、品質管理に役立ちます。

工場の各所で測定された実測データ;ここでは、専用アプリに入力することでcsvファイルへ保管することを目指します。

それでは、スタートです。
*執筆者は以下を参照してください。


使ったツール・準備したこと

  • ChatGPT 4o

  • Visual Studio Code環境下でのPython

やってみたこと|コード・ステップ紹介

実行した内容の簡単な流れ

その前に、実測データをcsvファイルへつなげる方法を会話したところ以下の回答がありました。

方法①:Excelファイルから読み込んで保存
・現場ではExcelに記録 → アプリはそのExcelを読み込んでCSV化・整形
・Pythonの pandas.read_excel() で対応可能

方法②:測定器から直接データを取り込む
・測定器がPCと接続されていて、USB・シリアルポート・ネットワーク経由でデータ送信できる場合、Pythonで直接受信可能。
・この場合は測定器メーカーの仕様書に沿って、pyserial や socket ライブラリで通信処理を追加。

方法③:現場端末にWebフォームを設置して入力
・Excelや紙を経由せず、タブレットやPCで入力 → 保存
・Streamlit や Flask を使えば、簡易なWebアプリがPythonで作れます。
・操作性が良くなり、複数人利用にも向いています。

今回は、方法③を想定して、アプリを生成していきます。

入力したプロンプトはこちら;

「日々の測定結果をCSV保存するPythonベースの小さなアプリ」を生成してください。入力は測定日、材料ロット、特性A、特性B、特性C。

結果、下のフォームが生成されました。
各データを入力し、指定のファイルへ登録するようにしています。

データを入力し、指定のファイルへ保存
入力されたデータが保存されています。


このデータがマスターとなれば、品質管理に役立ちそうです。

今後の展開・アイデア

次回取り組みたいこと;

・品質リスクをどのように解析するか

*今回のコードです。

# tkinter を使ったローカルGUI版の測定結果入力アプリ
import tkinter as tk
from tkinter import messagebox
import pandas as pd
import os
from datetime import datetime

# 保存先フォルダの指定
save_folder = "保存先のフォルダを指定"
os.makedirs(save_folder, exist_ok=True)
file_path = os.path.join(save_folder, "daily_process_results.csv")

# 登録処理
def save_data():
    confirm = messagebox.askyesno("確認", "このデータを登録しますか?")
    if not confirm:
        return

    result_data = {
        "timestamp": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        "measure_date": entry_date.get(),
        "material_lot": entry_material_lot.get(),
        "tokusei_a": entry_a.get(),
        "tokusei_b": entry_b.get(),
        "tokusei_c": entry_c.get()
    }

    df = pd.DataFrame([result_data])
    df.to_csv(file_path, mode='a', header=not os.path.exists(file_path), index=False)
    messagebox.showinfo("保存完了", "データを保存しました!")
    clear_fields()

# 入力フィールドをクリア
def clear_fields():
    entry_date.delete(0, tk.END)
    entry_material_lot.delete(0, tk.END)
    entry_a.delete(0, tk.END)
    entry_b.delete(0, tk.END)
    entry_c.delete(0, tk.END)

# エンターキーで登録可能にするためのイベントバインド
def on_enter_key(event):
    save_data()

# ウィンドウ作成
root = tk.Tk()
root.title("日々の測定結果 登録フォーム")
root.geometry("400x400")
root.bind('<Return>', on_enter_key)  # エンターキーを有効化

# 各入力項目
labels = ["測定日 (YYYY-MM-DD)", "材料ロット", "特性A", "特性B", "特性C"]
entries = []

for i, label in enumerate(labels):
    tk.Label(root, text=label).pack()
    entry = tk.Entry(root)
    entry.pack()
    entries.append(entry)

entry_date, entry_material_lot, entry_a, entry_b, entry_c = entries

# 登録ボタン
tk.Button(root, text="登録する", command=save_data).pack(pady=10)

root.mainloop()

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