Pythonの描画ライブラリseabornのグラフ表示の続きをやっていきましょう。
ここでは、seabornを使ってカテゴライズされた分類データをプロットすることについてみていきます。
このメソッドには、catplot、boxplot、violinplot、stripplot、swarmplot、barplot、countplotといったものがあります。
ここでもネット上(GitHub)にあるseabornの利用可能なデータセットを使っていきます。
前と同様にtipsのデータセットをload_dataset()を使ってjupyter notebookで見ていきましょう。
分類データを見ていく
前と同様にseabornをインポートして、データセットの’tips’をload_dataset()で読み込んで視覚化するデータの準備をしましょう。
import seaborn as sns
%matplotlib inline
tips = sns.load_dataset('tips')
tips.head()
冒頭の5つのデータを表示しています。分類データのグラフ描画をさっそくやっていきましょう。
countplotとbarplot
カテゴリー別の集計データを得ることができるメソッドを見ていきます。
countplot()
countplot()は、カテゴリー別データの出現回数をカウントします。
sns.countplot(x='sex',data=tips)
x軸に性別データを指定して、それぞれのデータ数をカウントします。
男女別の集計が視覚化されているのがわかります。
barplot()
barplot()は、カテゴリデータを関数を使って集計することができます。デフォルトでは平均値が求められます。
sns.barplot(x='sex',y='total_bill',data=tips)
sns.set()
性別のtotal_billを求めます。
デフォルトなので平均値で表示されています。
ここで、推定量estimatorに独自の関数を与えてみます。
import numpy as np
sns.barplot(x='sex',y='total_bill',data=tips,estimator=np.std)
ここではestimatorに標準偏差のnp.stdを指定しています。そのためにnumpyも合わせてインポートしています。
こちらは標準偏差になっています。
boxplotとviolinplot
次はboxplot()とviolinplot()を使用して、カテゴリ別データの分布を表示してみます。
boxplot()
boxplot()は箱ひげ図と呼ばれるグラフを描くもので、ボックスウィスカープロットとも言われます。データ間またはカテゴリ種別間の比較を容易にする方法で定量データの分布をグラフにします。
「異常値」と判定された点を除いて、ボックスプロットにはデータセットの四分位数が表示され、残りの部分をひげ(ウィスカー)として示します。
sns.boxplot(x="day", y="total_bill", data=tips,palette='rainbow')
ここでは曜日毎のtotal_billを分類します。paletteをrainbowにカラー設定しています。
orientをv(垂直)あるいはh(水平)を指定することで、データ型から判定して全体のグラフを表示します。
sns.boxplot(data=tips,palette='rainbow',orient='h')
ここではorientをhにしています。
今度はhueにカラムを指定して限定したデータを表示してみます。
sns.boxplot(x="day", y="total_bill", hue="smoker",data=tips, palette="coolwarm")
hueにsmokerを指定してそれに該当する曜日別のtotal_billのグラフを表示します。色はcoolwarmにしています。
violinplot()
violinplot()はboxplot()と同様の処理をしますが、boxplotが変数の四分位数の範囲の定量データの分布を示したのと違い、viorinplotは、カーネル密度推定を基礎とする分布を示すという特徴があります。
曜日毎のtotal_billの分布を表示してみます。
sns.violinplot(x="day", y="total_bill", data=tips,palette='rainbow')
今度はhueでカテゴリーを指定してみます。
sns.violinplot(x="day", y="total_bill", data=tips,hue='sex',palette='Set1')
曜日毎だけでなく、性別を分けています。
splitをTrueに設定すると、分けて表示した各レベルのバイオリンを半分つづに描画され、両データの分布を簡単に比較することができます。
sns.violinplot(x="day", y="total_bill", data=tips,hue='sex',split=True,palette='Set1')
男女別のデータを合わせて比較することになります。
stripplotとswarmplot
stripplot()とswarmplot()はよく似たメソッドで、1つの変数がカテゴリに属する場合の散布図を描画します。
stripplot()
stripplot()は、1つの変数がカテゴリに属する場合は散布図を描画します。ストリッププロットは単独で作成することもできますが、すべての観測結果を基にした分布を表示する場合は、ボックスプロットまたはバイオリンプロットの補完にもなります。
sns.stripplot(x="day", y="total_bill", data=tips)
曜日毎のtotal_billの分布を表示してみます。
jitterを指定すると、多数の点があってそれが重なっている場合に分布を見るのが簡単になります。
sns.stripplot(x="day", y="total_bill", data=tips,jitter=True)
ここではあまり差は出ませんでしたね。もっと直線的な表示になっていた場合は違いがわかったかもしれません。
次はこれまでと同様にhueを指定してみます。
sns.stripplot(x="day", y="total_bill", data=tips,jitter=True,hue='sex',palette='Set1')
凡例のように男女別に分類されて表示されているのがわかります。
次はdodgeをTrueに指定してみます。
sns.stripplot(x="day", y="total_bill", data=tips,jitter=True,hue='sex',palette='Set1',dodge=True)
重なりを避けて表示されているのがわかります。
swarmplot()
swarmplot()は重複しないようにポイントを調整して表示してくれます。
sns.swarmplot(x="day", y="total_bill", data=tips)
hueとdodgeを指定してみます。
sns.swarmplot(x="day", y="total_bill",hue='sex',data=tips, palette="Set1", dodge=True)
凡例のように男女別に分布を分けて表示しています。
プロットの結合
ここで扱った分布視覚化メソッドを組み合わせて使います。
ここではviolinplot()とswarmplot()で結合してみます。x軸、y軸に指定するデータを揃えて次のように指定してみます。
sns.violinplot(x="tip", y="day", data=tips,palette='rainbow')
sns.swarmplot(x="tip", y="day", data=tips,color='black',size=3)
2つが組み合わされた分布が表示されているのがわかります。
catplot
catplot()は、カテゴリーの分類データの分布を視覚化するのに最も一般的なメソッドです。パラメータを細かく指定することで表示を調整することができます。
sns.catplot(x='sex',y='total_bill',data=tips,kind='bar')
性別で分けて棒グラフで表示してみます。
最後に
ここではPythonの描画ライブラリseabornを使ってカテゴライズされた分類データをグラフにプロットしてみました。
ここでもseabornに用意されているデータセットをload_dataset()を使って読み込んでグラフを描画してみました。
ここでは、catplot()、boxplot()、violinplot()、stripplot()、swarmplot()、barplot()、countplot()を扱いました。