Matplotlib ヒストグラム

MatplotlibBeginner
オンラインで実践に進む

はじめに

この実験では、Python で最も人気のあるデータ可視化ライブラリの一つである Matplotlib を使用して、ヒストグラムの作成とカスタマイズ方法を学びます。ヒストグラムは、数値データセットの分布を可視化するための強力なツールです。数値データを範囲(または「ビン」)にグループ化し、各ビンに入るデータポイントの頻度を表示します。

以下のステップを行います。

  1. NumPy を使用してサンプルデータを生成します。
  2. 基本的なヒストグラムを作成します。
  3. ビンの数をカスタマイズします。
  4. ヒストグラムバーの色とエッジスタイルを変更します。
  5. ヒストグラムを正規化して確率密度を表示します。

この実験の終わりには、データ分析プロジェクトのために、情報量が多く視覚的に魅力的なヒストグラムを生成できるようになります。すべてのプロットは画像ファイルとして保存され、LabEx WebIDE で直接表示できます。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 84%です。学習者から 100% の好評価を得ています。

numpy.random を使用してサンプルデータを生成する

このステップでは、ヒストグラムをプロットするために使用できるサンプルデータを生成します。ここでは、Python における科学計算の基本的なパッケージである NumPy ライブラリを使用します。NumPy は、高性能な多次元配列オブジェクトと、これらの配列を操作するためのツールを提供します。

正規分布(またはガウス分布)に従うデータを生成するために、numpy.random.normal() 関数を使用します。これは、多くの現実世界のシナリオで見られる一般的なデータ分布の一種です。

まず、WebIDE の左側にあるファイルエクスプローラーから main.py ファイルを開きます。次に、以下のコードを追加します。このコードは、numpy ライブラリをインポートし、平均が 0、標準偏差が 1 の乱数を 1000 個生成します。

import numpy as np

## 平均 (loc) 0、標準偏差 (scale) 1 の正規分布から 1000 個のデータポイントを生成します。
data = np.random.normal(loc=0, scale=1, size=1000)

print("Sample data generated successfully.")

スクリプトを実行するには、WebIDE でターミナルを開き(Terminal -> New Terminal)、以下のコマンドを実行します。作業ディレクトリは既に /home/labex/project に設定されています。

python3 main.py

ターミナルに確認メッセージが表示されます。

Sample data generated successfully.

スクリプト内の data 変数には、次のステップで可視化するための 1000 個の数値の配列が格納されています。

plt.hist(data) を使用してヒストグラムをプロットする

このステップでは、最初のヒストグラムを作成します。ここでは、プロット作成のためのシンプルなインターフェースを提供する matplotlib.pyplot モジュールを使用します。これは慣習的にエイリアス plt でインポートされます。

ヒストグラム作成のコアとなる関数は plt.hist() です。最も簡単な使い方では、プロットしたいデータの配列を引数として 1 つ取ります。

非対話型環境にいるため、plt.show() でプロットを直接表示することはできません。代わりに、plt.savefig() を使用してプロットをファイルに保存する必要があります。

main.py ファイルを以下のコードで更新してください。これにより、前のステップのデータ生成コードに Matplotlib のプロットロジックが追加されます。

import numpy as np
import matplotlib.pyplot as plt

## サンプルデータを生成
data = np.random.normal(loc=0, scale=1, size=1000)

## ヒストグラムを作成
plt.hist(data)

## プロットをファイルに保存
plt.savefig('/home/labex/project/histogram.png')

print("Basic histogram saved to histogram.png")

ターミナルからスクリプトを再度実行します。

python3 main.py

以下の出力が表示されるはずです。

Basic histogram saved to histogram.png

左側のファイルエクスプローラーに histogram.png という新しいファイルが表示されます。それをダブルクリックして開くと、最初のヒストグラムが表示されます。生成したランダムデータの頻度分布が示されます。

Histogram

bins パラメータを使用してビンの数を設定する

このステップでは、ビンの数を設定することでヒストグラムの粒度を制御する方法を学びます。「ビン」とは、データの範囲を表す区間のことです。ビンの数は、分布の解釈方法に大きく影響を与える可能性があります。ビンが少なすぎると重要な詳細が隠れてしまう可能性があり、多すぎるとノイズの多いプロットが作成される可能性があります。

Matplotlib の plt.hist() 関数には、ビンの数を指定できる bins パラメータがあります。デフォルトでは、Matplotlib は妥当な数を選択しますが、多くの場合、調整が必要になります。

前のプロットと比較するために、コードを変更して 30 個のビンを持つヒストグラムを作成しましょう。また、新しいファイル histogram_bins.png に保存します。

main.py ファイルを以下のように更新してください。

