1. データの視覚化は複雑で面倒

ビジュアライゼーションと呼ばれる分野に苦手意識があります。

単純に機能が多くて複雑で面倒だからです。

今まではグラフ作成から逃げて生きてきましたが、データの特徴量を把握する上でグラフの力は大きいのでこのタイミングで正面から立ち向かうことにしました。

とはいえ、matplotlibやseabornの情報を調べてみるとそれはそれは豊富な情報が

  1. Figure, AxesSubplot, Facet ?

  2. histplot, kdeplot, boxplot, barplot ? 多すぎる!

matplotlibの概念が複雑過ぎます。詳細を把握することは困難だし、ライトユーザには必要ありません。

seabornのAPIも多すぎます。ライトユーザは使用するものを限定しましょう。

この記事ではライトユーザ向けに、そして私個人のために必要な情報を絞り込んで整理します。

2. seabornのAPI overview

seabornの公式ページにAPI overviewがあります。

このページではAPIの階層構造が図式で紹介されています。

そして、この中で個人的にはrelplotとcatplotが重要だと考えています。

3. relplotとcatplotが重要だと考える理由。

2つの理由があります。この2つは密接に関係しています。

  1. FacetGrid

  2. col=

3.1. FacetGrid

seabornのAPIによって返り値のデータ型が異なります。

  1. relplotとcatplotの返り値はseaborn.axisgrid.FacetGrid

  2. scatterplotなどの返り値はmatplotlib.axes.Axes

異なるデータ型が混在してしまうと扱い方で混乱してしまいます。

扱うデータ型を統一するためにrelplotとcatplotを使用するのが効率的だと考えています。

3.2. col=

relplotとcatplotがFacetGridなので引数にcol=を指定することができます。

系列データの推移を比較するときなどにこの機能が便利です。

4. 実例

実際にreplpotとcatplotのグラフを作成してみます。

グラフはsavefigを使用してファイルに保存します。

4.1. データ準備

seabornのtitanicデータを使用します。

create_data.py
import seaborn as sns

titanic = sns.load_dataset('titanic')

4.2. 散布図をrelplotで作成する:数値型✖数値型 の関係

relplotのデフォルトは散布図、kind='scatter’で散布図の場合はkind=を省略できます。

col=も試したいのでcolはalive変数を指定しておきます。

relplot.py
(
    sns
    .relplot(
        y='age',
        x='fare',
        col='alive',
        data=titanic,
    )
    .savefig('relplot.jpg')
)
relplot
Figure 1. relplot.jpg

4.3. Swarmplot:数値✖カテゴリの関係

数値とカテゴリの関係を確認するときにはSwarmplotが便利です。

swarm.py
(
    sns
    .catplot(
        x='sex',
        y='fare',
        col='alive',
        data=titanic,
        kind='swarm',
    )
    .savefig('swarm.jpg')
)
swarm
Figure 2. swarm.jpg

4.4. countplot:カテゴリの各値の件数を棒グラフ化

単純な棒グラフです。barplotではなくcountplotです。

countplot.py
(
    sns
    .catplot(
        x='sex',
        col='alive',
        data=titanic,
        kind='count',
    )
    .savefig('count.jpg')
)
count
Figure 3. count.jpg

4.5. barplot:数値の統計量とカテゴリの関係

平均値のような数値の統計量とカテゴリの関係を確認します。

barplot.py
(
    sns
    .catplot(
        x='sex',
        y='age',
        col='alive',
        data=titanic,
        kind='bar',
    )
    .savefig('bar.jpg')
)
bar
Figure 4. bar.jpg

5. まとめ

seabornのrelplotとcatplotで個人的に使用頻度が高い4つのプロットの実例を紹介しました。

この4つのプロットで大方の可視化ニーズに対応できると思います。

データの可視化はこだわればどこまでも詳細で複雑になってしまう底なし沼です。

詳細かつ正確な知識の習得には時間がかかります。

この記事では詳細な知識を横に置いて、便利な道具としてさっと使っていくことを重視して4つの実例を紹介しました。