K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ヒストグラム

入門

06.2.1

ヒストグラム

最終更新 2020-01-29 読了時間 2 分
まとめ
ヒストグラムは、1 つの数値列を同じ幅の区間(階級)に切り、各区間に入る値の個数(度数)を隙間なく並べた棒の高さで見せる図です。sns.histplot(data=df, x="sepal_length", binwidth=0.5) で Iris のがく片の長さ 150 個が 0.5 cm 刻みの 8 本ほどの棒になり、5〜6 cm に山があって右に裾が伸びる形が読めます。同じデータでも binwidth を 0.1 にすればギザギザ、2 にすれば棒 2 本と印象が変わるので、幅を 2〜3 通り試して変わらない特徴だけを信じるのが読み方の基本です。読み終えると、平均と標準偏差が山の重心と横幅として図のどこに見えるかを説明でき、件数の違う 2 群を stat="density" で揃えて比べられるようになります。

直感 #

アヤメ 150 個の「がく片の長さ」は 4.3 cm から 7.9 cm の間に散らばっています。「平均 5.84 cm」と聞いても、全員が 5.8 cm 前後なのか、5 cm と 7 cm に分かれているのかは分かりません。ヒストグラムは 4.0〜4.5、4.5〜5.0、…と 0.5 cm ごとの区間を作り、各区間に入る個数を数えて棒にします。棒が高い区間に値が集まり、棒が低い区間はまれで、棒の並びの形が「分布の形」です。横軸が切れ目のない数値なので棒どうしは隙間なく並び、カテゴリごとに離して描く棒グラフと見分けられます。

何が起きているか(ステップで見る) #

コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。

見るポイント:同じデータでも階級の幅で山の見え方が変わる。いくつか試して形が安定する幅を選ぶ。

Python で描く #

次のコードは Iris データの sepal_length 列を binwidth=0.5 の階級に分けて数え、度数を棒の高さにしたヒストグラムを描きます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
import seaborn as sns

df = sns.load_dataset("iris")
fig, ax = plt.subplots(figsize=(6, 4))
sns.histplot(data=df, x="sepal_length", binwidth=0.5, color="#2563eb", ax=ax)
ax.set_xlabel("がく片の長さ (cm)")
ax.set_ylabel("頻度")
ax.set_title("Iris データのヒストグラム")
ax.grid(alpha=0.2)

fig.tight_layout()

plt.show()

ヒストグラムの図

実行結果の読み方 #

5.0〜6.5 cm の 3 本の棒が高く、ここに 150 個のうち 90 個ほどが集まっています。左の裾は 4.3 cm で短く切れる一方、右は 7.5 cm 以上まで長く伸びているので、分布は右に歪んだ形です。平均 5.84 cm は山の重心に、標準偏差 0.83 cm は山の横幅に対応します。3 品種が混ざっているため、hue="species" を足せば setosa だけが 4.3〜5.8 cm に別の山を作ることも見えてきます。

使いどころと落とし穴 #

ヒストグラムが向くのは、1 変数の形を最初に確かめるときです。山が 1 つか 2 つか、歪み、外れ値の候補がひと目で拾えます。落とし穴は 3 つあります。第一に binwidth を 1 つに決めて描くと、たまたまその幅で出た凸凹を分布の特徴と思い込むので、0.3・0.5・1.0 のように 2〜3 通りで描き比べます。第二に、150 個と 30 個のように件数が違う群を度数で重ねると大きい群が支配的に見えるため、stat="density" に正規化してから重ねます。第三は右に長く伸びる価格や所得のデータで、棒が左に押し込まれて読めなくなるので log_scale=True で対数軸にします。幅の選択に迷いが残るなら、幅を決めずに描ける 密度プロット や ECDF で裏を取ります。

  • 密度プロット — 分布を滑らかな曲線で可視化
  • 箱ひげ図 — 中央値・四分位数・外れ値を比較
  • ECDF — 累積割合で閾値以下の比率を確認