#39 Pythonで始める行列散布図、チャレンジ AI×100業務(製造業)
ヒストグラム、時系列、行列散布図、何かあったときに確認するグラフです。今日は、行列散布図を描画します。下は統計ソフトMinitabの行列散布図の説明です。
*それでは、スタートです。
*執筆者は以下を参照してください。
使ったツール・準備したこと
Visual Studio Code環境下でのPython
ChatGPT
やってみたこと|コード・ステップ紹介
実行した内容の簡単な流れ
ChatGPTに次の会話をしました。
csvファイルをよみとり、seaborn.pairplotを用いてデータの全体を俯瞰できるようにします。このとき、描画する因子はGUIで選択させてください。csvファイルの先頭行が因子の名前となっています。
いくつか会話を進め、因子を選択式にしてグラフを描画するようにしました。


上記のように、すべての組み合わせについて概観できます。ひとめで相関がありそうか、偏りがありそうか確認できるスグレモンです。
今後の展開・アイデア
次回取り組みたいこと;
・箱ひげ図を再度取り上げます。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import tkinter as tk
from tkinter import filedialog, messagebox
import matplotlib
import matplotlib.font_manager as fm
# 日本語フォント設定(環境に応じて変更可能)
matplotlib.rcParams['font.family'] = 'MS Gothic' # 例: Windowsの場合
matplotlib.rcParams['axes.unicode_minus'] = False
# ファイル選択ダイアログを表示
def load_csv():
file_path = filedialog.askopenfilename(filetypes=[("CSV files", "*.csv")])
if not file_path:
return
try:
df = pd.read_csv(file_path, encoding='shift_jis') # ★ encoding変更(日本語CSV対応)
show_selector(df)
except Exception as e:
messagebox.showerror("エラー", f"CSVファイルの読み込みに失敗しました:\n{e}")
# チェックボックスで因子選択
def show_selector(df):
selector_window = tk.Toplevel(root)
selector_window.title("描画する因子を選択")
label = tk.Label(selector_window, text="描画する因子を選んでください:")
label.pack()
var_dict = {}
for col in df.columns:
var = tk.BooleanVar()
cb = tk.Checkbutton(selector_window, text=col, variable=var)
cb.pack(anchor='w')
var_dict[col] = var
def on_ok():
selected = [col for col, var in var_dict.items() if var.get()]
if len(selected) < 2:
messagebox.showwarning("警告", "2つ以上の因子を選んでください。")
return
selector_window.destroy()
draw_pairplot(df[selected])
ok_button = tk.Button(selector_window, text="描画", command=on_ok)
ok_button.pack(pady=10)
# ペアプロットの描画
def draw_pairplot(df_selected):
sns.pairplot(df_selected)
plt.tight_layout()
plt.show()
# メインウィンドウ
root = tk.Tk()
root.title("CSVペアプロットツール")
root.geometry("300x150")
label = tk.Label(root, text="CSVファイルを読み込んでください")
label.pack(pady=10)
load_button = tk.Button(root, text="CSVファイルを開く", command=load_csv)
load_button.pack(pady=10)
root.mainloop()
