Matplotlib は Python で最も広く使われているデータ可視化ライブラリの 1 つです。
単純な可視化から複雑な可視化まで、ほとんどの場合、このライブラリは頼りになります。
このガイドでは、Matplotlib を使って散布図を描く方法を見ていきます。
散布図
散布図は、データセットの2つの数値変数(特徴量)の関係を調べるものです。
インポートデータ
Ames Housingのデータセットを使用し、そこから特徴間の相関を可視化することにします。
Pandasをインポートして、データセットをロードしてみましょう。
import pandas as pd
df = pd.read_csv('AmesHousing.csv')
Matplotlib で散布図を描画する
データセットを読み込んだら、Matplotlib をインポートして、可視化したい特徴を決め、散布図を作ってみましょう。
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('AmesHousing.csv')
fig, ax = plt.subplots(figsize=(10, 6))
ax.scatter(x = df['Gr Liv Area'], y = df['SalePrice'])
plt.xlabel("Living Area Above Ground")
plt.ylabel("House Price")
plt.show()
ここでは、PyPlot のインスタンスを使ってプロットを作成し、図の大きさを設定しています。
subplots()関数から返された
Axesオブジェクトを使用して、
scatter()` 関数を呼び出しています。
引数として x
と y
を与え、プロットに使用する特徴量を指定する必要があります。
このコードを実行すると、次のような結果になります。
また、変数が何を表しているかを示すために、xとyのラベルを設定しました。
この2つの変数の間には、明らかな正の相関があります。
地上の面積が多いほど、家の値段は高くなりました。
いくつかの異常値はありますが、大部分はこの仮説に従っています。
Matplotlib での複数の散布図のプロット
例えば、家の全体的な品質と販売価格との相関を調べたり、地上の面積を調べたりといったように、複数の変数を別の変数に対して比較したい場合、そのための3Dプロットを作る必要はないでしょう。
2つ以上の変数間の相関を視覚化する2Dプロットは存在しますが、そのうちのいくつかは完全に初心者に優しいものではありません。
これを行う簡単な方法は、2つのプロットを行うことです。
一方では、販売価格に対して地上面積をプロットし、もう一方では、販売価格に対して全体的な品質をプロットします。
では、その方法を見てみましょう。
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('AmesHousing.csv')
fig, ax = plt.subplots(2, figsize=(10, 6))
ax[0].scatter(x = df['Gr Liv Area'], y = df['SalePrice'])
ax[0].set_xlabel("Living Area Above Ground")
ax[0].set_ylabel("House Price")
ax[1].scatter(x = df['Overall Qual'], y = df['SalePrice'])
ax[1].set_xlabel("Overall Quality")
ax[1].set_ylabel("House Price")
plt.show()
ここでは、plt.subplots()
を呼び出し、図の中に2つのサブプロットを作成することを示すために2
を渡しました。
これらは Axes
インスタンス – ax
を介してアクセスすることができます。
ax[0]は最初のサブプロットの軸を指し、
ax[1]`は2番目のサブプロットの軸を指します。
ここでは、それぞれに対して scatter()
関数を呼び出し、ラベルを付けています。
このコードを実行すると、次のようになります。
Matplotlib での 3 次元散布図のプロット
2つの別々のサブプロットで可視化したくない場合は、これらの変数間の相関を3Dでプロットすることができます。
Matplotlib には 3D プロット機能が組み込まれているので、これを行うのはとても簡単です。
まず、 mpl_toolkits.mplot3d
から Axes3D
クラスをインポートする必要があります。
この特別なタイプの Axes
は、3D ビジュアライゼーションに必要です。
このクラスでは、もう一つの引数である z
を渡すことができます。
それでは、Axes3D
オブジェクトをインポートして、前の3つの特徴量に対して散布図を描いてみましょう。
import matplotlib.pyplot as plt
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
df = pd.read_csv('AmesHousing.csv')
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
x = df['SalePrice']
y = df['Gr Liv Area']
z = df['Overall Qual']
ax.scatter(x, y, z)
ax.set_xlabel("Sale price")
ax.set_ylabel("Living area above ground level")
ax.set_zlabel("Overall quality")
plt.show()
このコードを実行すると、3次元空間でパンして検査することができるインタラクティブな3Dビジュアライゼーションが得られます。
Matplotlib で散布図をカスタマイズする
scatter()関数に、
colorや
alpha` などの追加引数を与えることで、プロットの見え方を変更することができます。
ax.scatter(x = df['Gr Liv Area'], y = df['SalePrice'], color = "blue", edgecolors = "white", linewidths = 0.1, alpha = 0.7)
このコードを実行すると、次のような結果になります。
結論
このチュートリアルでは、Matplotlib と 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です。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。