Seabornを用いた箱ひげ図(boxplot)の作り方

Seabornのboxplot関数は、カテゴリに対する分布を示する箱ひげ図(boxplot)を描画するために使用されます。箱ひげ図(boxplot)は、データの分布をカテゴリー間で比較するのに便利です。箱(box)はデータセットの四分位数を示し、ひげ(whisker)は「外れ値」と判断された点を除く、残りの分布を示すために伸びます。

boxplotの基本的な使用法

import seaborn as sns

# データセットの読み込み
tips = sns.load_dataset("tips")

# ボックスプロットの描画
sns.boxplot(x="day", y="total_bill", data=tips)

このコードは、tipsデータセット内のdayごとのtotal_bill(総請求額)の分布をボックスプロットで示します。

seaborn boxplot, example

seabornに渡すパラメータ

  • data: プロットするデータセット。xyがなければ広形式と解釈され、それ以外の場合は長形式と期待されます。
  • x, y, hue: データ内の変数名、またはベクトルデータ。長形式データのプロット用の入力です。
  • order, hue_order: カテゴリカルレベルをプロットする順序。指定されていない場合、データオブジェクトからレベルが推測されます。
  • orient: プロットの向き(垂直または水平)。これは通常、入力変数のタイプに基づいて推測されますが、xyが数値の場合や広形式データをプロットする場合のあいまいさを解決するために使用されます。
  • color, palette: プロット要素の色またはhue変数のレベルの色。
  • saturation: 塗りつぶし色を描画する際の元の彩度の割合。大きなパッチでは薄い色の方が見栄えが良いことがあります。
  • fill: Trueの場合、固体パッチを使用します。そうでなければ線画として描画されます。
  • dodge: hueマッピングを使用する場合、要素を狭めて重なりを解消するかどうか。
  • width: 各要素に割り当てられる幅。
  • whis: ウィスカーの長さを制御するパラメータ。

色とパレットのカスタマイズ

sns.boxplot(x="day", y="total_bill", data=tips, color="skyblue")
seaborn boxplot, custamized color

ヒュー(カテゴリカル変数)による分割

sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set3")
seaborn boxplot, hue

垂直と水平の向き

# 垂直向き
sns.boxplot(x="total_bill", data=tips)

# 水平向き
sns.boxplot(y="total_bill", data=tips)
seaborn boxplot, horizontal
seaborn boxplot, vertical

異なる幅とウィスカー長

sns.boxplot(x="day", y="total_bill", data=tips, width=0.5, whis=2.5)
seaborn

Seabornのboxplot関数は、データの中央値、四分位範囲、外れ値を視覚的に表示する強力なツールです。上記のパラメータを調整することで、様々なデータセットに対して柔軟にボックスプロットをカスタマイズできます。

Seabornを使ったboxplotの例(チュートリアル)

ここからは、さらに豊富なカスタマイズをしていきましょう。有名なタイタニックの生存者のデータを用いて箱ひげ図を作っていきます。

単一の水平ボックスプロット

import seaborn as sns
titanic = sns.load_dataset("titanic")

sns.boxplot(x=titanic["age"])

seaborn boxplot, titanic

カテゴリー的変数によるグループ化

sns.boxplot(data=titanic, x="age", y="class")

class(等級)ごとに年齢の分布を比較します。

seaborn boxplot, categorical

ネストされたグループ化によるボックスプロット

sns.boxplot(data=titanic, x="class", y="age", hue="alive")

classによるグループ化に加えて、alive(生存状況)によるネストされたグループ化を行います。

データの全範囲をカバーするひげ(whisker)

sns.boxplot(data=titanic, x="age", y="deck", whis=(0, 100))

whisパラメータを使用して、ひげがデータの全範囲をカバーするようにします。

seaborn, boxplot, whiscar

より狭いボックス

sns.boxplot(data=titanic, x="age", y="deck", width=.5)

ボックスの幅を狭くします。

seaborn boxplot, narrow

Matplotlib関数のパラメータを使用したカスタマイズ

sns.boxplot(
    data=titanic, x="age", y="class",
    notch=True, showcaps=False,
    flierprops={"marker": "x"},
    boxprops={"facecolor": (.3, .5, .7, .5)},
    medianprops={"color": "r", "linewidth": 2},
)

ノッチの追加、キャップの非表示、外れ値のマーカースタイルの変更、ボックスと中央値の線のカスタマイズを行います。

seaborn boxplot, matplotlib

まとめ

seabornを用いてさまざまな箱ひげ図の作り方を見てきました。データの分析やプレゼンテーションに役立てていただけると幸いです。

上部へスクロール