Seaborn は Matplotlib の拡張として、Python で最も広く使われているデータ可視化ライブラリの 1 つです。データ可視化のためのシンプルで直感的、かつ高度にカスタマイズ可能なAPIを提供しています。
このチュートリアルでは、Seabornで分布図をプロットする方法を見ていきます。Seabornで分布図を描く方法、分布図のビンサイズを変更する方法、その上にカーネル密度推定図を描く方法、カウントデータの代わりに分布データを表示する方法について説明します。
インポートデータ
Netflix Showsのデータセットを使い、そこから分布を可視化することにします。
Pandasをインポートして、データセットをロードしましょう。
import pandas as pd
df = pd.read_csv('netflix_titles.csv')
Seabornで分布図を描くには?
Seabornには様々なタイプの分布図があります。
これらのプロットタイプは以下の通りです。KDE プロット (kdeplot()
) とヒストグラムプロット (histplot()
) です。これらはいずれも汎用の displot()
関数やそれぞれの関数で実現することができます。
注意: Seaborn 0.11以降、distplot()
は displot()
になりました。古いバージョンを使っている場合は、古い方の関数も使う必要があります。
プロットを始めましょう。
Seabornでヒストグラム/分布図(displot)をプロットする。
それでは、必要なモジュールをインポートして、Histogram/Distribution Plotを生成してみましょう。
ここでは、「リリース年」の分布を可視化し、Netflixがいつ最も活発に新規追加を行ったかを確認します。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
# Load the data
df = pd.read_csv('netflix_titles.csv')
# Extract feature we're interested in
data = df['release_year']
# Generate histogram/distribution plot
sns.displot(data)
plt.show()
このコードを実行すると、ヒストグラムプロットが表示され、これらの release_year
値の出現回数が表示されます。
Seabornによる密度情報付き分布図のプロット
さて、Matplotlibと同様に、デフォルトのヒストグラムのアプローチは、出現回数を数えることです。その代わりに、それぞれの release_years の分布をパーセンテージで可視化することができます。
それを変更するために displot()
の呼び出しを変更してみましょう。
# Extract feature we're interested in
data = df['release_year']
# Generate histogram/distribution plot
sns.displot(data, stat = 'density')
plt.show()
変更する必要があるのは、 stat
引数を指定し、 'count'
の代わりに密度を表示することを知らせることだけです。
これで、前に見たカウントの代わりに、エントリの密度が表示されるようになります。
Seabornによる分布プロットのビンの大きさの変更
時々、自動ビンサイズがうまく機能しないことがあります。大きすぎたり、小さすぎたりするのです。デフォルトでは、サイズはデータの観測された分散に基づいて選択されますが、これは我々が明るみに出したいと思うものと異なることがありえます。
私たちのプロットでは、それらは少し小さすぎて、ぎこちない配置で、それらの間に隙間があります。各ビンの binwidth
を設定するか、bin
の数を設定することで、ビンのサイズを変更することができます。
data = df['release_year']
sns.displot(data, binwidth = 3)
plt.show()
これは、各ビンが3年の範囲のデータを包含するようにするものです。
また、ビンの数を固定することもできる。
data = df['release_year']
sns.displot(data, bins = 30)
plt.show()
これで、データは30個のビンに詰め込まれます。データセットの範囲によって、これはたくさんのビンになるか、本当に小さなビンになるか、どちらかになります。
また、引数 discrete
を True
に設定することで、ぎこちない隙間をなくすことができます。
data = df['release_year']
sns.displot(data, discrete=True)
plt.show()
この結果は
KDEによる分布図のプロット
ヒストグラムと一緒にプロットする一般的なプロットは、カーネル密度推定プロットです。それらは滑らかで、ビンに値の範囲をスナップすることによってどんな値も失いません。より大きなビン値を設定し、ヒストグラムの上にKDEプロットを重ね、画面上にすべての関連情報を持つことができます。
ありがたいことに、これは本当によくあることなので、Seaborn では kde
引数を True
に設定するだけで、KDE プロットを描画することができます。
data = df['release_year']
sns.displot(data, discrete = True, kde = True)
plt.show()
これは今、次のような結果になります。
Seaborn によるジョイント分布プロット
複数の特徴を互いに関連付け、その分布を可視化したい場合があります。例えば、番組の視聴率や追加された年の分布を可視化したい場合があります。Netflixが何年もかけて子供向けのコンテンツを増やし始めたかどうかを見るなら、これはJoint Plotの素晴らしい組み合わせになるでしょう。
それでは jointplot()
を作ってみましょう。
df = pd.read_csv('netflix_titles.csv')
df.dropna(inplace=True)
sns.jointplot(x = "rating", y = "release_year", data = df)
plt.show()
null値はSeabornが使いやすい値に変換するのが大変なので、ここでは削除しています。
ここでは、レーティング機能のHistogramプロットと、release_year機能のHistogramプロットを作成しました。
追加されたエントリのほとんどはTV-MAですが、TV-14のエントリも多く、家族全員が楽しめる番組が揃っていることがわかります。
結論
このチュートリアルでは、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です。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。