Seaborn は Matplotlib の拡張として、Python で最も広く使われているデータ可視化ライブラリの 1 つです。データ可視化のためのシンプルで直感的、かつ高度にカスタマイズ可能なAPIを提供しています。
このチュートリアルでは、SeabornでBox Plotをプロットする方法について見ていきます。
Box Plotは、データセットの要約統計量を可視化するために使用され、データの範囲や分布などの分布の属性を表示します。
インポートデータ
Box Plotは、連続変数の要約統計、つまりデータセットの中央値と範囲を表示するからです。ここでは、Forest Firesのデータセットを使用します。
まず、Pandasをインポートしてデータセットを読み込み、パースするところから始めます。もちろん、Seabornもインポートしておきます。最後に、MatplotlibからPyplotモジュールをインポートして、ビジュアライゼーションを表示できるようにします。
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
Pandasを使ってCSVファイルを読み込み、DataFrame
の先頭を表示してどのように見えるかをチェックしましょう。さらに、データセットに欠損値が含まれているかどうかをチェックします。
dataframe = pd.read_csv("forestfires.csv")
print(dataframe.head())
print(dataframe.isnull().values.any())
X Y month day FFMC DMC DC ISI temp RH wind rain area
0 7 5 mar fri 86.2 26.2 94.3 5.1 8.2 51 6.7 0.0 0.0
1 7 4 oct tue 90.6 35.4 669.1 6.7 18.0 33 0.9 0.0 0.0
2 7 4 oct sat 90.6 43.7 686.9 6.7 14.6 33 1.3 0.0 0.0
3 8 6 mar fri 91.7 33.3 77.5 9.0 8.3 97 4.0 0.2 0.0
4 8 6 mar sun 89.3 51.3 102.2 9.6 11.4 99 1.8 0.0 0.0
False
2つ目のprint文はFalse
を返します。つまり、欠損値がないことを意味します。もし欠損があれば、DataFrameの欠損値を処理しなければなりません。
データセットの一貫性をチェックした後、可視化したい連続的な特徴を選択したいと思います。利便性のために、これらを独自の変数として保存します。
FFMC = dataframe["FFMC"]
DMC = dataframe["DMC"]
DC = dataframe["DC"]
RH = dataframe["RH"]
ISI = dataframe["ISI"]
temp = dataframe["temp"]
Seabornで箱型プロットを作成する。
さて、データを読み込んで、可視化したい特徴を選択したら、Box Plotを作成しましょう。
ボックスプロットはSeabornのboxplot
関数を使うだけで作成できます。データフレームと可視化したい変数を渡します。
sns.boxplot(x=DMC)
plt.show()
もし、カテゴリ変数の分布だけを可視化したい場合は、選択した変数を x
引数として指定します。このようにすると、前の画像にあるように、SeabornはY軸の値を自動的に計算します。
しかし、特定の分布を種類別に分けて見たい場合は、カテゴリ変数であるX変数と連続変数であるY変数を指定することもできます。
day = dataframe["day"]
sns.boxplot(x=DMC, y=day)
plt.show()
今回は、データセットで指定された週の各日について、箱ひげ図が生成されているのがわかる。
複数の列を同時に表示したい場合、引数 x
と y
には何を指定すればよいのでしょうか?さて、欲しいデータのラベルを指定して、実際のデータは data
引数で指定します。
可視化したいデータだけを含む新しい DataFrame
を作成して、 x='variable'
や y='value'
などのラベルを付けて data
引数に melt()
を指定することができます。
df = pd.DataFrame(data=dataframe, columns=["FFMC", "DMC", "DC", "ISI"])
sns.boxplot(x="variable", y="value", data=pd.melt(df))
plt.show()
Seaborn Box Plot のカスタマイズ
ボックスプロットの色を変更する
Seabornは自動的に異なる変数に異なる色を割り当てますので、視覚的に簡単に区別することができます。しかし、指定したい場合は、使用する色のリストを提供することもできます。
16進数で色のリストを選択した後、それらを palette
引数に渡すことができます。
day = dataframe["day"]
colors = ['#78C850', '#F08030', '#6890F0','#F8D030', '#F85888', '#705898', '#98D8D8']
sns.boxplot(x=DMC, y=day, palette=colors)
plt.show()
軸ラベルのカスタマイズ
X軸とY軸のラベルは、Seabornを使って簡単に調整できます。フォントサイズを変えたり、ラベルを変えたり、刻みを見やすくするために回転させたりできます。
df = pd.DataFrame(data=dataframe, columns=["FFMC", "DMC", "DC", "ISI"])
boxplot = sns.boxplot(x="variable", y="value", data=pd.melt(df))
boxplot.axes.set_title("Distribution of Forest Fire Conditions", fontsize=16)
boxplot.set_xlabel("Conditions", fontsize=14)
boxplot.set_ylabel("Values", fontsize=14)
plt.show()
ボックスプロットの注文
もし、ボックスを特定の順番で表示したい場合は、 order
引数を使用し、表示したい順番にカラム名を指定することで実現できます。
df = pd.DataFrame(data=dataframe, columns=["FFMC", "DMC", "DC", "ISI"])
boxplot = sns.boxplot(x="variable", y="value", data=pd.melt(df), order=["DC", "DMC", "FFMC", "ISI"])
boxplot.axes.set_title("Distribution of Forest Fire Conditions", fontsize=16)
boxplot.set_xlabel("Conditions", fontsize=14)
boxplot.set_ylabel("Values", fontsize=14)
plt.show()
サブプロットを作成する
もし、個々の特徴のプロットをそれぞれのサブプロットに分離したい場合は、Matplotlib の subplots
関数で図と軸を作成することで行うことができます。そして、 axes
オブジェクトを使用して、そのインデックスを介してそれらにアクセスします。boxplot()関数は
ax引数を受け取り、どの
axes` にプロットするかを指定します。
fig, axes = plt.subplots(1, 2)
sns.boxplot(x=day, y=DMC, orient='v', ax=axes[0])
sns.boxplot(x=day, y=DC, orient='v', ax=axes[1])
plt.show()
データ点数付きボックスプロット
分布とその分布を構成する点のサンプルをもう少し詳しく見るために、箱ひげ図に swamplot を重ねることもできます。
これを行うには、1つの figure オブジェクトを作成し、2つの異なるプロットを作成するだけです。これらは同じ axes
/figure
上にあるので、stripplot()
は boxplot()
の上にオーバーレイされることになります。
df = pd.DataFrame(data=dataframe, columns=["FFMC", "DMC", "DC", "ISI"])
boxplot = sns.boxplot(x="variable", y="value", data=pd.melt(df), order=["DC", "DMC", "FFMC", "ISI"])
boxplot = sns.stripplot(x="variable", y="value", data=pd.melt(df), marker="o", alpha=0.3, color="black", order=["DC", "DMC", "FFMC", "ISI"])
boxplot.axes.set_title("Distribution of Forest Fire Conditions", fontsize=16)
boxplot.set_xlabel("Conditions", fontsize=14)
boxplot.set_ylabel("Values", fontsize=14)
plt.show()
結論
このチュートリアルでは、SeabornとPythonを使用してBox Plotをプロットするいくつかの方法について説明しました。また、色、ラベル、順序をカスタマイズする方法、Swarmplotのオーバーレイ、複数のBox Plotのサブプロットについても取り上げました。
もしあなたがデータ可視化に興味があり、何から始めたらよいかわからない場合は、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です。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。