見出し画像

#40 Pythonで始める箱ひげ図 ver2、チャレンジ AI×100業務(製造業)

箱ひげ図は、「#11 Pythonで始める箱ひげ図」にてコードを生成し描画しました。ただ、因子が単一の場合でしたので、複数の箱ひげ図を描画するようにしました。また、データはcsvより読み取ります。


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


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

  • Visual Studio Code環境下でのPython

  • ChatGPT 

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

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

ChatGPTに次の会話をしました。

コードを生成してください。
内容は、csvファイルをよみとり、選択した列の箱ひげ図を描画します。このとき、描画する因子はGUIで選択させてください。csvファイルの先頭行が因子の名前となっています。

■ 下のグラフが描画されました。

〇は外れ値を示しています。

やはり、箱ひげ図は、並べると他の結果と比較しやすいですね。

今後の展開・アイデア

次回取り組みたいこと;

・次は、バイオリンプロットです。

■ 今回のコード

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib
import tkinter as tk
from tkinter import filedialog, messagebox

# 日本語フォント設定(Windows環境を想定)
matplotlib.rcParams['font.family'] = 'MS Gothic'

# ファイル選択ダイアログ
def select_file():
    filepath = filedialog.askopenfilename(
        filetypes=[("CSV files", "*.csv"), ("All files", "*.*")]
    )
    if not filepath:
        return
    try:
        try:
            df = pd.read_csv(filepath, encoding="utf-8-sig")
        except UnicodeDecodeError:
            df = pd.read_csv(filepath, encoding="shift_jis")
        select_columns(df)
    except Exception as e:
        messagebox.showerror("読み込みエラー", str(e))

# カラム選択ウィンドウ
def select_columns(df):
    window = tk.Toplevel()
    window.title("因子を選択してください")

    tk.Label(window, text="Ctrl + クリックで複数選択").pack()

    listbox = tk.Listbox(window, selectmode=tk.MULTIPLE, exportselection=False, width=50)
    for col in df.columns:
        listbox.insert(tk.END, col)
    listbox.pack()

    def on_plot():
        selected_indices = listbox.curselection()
        selected_columns = [df.columns[i] for i in selected_indices]
        if len(selected_columns) < 1:
            messagebox.showwarning("選択不足", "1つ以上の因子を選択してください。")
            return
        plot_boxplot(df[selected_columns])
        window.destroy()

    tk.Button(window, text="描画", command=on_plot).pack(pady=10)

def plot_boxplot(df):
    plt.figure(figsize=(10, 6))
    sns.boxplot(data=df, width=0.3, color="lightgray")  # 箱を細くして色を灰色に
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.show()

# メインウィンドウ
root = tk.Tk()
root.title("CSV箱ひげ図ツール")
root.geometry("300x150")

tk.Label(root, text="CSVファイルを選択して因子を指定").pack(pady=10)
tk.Button(root, text="ファイルを開く", command=select_file).pack(pady=10)

root.mainloop()

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