[seaborn] 基本的な操作

Posted on 2019/03/15 in programming , Updated on: 2019/03/30

はじめに

Seaborn は、統計プロットライブラリのひとつであり、matplotlib を元に構築されている。
ヒートマップやボックスプロット、バイオリンプロットといったデータサイエンスでの視覚化ライブラリとして使用される。 デフォルトで美しいグラフを描画できるスタイルを持っており、 pandas のデータフレームオブジェクトと非常にうまく動作するように設計されている。

インポート

sns としてインポートするのが慣例。Jupyter Notebook上で利用することを想定しているので、 Notebook にグラフが描画されるように [matplotlib] 基本的な使い方 でも利用したマジックコマンド %matplotlib inlineも追記。

import seaborn as sns
%matplotlib inline

データセットの読み込み

Seaborn は、いくつかの組み込みデータセットを用意してくれている。 今回は、このデータセットの中から、"tips" データセットを pandas データフレームとして読み出して利用する。

# tips データの読み出し
tips = sns.load_dataset('tips')

# tips データの上位5行を表示
tips.head()

testpage.png
"tips" は、7つのカラムを持つデータで、食事をした人の支払い額、チップ代、 性別、喫煙有無、曜日、時間、人数が記録されている。(お金の単位は、$)

このデータを使って各種プロット図をみていく。

distplot() : ヒストグラム図

ヒストグラム図を表示するには、distplot() を使う。デフォルトでヒストグラムと、 確率密度関数の KDE(Kernel Density Estimation)が同時に描画されるが、 distplot()の引数に、kde=false を与えると KDE 曲線は表示されない。

sns.distplot(tips['total_bill'])

testpage.png

sns.distplot(tips['total_bill'], kde=false, bins=30)

testpage.png
この図は、y軸をカウント数、x軸が total_bill = 合計支払い額を示している。 つまり、$10~$20 の支払いが一番多かったことがわかる。

jointplot() : 2変数のヒストグラムと散布図

jointplot() は2つの変数を比較したいときに、利用できる。ここでは、支払い合計とチップ額を比較してみる。

sns.jointplot(x='total_bill', y='tip', data=tips)

testpage.png
2つのヒストグラム図と散布図が表示された。
散布図のプロットが右上がりに並んでいることから、支払額がチップ額と正の相関関係があることがわかる。また右のチップのヒストグラムから、チップ額は$2~$4が多いため、散布図では左下にプロットの密度が高くなっている。(支払額: $10~$20, チップ額: $2~$4)

また、jointplot()の引数に kind=hex を与えることで、6角形のヒストグラム図を表示させることができる。 この図では、プロットの数ではなく、6角形を塗りつぶす色の濃さで密度を表現している。

sns.jointplot(x='total_bill', y='tip', data=tips, kind='hex')

testpage.png

さらに、引数に kind='reg' を与えるとヒストグラム図内で、線形回帰曲線を描画してくれる。

sns.jointplot(x='total_bill', y='tip', data=tips, kind='reg')

testpage.png

データ全体の関係性を可視化 pairplot()

pairplot() は数値データのみをもつ全カラムを比較するプロット図を表示する。 データを解析する際に、はじめにこのpairplot()を実行することでざっくりとデータ全体の関係性を知ることができるため、 非常に便利な関数。さらに引数に、hue= でカテゴリカルカラムを与えることで色分けを実行してくれる。 今回は、hue='sex'を与えて、男女での色分けをみてみる。

sns.pairplot(tips, hue='sex')

testpage.png

終わりに

seaborn には他にも様々なプロットや、使い方がある。細かな設定などは今後の記事に記載していく予定。
公式 gallary