こんにちは、えびかずきです。
今回はseabornによるデータの可視化について説明していきます。
こんな人におすすめ:
・seabornの基本的な使い方を学びたい
・Pythonでキレイなグラフを描きたい
seabornはデータの視覚化のためのツールで、Matplotlibのラッパーライブラリです。
つまりMatplotlibをベースとして使って、よりキレイにグラフを作成できるように工夫されたライブラリとなっています。
特に設定に気を使わなくても比較的キレイなグラフが描けるので、扱いに馴れるとグラフ描画が楽になっておすすめです。
それでは順を追って説明していきましょう。
開発環境
Python 3.7.3
seaborn 0.11.1
scikit-learn 0.24.2
NumPy 1.20.2
エディタ:jupyter Notebook
使用するデータ
今回はscikit-learnの組み込みデータサンプルである、『iris』の使っていきます。
『iris』にはアヤメの花の4次元の特徴量データがセトサ、バージカラー、バージニカの3品種で格50サンプルづつ格納されています。
今回はこのサンプルデータを使ってseabornで可視化をしていきます。
irisデータ以下のようにしてロードします。
from sklearn.datasets import load_iris
iris = load_iris()
基本的な手順
seabornは受け入れデータとして、Pandasデータフレーム、Numpy配列、リスト、辞書型など、さまざまなデータ形式に対応しています。
基本的にはデータを整理しやすいPandasを使うことをお勧めしますが、ここではまずリストを図示する場合の方法から説明していきましょう。
リストを散布図にする
リストを散布図にするには、scatterplotを使って以下のようにします。
ちなみにseabornをインポートする時の『sns』の由来は、アメリカの昔のドラマに出てくるSamuel Norman Seabornであると聞いたことがあります。
import seaborn as sns; sns.set()
x = [1,2,3,4,5,6,7,8,9,10]
y = [2,4,6,8,10,12,14,16,18,20]
data = [x,y]
sns.scatterplot(x=x, y=y);
インポートの後に実行している「sns.set()」はseabornの標準的なスタイルをセットするためのコードです。
もしこれを記述しないと、下のようにMatplotlibのままの無骨なグラフ描画になってしまいます。
続いて、irisのデータをプロットしてみましょう。
ここでは、二次元のグラフをプロットしたいので、花びらの長さと花びらの幅の二つのデータのみを取り出してプロットしてみましょう。
from sklearn.datasets import load_iris
import seaborn as sns; sns.set()
iris = load_iris() # ndarray
x = iris.data[:, [2]].reshape(1,-1)[0] # 花びらの長さのデータ
y = iris.data[:, [3]].reshape(1,-1)[0] # 花びらの幅のデータ
sns.scatterplot(x=x, y=y);
Pandasデータフレームを散布図にする
次はPandasのデータフレームを散布図にしてみます。
まずはirisのデータをデータフレーム化してやります。
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target
df.loc[df['target'] == 0, 'target'] = "setosa"
df.loc[df['target'] == 1, 'target'] = "versicolor"
df.loc[df['target'] == 2, 'target'] = "virginica"
df.head()
このデータフレームを使って散布図を作ってみます。
import seaborn as sns; sns.set()
sns.scatterplot(data=df, x='petal length (cm)', y='petal width (cm)', hue='target')
import matplotlib.pyplot as plt
plt.xlim(-10, 10)
plt.ylim(-4, 4);
軸の範囲指定をする場合には、コード下部のように、Matplotlibのオブジェクトに直接あたって調整することができます。
キレイなグラフが描けましたね。
まとめ
今回はseabornによるデータの可視化について説明しました。
Matplotlibだとグラフをキレイに見せるために多くの設定を施す必要がありますが、seabornなら特に何の指定しなくてもキレイでおしゃれなグラフが書けましたね。
今回の記事ではseabornの機能のごくごく一部のみしか紹介できていませんので、もっと知りたい方は下の公式ドキュメントを参考にすると良いと思います。
それでは今回は以上です。
コメントを書く