Skip to content

2. データ可視化 (1)

第 2 回では Python のライブラリ Matplotlib を用いたデータ可視化について学びます。

2.1 データ可視化の重要性

データ可視化は、複雑なデータを直感的に理解するために重要なプロセスです。文字や数値だけで表現されたデータは、そのままでは意味を捉えにくいことがありますが、グラフやチャートを用いて適切に可視化することにより、データの傾向やパターンを迅速に把握することが可能となります。さらには、高精度な分析や、意思決定の効果的なサポートにも繋がります。

2.1.1 Python によるデータ可視化

Python には、データ可視化を行うためなツールがさまざま提供されています。特に、オープンソースのライブラリである Matplotlib や Seaborn は、柔軟で詳細なカスタマイズが可能なグラフ作成を強力にサポートしてくれます。これらのライブラリを使用することで、簡単な散布図から複雑なヒートマップや 3D プロットまで、多種多様な可視化を容易に実現できます。

今回学ぶ Matplotlib は、Python で最も広く使われている定番の可視化ライブラリです。細かいカスタマイズが自由自在にできる反面、最初は少し面倒に感じるところもあるかもしれませんが、Python によるデータ可視化を学ぶうえで欠かせません。

公式:https://matplotlib.org/

ライブラリのインストールについて

通常、このような可視化ライブラリは pip コマンドでインストールする必要がありますが、CHIKUWA Editor には予めインストール済みですので、特別な操作は不要です。外部の開発環境を利用する場合は、必要に応じて各自でインストールしてください。

2.2 Matplotlib の基本

2.2.1 Matplotlib のインポート

Matplotlib による可視化は、pyplot というサブモジュールを通して行われます。インポートは以下のようにして行います。ソースコードの冒頭で一度だけ書くようにしましょう。

import matplotlib.pyplot as plt

以下で紹介するコードは、matplotlib.pyplot モジュールがインポートされ、plt という省略表記で利用できる状態であることを前提としています。

2.3 基本的なグラフの描画

2.3.1 折れ線グラフ

データをプロットして折れ線グラフを表示するには、以下のように pyplot.plot() 関数と pyplot.show() 関数を用います。

# x の値(横軸)
x = [0, 1, 2, 3, 4]

# y の値(縦軸)
y = [0, 1, 4, 9, 16]

# データをプロット
plt.plot(x, y)

# グラフの表示
plt.show()

折れ線グラフ

以下のように 1 行に収めることもできます。

plt.plot([1, 2, 3], [1, 4, 9])

plt.show() の省略について

本来の Python では、plt.plot() 関数のあとに plt.show() 関数を用いてグラフを表示する必要があります。しかし、Google Colab は plot() を見つけると、「グラフを出力したいんだ」と解釈し、裏で自動的に show() 相当のことをしてくれるため、記述を省略することができます。

2.3.2 棒グラフ

棒グラフを表示するには、pyplot.bar() 関数を用います。

plt.bar(["A", "B", "C", "D"], [5, 7, 3, 12])

棒グラフ

横向きの棒グラフを表示する場合は、pyplot.barh() 関数を用います。

plt.barh(["A", "B", "C", "D"], [5, 7, 3, 12])

横向きの棒グラフ

2.3.3 散布図

散布図を表示するには、pyplot.scatter() 関数を用います。

plt.scatter([1, 3, 8, 5], [3, 6, 8, 4])

散布図

2.3.4 円グラフ

円グラフを表示するには、pyplot.pie() 関数を用います。各要素にラベルをつける場合は、以下のように labels オプションを指定します。

plt.pie([25, 35, 40], labels=["Good", "Normal", "Bad"])

円グラフ

デフォルトでは上の図のように、時計の 3 時の位置から反時計回りに円グラフが描かれます。これを、時計の 12 時の位置から時計回りに描きたい場合は、以下のように startangle オプションを 90 に、counterclock オプションを False に指定します。

