Python

Python seaborn チュートリアル プロット機能 統計的関係の可視化(1)

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

統計分析は、データセット内の変数の相互関係や、その関係が他変数への依存状態を理解するプロセスである。データを適切に可視化することで、関係を示す傾向やパターンを発見できる。

このチュートリアルでは、3回に分けて3つのseabornの関数について説明する。最もよく使うのはrelplot()で、これは散布図と折れ線グラフという2つの一般的なアプローチを用いて、統計的な関係を視覚化するための図レベルの関数である。

scatterplot() (with kind="scatter"; the default)
lineplot() (with kind="line")

これらの関数は複雑なデータセットの構造を表現できるにもかかわらず、シンプルで理解しやすいデータ表現を用いるため、非常に明快なものとなる。これらの関数は、色相、サイズ、スタイルのセマンティクスを利用して、追加変数(最大3つ)をマッピングで拡張できる2次元グラフィックスを描画する。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

散布図を用いた変数の関連付け

散布図は、統計的可視化の主力である。点の集まりを使用して2つの変数の合同分布を表し、各点がデータセットのオブザベーションを表す。この図は、それらの間に意味のある関係があるかどうかについて、かなりの量の情報の推測を可能にする。

seabornで散布図を描く方法はいくつかある。最も基本的なもので、変数の両方が数値の場合は、 scatterplot()関数を使うと良い。カテゴリの可視化チュートリアルでは、カテゴリデータを可視化するために散布図を使用するための特化したツールを確認する。scatterplot() は relplot() のデフォルトの種類。(kind=”scatter “で強制的に使用できる)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", data=tips)

plt.show()

点は2次元でプロットされているが、第3の変数に従って点に色をつけることで、別の次元をプロットに追加することができる。seabornでは、点の色が意味を持つため「色相意味論」と呼ぶ。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips)

plt.show()

クラス間の違いを強調し、アクセシビリティを向上させるために、クラスごとにマーカースタイルを使い分けることができる。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", hue="smoker", style="smoker", data=tips)

plt.show()

各点の色相とスタイルを独立して変更することで、4つの変数を表現することも可能。(しかし、目は形よりも色に敏感のため、慎重に行う必要こと。)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", hue="smoker", style="time", data=tips)

plt.show()

上記の例では、色相セマンティックがカテゴリカルなので、デフォルの定性パレットが適用された。色相セマンティックが数値的な場合(float にキャストできる場合)、デフォルトのカラーリングはシーケンシャルパレットに切り替わる。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", hue="size", data=tips)

plt.show()

どちらの場合も、カラーパレットをカスタマイズできる。これには多くのオプションがあり、 cubehelix_palette() の文字列インターフェイスを使用してシーケンシャルパレットをカスタマイズする。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", hue="size", palette="ch:r=-.5,l=.75", data=tips)

plt.show()

3種類目の意味変数は、各点の大きさを変化させる。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", size="size", data=tips)

plt.show()

matplotlib.pyplot.scatter()とは異なり、変数のリテラル値は点の面積を選ぶためには使用されない。その代わり、データ単位での値の範囲は、面積単位での範囲に正規化される。この範囲はカスタマイズできる。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", size="size", sizes=(15, 200), data=tips)

plt.show()

統計的な関係を示すために異なるセマンティクスの使用方法とカスタマイズの例は scatterplot() API の例に示されている。