Python seaborn 使い方 前編

python

PythonのライブラリSeabornの使い方【前編】

2020年4月23日

こんにちは。産婦人科医で人工知能の研究に従事しているTommy(Twitter:@obgyntommy)です。

 

データの可視化はデータ解析する上で、非常に重要です。

 

機械学習の適用を考える上でも、最初に行うべきこととして、必ずどういったデータなのかを確認する必要があります

 

データを綺麗なグラフで表現できることは、データ解析者として必須のスキルです。

 

この講座でしっかり学習して、身につけていきましょう。

 

seabornについて学ぶべきことは多く、【前編】【後編】に分けて解説していきます。今回は【前編】となります。

 

 本記事の学習到達目標

  • seabornについて理解する
  • グラフのスタイルの扱い方を修得する
  • グラフの色の設定方法を修得する
  • 軸や目盛りの設定方法を修得する
  • 凡例の設定方法を修得する

 

では早速、学習していきましょう。

seabornとは

Python seaborn 使い方

Pythonでグラフを表示するライブラリといえば、matplotlib を思い浮かべる方も多いかと思います。

 

しかし、matplotlib よりグラフの見た目を美しく仕上げてくれるのが、seaborn になります。

 

seaborn はベースに matplotlib を使っているので、今までmatplotlibを使ってきた方も同じような使い方が出来るので、非常に便利です。

 

以下、seabornを利用した描図の結果になります。

Python seaborn 使い方

 

seabornの公式ドキュメントは以下をご覧下さい。

 

seaborn: statistical data visualization — seaborn 0.11.0 documentation
seaborn: statistical data visualization — seaborn 0.11.0 documentation

続きを見る

 

seabornのインストール方法

Python seaborn 使い方

インストールは pip で行いましょう。

 

ライブラリをインストールする際には、pippip3 のどちらかを使うことになりますが、どちらでもOKです。

 

普段使っている方で、インストールして下さい。

In[]

 

本記事で使用するデータ一覧

Python seaborn 使い方

本記事では、乱数ではなく、データ解析入門で使われる実データを使います

 

実際に、仕事をしている中で実データを解析していくイメージで学習を進めていきましょう。

 

注意ポイント

seabornではDataFrame型をよく使います。numpyでも使えるグラフもありますが、DataFrameで統一すると良いでしょう。

DataFrameはCSVやデータベースをなどの表データです。

 

iris

irisデータはアヤメ3種類それぞれのがく片(sepal)、花弁(petal)の幅と長さのデータセットです。

 

sepal length花弁長さ
sepal width花弁幅
petal lengthがく片長さ
petal widthがく片幅

Python seaborn 使い方 irisについて

データの取得の仕方は簡単、sns.load_dataset(“iris”) で欲しいデータが手に入ります。

 

データのtype(型)はpandasのDataFrameです。

In[]

Out[]

Python seaborn 使い方

タイタニック

このデータはグラフ表示のところで使用します。

 

タイタニックのデータはどういった人が生存できたかを予測する問題です。

survived0:死亡 1:生存
pclassチケットクラス 1:上級 2:中級 3:初級
sex性別
age年齢
sibsp同乗の兄弟配偶者の数
parch同乗の親子供の数
fare料金
embarked出港地(C=Cherbourg、Q=Queenstown、S=Southampton)
classチケットクラス
who男性 / 女性
adult_male成人男性かどうか
deck乗船していたデッキ
embark_town出港地
alive生存したかどうか
alone一人であったかどうか

In[]

 

Out[]

Python seaborn 使い方

グラフのスタイル

Python seaborn 使い方

グラフの見た目を変更していきましょう。

 

きれいなグラフは見やすく、見る側も気持ちがいいものです。

 

まず、初期設定の表示をして、そこから違いを見ていきます。

 

今回使用するグラフは

データirisデータのsepal width(x軸) ,sepal length(y軸)
グラフlmplot(散布図と回帰直線)
凡例species(アヤメの種類)

 

コード実装してみましょう。下記コードをそのまま実行してください。

 

lmplotの詳細はこちらを参照ください。グラフの見た目の調整が目的なので、見なくてもOKです。

In[]

 

Out[]

Python seaborn 使い方

如何でしょうか。何も設定していないのに、綺麗なグラフが出てきますね。

 

簡単にコードの説明をしていきます。

 

 seabornの読み込み

seaborn のライブラリを sns として読み込みます。

In[]

 

 matplotのスタイル変更

