Python

Python seaborn チュートリアル APIの概要 データ構造(3)

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

ワイドフォームデータを渡すためのオプションはさらに柔軟である。ワイドフォームデータの場合と同様に、名前(インデックス)情報を使用できるため、pandasオブジェクトが好ましい。本質的には、単一のベクトルまたはベクトルの集合として見ることができる任意の形式をデータに渡すことができ、通常は有効なプロットを構築することができる。

(2)で確認した例では、長方形のpandas.DataFrameを使用しているが、これは列の集合体と考えることができる。dictやpandasオブジェクトのリストも動作するが、軸のラベルを失う。

import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
flights_wide = flights.pivot(index="year", columns="month", values="passengers")
flights_wide_list = [col for _, col in flights_wide.items()]
sns.relplot(data=flights_wide_list, kind="line")
plt.show()

コレクション内のベクトルは、同じ長さである必要はない。インデックスを持っている場合は、それらの位置合わせに使用される。

import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
flights_wide = flights.pivot(index="year", columns="month", values="passengers")
two_series = [flights_wide.loc[:1955, "Jan"], flights_wide.loc[1952:, "Aug"]]
sns.relplot(data=two_series, kind="line")
plt.show()

順序インデックスは numpy 配列や Python の単純なシーケンスに使用される。

import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
flights_wide = flights.pivot(index="year", columns="month", values="passengers")
two_series = [flights_wide.loc[:1955, "Jan"], flights_wide.loc[1952:, "Aug"]]
two_arrays = [s.to_numpy() for s in two_series]
sns.relplot(data=two_arrays, kind="line")
plt.show()

しかし、そのようなベクトルの辞書は、少なくともキーを使用する。

import seaborn as sns
import matplotlib.pyplot as plt

flights = sns.load_dataset("flights")
flights_wide = flights.pivot(index="year", columns="month", values="passengers")
two_series = [flights_wide.loc[:1955, "Jan"], flights_wide.loc[1952:, "Aug"]]
two_arrays_dict = {s.name: s.to_numpy() for s in two_series}
sns.relplot(data=two_arrays_dict, kind="line")
plt.show()

長方形のnumpy配列は、インデックス情報のないデータフレームと同じように扱われるため、列ベクトルの集合として扱われる。(これは、1つのインデクサが1つの行にアクセスするというnumpyインデックス操作の仕組みとは異なることに注意が必要。)pandasがどのように配列をデータフレームに変換するか、matplotlibがどのようにプロットするかは一貫性している。