Seaborn で件数や平均値を棒グラフで可視化する

本ページでは、Python のデータ可視化ライブラリ、Seaborn (シーボーン) を使ってカテゴリごとの件数や平均値など、カテゴリカルな数値を棒グラフを使って出力する方法を紹介します。

Countplot: データの件数 (頻度) を集計

seaborn.countplot メソッドは、データの件数を集計し、ヒストグラムとして出力します。

seaborn.countplot の使い方

seaborn.countplot(x=None, y=None, hue=None, data=None, order=None,
                  hue_order=None, orient=None, color=None, palette=None,
                  saturation=0.75, ax=None, **kwargs)

seaborn.countplot の主要な引数

x, y 集計対象の列名。x に指定した場合縦方向に、y に指定した場合横方向にグラフを描画します。
hue 各軸をさらに分割して集計する場合に利用する列名を指定。
data 集計対象のデータフレーム。
order 出力する順番を文字列のリストで指定。
hue_order 上記 hue で指定した列を出力する順番を文字列のリストで指定。
color 各列の色をリストまたはパレットで指定。
palette 上記 hue で指定した列の色リストまたはパレットで指定。 (デフォルト値: None)
saturation 色の彩度。1 に近いほど原色に近く、0 に近いほど白・黒に近い色合いで出力。 (デフォルト値: 0.75)
ax 軸を重ねて出力する場合に指定。
**kwargs matplotlib の plt.bar で定義されている引数を設定可能です。参考: matplotlib で棒グラフを描く

グラフの出力例

Seaborn と関連するライブラリをロードし、タイタニックのデータセットをロードします。

>>> import seaborn as sns

>>> # Load Titanic dataset
>>> titanic = sns.load_dataset("titanic")
>>> print(titanic)
     survived  pclass     sex   age  sibsp  parch      fare embarked   class  \
0           0       3    male  22.0      1      0    7.2500        S   Third   
1           1       1  female  38.0      1      0   71.2833        C   First   
2           1       3  female  26.0      0      0    7.9250        S   Third   
3           1       1  female  35.0      1      0   53.1000        S   First   
4           0       3    male  35.0      0      0    8.0500        S   Third   
5           0       3    male   NaN      0      0    8.4583        Q   Third   
 ... (中略)


クラス毎 (一等、二等、三等) の乗客数を縦方向のヒストグラムとして描画

sns.countplot(x="class", data=titanic)

seaborn-countplot1


クラス毎 (一等、二等、三等) の乗客数を横方向のヒストグラムとして描画

sns.countplot(y="class", data=titanic)

seaborn-countplot2


クラス毎 (一等、二等、三等) の乗客数を男女 (sex) 別に描画

sns.countplot(x="class", hue="sex",data=titanic)

seaborn-countplot3


棒の順序を左から、'Second' , 'First' , 'Third' の順で描画

sns.countplot(x="class", order=['Second', 'First', 'Third'], data=titanic)

seaborn-countplot4


性別を 'female' , 'male' の順で描画

sns.countplot(x="class", hue="sex", hue_order=['female','male'], data=titanic)

seaborn-countplot5


カラーパレットを Set1 に指定して出力 ※ 色は左から順に割り当てられ、値の大小を示すものではありません。

sns.countplot(x="class", hue="sex", palette="Set1", data=titanic)

seaborn-countplot6


背景を白色にグリッドを表示するスタイルに設定して出力

sns.set_style("whitegrid")
sns.countplot(x="class", hue="sex", palette="Set1", data=titanic)

seaborn-countplot7


Barplot: データの平均値と信頼区間を出力

seaborn.barplot メソッドは、与えられたベクトル (数値で構成される配列) の平均値を高さとして、信頼区間をエラーバーとして出力します。

seaborn.barplot の使い方

seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
                estimator=, ci=95, n_boot=1000, units=None,
                orient=None, color=None, palette=None, saturation=0.75,
                errcolor='.26', errwidth=None, capsize=None, ax=None, **kwargs)