ベースで使っている、matplot のデザインを変更します。

seaborn ではなく、matplotlib でグラフを描画してもスタイルが変わります。

In[]

 

 データ読み込み

今回対象の iris データを読み込みます。

自分のデータで実行したい時には、ここを置き換えます。

seaborn  では Dataframe 型を主に使うので、読み込む際にも Dataframe 型で読み込みましょう。

In[]

 

 lmplot(グラフ)を表示

これからグラフの描画のコードを書きます。lmplot というグラフを描画します。

今回は、$ x=X$ 軸のデータ列名、$y=Y$ 軸のデータ列名hue=凡例 の列名を指定してます。

In[]

 

グラフのスタイルを見ると、sepal widthsepal length に相関がありますね。

又、species ごとにプロットが分かれるというデータの特徴が見て取れるとおもいます。

 

グラフのプリセットスタイル

プリセット(用意されている)スタイルは5つあります。

 

詳しくは、公式ドキュメントのSeaborn figure stylesを参考にして下さい。

 

種類背景色グリッド備考
darkgrid暗め有り初期設定
whitegrid有り
dark暗め無し
white無し
ticks軸のみ有り

スタイルの変更ではset_styleを使います。

 

whitegrid のコードを紹介して、図は全部の比較したものを紹介します。

 

お好みのグラフで、試してみましょう。

 

In[]

 

Out[]

Python seaborn 使い方

グラフの大きさ

大きさの設定は4つあります。

 

詳しくはScaling plot elementsを参考にして下さい。

 

以下に設定の4種類をまとめました。

 

種類大きさ備考
paper小さい
notebook普通初期設定
talk少し大きい
poster大きい

 

大きさの変更ではset_contextを使います。

 

paper のコードを使用して、以下の図は全てを比較したものになります。

In[]

 

気になるグラフで、試してみましょう。

Out[]

Python seaborn 使い方

 

グラフの色の設定

Python seaborn 使い方

グラフの色の設定を行いましょう。

 

グラフでは色も重要な要素です。好みかつ、見る側に適切なグラフを描画していきましょう。

 

seaborn では簡単にどんな色か見れる機能もあるので、先にそれを確認しましょう。

 

詳細はcolor palettesを参考にして下さい。

 

seaborncolor_palette メソッドで色の「種類」「数」、「彩度」を指定して、palplot で表示します。

 

色の種類はこれから紹介する、matplotlib の colormap であったり、seaborn の色となります。

In[]

 

彩度は低いほど、暗いイメージになります。以下の図でイメージを掴んでください。

 

Out[]

Python seaborn 使い方 色の彩度

色の彩度

 

matplotlibのcolormap

seaborn は matplotlib をベースしています。そのため、matplot の colormap が使用出来ます。

 

colormap は非常に多いので、詳しくは下記リンクを参考にして下さい。

 

Choosing Colormaps — Matplotlib 2.0.2 documentation
Choosing Colormaps — Matplotlib 2.0.2 documentation

続きを見る

 

本記事では1つだけ紹介しますが、皆さんは色々と試してみてください。

 

今回試す色は、「Pastel1」です。

Python seaborn 使い方 matplotlibのcolormapのうち、Pastel1を使用

matplotlibのcolormapのうち、Pastel1を使用。

色の変更ではset_paletteを使います。

 

set_palette も引数に(色の種類, 色の数, 色の彩度)をとります。

 

引数をとる際には色の種類のみを指定します。

In[]

 

Out[]

Python seaborn 使い方 グラフの色の設定を行う

グラフの色の設定を行う

 

seabornで色彩を変更する方法

seabornでは6色の色が用意されています。

 

 

muted」のコードを紹介して、図は全て比較したものを解説していきます。

 

コードは  matplotlib の colormap と同じで sns.set_palette を使用します。

In[]

 

Out[]

Python seaborn 使い方

hlsによる指定

hlsとは、HLS色空間による色の設定です。

 

hlsはhls_paletteを使って、以下の指定を行います。

  • h:色相
  • l:輝度
  • s:彩度

 

In[]

 

Out[]

Python seaborn 使い方

HLS色空間による色の設定

 

軸、目盛りの設定

Python seaborn 使い方

次は、グラフの軸や目盛りについての設定をしていきましょう。

 

ここでは、seaborn の設定ではなく、ベースとなっている matplotlib の設定を行います。

 

以下の様にimport seaborn as sns の下に、import matplotlib.pyplot as plt を追加してください。

 

In[]

 

軸範囲を設定する方法

2つ以上のデータを比較するときに、軸の範囲が揃っていないと、パッと比較が出来ず分かりにくいですね。

 

例えば、以下の図の様に、同じようなデータを違う軸範囲で表示するとします。

 

Python seaborn 使い方

 

右の図の方が、データにまとまりがあるな!っと思いつつ、よーく見ると、レンジが違う!ってなります。

 

これではグラフを見る側の人には優しくないので、軸範囲を揃えてあげる必要があります

 

では早速、軸範囲を設定しましょう。

 

軸範囲は matplotlib.pyplotxlim (開始, 終了) , ylim (開始, 終了)を設定するだけです。

  • X軸: xlim (開始, 終了)
  • Y軸: ylim (開始, 終了)

 

In[]

 

Out[]

Python seaborn 使い方

軸範囲を設定後

 

目盛りの間隔

グラフの目盛りの軸の範囲と同じく、目盛りの間隔も適切に設定されていないとデータを正しく見ることができません。

 

適切な目盛り間隔を設定できるようにしていきましょう。

 

目盛りの間隔では、matplotlib.pyplotaxes を使います。

 

matplotlib公式ドキュメントも一緒に参考にしつつ、matplotlib.pyplotfigureaxes を見ていきます。

 

matplotlib.pyplotplt では figureaxes という考えがあります。

 

複数グラフを並べて表示するときに出てきますが、今回は axes を使うということを覚えておいてください。

 

figure(図全体)と axes(グラフ)の違いについては以下の図で把握する様にしましょう。

Python seaborn 使い方

figure(図全体)と axes(グラフ)の違い

 

もう一つ、matplotlib.ticker という目盛りを調整するライブラリを使っていきます。

 

実際に動かしてみましょう。

 

$y$ 軸の目盛りの間隔を 0.2 にしています。

In[]

 

Out[]

Python seaborn 使い方

目盛りを調整後

 

詳しくみていきましょう。

 

まず、axes を  plt.gca() で取得します。

In[]

そうすると、グラフの軸の xaxis , yaxis を設定出来るようになります。

 

$y$ 軸の yaxisset_major_locator() メソッドと ticker.MultipleLocator を使って目盛り 0.2 ずつと指定します。

 

In[]

 

対数の表示方法

データの通信量やウィルスの感染人数などデータの増加大きいものは対数で表すことがあります。

 

方法は簡単で plt.yscale(‘log’) と追加するだけOKです。

 

In[]

 

Out[]

Python seaborn 使い方

y 軸を対数で表示

 

あまり変わっていませんね。

 

気づかれた方もいるかもしれませんが、今回のirisデータでは対数表示は適していないという事が分かりました。

 

対数表示が適しているのは増加が激しいものですが、irisは増加が著しいものではないのであまり変わらなかったのです。

 

軸の非表示

seaborn では軸の表示非表示を設定するができます

 

despine というメソッドを使って、引数に top , right , left , bottom をTrueかFalseにすることで表示非表示を切り替えます。

 

despine 実行時の初期値は、top , right が False で非表示なっています。

 

seaborn のスタイルの「ticks」では右上の軸が非表示なっているので、左の軸を非表示にしてみます。

 

In[]

 

Out[]

Python seaborn 使い方

軸のラベルの向きの調整方法

カテゴリ変数や日付等を軸にしていると、軸のラベルの向きを回転した方が見やすい場合があります。

 

ラベルの回転は、plt.xticksrotation に回転角度を指定するだけです。

In[]

 

Out[]

Python seaborn 使い方

ラベルを回転

 

凡例の表示方法

Python seaborn 使い方

凡例とはカテゴリなどを表す、図の右等に位置しているもののことです。

 

エクセルのグラフの凡例と同じです。以下の図でも右側にあるのが凡例です。

Python seaborn 使い方

右側にあるのがグラフの凡例

 

凡例は「表示したいカテゴリが多くあれば、下にまとめて横長に表示する」など、データによって適切に配置する必要があります。

 

凡例をうまく表現できるように、表示方法を学習しましょう。

 

凡例の表示/非表示

seabornでは初期設定で凡例が表示されているので、非表示にしてみましょう。

 

lmplot など、グラフの表示メソッドの引数に legend=False を追加するだけで凡例を非表示にする事ができます。

 

In[]

 

Out[]

Python seaborn 使い方 凡例が非表示にした

凡例が非表示にした

非表示になりましたね。

 

しかし凡例が非表示になると、データがなんなのか全然わかりませんね。

 

seaborn の凡例は位置調整できないので、次の項では seaborn の凡例を非表示にした上で、matplolib の方の凡例を調整していきましょう。

 

凡例の位置

 

matplot の凡例を表示して、位置を指定していきます。

 

グラフの位置の調整方法

matplotの凡例は axes のlegendメソッドを使います。

 

配置は全てで11種類あります。

Location StringLocation Code
‘best’0
‘upper right’1
‘upper left’2
‘lower left’3
‘lower right’4
‘right’5
‘center left’6
‘center right’7
‘lower center’8
‘upper center’9
‘center’10

 

まず、Location Stringのうち「best」を試してみましょう。legend メソッドに loc=”best” を渡します。

 

LocationCode の0を使って、loc=0 でもOKです。

 

best」は LocationCode 1-10 の中で一番良さそうな場所を選んでくれます。

 

In[]

 

lower right(右下)に配置されました。

 

Out[]

Python seaborn 使い方 

bestでlower right(右下)に配置されました

 

グラフの位置をより細かく調整する方法

凡例をグラフ枠外に出したり、より細かい調整は、bbox_to_anchor を引数に追加します。

 

いくつか引数で使うパラメータがあるので紹介します。

引数説明
bbox_to_anchor凡例の位置、幅高さ。0-1のfloat値
bbox_to_anchor(x, y, width, height)
bbox_to_anchor(x, y)
で指定可能
ncol凡例の列数
mode“expand”とすることで、bbox_to_anchor指定した幅まで広げる
loc指定したlocationは調整する凡例の位置を示す

 

例えば、以下の様に調整してみましょう。

  • グラフの左下を(0.0, 0.0)から右上を(1.0, 1.0)の位置を示す。
  • loc は凡例のどこを合わせるかを指定する。
  • ”upper left” であれば、凡例の左上に合わせる事が出来る。

 

In[]

 

この様にすると、凡例の左上をグラフ上の 0.5, 0.5 の位置に合わせることが出来ます。

 

Out[]

Python seaborn 使い方 

凡例の左上をグラフ上の 0.5, 0.5 の位置に合わせた

 

実際に凡例を上に、かつ横長に表示してみましょう。

 

仕様は以下です。

  • loc=”lower left” で凡例の左下を合わせる位置にする
  • bbox_to_anchor=(0., 1., 1.0, 0.05) で位置は左上(0.0, 1.0)サイズは(1.0, 0.05)
  • mode=”expand”bbox_to_anchor の指定幅まで広げる
  • ncol=3 で凡例の列数を3列にする

 

In[]

 

Out[]

Python seaborn 使い方 

凡例のスタイル

凡例のスタイルもいくつか変更できるので紹介します。

 

詳細はlegendのドキュメントを参考にして下さい。理解が深まります。

引数説明備考
title凡例のタイトルを表示
title_fontsize凡例のタイトルのフォントサイズ
markerscale凡例のマーカーの大きさ1,2,3などの数値
markerfirstマーカーをラベルの前にするかTrue/Falseで指定
frameon凡例の枠を表示するかどうかTrue/Falseで指定
fancybox凡例の枠の丸みをつけるかどうかTrue/Falseで指定
shadow凡例に影とつけるかどうかTrue/Falseで指定
framealpha凡例の背景の透過具合0-1の値
facecolor凡例の背景の色‘red’,’blue’など
edgecolor凡例の枠の色‘red’,’blue’など

 

基本的な使い方は axes の legend メソッドの引数に与えるだけです。

 

いろいろ組み合わせて試してみましょう。

 

サンプルとして、1つコードを実行してみましょう。

 

上の表のパラメータを色々組み合わせてみます。

In[]

 

Out[]

Python seaborn 使い方

今回は以上となります。お疲れ様でした。

 

また、seabornについての後半の記事は以下になります。本記事が終わった方は続けて学習しましょう。

関連記事
Python seaborn 使い方 後編
PythonのライブラリSeabornの使い方【後編】

続きを見る

 

 

 

人気記事 【入門から上級レベルまで】人工知能・機械学習の独学におすすめの本25選

人気記事 無料あり:機械学習エンジニアの僕がおすすめするAI(機械学習)特化型プログラミングスクール3社


-python
-,

Copyright© Tommy blog  , 2020 All Rights Reserved.