Python

Python seaborn チュートリアル プロット機能 カテゴリカルデータを可視化 (3)

原文のドキュメントはこちらから。

カテゴリ内の統計的推定

他のアプリケーションでは、各カテゴリ内の分布を表示するのではなく、値の中心傾向の推定値を表示したい場合がある。Seabornには、この情報を表示する主な方法が2つある。

棒グラフ

この目的を達成するおなじみのプロットのスタイルは、棒グラフである。seabornでは、barplot()関数は完全なデータセット上で動作し、推定値を得るために関数を適用する(デフォルトでは平均値を取る)。各カテゴリに複数のオブザベーションがある場合、推定値の信頼区間を計算するためにブートストラップを使用し、エラーバーを用いてプロットされる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks", color_codes=True)

titanic = sns.load_dataset("titanic")
sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)

plt.show()

棒グラフの特殊なケースは、2番目の変数の統計量を計算するのではなく、各カテゴリでのオブザベーションの数を示したい場合だ。これは、定量的な変数ではなく、カテゴリカルな変数のヒストグラムに似ている。seabornでは、countplot()関数を使うと実現できる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks", color_codes=True)

titanic = sns.load_dataset("titanic")
sns.catplot(x="deck", kind="count", palette="ch:.25", data=titanic)

plt.show()

barplot() と countplot() の両方とも、上で説明したすべてのオプションと、各関数の詳細なドキュメントで示されているその他のオプションを使って呼び出すことができる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks", color_codes=True)

titanic = sns.load_dataset("titanic")
sns.catplot(y="deck", hue="class", kind="count", palette="pastel", edgecolor=".6", data=titanic)

plt.show()

ポイントプロット

同じ情報を可視化するための別のスタイルが、pointplot()関数によって提供される。この関数もまた、他の軸に高さのある推定値をエンコードするが、完全なバーを表示するのではなく、点の推定値と信頼区間をプロットする。さらに、pointplot()は、同じ色相カテゴリからの点をつなげる。これにより、主な関係が色相の意味の関数としてどのように変化するかを簡単に確認できる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks", color_codes=True)

titanic = sns.load_dataset("titanic")
sns.catplot(x="sex", y="survived", hue="class", kind="point", data=titanic)

plt.show()

カテゴリカル関数はリレーショナル関数のようなスタイルの意味を欠いているが、色相とともにマーカーやラインスタイルを変化させることで、最大限にアクセスしやすく、白黒でも再現性の高い図形を作ることができる。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks", color_codes=True)

titanic = sns.load_dataset("titanic")
sns.catplot(x="class", y="survived", hue="sex", palette={"male": "g", "female": "m"},
            markers=["^", "o"], linestyles=["-", "--"], kind="point", data=titanic)

plt.show()