Seabornの全メソッドを解説(その1:グラフ一覧)

概要

Pythonにはseabornという多機能で綺麗なグラフを描くライブラリがあります。このseabornの全メソッドの効果を検証したのが今回の記事です。サンプルデータとしてirisとtitanicを使って説明していきます。

#seabornはsnsという名前で使う
import seaborn as sns

if __name__ == "__main__":
    
    #irisデータをdfに格納
    df = sns.load_dataset("iris")

    #titanicデータをdf2に格納
    df2 = sns.load_dataset("titanic")

メソッド一覧

コンソール上でdir(sns)と入力すると、メンバの一覧が取得できます。その中でメソッドを抽出すると以下大量の77メソッドがあることが分かります。本記事(その1)では、誰もが気になる、グラフを書くためのメソッド(全24:水色塗)を検証し、seabornで描ける全グラフを確認しました。

FacetGrid JointGrid PairGrid algorithms
axes_style axesgrid barplot blend_palette
boxplot categoriacl choose_colorbrewer_palette choose_cubehelix_palette
choose_dark_palette choose_diverging_palette choose_light_palette clustermap
coefplot color_palette countplot crayon_palette
crayons cubehelix_palette dark_palette desaturate
despine distplot distributions diverging_palette
division external factorplot get_dataset_names
heatmap hls_palette husl_palette interactplot
jointplot kdeplot light_palette linearmodels
lmplot load_dataset lvplot matrix
miscplot mpl mpl_palette np
pairplot palettes palplot plotting_context
plt pointplot puppyplot rcmod
regplot reset_defaults reset_orig residplot
rugplot saturate set set_color_codes
set_context set_hls_values set_palette set_style
stripplot swarmplot timeseries tsplot
utils violinplot widgets xkcd_palette
xkcd_rgb

Distribution plots

API紹介の公式ページでの分類分けを踏襲し、説明していきます。まずはデータ分布を可視化する(Distribution plots)メソッドです。

jointplot

2変数間の分布を可視化するグラフ。引数のkindを与えることで複数のグラフが描ける。residを指定した場合を除き、さりげなく相関係数とp値も表示される。

scatter

デフォルトか、kindで”scatter”を指定した場合。scatterグラフだけでなく、それぞれのヒストグラムも表示されており利便性は高そう。

sns.jointplot(df.columns[0], df.columns[1], df)

reg

kindで”reg”を指定した場合。線形回帰線が追加される。

sns.jointplot(df.columns[0], df.columns[1], df, kind="reg")

resid

kindで”resid”を指定した場合。分布を表す|が追加されているが、あまり良くわからない。

sns.jointplot(df.columns[0], df.columns[1], df, kind="resid")

kde

kindで”kde”を指定した場合。等高線が表示される。

sns.jointplot(df.columns[0], df.columns[1], df, kind="kde")

hex

kindで”hex”を指定した場合。独特の表現。

sns.jointplot(df.columns[0], df.columns[1], df, kind="hex")

pairplot

多変数間の分布を可視化するグラフ。hueにカテゴリ変数を指定すると色分けされたグラフが描け非常に有効。また、kindやdiag_kindの指定でグラフの形状を変えることができる。

sns.pairplot(df)

#hueを指定することでカテゴリごとに色分けされる。
sns.pairplot(df, hue='species')

#kindとdiag_kindを指定すると形状を変えられる。
sns.pairplot(df, hue='species', kind='reg', diag_kind='kde')

distplot

1変数の分布を可視化する。

sns.distplot(df[df.columns[0]])

kdeplot

1変数又は2変数の分布をkdeで可視化する。

sns.kdeplot(df[df.columns[0]], df[df.columns[1]], shade=True)

kdeplot

1変数の分布をrugで可視化する。

sns.rugplot(df[df.columns[0]])

Regression plots

主に連続変数を可視化する(Regression plots)メソッドです。

lmplot

2変数間の散布図と線形回帰線を可視化するグラフ。hue, col, rowにはカテゴリ変数を指定でき、hueを指定すると色分け、colやrowを指定するとmatrix的にデータをプロットできる。数値データとカテゴリデータが混在する時にかなり有効に使えそう。

#色分け
sns.lmplot(df.columns[0], df.columns[1], df, hue="species")

#列方向に並べて表示
sns.lmplot(df.columns[0], df.columns[1], df, col="species")

#行方向に並べて表示
sns.lmplot(df.columns[0], df.columns[1], df, row="species")

#カテゴリ変数が多い場合は特に有効
sns.lmplot(x='age', y='fare', data=df2, hue='alive', col='class', row='alone')

regplot

