Seaborn は Matplotlib の拡張として、Python で最も広く使われているデータ可視化ライブラリの 1 つです。データ可視化のためのシンプルで直感的、かつ高度にカスタマイズ可能なAPIを提供しています。
このチュートリアルでは、Seabornで散布図を描く方法について見ていきます。単純な散布図、FacetGridを使った複数散布図、3D散布図について説明します。
インポートデータ
World Happinessのデータセットを使って、Happiness Scoreを様々な特徴と比較し、何が世界の幸福感に影響を与えるかを見ていきます。
import pandas as pd
df = pd.read_csv('worldHappiness2016.csv')
Seabornで散布図を描く
さて、データセットが読み込まれたので、Seabornと同様にグラフを表示するために使うPyPlotをインポートしてみましょう。ここでは、国の経済(一人当たりGDP)に対して幸福度をプロットしてみます。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.read_csv('worldHappiness2016.csv')
sns.scatterplot(data = df, x = "Economy (GDP per Capita)", y = "Happiness Score")
plt.show()
Seabornを使うと、散布図のような基本的なグラフをとても簡単に描くことができます。FigureオブジェクトやAxesインスタンスをいじったり、何かを設定したりする必要はありません。ここでは、 data
引数に df
を指定し、 x
と y
引数に可視化したい特徴量を指定しています。
これらはデータセットに存在するデータと一致する必要があり、デフォルトのラベルはそれらの名前になります。これについては、後のセクションでカスタマイズしていきます。
さて、このコードを実行すると、次のように表示されます。
ここで、経済(一人当たりGDP)と国や地域の住民の幸福感との間には強い正の相関があることがわかります。
SeabornでFacetGridを使用して複数の散布図をプロットする
例えば、平均寿命や経済に対する幸福度など、複数の変数を別の変数と比較したい場合、3Dプロットを作成する必要はありません。
2つ以上の変数の相関を可視化する2Dプロットは存在するが、初心者には不親切なものもある。
Seabornでは FacetGrid
オブジェクトを作成することができ、これを使用してデータをファセット化し、複数の関連するプロットを隣り合わせに作成することができます。
その方法を見てみましょう。
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.read_csv('worldHappiness2016.csv')
grid = sns.FacetGrid(df, col = "Region", hue = "Region", col_wrap=5)
grid.map(sns.scatterplot, "Economy (GDP per Capita)", "Health (Life Expectancy)")
grid.add_legend()
plt.show()
ここでは、FacetGrid
を作成し、データ (df
) を渡しました。col引数に
“Region”` を指定することで、Seaborn にデータを地域ごとにファセットし、データセットの地域ごとに散布図を描きたいことを伝えています。
また、 hue
をリージョンに依存するように設定し、リージョンごとに異なる色になるようにしました。最後に、 col_wrap
引数を 5
に設定し、図全体が広くなりすぎないようにしました – 5 列ごとに新しい行に分割されます。
この grid
オブジェクトに、引数を map()
しています。具体的には、プロットの種類として sns.scatterplot
を指定し、散布図にプロットする変数として x
と y
を指定しました。
この結果、10種類の散布図ができ、それぞれ関連する x
と y
のデータを地域ごとに分けて表示することができます。
また、色を識別するために、最後に凡例を追加しています。
Seabornで3D散布図をプロットする。
Seaborn には残念ながら 3D 機能が組み込まれていません。これは Matplotlib の拡張で、3D の重い仕事は Matplotlib に依存しています。しかし、Seaborn を使って Matplotlib の3Dプロットにスタイルを設定することができます。
Seaborn を使ってスタイルを設定し、幸福度、経済、健康の3D散布図を表示してみましょう。
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from mpl_toolkits.mplot3d import Axes3D
df = pd.read_csv('2016.csv')
sns.set(style = "darkgrid")
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
x = df['Happiness Score']
y = df['Economy (GDP per Capita)']
z = df['Health (Life Expectancy)']
ax.set_xlabel("Happiness")
ax.set_ylabel("Economy")
ax.set_zlabel("Health")
ax.scatter(x, y, z)
plt.show()
このコードを実行すると、Seabornプロットとしてスタイルされた、3次元空間でパンや検査ができるインタラクティブな3D可視化が得られます。
Seabornの散布図のカスタマイズ
Seaborn を使用すると、作成した散布図のさまざまな要素を簡単にカスタマイズできます。例えば、散布図上の各マーカーの hue
や size
を設定することができます。
いくつかのオプションを変更して、プロットがどのように見えるか見てみましょう。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.read_csv('2016.csv')
sns.scatterplot(data = df, x = "Economy (GDP per Capita)", y = "Happiness Score", hue = "Region", size = "Freedom")
plt.show()
ここでは hue
を Region
に設定し、異なる地域のデータは異なる色で表示されるようにしています。また、size
は自由度に比例するように設定しました。自由度が高ければ高いほど、ドットは大きくなります。
また、色だけでなく、すべてのマーカーの大きさを固定にすることもできます。
sns.scatterplot(data = df, x = "Economy (GDP per Capita)", y = "Happiness Score", hue = "red", size = 5)
結論
このチュートリアルでは、SeabornとPythonを使用して散布図をプロットするいくつかの方法について説明しました。
もしあなたがデータ可視化に興味があり、何から始めたらよいかわからない場合は、Pythonによるデータ可視化に関する書籍の束をチェックしてみてください。
Pythonによるデータ可視化
データビジュアライゼーションで危険な存在になる
30日間無条件返金保証
初級から上級まで
定期的に無料で更新(最新更新は2021年4月)
ボーナスリソースやガイドを更新
Pythonでデータ可視化 MatplotlibとPandasは、Pythonの基礎知識を持つ全くの初心者が、PandasとMatplotlibを使って、単純なプロットからインタラクティブなボタンを持つアニメーションの3Dプロットまで、これらのライブラリで高度な作業をするための強力な基盤を構築できるように設計された書籍です。
本書は、Pythonの基本的な知識を持つ方を対象としています。
PandasとMatplotlibについて知っておく必要があることすべてを教えてくれる詳細なガイドです。
Pythonによるデータ可視化」は、Pythonの初級~中級開発者向けの書籍で、Pandasを使った簡単なデータ操作から、MatplotlibやSeabornなどのコアなプロットライブラリ、そしてAltairなどの宣言的・実験的ライブラリの活用方法までを案内しています。具体的には、11章にわたって、9つのPythonライブラリを取り上げています。Pandas、Matplotlib、Seaborn、Bokeh、Altair、Plotly、GGPlot、GeoPandas、そしてVisPyです。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。