PythonのPandasでヒストグラムを作成する方法について、初心者向けから実践的な応用まで体系的に解説します。
特に、データ分析や可視化の流れに沿って「どのように作れるのか」「どんなオプションがあるのか」を理解できるようにまとめます。
目次
Pandasでヒストグラムを作成する基本方法
PandasのDataFrame
やSeries
には、直接ヒストグラムを描画するためのplot.hist()
メソッドがあります。
また、plot(kind="hist")
でも同じ動作をします。
サンプルコード
import pandas as pd
import matplotlib.pyplot as plt
# サンプルデータ
data = pd.DataFrame({
"score": [55, 60, 65, 70, 72, 75, 78, 80, 82, 85, 88, 90, 92, 95, 100]
})
# ヒストグラムを描画
data["score"].plot.hist()
plt.show()
このコードでは、score
列の値の分布を簡単に可視化できます。
ヒストグラムの重要な引数
ヒストグラムはオプションを使って見やすくカスタマイズできます。
- bins
区間の数(棒グラフの数)を指定。デフォルトは10
。data["score"].plot.hist(bins=5) # 5つの区間に分割
- range
区間の範囲を指定。例えば0~100
に収めたいとき。data["score"].plot.hist(bins=10, range=(0,100))
- density
縦軸を「度数」ではなく「確率密度」にする。data["score"].plot.hist(density=True, bins=10)
- alpha
透明度を調整(0〜1)。複数ヒストグラムを重ねる時に便利。data["score"].plot.hist(alpha=0.7)
複数列をヒストグラムで比較
DataFrame
全体を対象にすると、複数列を同時にプロットできます。
df = pd.DataFrame({
"math": [65, 70, 75, 80, 85, 90, 95],
"english": [55, 60, 62, 68, 72, 78, 85]
})
df.plot.hist(alpha=0.5, bins=5) # 透明度を指定して重ね描画
plt.show()
この場合、math
とenglish
の分布を同じ図で比較可能です。
hist()
メソッドとの違い
PandasにはDataFrame.hist()
というメソッドもあります。
こちらは「列ごとに自動でヒストグラムを複数描画」してくれるのが特徴です。
df.hist(bins=10, figsize=(8, 4))
plt.show()
- 各列がサブプロットとして出力される
- 複数列のデータをまとめて可視化するのに便利
Matplotlibとの組み合わせ
Pandasのplot.hist
は内部的にMatplotlibを使っているため、さらに細かいカスタマイズをしたい場合はMatplotlibを直接利用できます。
plt.hist(data["score"], bins=10, color="skyblue", edgecolor="black")
plt.title("Score Distribution")
plt.xlabel("Score")
plt.ylabel("Frequency")
plt.show()
これにより、タイトルや軸ラベルをきれいに整えられます。
応用:正規分布と比較
ヒストグラムを作ると「正規分布に近いのか?」を確認したくなることがよくあります。
確率密度(density=True
)を使うと、理論分布と重ねられます。
import numpy as np
# ヒストグラム(確率密度)
data["score"].plot.hist(density=True, bins=10, alpha=0.5)
# 正規分布カーブを重ねる
mean = data["score"].mean()
std = data["score"].std()
x = np.linspace(50, 100, 100)
y = 1/(std*np.sqrt(2*np.pi)) * np.exp(- (x-mean)**2 / (2*std**2))
plt.plot(x, y, color="red")
plt.show()
これで、データの分布が正規分布にどのくらい近いか視覚的に確認できます。
まとめ
- 基本:
Series.plot.hist()
またはDataFrame.plot.hist()
で簡単に作成可能。 - カスタマイズ:
bins
,range
,density
,alpha
などで調整。 - 比較:複数列を同時に描画、または
DataFrame.hist()
でサブプロット表示。 - 応用:MatplotlibやNumPyを組み合わせて、正規分布との比較も可能。
以上、PythonのPandasでヒストグラムを作成する方法についてでした。
最後までお読みいただき、ありがとうございました。