#11 Pythonで始める箱ひげ図
箱ひげ図は、データの分布を視覚的に分かりやすく表現するグラフです。主に統計やデータ分析の分野で使われます。
今日はこの図の描画です。
それでは、スタートです。
*執筆者は以下を参照してください。
使ったツール・準備したこと
Visual Studio Code環境下でのPython
やってみたこと|コード・ステップ紹介
実行した内容の簡単な流れ
① ChatGPT 4oへ質問:
箱ひげ図作成アプリを生成してください。
以下のコードを生成してくれました。
import matplotlib
matplotlib.rcParams['font.family'] = 'Meiryo' # Windows の場合
import tkinter as tk
from tkinter import messagebox
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
import re
class BoxplotApp:
def __init__(self, root):
self.root = root
self.root.title("箱ひげ図作成アプリ")
self.label = tk.Label(root, text="数値データを入力(最大30個、Excelからのコピペも可):")
self.label.pack()
self.entry = tk.Text(root, height=5, width=50)
self.entry.pack()
self.button = tk.Button(root, text="描画", command=self.draw_boxplot)
self.button.pack()
self.result_label = tk.Label(root, text="")
self.result_label.pack()
self.canvas_frame = tk.Frame(root)
self.canvas_frame.pack()
def draw_boxplot(self):
input_data = self.entry.get("1.0", tk.END).strip()
try:
data_str_list = re.split(r'[\s,]+', input_data)
data = [float(x.strip()) for x in data_str_list if x.strip() != ""]
n = len(data)
if n > 30:
messagebox.showerror("エラー", "データは最大30個までです。")
return
q1 = np.percentile(data, 25)
q2 = np.median(data)
q3 = np.percentile(data, 75)
iqr = q3 - q1
mean = np.mean(data)
self.result_label.config(text=f"データ数: {n}個 / 中央値: {q2:.2f} / 平均値: {mean:.2f} / 四分位範囲(IQR): {iqr:.2f}")
fig, ax = plt.subplots()
ax.boxplot(data, vert=True, patch_artist=True, showmeans=True, meanline=False)
ax.set_title("箱ひげ図")
ax.set_ylabel("値")
for widget in self.canvas_frame.winfo_children():
widget.destroy()
canvas = FigureCanvasTkAgg(fig, master=self.canvas_frame)
canvas.draw()
canvas.get_tk_widget().pack()
except ValueError:
messagebox.showerror("エラー", "数値を正しく入力してください(例: 10 20 30 または Excel からのコピペ)。")
if __name__ == "__main__":
root = tk.Tk()
app = BoxplotApp(root)
root.mainloop()
試しに描画してみると・・・文字化けしていましたが、追加の会話で日本語対応しました。

今後の展開・アイデア
次回取り組みたいこと
*必ずしもそうならないこともございます。
・F検定アプリを生成する
