[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()
"tips" は、7つのカラムを持つデータで、食事をした人の支払い額、チップ代、
性別、喫煙有無、曜日、時間、人数が記録されている。(お金の単位は、$)
このデータを使って各種プロット図をみていく。
distplot() : ヒストグラム図
ヒストグラム図を表示するには、distplot()
を使う。デフォルトでヒストグラムと、
確率密度関数の KDE(Kernel Density Estimation)が同時に描画されるが、
distplot()
の引数に、kde=false
を与えると KDE 曲線は表示されない。
sns.distplot(tips['total_bill'])
sns.distplot(tips['total_bill'], kde=false, bins=30)
この図は、y軸をカウント数、x軸が total_bill = 合計支払い額を示している。
つまり、$10~$20 の支払いが一番多かったことがわかる。
jointplot() : 2変数のヒストグラムと散布図
jointplot()
は2つの変数を比較したいときに、利用できる。ここでは、支払い合計とチップ額を比較してみる。
sns.jointplot(x='total_bill', y='tip', data=tips)
2つのヒストグラム図と散布図が表示された。
散布図のプロットが右上がりに並んでいることから、支払額がチップ額と正の相関関係があることがわかる。また右のチップのヒストグラムから、チップ額は$2~$4が多いため、散布図では左下にプロットの密度が高くなっている。(支払額: $10~$20, チップ額: $2~$4)
また、jointplot()
の引数に kind=hex
を与えることで、6角形のヒストグラム図を表示させることができる。
この図では、プロットの数ではなく、6角形を塗りつぶす色の濃さで密度を表現している。
sns.jointplot(x='total_bill', y='tip', data=tips, kind='hex')
さらに、引数に kind='reg'
を与えるとヒストグラム図内で、線形回帰曲線を描画してくれる。
sns.jointplot(x='total_bill', y='tip', data=tips, kind='reg')
データ全体の関係性を可視化 pairplot()
pairplot()
は数値データのみをもつ全カラムを比較するプロット図を表示する。
データを解析する際に、はじめにこのpairplot()
を実行することでざっくりとデータ全体の関係性を知ることができるため、
非常に便利な関数。さらに引数に、hue=
でカテゴリカルカラムを与えることで色分けを実行してくれる。
今回は、hue='sex'
を与えて、男女での色分けをみてみる。
sns.pairplot(tips, hue='sex')
終わりに
seaborn には他にも様々なプロットや、使い方がある。細かな設定などは今後の記事に記載していく予定。
公式 gallary