seaborn.barplot の主要な引数

x, y 集計対象の列名。x に指定した場合縦方向に、y に指定した場合横方向にグラフを描画します。
hue 各軸をさらに分割して集計する場合に利用する列名を指定。
data 集計対象のデータフレーム。
order 出力する順番を文字列のリストで指定。
hue_order 上記 hue で指定した列を出力する順番を文字列のリストで指定。
estimator (デフォルト値: )
ci 信頼区間の幅。None を指定すると、ブートストラップを行わず、エラーバーも出力しません。 (デフォルト値: 95)
n_boot 信頼区間を求めるために行うブートストラップの繰り返し回数。 (デフォルト値: 1000)
units マルチレベルでブートストラップを行う際にサンプリング単位。data で指定したデータフレームの列名または、配列で指定。 (デフォルト値: None)
orient グラフの向きを指定。”v”(vertical, 垂直) または、”h” (horizontal, 水平) のいずれかを指定。
color 各列の色をリストまたはパレットで指定。
palette 上記 hue で指定した列の色リストまたはパレットで指定。 (デフォルト値: None)
saturation 色の彩度。1 に近いほど原色に近く、0 に近いほど白・黒に近い色合いで出力。 (デフォルト値: 0.75)
errcolor 信頼区間を示すバーの色。/td>
errwidth 信頼区間を示すバーの幅
capsize 信頼区間を示すバーの終端の線(キャップ)のサイズ
ax 軸を重ねて出力する場合に指定。

グラフの出力例

Seaborn 付属の飲食店のチップの額のデータセットをロードします。

>>> import seaborn as sns
>>> sns.set_style("whitegrid")
>>> tips = sns.load_dataset("tips")
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
5         25.29  4.71    Male     No   Sun  Dinner     4
 ... (中略)

横軸に曜日、縦軸に支払いの平均額を出力

sns.barplot(x="day", y="total_bill", data=tips)

seaborn-barplot1


横軸に曜日、縦軸に支払いの平均額、色で男女別に出力

sns.barplot(x="day", y="total_bill", hue="sex", data=tips)

seaborn-barplot2


横軸にチップの平均額、縦軸に曜日を出力 (横方向に表示しています)

sns.barplot(x="tip", y="day", data=tips)

seaborn-barplot3


夕食 (Dinner) と 昼食 (Lunch) に分けてチップの平均額を出力

sns.barplot(x="time", y="tip", data=tips, order=["Dinner", "Lunch"])

seaborn-barplot4


信頼区間を 68% として、横軸に曜日、縦軸に支払いの平均額を出力

sns.barplot(x="day", y="total_bill", data=tips, ci=68)

seaborn-barplot5


エラーバーに 長さ 0.2 で、キャップ(終端の線)を表示

sns.barplot(x="day", y="total_bill", data=tips, capsize=.2)

seaborn-barplot6


バーの塗りの色をオレンジ色 (orange) に指定して出力

sns.barplot(x="day", y="total_bill", data=tips, color="orange")

seaborn-barplot7


カラーパレットをグレー系の色 (Greys) に指定して出力 ※ 色は左から順に割り当てられ、値の大小を示すものではありません。

sns.barplot(x="day", y="total_bill", data=tips, palette="Greys")

seaborn-barplot8


カラーパレットをパステル系の色 (Pastel1) に指定して出力

sns.barplot(x="day", y="total_bill", data=tips, palette="Pastel1")

seaborn-barplot9


カラーパレットをブルー系の色 (Blues)、線の太さを 3.5、線の色を紺色 (Navy)、エラーバーの色を水色 (Skyblue) に指定

sns.barplot(x="day", y="total_bill", data=tips, palette="Blues", linewidth=3.5, edgecolor="navy", errcolor="skyblue")

seaborn-barplot10

参考:
seaborn.countplot
seaborn.barplot