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

【Python入門】データを可視化する(Matplotlibライブラリ)

【Python入門】データを可視化する(Matplotlibライブラリ)

 大規模データの分析や機械学習の前処理では、まず「可視化」を行い、データの分布や傾向を把握しておくことが重要です。単に数値の羅列を眺めるより、グラフや図表で表現したほうがデータの特徴を直感的に捉えやすく、異常値や分布の偏りなどにいち早く気付けます。Pythonには、可視化用のライブラリとしてMatplotlibが広く利用されています。ここでは、Matplotlibを用いてPandasデータフレームの内容を図示する方法を例に紹介します。

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

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

1.Matplotlibの概要

1.1.Matplotlibとは

 Matplotlib(マットプロットリブ)は、Pythonでデータを可視化するためのライブラリです。折れ線グラフ、棒グラフ、散布図、ヒストグラムなど、さまざまな図を作成できる機能を備えています。機械学習や統計解析で利用するNumPyやPandasとも親和性が高く、データの探索やプレゼンテーション資料の作成に欠かせないツールとなっています。

1.2.インストール方法

 Matplotlibは標準ライブラリではないため、Anaconda NavigatorのGUI以外の環境で使用する場合は以下のようにしてインストールを行います。

環境インストールコマンド備考
CPython(通常のPython)pip install matplotlibpip実行時に管理者権限が必要になる場合あり。
Anaconda / Minicondaconda install -y matplotlibAnacondaには最初から含まれていることも多い。

インストール完了後、PythonスクリプトやJupyterLabのセルで次のようにインポートできます。

from matplotlib import pyplot
# または
import matplotlib.pyplot as plt

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

 今回使用するサンプルデータは、「science_scores.csv」という名前のCSVファイルで、合計200行のデータが含まれています。先頭行には列名として「Physics, Biology, Chemistry」が定義されており、以下の200行それぞれに数値スコアが書き込まれています(例として先頭数行を示しますが、実際には200行分あります)。

Physics,Biology,Chemistry
65,70,85
72,63,90
81,59,74
93,88,66
56,78,82
... (200行)

カレントディレクトリに配置し、Pandasのread_csv()で読み込めるようにしておいてください。

3.Pandas + Matplotlibでヒストグラムを作成する

3.1.pyplotモジュールを使った可視化

 Matplotlibには「pyplot」モジュールがあり、これを使うと図の作成や軸ラベルの設定、グラフの保存などが簡単に行えます。ヒストグラムはhist()関数で描画可能です。

  1. figure: 新しい図(Figureオブジェクト)を生成
  2. xlabel / ylabel: 横軸名・縦軸名を設定
  3. hist: ヒストグラムを描画
  4. savefig: ファイルへ出力
  5. show: ウィンドウにグラフを表示

次のコードをJupyterLabのセルに貼り付け、実行してください。

import pandas as pd
from matplotlib import pyplot

def plot_histogram(csv_file="science_scores.csv", column_name="Physics", output_name="hist1.png"):
    """
    指定したCSVファイルから列(column_name)を読み込んで、
    そのヒストグラムを作成し、PNGファイル(output_name)に保存するサンプル関数。
    さらに作成したヒストグラムを画面にも表示する。
    """
    # CSVデータをPandasで読み込み
    df = pd.read_csv(csv_file, encoding="utf_8")
    
    # Figureを生成(タイトルとサイズを任意で指定可能)
    pyplot.figure(column_name, figsize=(6, 4))
    
    # 軸ラベルの設定
    pyplot.xlabel("Score")
    pyplot.ylabel("Count")
    
    # ヒストグラムを作成
    pyplot.hist(df[column_name])
    
    # ファイルに保存
    pyplot.savefig(output_name)
    
    # 画面に表示
    pyplot.show()

# 実行例: 物理(Physics)のスコアに対するヒストグラムを"hist1.png"で作成
plot_histogram("science_scores.csv", "Physics", "hist1.png")

実行結果

解説

  • pd.read_csv(csv_file): CSVファイルを読み込み、DataFrameを生成。
  • pyplot.figure(column_name, figsize=(6, 4)): タイトルとサイズ(インチ)を指定して新しい図を準備。
  • pyplot.xlabel("Score"), pyplot.ylabel("Count"): X軸・Y軸にラベルを設定。
  • pyplot.hist(df[column_name]): 指定列の値に基づいて度数分布(ヒストグラム)を描画。
  • pyplot.savefig(output_name): 作成した図をPNGファイルに保存。
  • pyplot.show(): 作成した図をGUIウィンドウやJupyterLab上に表示。

3.2.Pandasが提供する簡易hist()メソッドを活用する

 PandasのDataFrameにもhist()メソッドがあり、全列に対するヒストグラムを一気に作ることが可能です。細かいカスタマイズは後から加える必要がありますが、データ全体の把握や一括チェックに便利です。

import pandas as pd
from matplotlib import pyplot

def plot_all_histograms(csv_file="science_scores.csv", output_name="hist2.png"):
    """
    指定したCSVファイルのすべての列に対してヒストグラムを描画し、
    指定したPNGファイル(output_name)に保存するサンプル関数。
    """
    # CSVデータをPandasで読み込み
    df = pd.read_csv(csv_file, encoding="utf_8")
    
    # 全列に対してヒストグラムを作成
    df.hist()
    
    # ファイルに保存
    pyplot.savefig(output_name)
    
    # 画面表示
    pyplot.show()

# 実行例: "science_scores.csv"の全列にヒストグラムを作成して"hist2.png"に保存
plot_all_histograms("science_scores.csv", "hist2.png")

実行結果

  • df.hist(): 各列が数値型であれば自動的にヒストグラムを生成。
  • 画面を閉じるには、プロットウィンドウが出ている場合は[Q]キーを押すか、JupyterLabであれば図がJupyterLab上に表示されます。

まとめ

 Matplotlibを使うと、ヒストグラムのほかにも折れ線グラフや棒グラフ、散布図など様々な図を作成できます。さらにPandasと組み合わせると、CSVファイルからスコアデータを読み込んで簡単に可視化できるため、機械学習やデータ解析の最初のステップとして非常に便利です。
 特にヒストグラムは、データの分布(どの値が多いか、ばらつきの度合いなど)を直感的に把握するのに向いており、クラスタリングや回帰分析、分類タスクなどで「データの偏り」を見抜く際にも大いに役立ちます。
 このようにMatplotlibとPandasを組み合わせることで、データ可視化の幅がさらに広がります。後は色やラベル、凡例などを詳細に設定することで、見やすく情報量の多いグラフを作成できますので、ぜひ試してみてください。