2変数間の散布図と近似線を可視化するグラフ。orderの指定で多項式を、logisticの指定でロジスティック関数を近似に用いることができる。

#多項式の次数を2に指定
sns.regplot(df.columns[0], df.columns[1], df, order=2)

residplot

2変数間の散布図とresid valueを可視化するグラフ。residとは残余価値を示し、資産運用等に使う指標とのこと。ヘルプにはIdeally, these values should be randomly scattered around y = 0と書いてあり、0付近にあればいいらしい。ところで、何がいいんだろう?(笑)

#多項式の次数を2に指定
sns.regplot(df.columns[0], df.columns[1], df)

interactplot

3変数を使ってコンタ図を描くことができる。

sns.interactplot(df[df.columns[0]], df[df.columns[1]], df[df.columns[2]])

coefplot

変数間の線形関係係数を計算し描くことができる。線形関係係数ってなんでしょう?
プロットした感じ相関係数っぽいのですが、ちょっと違いそうです。尚、使い方が全然わからず、私的メモさんの記事を参考にさせて頂きました。(これは初見では分からない。。。)

#~以前の変数と以後の間の変数の線形関係係数を演算し描画する
sns.coefplot(df.columns[0] + "~" + df.columns[1] + "+" + df.columns[2] + "+" + df.columns[3], df)

Categorical plots

主に離散変数を可視化する(Categorical plots)メソッドです。

factorplot

複数の離散変数と1つ以下の連続変数の分布を可視化するグラフ。violinplot等、かなりユニークなものが多いが、可視化効果は高そうなのでなんとか使いこなしたいところ。引数のkindを与えることで複数のグラフが描ける。

point

デフォルトか、kindで”point”を指定した場合。

sns.factorplot(data=df, kind='violin', col='species')

#指定するカテゴリ変数の量が多いほど可視化効果が高い
sns.factorplot(x='class', y='age', data=df2, hue='alive', col='sex', row='alone')

bar

kindで”bar”を指定した場合。

sns.factorplot(x='class', y='age', data=df2, hue='alive', kind='bar', col='sex', row='alone')

count

kindで”count”を指定した場合。カテゴリ変数を組み合わせた場合のデータ個数の可視化に有効。

sns.factorplot(x='class', data=df2, hue='alive', kind='count', col='sex', row='alone')

box

kindで”box”を指定した場合。いわゆる箱ひげ図。

sns.factorplot(x='class', y='age', data=df2, hue='alive', kind='box', col='sex', row='alone')

lv

kindで”lv”を指定した場合。箱ひげが立体的になった感じの図。

sns.factorplot(x='class', y='age', data=df2, hue='lv', kind='box', col='sex', row='alone')

violin

kindで”violin”を指定した場合。見慣れないグラフだが、変数のデータの分布がよくわかるためおススメ。

sns.factorplot(x='class', y='age', data=df2, hue='alive', kind='violin', col='sex', row='alone', split=True, inner="quartile")

strip

kindで”strip”を指定した場合。

sns.factorplot(x='class', y='age', data=df2, hue='alive', kind='strip', col='sex', row='alone', jitter=True)

swarm

kindで”swarm”を指定した場合。violinとstripの中間のような位置づけ。

sns.factorplot(x='class', y='age', data=df2, hue='alive', kind='swarm', col='sex', row='alone')

boxplot, violinplot, stripplot, swarmplot, pointplot, barplot, countplot, lvplot

factorplotでkindを指定した場合と変わらなかったため割愛。

Matrix plots

カラム間又はインデック間を可視化する(Matrix plots)メソッドです。

heatmap

データの大きさで色分けするグラフ。相関関係等の可視化に非常に有効。

sns.heatmap(df.corr())

clustermap

heatmapの要素に加え、階層型クラスタリングを実施しデンドログラムまで作成する。こちらも相関関係等の可視化に非常に有効。

sns.clustermap(df.corr())

その他

上記に含まれないメソッドです。

tsplot

複数のカラムのデータを与えた時に、ばらつき度合いを含めたプロットをしてくれる。

sns.tsplot(np.array(df[df.columns[0:4]].T))

palplot

パレットを描画する。この方のサイトを参考にしました。

sns.palplot(sns.color_palette(n_colors=6))

sns.palplot(sns.hls_palette(24))

puppyplot

動かないし、ヘルプに何も書いていない。実態不明。

まとめ

その1ではseabornの全プロットメソッドについて紹介しました。個人的には多項式近似のregplot、ユニークなviolinplot、コンタ図が描けるinteractplot、クラスタリングまで実施してくれるclustermapが特に使えると感じました。その2以降で残りのメソッドも検証していく予定です。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA