【Python】散布図でデータを可視化する方法を解説

データがあれば、それをグラフにしたいというのが人間の性です(?)

今回は、Pythonでの散布図の書き方を紹介します!

使用するライブラリ

散布図の描画には、”matplotlib”というライブラリを用います。

“matplotlib”はグラフ描画用ライブラリで、多彩なグラフを描画することができます。

matplotlibのインストール

matplotlibはcondaまたはpipを使ってインストールできます。

conda install matplotlib
pip install matplotlib

参考にどうぞ

散布図を描く

では散布図を描いていきましょう。

今回使用するデータは、ボストンの住宅価格データです。

import pandas as pd
from sklearn.datasets import load_boston

data = load_boston()
df = pd.DataFrame(data.data, columns=data.feature_names)

まずは散布図を描くだけ

散布図を描くだけであれば、非常にシンプルなコードで実現可能です。

グラフを描くために、matplotlib.pyplotをインポートします。

“CRIM”列と”NOX”列で散布図を描いてみます。

散布図の描画にはscatter()を用います。第一引数にX軸のデータを、第二引数にY軸のデータを渡します。

import matplotlib.pyplot as plt

plt.scatter(df["CRIM"], df["NOX"])

簡単に描くことができます^^

しかし、このままでは、グラフとして情報が色々と不足しています。なので、情報を追加していきましょう。

軸ラベルを付ける

各軸に何のデータを取っているのかがわからなければ、グラフとして意味を成しません。

グラフに軸ラベルを追加して、何のグラフを描いているのかを明示してあげましょう。

plt.xlabel("CRIM")
plt.ylabel("NOX")

文字の大きさは、fontsizeという引数で指定します。

plt.scatter(df["CRIM"], df["NOX"])
plt.xlabel("CRIM", fontsize=20)
plt.ylabel("NOX")

グラフタイトルをつける

グラフを見る人にグラフの目的を伝えやすくするためにも、グラフにタイトルをつけてあげましょう。

注) 日本語のタイトルをつける場合は、’fontname=”MS Gothic”‘を追記しておきましょう(そのままだと文字化けします)

plt.title("CRIMとNOXの関係", fontname="MS Gothic")

軸の表示範囲を指定する

1つ変な値のデータがあるせいでグラフの軸の範囲がめちゃくちゃに、、、といったケースもあります。

そんな時は、軸の表示範囲を指定して、見たい部分だけを見られるようにしましょう。

plt.xlim(0,40)
plt.ylim(0.5, 0.7)

罫線を引く

グラフの背景が無地だと、結局どれくらいの値なのかわかりづらい、、、

そういった場合は、罫線を引きましょう。plt.grid()を追加します。

plt.grid()

閾値を設定する

グラフに閾値を表示して、正常と異常の境目を出したいといった場合もあります。

垂直線を描画する

axvline()を指定します。

plt.axvline(x=25)

水平線を描画する

axhline()を指定します。

plt.axhline(y=0.675)

マーカーの種類を変える

グラフの点が〇だけじゃ物足りないという方もいるかもしれません。matplotlibで散布図を描く場合、マーカーを指定することができます。

plt.scatter()のパラメータとして、markerを指定します。

例えば、星形にしてみます

plt.scatter(df["CRIM"], df["NOX"], marker="*")
plt.xlabel("CRIM")
plt.ylabel("NOX")

plt.title("CRIMとNOXの関係", fontname="MS Gothic")

plt.xlim(0,40)
plt.ylim(0.5, 0.7)

他にも様々な形を指定することができます。以下のサイトが参考になるかと。

https://pythondatascience.plavox.info/matplotlib/%E3%83%9E%E3%83%BC%E3%82%AB%E3%83%BC%E3%81%AE%E5%90%8D%E5%89%8D

コードまとめ

これまでに紹介したコードをまとめます。

import pandas as pd
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt

#データセットの取得
data = load_boston()
df = pd.DataFrame(data.data, columns=data.feature_names)

#散布図描画
plt.scatter(df["CRIM"], df["NOX"], marker="*")


#軸ラベルを設定
plt.xlabel("CRIM")
plt.ylabel("NOX")

#グラフタイトルを指定
plt.title("CRIMとNOXの関係", fontname="MS Gothic")

#軸の最大、最小値を指定
plt.xlim(0,40)
plt.ylim(0.5, 0.7)


#罫線を描画
plt.grid()

#閾値を描画
plt.axvline(x=25)
plt.axhline(y=0.675)

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

まとめ

いかがだったでしょうか。

散布図を描くだけならたった数行のコードで実現可能です。そこから自分でカスタマイズしていける所が、プログラミングでグラフを描くときの魅力ですね!

1つ1つ覚える必要はないと思うので、こういうことができるんだなということだけ知っておいて、必要な時に調べるのが効率的だと思います!

ではでは👋