Pythonで箱ひげ図を描く

Pythonで箱ひげ図を描画します。いくつかの方法を紹介します。

目次

  1. pandasで箱ひげ図を描画する
  2. seabornで箱ひげ図を描画する

pandasで箱ひげ図を描画する

pandasのDataFrameに箱ひげ図を描画するメソッドがあります。

df.boxplot([column], [by], [ax], [fontsize], [rot], [grid], [figsize], [layout], [return_type], [backend], [kwargs])

matplotlibをバックエンドにして、DataFrameの箱ひげ図を描画します。

変数

内容

df

DataFrame

プロットするDataFrame。

column

str, list

プロットする列、または列のリスト。

by

str,array

省略可。グループ分けする列の指定。

ax

Axes

省略可。規定値はNone。描画先のAxesオブジェクト。

fontsize

float,str

省略可。規定値はNone。軸ラベルのサイズ。

rot

int,float

省略可。規定値は0。ラベルの角度。

grid

bool

省略可。規定値はTrue。グリッド表示するかどうか。

figsize

tuple

省略可。規定値はNone。図の大きさ。(width,height)

layout

tuple

省略可。規定値はNone。subplotの場合の描画位置。

return_type

str

省略可。規定値はaxes。戻り値の型。

backend

str

省略可。規定値はNone。バックエンドの指定。

kwargs

省略可。matplotlib.pyplot.boxplotに渡す引数。

描画例

seabornのdiamondsデータセットを使用して、箱ひげ図を描画してみます。

diamondsデータセットは、caratやcutなどの特徴量から価格を推定するデータセットです。priceについて、箱ひげ図を描画してみましょう。

最初に、price列の統計量を表示してみます。

import pandas as pd
import seaborn as sns

data = sns.load_dataset('diamonds')

print(data['price'].describe())
count    53940.000000
mean      3932.799722
std       3989.439738
min        326.000000
25%        950.000000
50%       2401.000000
75%       5324.250000
max      18823.000000
Name: price, dtype: float64

最小値(Q0)が326、第一四分位点(Q1)が950、第二四分位点(中央値、Q2)が2,401、第三四分位点(Q3)が5,324.25、最大値(Q4)が18,823となっています。

ではprice列の箱ひげ図を描画します。

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

data = sns.load_dataset('diamonds')

data.boxplot(column='price')
plt.show()
pandasで箱ひげ図

既定では外れ値が表示されます。第一四分位点または第三四分位点からボックスの1.5倍以上離れた値は外れ値とされます。

外れ値を表示しないようにする場合は、whis引数にrangeを指定します。

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

data = sns.load_dataset('diamonds')

data.boxplot(column='price', whis='range')
plt.show()
pandasで箱ひげ図(外れ値なし)

次に、priceをcutでグループ分けして箱ひげ図を描画します。

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

data = sns.load_dataset('diamonds')

data.boxplot(column='price', by='cut')
plt.show()
pandasで箱ひげ図(cutでグループ分け)

cut列のクラス別にpriceの分布がわかるようになりました。

各クラスの箱が似たような価格帯にありますので、cutではpriceの推定はできなさそうです。

seabornで箱ひげ図を描画する

seabornには箱ひげ図を描画する関数があります。

import seaborn as sns

sns.boxplot([x], [y], [hue], [data], [order], [hue_order], [orient], [color], [palette], [saturation], [width], [dodge], [fliersize], [linewidth], [whis], [ax], [kwargs])

変数

内容

x

str

省略可。規定値はNone。カテゴリ分けする列の指定。

y

str

省略可。規定値はNone。プロットする列の指定。

hue

str

省略可。規定値はNone。クラス分けする列の指定。

data

DataFrame, array

省略可。規定値はNone。プロットするデータ。

order

list

省略可。規定値はNone。カテゴリの表示順。

hue_order

list

省略可。規定値はNone。クラスの表示順。

orient

str

省略可。規定値はNone。グラフの向き(vまたはh)。

color

color

省略可。規定値はNone。色指定。

palette

palette

省略可。規定値はNone。hueの色指定。

saturation

float

省略可。規定値は0.75。

width

float

省略可。規定値は0.8。

dodge

bool

省略可。規定値はTrue。

fliersize

float

省略可。規定値は5。

linewidth

float

省略可。規定値はNone。

whis

float

省略可。規定値は1.5。ヒゲの範囲。この範囲外は外れ値。

ax

Axes

省略可。規定値はNone。プロットするAxesオブジェクト。

kwargs

省略可。matplotlib.axes.Axes.boxplotに渡す引数。

seabornの描画例

seabornで上記のpandasの場合と同じ描画をします。

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

data = sns.load_dataset('diamonds')

sns.boxplot(y='price', data=data)
plt.show()
seabornで箱ひげ図
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

data = sns.load_dataset('diamonds')

sns.boxplot(x='cut', y='price', data=data)
plt.show()
seabornで箱ひげ図(cutでグループ分け)

公開日

広告