このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】散布図の表示

散布図の表示

 データに含まれる2種類の値の関係を直感的に把握する手段として、散布図(さんぷず) は非常に有効です。横軸に1つめの値を、縦軸に2つめの値を配置し、各データ点をプロットすることで、両者の相関関係や分布の特徴を見つけやすくなります。Pandasには、データフレームから散布図を生成するメソッドが用意されており、数行のコードで簡単に描画できます。ここでは、Pandasのscatterメソッドを使った散布図の作り方を解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.散布図とは

 散布図は、2つの変数(列)を軸として設定し、データを点でプロットした図表です。点の分布から、これらの変数間にどのような関係があるのか(正の相関・負の相関・無相関など)を視覚的に掴むことができます。また、クラスタリングの結果を散布図に重ねることで、各点がどのクラスに属しているのかも一目で確認できます。

2.サンプルデータの準備

 今回のサンプルでは、物理(Physics)生物(Biology)化学(Chemistry)の3科目のスコアが200行ぶん格納された「science_scores.csv」を用います。CSVの構造は以下のようになっていると想定してください。

Physics,Biology,Chemistry
65,70,85
72,63,90
81,59,74
... (200行)

あらかじめこのファイルをJupyterLabのカレントディレクトリに配置しておきます。

3.Pandasのscatterメソッドを使った散布図

3.1.scatterメソッド

 PandasのDataFrameオブジェクトには、plot.scatter()というメソッドが用意されており、列名を指定するだけで散布図を生成可能です。コード例では横軸に「Physics」、縦軸に「Chemistry」を設定し、点の大きさや色、輪郭色などをキーワード引数で変更しています。

  • 横軸x=列名
  • 縦軸y=列名
  • 点のサイズs
  • 点の塗りつぶし色c
  • 点の輪郭色edgecolor
  • 図のサイズ : figsize=(幅, 高さ)(単位はインチ)

以下のサンプルプログラムをJupyterLabのセルに貼り付け、実行してみてください。

import pandas as pd
from matplotlib import pyplot

def plot_scatter(csv_file="science_scores.csv",
                 x_col="Physics",
                 y_col="Chemistry",
                 out_file="scatter1.png"):
    """
    CSVファイル(csv_file)から、x_colとy_colで指定された2列を使って散布図を作成し、
    out_fileにPNGとして保存、さらに画面に表示するサンプル関数。
    """
    # CSVファイルを読み込み (デフォルトエンコーディングをUTF-8と想定)
    df = pd.read_csv(csv_file, encoding="utf_8")
    
    # 散布図の作成
    ax = df.plot.scatter(
        x=x_col, 
        y=y_col, 
        s=80,            # 点のサイズ
        c="white",       # 点の塗りつぶし色
        edgecolor="blue",  # 点の輪郭色
        figsize=(6, 6)   # 図のサイズ(幅6インチ, 高さ6インチ)
    )
    
    # 散布図ファイルを保存
    pyplot.savefig(out_file)
    
    # 画面に表示
    pyplot.show()

# 実行例: Physicsを横軸、Chemistryを縦軸に散布図を作成し"scatter1.png"へ保存
plot_scatter(
    csv_file="science_scores.csv",
    x_col="Physics",
    y_col="Chemistry",
    out_file="scatter1.png"
)

実行結果

3.2.パラメータの調整

引数scatter(…)に対して、以下のキーワード引数を加えることで、見た目を調整できます。

  • s : 点のサイズ(数値が大きいほど大きい点に)
  • c : 点の塗りつぶし色(文字列やカラーコードで指定)
  • edgecolor : 点の輪郭色
  • figsize : 図のサイズを(幅, 高さ)インチ単位で指定

 他にもalpha(点の透明度)やmarker(点の形状)など、多数のオプションが存在します。ドキュメントを参照するとより詳細なスタイル調整ができます。

4.散布図を保存して確認する

 上記プログラムでは、最終行でpyplot.savefig(out_file)により散布図をPNGファイルとして保存します。また、pyplot.show()を呼び出すことで、プロット結果をGUIウィンドウやノートブック上に表示可能です。

終了操作: プロットを全画面で表示している場合は、[Q]キーを押すかウィンドウを閉じるなどで表示を終了します。

 もし、物理(Physics)と生物(Biology)の散布図を見たい場合は、x_col="Physics", y_col="Biology"のように指定するだけです。同様に生物と化学の関係を見たいときは、x_col="Biology", y_col="Chemistry"を指定すればOKです。

まとめ

 散布図は2つの変数の関係性を可視化するために欠かせないツールです。Pandasのplot.scatterメソッドを使えば、DataFrameに含まれるどの列同士の関係もすぐに図として描画でき、相関の有無や外れ値の存在を直感的に把握することができます。
 さらに、スタイルパラメータを活用することで点のサイズや色を変え、見やすいグラフを作成できます。機械学習の前処理やクラスター分析の結果を視覚化する際にも散布図は役立ちますので、ぜひ慣れておくと良いでしょう。