Python には多くのデータ可視化ライブラリがありますが、Matplotlib はその中でも最も人気のあるライブラリです。Matplotlib の人気の理由はその信頼性と実用性にあり、少ないコードでシンプルなプロットから複雑なプロットまで作成することができます。また、プロットは様々な方法でカスタマイズすることができます。
このチュートリアルでは、Matplotlib で Box Plot をプロットする方法を説明します。
Box Plots は、データセットの要約統計量を可視化するために用いられ、データの範囲や分布のような分布の属性を表示することができます。
データのインポート
Box Plotを作成するためには、プロットするためのデータが必要です。Box Plot は連続変数の分布を可視化するので、特徴として連続変数を含むデータセットを選ぶ必要があります。ここでは、Wine Quality データセットを使用します。
まず、必要なライブラリをすべてインポートすることから始めます。データセットを読み込み、解析するためにPandasをインポートします。もちろん、Matplotlibもインポートする必要がありますし、より正確に言えば、PyPlotモジュールもインポートします。
import pandas as pd
from matplotlib import pyplot as plt
それでは、データセットが使用できる状態になっているか確認してみましょう。データセットの先頭を出力して、データが正しく読み込まれたことを確認します。また、データの欠落がないことも確認します。
dataframe = pd.read_csv("winequality-red.csv")
print(dataframe.head())
print(dataframe.isnull().values.any())
fixed acidity volatile acidity citric acid ... sulphates alcohol quality
0 7.4 0.70 0.00 ... 0.56 9.4 5
1 7.8 0.88 0.00 ... 0.68 9.8 5
2 7.8 0.76 0.04 ... 0.65 9.8 5
3 11.2 0.28 0.56 ... 0.58 9.8 6
4 7.4 0.70 0.00 ... 0.56 9.4 5
[5 rows x 12 columns]
False
2つ目のprint文はFalse
を返します。これは欠損データがないことを意味します。これは、データの欠落がないことを意味します。欠落があった場合、DataFrameの欠落を処理しなければなりません。
Matplotlib での箱ひげ図作成
データセットからいくつかの特徴を選択し、 boxplot()
関数でそれらの特徴を可視化してみましょう。Pandas を利用して、必要な特徴列を抽出し、便宜上変数として保存します。
fixed_acidity = dataframe["fixed acidity"]
free_sulfur_dioxide = dataframe['free sulfur dioxide']
total_sulfur_dioxide = dataframe['total sulfur dioxide']
alcohol = dataframe['alcohol']
いつものように、プロット関数はPyPlotインスタンス(plt
)、Figure
インスタンス、Axes
インスタンスに対して呼び出すことができます。
import pandas as pd
import matplotlib.pyplot as plt
dataframe = pd.read_csv("winequality-red.csv")
fixed_acidity = dataframe["fixed acidity"]
free_sulfur_dioxide = dataframe['free sulfur dioxide']
total_sulfur_dioxide = dataframe['total sulfur dioxide']
alcohol = dataframe['alcohol']
fig, ax = plt.subplots()
ax.boxplot(fixed_acidity)
plt.show()
ここでは、 subplots()
関数の戻り値から fig
と ax
オブジェクトを抽出しているので、そのどちらかを使って boxplot()
関数を呼び出すことができます。あるいは、単に plt.boxplot()
を呼び出すこともできました。
いずれにせよ、この結果は
プロットを作成した後、データの要約統計のいくつかを見ることができます。箱ひげ図は、データセットの中央値(中央の垂直線)、四分位範囲(箱の両端)、選択したデータセットの特徴の最小値と最大値(「ひげ」の遠端)を表示します。
また、列を増やすだけで、1つの図に複数の列をプロットすることができます。これも plt
インスタンス、 fig
オブジェクト、 ax
オブジェクトのいずれかを使って行うことができます。
import pandas as pd
import matplotlib.pyplot as plt
dataframe = pd.read_csv("winequality-red.csv")
fixed_acidity = dataframe["fixed acidity"]
free_sulfur_dioxide = dataframe['free sulfur dioxide']
total_sulfur_dioxide = dataframe['total sulfur dioxide']
alcohol = dataframe['alcohol']
columns = [fixed_acidity, free_sulfur_dioxide, total_sulfur_dioxide, alcohol]
fig, ax = plt.subplots()
ax.boxplot(columns)
plt.show()
この結果は
さて、複数の列をプロットすることにしたので、もっとたくさんのことができるようになりました。
プロットのカスタマイズ
ご覧のように、プロットは正常に生成されましたが、X軸とY軸に目盛りラベルがなければ、グラフを解釈することは困難です。
そこで、xticks
関数を用いてプロットをカスタマイズし、X軸にラベルを追加することができます。追加したいラベルの数と、それらの列のそれぞれのラベルを渡してみましょう。
fig, ax = plt.subplots()
ax.boxplot(columns)
plt.xticks([1, 2, 3, 4], ["Fixed acidity", "Free sulfur dioxide", "Total sulfur dioxide", "Alcohol"], rotation=10)
plt.show()
もし望むなら、 vert
パラメータを変更することで、プロットの方向を変更することもできます。vertはプロットが垂直にレンダリングされるかどうかを制御し、デフォルトでは
1` に設定されています。
fig, ax = plt.subplots()
ax.boxplot(fixed_acidity, vert=0)
plt.show()
notch=True属性はボックスプロットにノッチ形式を作成し、
patch_artist=True` はボックスプロットを色で塗りつぶします。
fig, ax = plt.subplots()
columns = [free_sulfur_dioxide, total_sulfur_dioxide]
ax.boxplot(columns, notch=True, patch_artist=True)
plt.xticks([1, 2], ["Free sulfur dioxide", "Total sulfur dioxide"])
plt.show()
平均をボックス上に表示するために meanline
引数を使用することができますが、ノッチを表示する場合には、両者が衝突する可能性があるので、これは避けるべきです。
これは showmean
パラメータと組み合わせる必要があります。可能であれば、平均はボックスを横切る線として表示されます。可能でない場合は、平均は点として表示される。
fig, ax = plt.subplots()
columns = [free_sulfur_dioxide, total_sulfur_dioxide]
ax.boxplot(columns, patch_artist=True, meanline=True, showmeans=True)
plt.xticks([1, 2], ["Free sulfur dioxide", "Total sulfur dioxide"])
plt.show()
16進数のカラーリストを作成し、 set_facecolor
引数を使用することで、異なる特徴カラムに色を付けることができます。以下の例では、変数 box
の boxes
要素に使用したい色をまとめて zip
し、それらのボックスごとにフェースカラーを設定しています。
columns = [fixed_acidity, free_sulfur_dioxide, total_sulfur_dioxide, alcohol]
fig, ax = plt.subplots()
box = ax.boxplot(columns, notch=True, patch_artist=True)
plt.xticks([1, 2, 3, 4], ["Fixed acidity", "Free sulfur dioxide", "Total sulfur dioxide", "Alochol"])
colors = ['#0000FF', '#00FF00',
'#FFFF00', '#FF00FF']
for patch, color in zip(box['boxes'], colors):
patch.set_facecolor(color)
plt.show()
結論
このチュートリアルでは、Matplotlib と Python で Box Plot を作成する方法について学びました。そして、 vert
, meanline
, set_facecolor
のような引数を使用して、どのようにカスタマイズできるかを見てきました。
もしあなたがデータ可視化に興味があり、何から始めたらいいかわからないなら、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です。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。