目次
- 目次
- PythonライブラリのSeabornとは?
- Seabornのインストール
- Seabornの特徴
- スタイルの変更方法
- グラフ描画機能
- Mac OSXでtight_layoutのエラーが出た時の対処法
- より深くSeabornを学びたい場合は
- 最後に
- 参考資料
- MyEnigma Supporters
PythonライブラリのSeabornとは?
SeabornはPythonのグラフ描画ライブラリとして有名な
matplotlibをベースにしたグラフ描画ライブラリです。
Seaborn: statistical data visualization — seaborn 0.6.0 documentation
matplotlib: python plotting — Matplotlib 1.4.3 documentation
Seabornはオープンソースとして、Github上で開発されています。
今回は、このPythonのグラフ描画ライブラリSeabornの
基本的な使い方について説明したいと思います。
Seabornのインストール
下記のようにpipでインストールできます。
pip install seaborn
下記のライブラリも必要なので、
まだインストールしていない場合は、
インストールしましょう。
pip install numpy
pip install scipy
pip install matplotlib
pip install pandas
Seabornの特徴
Seabornはmatplotlibよりも
美しいライブラリを簡単に描画できるように設計されています。
SeabornのHPには、Seabornの特徴として、下記の特徴を上げています。
matplotlibのデフォルトよりも美しいグラフテーマ群
データのパターンを明らかにする美しいプロットのためのカラー選択ツール
データのサブセット間の分布を可視化するための関数群
複数種類のデータの線形回帰と可視化ツール群
時系列データの状態推定と誤差推定の関数
グリット状の複雑なグラフを簡単に描画するシステム
下記のSeabornのグラフギャラリーを見るとわかりますが、
色合いがグラフのスタイルが、matplotlibと比べて非常に綺麗であることがわかります。
スタイルの変更方法
Seabornによるグラフのスタイルの変更方法について説明します。
matplotlibのグラフをSeabornのデフォルトスタイルに変更する
下記のようなコードを実行すると、
import numpy as np import matplotlib.pyplot as plt flip=1 x = np.linspace(0, 14, 100) for i in range(1, 7): plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip) plt.show()
下記のようなmatplotlibのグラフができます。
このグラフをSeabornのスタイルにするには、
seabornをimportするだけです。
import numpy as np import matplotlib.pyplot as plt import seaborn as sns #importするだけでスタイルがSeabornになる flip=1 x = np.linspace(0, 14, 100) for i in range(1, 7): plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip) plt.show()
Seabornのスタイルを変更する
Seabornのスタイルは5つあります。
darkgrid, whitegrid, dark, white, ticksです。
先ほどのグラフはデフォルトのdarkgridです。
デフォルト以外のスタイルにするには、
set_style()関数を使います。
グラフを描画する前にset_style関数を呼ぶだけです。
whitegrid
Seabornのマニュアルによると、
描画のデータ数が多い時におすすめのスタイルです。
import numpy as np import matplotlib.pyplot as plt import seaborn as sns sns.set_style("whitegrid") x = np.random.normal(size=100) sns.distplot(x); plt.show()
dark
こちらはグリッドが要らない場合におすすめのスタイルです。
sns.set_style("dark")
white
こちらもグリッドが要らない場合におすすめのスタイルです。
sns.set_style("white")
ticks
こちらは軸にのみ刻みの線を追加するスタイルです。
sns.set_style("ticks")
右と上のグラフの枠線を無くす
plt.showする前に、
sns.despine() という関数を呼ぶと、
下記のように、右と上のグラフの枠線を無くすことができます。
グラフ描画機能
Seabornで重要なグラフ描画機能について説明します。
折れ線グラフ
折れ線グラフはpointplot関数を使います。
引数のx,yに縦軸と横軸のデータ、
hueはカテゴリーデータ、
paletteでグラフの色(カテゴリー名と色の辞書データとして与える)
markersとlinestylesでマーカと線種をそれぞれリストで与えることができます。
titanic = sns.load_dataset("titanic") sns.pointplot(x="class", y="survived", hue="sex", data=titanic, palette={"male": "g", "female": "m"}, markers=["^", "o"], linestyles=["-", "--"]); sns.plt.show()
すると、下記のようなグラフが得られます。
マーカを無くしたりしたい時は、
markers=[""]のように空で指定すればOKです。
棒グラフ
棒グラフはbarplot関数を使います。
横軸と縦軸はxとy変数に、
棒グラフのカテゴリーデータはhueに、
そしてデータセットはdata変数に代入します。
titanic = sns.load_dataset("titanic") sns.barplot(x="sex", y="survived", hue="class", data=titanic); sns.plt.show()
するとこのようなグラフが書けます
一次元分布データの描画(ヒストグラムや確率密度関数)
distplotという関数を使うことで
一次元データのグラフを作成することができます。
import numpy as np import seaborn as sns x = np.random.normal(size=100) sns.distplot(x); sns.plt.show()
デフォルトでヒストグラムとカーネル密度推定による
確率密度関数が表示されます。
ヒストグラム表示
kde=Falseとすることで、確率密度関数を非表示にして、
ヒストグラムのみを表示することができます。
sns.distplot(x, kde=False);
また、
sns.distplot(x, kde=False, rug=True);
と設定することにより、
データの分布をグラフの下部に表示することができます。
加えて、
bins変数を指定することで、ヒストグラムのビンの数を設定することができます。
sns.distplot(x,kde=False, rug=True, bins=5);
二次元の分布データの描画
続いて、二次元分布データの描画の説明をします。
散布図のプロット
jointplot関数を使うと、
二次元の変数の散布図と、
各次元のヒストグラムを表示することができます。
import numpy as np import seaborn as sns import pandas as pd mean, cov = [0, 1], [(1, .5), (.5, 1)] data = np.random.multivariate_normal(mean, cov, 200) df = pd.DataFrame(data, columns=["x", "y"]) sns.jointplot(x="x", y="y", data=df); sns.plt.show()
グラフ内のpeasorという値は、
ピアソンの相関係数、
pはP値です。
kind="hex"とすることで、六角形プロットを表示することができます。
sns.jointplot(x="x", y="y", kind="hex", data=df);
kind="kde"とすることでカーネル密度法による確率密度関数が表示されます。
sns.jointplot(x="x", y="y", kind="kde", data=df);
データセットの相関分析
seabornの素晴らしい機能の一つに、
データセットの各変数同士の相関分析を簡単に実施できる関数があります。
それはpairplot関数です。
import seaborn as sns iris = sns.load_dataset("iris") #サンプルデータセット sns.pairplot(iris); sns.plt.show()
すると、下記のグラフのように簡単に相関分析をすることができます。
カテゴリーデータがあれば、
下記のように変数hueにカテゴリー変数名を入れれば、
カテゴリーを色分けしてくれます。
sns.pairplot(iris,hue="species");
ヒートマップ
heatmap関数を使うことで、
簡単にヒートマップやグレースケール画像データを
グラフ化することができます。
使い方はheadmap関数に二次元のリストを渡すだけです。
import numpy as np; np.random.seed(0) import seaborn as sns; sns.set() uniform_data = np.random.rand(100, 100) ax = sns.heatmap(uniform_data) sns.plt.axis("off") sns.plt.show()
ヒートマップの最大値と最小値はvmin, vmax変数で指定します。
ax = sns.heatmap(uniform_data, vmin=0, vmax=0.5)
グリッドの間に間隔が欲しい場合は、
linewidth引数に値を渡します
ax = sns.heatmap(uniform_data, linewidths=.5)
右のカラーバーが要らない場合は、
cbar引数をfalseにすればOKです。
ax = sns.heatmap(uniform_data, cbar=False)
Mac OSXでtight_layoutのエラーが出た時の対処法
グラフ描画時に
下記のようなエラーが出る時は、
/System/Library/Frameworks/Python.framework/Versions/2.7/ Extras/lib/python/matplotlib/tight_layout.py:225: UserWarning: tight_layout : falling back to Agg renderer warnings.warn ("tight_layout : falling back to Agg renderer")
下記のコマンドでmatplotlibを最新バージョンにアップデートしましょう。
pip install matplotlib -U
より深くSeabornを学びたい場合は
下記のギャラリーのグラフをクリックすると、
それぞれのグラフのコードを見ることができるので、
そのコードを元に勉強するのがいいと思います。
また、Github上のコードを読むのも良いと思います。
また、どうしても解決できない問題などが
ある場合は下記のようなQ&Aサイトで質問してみると、
かなりの確率で回答がもらえると思います。
自分も上記のサンプルコードを作る上で、
何回か質問させてもらいましたが、
その日の内に返信をもらうことができました。
最後に
やはりかっこいいグラフはいいですね。
プレゼンで使いたくなりました。
また、自動で相関分析をしてくれるのもいい感じです。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。