人口ピラミッド型でユーザー層の偏りを確認

中級

6.7.18

人口ピラミッド型でユーザー層の偏りを確認

最終更新 2020-09-23 読了時間 1 分
まとめ
  • 人口ピラミッド型チャートで男女・属性別の分布を左右対称に比較する。
  • ax.barhで正負方向に水平棒を描き、対称レイアウトを実現。
  • ユーザー層の年齢帯別偏りやA/Bテストの属性差を一目で把握するときに使う。

男女比やA/Bテストでの属性差を伝えたいとき、左右に振り分ける人口ピラミッド型チャートが効果的です。年齢レンジ別の偏りが一目瞭然になります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import matplotlib.pyplot as plt

age_groups = ["18-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54"]
male = np.array([4200, 3800, 3300, 2700, 2200, 1600, 1200])
female = np.array([4000, 3600, 3500, 2900, 2400, 1700, 1300])

fig, ax = plt.subplots(figsize=(6, 4.8))
ax.barh(age_groups, male, color="#38bdf8", label="男性")
ax.barh(age_groups, -female, color="#f472b6", label="女性")

ax.set_xlabel("ユーザー数")
ax.set_title("年齢帯別の会員数(人口ピラミッド)")
ax.set_xlim(-4500, 4500)
ax.set_xticks([-4000, -2000, 0, 2000, 4000], labels=["4000", "2000", "0", "2000", "4000"])
ax.legend(loc="upper right")

for idx, (m_val, f_val) in enumerate(zip(male, female)):
    ax.text(m_val + 80, idx, f"{m_val}", va="center")
    ax.text(-f_val - 280, idx, f"{f_val}", va="center")

ax.axvline(0, color="#0f172a", linewidth=1)
ax.spines[["right", "top"]].set_visible(False)
ax.grid(axis="x", alpha=0.2)

fig.tight_layout()

plt.show()

年齢レンジ別の偏りが一目瞭然になりますの図

読み方のポイント #

  • 左右の長さで属性別の量を比較。左右差が大きい帯ほど偏りが強いです。
  • 軸を人数スケールで合わせると視覚的な比較が正確になります。
  • ラベルを添えると棒の長さを読み取らなくても人数を把握できます。

いつ使うか #

  • 適している場面: 男女や2カテゴリの年齢階層別分布を左右対称に比較したいとき。人口動態やユーザー層の把握に最適です。
  • 不向きな場面: 2カテゴリの比較に特化しているため、3つ以上のグループの比較には適しません。
  • 代替手段: 3グループ以上を比較するなら積み上げ棒グラフやファセット付き棒グラフを検討してください。

よくある失敗パターン #

  • 左右のスケール不一致: 男女の棒を異なるスケールで描くと比率の比較が不正確になります。左右のスケールを揃えてください。
  • 年齢区分の幅が不均一: 5歳刻みと10歳刻みが混在するとセグメント間の直接比較ができません。区分幅を統一しましょう。