import numpy as np
import matplotlib.pyplot as plt

## サンプルデータを生成
data = np.random.normal(loc=0, scale=1, size=1000)

## 30 個のビンを持つヒストグラムを作成
plt.hist(data, bins=30)

## プロットを新しいファイルに保存
plt.savefig('/home/labex/project/histogram_bins.png')

print("Histogram with 30 bins saved to histogram_bins.png")

ターミナルからスクリプトを実行します。

python3 main.py

出力は以下のようになります。

Histogram with 30 bins saved to histogram_bins.png

ファイルエクスプローラーで histogram_bins.png を見つけて開いてください。最初のヒストグラムと比較してください。バーがより狭くなり、データの分布の詳細なビューが得られることに気づくはずです。

Histogram with 30 bins

ヒストグラムの色と edgecolor をカスタマイズする

このステップでは、ヒストグラムの視覚的な外観をカスタマイズします。適切にスタイル設定されたプロットは、読みやすく、よりプロフェッショナルに見えます。plt.hist() 関数には、バーの塗りつぶしに使用する color や、バーの境界線に使用する edgecolor など、スタイリングのためのいくつかのパラメータが用意されています。

バーの色を水色に変更し、黒い境界線を追加して、各ビンをより明確に際立たせましょう。

これらの新しいパラメータを含めるように main.py ファイルを変更します。このカスタマイズされたプロットは histogram_color.png に保存します。

import numpy as np
import matplotlib.pyplot as plt

## サンプルデータを生成
data = np.random.normal(loc=0, scale=1, size=1000)

## 30 個のビン、カスタムカラー、エッジカラーを持つヒストグラムを作成
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

## プロットを新しいファイルに保存
plt.savefig('/home/labex/project/histogram_color.png')

print("Styled histogram saved to histogram_color.png")

ターミナルでスクリプトを実行します。

python3 main.py

以下のメッセージが表示されます。

Styled histogram saved to histogram_color.png

新しく作成された histogram_color.png ファイルを開きます。水色のバーと明確な黒い輪郭を持つ、はるかに洗練されたヒストグラムが表示されます。

Styled histogram

density=True を使用してヒストグラムを正規化する

このステップでは、正規化されたヒストグラムを作成する方法を学びます。デフォルトでは、ヒストグラムの y 軸は各ビン内のデータポイントのカウントを表します。しかし、分布を確率密度として表示する方が便利な場合があります。正規化されたヒストグラムでは、すべてのバーの合計面積が 1 になるように、各バーの高さが調整されます。

これは、plt.hist() 関数で density パラメータを True に設定することで実現できます。また、プロットが自己説明的になるように、ラベルとタイトルを追加することも良い習慣です。

スクリプトを更新して、正規化されたヒストグラムを作成し、説明的なラベルを追加しましょう。

import numpy as np
import matplotlib.pyplot as plt

## サンプルデータを生成
data = np.random.normal(loc=0, scale=1, size=1000)

## 正規化されたヒストグラムを作成
plt.hist(data, bins=30, color='skyblue', edgecolor='black', density=True)

## タイトルとラベルを追加
plt.title('Normalized Histogram of Sample Data')
plt.xlabel('Value')
plt.ylabel('Probability Density')

## プロットを新しいファイルに保存
plt.savefig('/home/labex/project/histogram_normalized.png')

print("Normalized histogram saved to histogram_normalized.png")

スクリプトの最終バージョンを実行します。

python3 main.py

出力は以下のようになります。

Normalized histogram saved to histogram_normalized.png

histogram_normalized.png を開きます。y 軸の値がはるかに小さくなっていることに注意してください。これらは生のカウントではなく、確率密度を表します。分布の全体的な形状は同じですが、スケールが標準化されており、異なるサイズのデータセットの分布を比較するのに役立ちます。

Normalized histogram

まとめ

この実験を完了したことをお祝いします!Python の Matplotlib を使用してヒストグラムを作成およびカスタマイズするための基本的なスキルを習得しました。

この実験では、以下のことを行いました。

  • numpy.random.normal() を使用してサンプルデータを生成しました。
  • plt.hist() で基本的なヒストグラムをプロットしました。
  • bins パラメータを使用してビンの数を制御しました。
  • color および edgecolor パラメータでヒストグラムをスタイル設定しました。
  • density=True を使用して正規化された確率密度ヒストグラムを作成しました。
  • より良いコンテキストのために、プロットにタイトルとラベルを追加しました。

ヒストグラムは、データ探索および分析における基本的なツールです。ここで学んだテクニックにより、独自のデータセットの分布を効果的に視覚化できるようになります。Matplotlib の他のパラメータやプロットタイプを自由に試してみてください。