本ページでは、Python のデータ可視化ライブラリ、Seaborn (シーボーン) を使ってカテゴリごとの件数や平均値など、カテゴリカルな数値を棒グラフを使って出力する方法を紹介します。
Countplot: データの件数 (頻度) を集計
seaborn.countplot メソッドは、データの件数を集計し、ヒストグラムとして出力します。
seaborn.countplot の使い方
1 2 3 |
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 と関連するライブラリをロードし、タイタニックのデータセットをロードします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> 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 ... (中略) |
クラス毎 (一等、二等、三等) の乗客数を縦方向のヒストグラムとして描画
1 |
sns.countplot(x="class", data=titanic) |
クラス毎 (一等、二等、三等) の乗客数を横方向のヒストグラムとして描画
1 |
sns.countplot(y="class", data=titanic) |
クラス毎 (一等、二等、三等) の乗客数を男女 (sex) 別に描画
1 |
sns.countplot(x="class", hue="sex",data=titanic) |
棒の順序を左から、'Second'
, 'First'
, 'Third'
の順で描画
1 |
sns.countplot(x="class", order=['Second', 'First', 'Third'], data=titanic) |
性別を 'female'
, 'male'
の順で描画
1 |
sns.countplot(x="class", hue="sex", hue_order=['female','male'], data=titanic) |
カラーパレットを Set1 に指定して出力 ※ 色は左から順に割り当てられ、値の大小を示すものではありません。
1 |
sns.countplot(x="class", hue="sex", palette="Set1", data=titanic) |
背景を白色にグリッドを表示するスタイルに設定して出力
1 2 |
sns.set_style("whitegrid") sns.countplot(x="class", hue="sex", palette="Set1", data=titanic) |
Barplot: データの平均値と信頼区間を出力
seaborn.barplot メソッドは、与えられたベクトル (数値で構成される配列) の平均値を高さとして、信頼区間をエラーバーとして出力します。
seaborn.barplot の使い方
1 2 3 4 |
seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, estimator=<function mean>, 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 付属の飲食店のチップの額のデータセットをロードします。
1 2 3 4 5 6 7 8 9 10 11 |
>>> 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 ... (中略) |
横軸に曜日、縦軸に支払いの平均額を出力
1 |
sns.barplot(x="day", y="total_bill", data=tips) |
横軸に曜日、縦軸に支払いの平均額、色で男女別に出力
1 |
sns.barplot(x="day", y="total_bill", hue="sex", data=tips) |
横軸にチップの平均額、縦軸に曜日を出力 (横方向に表示しています)
1 |
sns.barplot(x="tip", y="day", data=tips) |
夕食 (Dinner) と 昼食 (Lunch) に分けてチップの平均額を出力
1 |
sns.barplot(x="time", y="tip", data=tips, order=["Dinner", "Lunch"]) |
信頼区間を 68% として、横軸に曜日、縦軸に支払いの平均額を出力
1 |
sns.barplot(x="day", y="total_bill", data=tips, ci=68) |
エラーバーに 長さ 0.2 で、キャップ(終端の線)を表示
1 |
sns.barplot(x="day", y="total_bill", data=tips, capsize=.2) |
バーの塗りの色をオレンジ色 (orange) に指定して出力
1 |
sns.barplot(x="day", y="total_bill", data=tips, color="orange") |
カラーパレットをグレー系の色 (Greys) に指定して出力 ※ 色は左から順に割り当てられ、値の大小を示すものではありません。
1 |
sns.barplot(x="day", y="total_bill", data=tips, palette="Greys") |
カラーパレットをパステル系の色 (Pastel1) に指定して出力
1 |
sns.barplot(x="day", y="total_bill", data=tips, palette="Pastel1") |
カラーパレットをブルー系の色 (Blues)、線の太さを 3.5、線の色を紺色 (Navy)、エラーバーの色を水色 (Skyblue) に指定
1 |
sns.barplot(x="day", y="total_bill", data=tips, palette="Blues", linewidth=3.5, edgecolor="navy", errcolor="skyblue") |
参考:
seaborn.countplot
seaborn.barplot