plt.pie(
    [25, 35, 40],
    labels=["Good", "Normal", "Bad"],
    startangle=90,
    counterclock=False,
)

円グラフ2

2.3.5 ヒストグラム

ヒストグラムを表示するには、pyplot.hist() 関数を用います。ヒストグラムではデータの他に、区間(ビン)の数(bins)やビンの色(color, edgecolor)を指定することができます。

import numpy as np
import matplotlib.pyplot as plt

# 標準正規分布のデータを 300 個生成
data = np.random.randn(300)

# ヒストグラムを描画
plt.hist(
    data,
    bins=20,
    color="skyblue",
    edgecolor="black"
)
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

ヒストグラム

2.3.6 グラフの基本要素

グラフの基本要素として、次のものがあります。

  • 「タイトル 」(title)
  • 「横軸ラベル」(xlabel)
  • 「縦軸ラベル」(ylabel)
  • 「グリッド線」(grid)
  • 「凡例」(legend)

それぞれ以下のようにして使うことができます。

plt.plot(
    [1, 2, 3], [1, 4, 9],
    label="Sugoi Sen"      # 凡例のラベル
)
plt.title("Kakkoii Graph") # グラフタイトル
plt.xlabel("Yoko Label")   # 横軸ラベル
plt.ylabel("Tate Label")   # 縦軸ラベル
plt.grid(True)             # グリッド線の表示
plt.legend()               # 凡例の表示

グラフの基本要素

2.3.7 日本語フォントの利用

Matplotlib はデフォルトで日本語フォントに対応していないため、グラフのタイトルや軸ラベルなどに日本語を使うと、文字化け(「□□□」のような表示)が発生することがあります。これを解消する最も手軽な方法は、japanize-matplotlib というライブラリを利用することです。

pip install japanize-matplotlib

次に、プログラムの冒頭でこのライブラリをインポートします:

import japanize_matplotlib

これで、Matplotlib のグラフで日本語が正しく表示されるようになります。以下は使用例です。

import matplotlib.pyplot as plt
import japanize_matplotlib

# 日本語を含むグラフの作成
plt.plot([1, 2, 3], [1, 4, 9], label="すごい線")
plt.title("かっこいいグラフ")
plt.xlabel("横ラベル")
plt.ylabel("縦ラベル")
plt.grid(True)
plt.legend()
plt.show()

日本語フォントの利用

CHIKUWA Editor における日本語対応

CHIKUWA Editor では japanize_matplotlib が予め組み込まれているため、特に何も書かなくても日本語をそのまま使うことができます。Google Colab やその他の環境を利用する場合は、上記のインストールおよび import の対応が必要です。

好みのフォントを使いたい場合

japanize_matplotlib を使わずに、好みのフォントを指定して日本語を表示することもできます。その場合は、お使いの環境にインストール済みのフォント名を確認したうえで、rcParams["font.family"] にそのフォント名を指定します。たとえば、Windows 環境であれば Meiryo などが利用可能です。

plt.rcParams["font.family"] = "Meiryo"

2.4 NumPy の関数

データ可視化の練習をするうえで知っておくと便利な NumPy の関数をいくつか紹介します。必要に応じて NumPy 公式 のドキュメントを参照するようにしてください。

2.4.1 データ生成系

2.4.2 数学・統計系

演習

演習 2-1

Matplotlib を使って月別売上データの折れ線グラフを描画してください。

テンプレートコード
import matplotlib.pyplot as plt

months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales = [120, 135, 150, 145, 160, 180]

# 折れ線グラフを描画

plt.title('月別売上')
plt.show()

演習 2-2

カテゴリ別の売上データを棒グラフで表示してください。

テンプレートコード
import matplotlib.pyplot as plt

categories = ['食品', '衣料', '家電', '書籍']
values = [450, 230, 380, 150]

# 棒グラフを描画

plt.title('カテゴリ別売上')
plt.show()