Pythonで箱ひげ図(ボックスプロット)を実装する方法|pandasとかmatplotlibによる実装例を解説

スポンサーリンク

箱ひげ図は、四分位点を用いて、与えられたデータがどのように分布しているかを示すものです。

データの広がりを見つけることは、探索的データ解析(EDA)の重要な部分です。

このために、ヒストグラムや密度プロットのような既存のツールがあります。

しかし、箱ひげ図には、この2つに比べて大きな利点があります。

箱ひげ図は、非常に小さな面に多くの情報を詰め込み、1つのプロット上で2つ以上の変数を比較するときに便利です。

この記事では、箱ひげ図とは何か、その使い方、そしてPythonを使って箱ひげ図を実装する方法について紹介します。

スポンサーリンク

Boxplot を解釈する

箱ひげ図は、5つの要約統計量に基づいてデータの分布を表示します。

  • 第一四分位値 (Q1)
  • 第3四分位値 (Q3)
  • 最小値
  • 最大値
  • 中央値

分布の中の値の範囲に注目します。

#Import the required modules
import numpy as np
import pandas as pd
 
data = pd.read_csv('Titanic.csv')
 
#Plotting Boxplot of Age column
boxplot = data.boxplot(column=['Age'])

1. Boxplotsで提供されるサマリー

  • 中央値(Median)。中央値とは、中央の2つの数値の平均値です。
  • 第一四分位値(Q1): 第一四分位値(Q1): 中央値の左側にあるデータポイントの中央値です。25位とも呼ばれる。
  • 第3四分位値(Q3): 第3四分位値(Q3): 中央値より右側のデータポイントの中央値。
  • 四分位範囲(IQR): Q3 – Q1 または 25 パーセンタイルから 75 パーセンタイルの間のデータ。
  • 最小値 Q1 -1.5 ㎤* IQR(外れ値を除く)。
  • 最大値 Q3 + 1.5 ㎤* IQR (外れ値を除く)

2. 外れ値

箱ひげ図は、データから外れ値を見つけるのに非常に適している。

ボックスプロットで外れ値を検出する最も一般的な方法は、1.5 x IQR ルールです。

Q1 – 1.5xIQR より小さいデータポイント、Q3 + 1.5xIQR より大きいデータポイントは外れ値とみなされる。

Python で箱ひげ図を実装する

Boxplots は多くのプロットライブラリを用いてプロットすることができます

Pythonを使ってBoxplotを作成する方法を確認しましょう。

タイタニックデータセットを使って、プロットのデモを行います。

1. Pandasの使用

Pandas には dataframe に対して呼び出される boxplot メソッドがあり、入力引数としてプロットする必要のあるカラムを指定するだけです。

boxplot = data.boxplot(column=['Age' ], by = ['Sex'])
boxplot = data.boxplot(column=['Age' ] , by = ['Sex','Survived'] , notch = True)

もし、データに性別などのカテゴリ値がある場合、パンダはそれぞれのカテゴリに基づいてボックスプロットを作成することができます

これをどのように行うか見てみましょう。

#Importing required modules
import seaborn as sns
import pandas as ppd
 
data = pd.read_csv('Titanic.csv')
 
sns.boxplot(data = data , x = 'Survived' , y = 'Age' , hue = 'Sex')
sns.boxplot(data = data , x = 'Survived' , y = 'Age' , hue = 'Sex' , notch = True )

また、複数のカラムのリストを渡して、提供されたカラムに基づいてデータをグループ化し、ボックスプロットを作成することができます

# importing required modules
import pandas as pd
import matplotlib.pyplot as plt
 
data = pd.read_csv('Titanic.csv')
 
plt.boxplot(data.Age.dropna() , labels = ['Age'])
plt.show()
plt.boxplot([data.Fare , data.Age.dropna()] , labels = ['Fare' , 'Age'])
plt.show()

ノッチを True に設定すると、中央値の信頼区間を示すボックスプロット上のノッチが表示されます。

データセットに対して boxplot メソッドを使用すると、ボックスプロットの視覚化が非常に速くなります。

2. Seabornの使用

Seabornを使うと、出版物用の高品質な箱ひげ図を作成することができます

さっそくやってみましょう。

Box Plot Components
Box Plot Components
Pandas Boxplot Age Column
Pandas Boxplot Age Column

例えば、生存者と死亡者の年齢を性別でグループ分けした箱ひげ図が欲しいとします。

seabornの箱ひげ図には hue 引数があり、これを使うと便利です。

Pandas Boxplot Age With Gender Columns
Pandas Boxplot Age With Gender Columns
Pandas Boxplot Grouped By Gender And Survived Columns
Pandas Boxplot Grouped By Gender And Survived Columns

3. matplotlibの使用

seaborn ライブラリを使うと、より少ないコード行数でより美しいプロットを作成できますが、実は seaborn は matplotlib の上に構築されています。

matplotlib には boxplot を作成するメソッドがあり、 boxplot と呼ばれる便利なメソッドです。

それでは、matplotlib を使って boxplot を作ってみましょう。

Seaborn Boxplot Grouped By Gender
Seaborn Boxplot Grouped By Gender
Seaborn Boxplot Grouped By Gender And Survived Columns
Seaborn Boxplot Grouped By Gender And Survived Columns

複数の変数をリストとして渡すことで、ボックスプロットを作成することができます

matplotlib Boxplot Age
matplotlib Boxplot Age
matplotlib Boxplot On Fares And Age
matplotlib Boxplot On Fares And Age

まとめ

この記事では、箱ひげ図について、その重要性と使用目的について説明しました。

また、pandas、seaborn、matplotlibの各ライブラリを使用して独自の箱ひげ図を作成するコードも実装しました。

タイトルとURLをコピーしました