箱ひげ図は,①最小値,②最大値,③平均,④四分位範囲,⑤中央値 ⑥外れ値によって,データのばらつきを示している1).
1) 川瀬雅也・松田史生 生命科学・生物工学のための間違いから学ぶ実践統計解析 R・Python によるデータ処理事始め 2021 日本生物工学会 編 近代科学社 Digital P.10 – 17
ChatGPT-4o による箱ひげ図の作成
ChatGPT – 4o が示した箱ひげ図作成の Python スクリプトで描かれたものをもとにし,以下の図をパワーポイントで作成した.左は Python で描いた元の箱ひげ図である.
四分位範囲とはデータの 50%がはいる範囲のことで,この範囲からはずれ値を算出している.このように箱ひげ図は 直観的に データのばらつき を知るにはとても便利な図である.しかし,箱ひげ図は ① 箱ひげ図で示しれる統計量は 平均 および 外れ値 だけであること,② ごちゃごちゃして美しくないこと から 個人的には好みではない.
これから解説する P 値を閾値とした検定は否定されつつある
これから解説する統計解析のうち t 検定あるいは多重検定などは P 値と呼称される値を閾値として統計的に有意であるかどうかを決定するものである.このような検定法は批判を受けつつあり,判断基準を変更していくのが多数の意見になっている.これについてはまったく同意するところではある.ところが,その影響なのか箱ひげ図のようなデータのばらつきだけを示す図が多く使われている傾向には疑問を感じる.これは箱ひげ図を古臭いデータの示し方であると批判しているのではない.箱ひげ図でデータのばらつきを示し,たとえば,多重検定の P 値を示して考察していくのならば,①データのばらつきを示すこと,② 多重検定の P 値を示すことの2つのエビデンスがあるので よい結果の示し方であると考えている.
箱ひげ図を作成するPython スクリプト
箱ひげ図を作成する Python スクリプトを以下に示す.
# Python による箱ひげ図の作成
# 必要なパッケージをインストールし読み込みます
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# デスクトップのエクセルファイルからデータを読み込みます
file_path = “C:/Users/a56f3/Desktop/data.xlsx”
data = pd.read_excel(file_path, sheet_name=”Sheet1″)
# 読み込んだデータの確認
print(data.head())
# 列名のリストを取得
columns = data.columns
# 箱ひげ図の作成
plt.figure(figsize=(12, 8))
boxplot = plt.boxplot(data, patch_artist=True, showmeans=True)
# 平均値と外れ値のプロット
for i, col in enumerate(columns):
column_data = data[col].dropna()
mean = column_data.mean()
outliers = column_data[(column_data < boxplot[‘whiskers’][2*i].get_ydata()[1]) |
(column_data > boxplot[‘whiskers’][2*i+1].get_ydata()[1])]
# 平均値をプロット
plt.scatter([i+1], [mean], color=’blue’, zorder=3)
plt.text(i+1.1, mean, ‘Mean’, color=’blue’, fontsize=12, verticalalignment=’bottom’)
# 外れ値をプロット
for outlier in outliers:
plt.scatter([i+1], [outlier], color=’red’, zorder=3)
plt.text(i+1.1, outlier, ‘Outlier’, color=’red’, fontsize=12, verticalalignment=’bottom’)
# プロットのカスタマイズ
plt.title(‘Box Plot’)
plt.xlabel(‘Column’)
plt.ylabel(‘Value’)
plt.xticks(np.arange(1, len(columns) + 1), columns)
plt.show()