06.7.18
人口ピラミッド型でユーザー層の偏りを確認
ax.barh(age_groups, male) と ax.barh(age_groups, -female) のように片方の値に負号を付けて描き、set_xticks で負の目盛りラベルを正の数字に書き換えれば完成します。読み終えると、30〜34 歳で女性 3,500 人が男性 3,300 人を上回る唯一の年齢帯を左右の長さから読み取り、A/B テストの属性分布比較などに同じ形を使えるようになります。直感 #
会員 4 万人の年齢帯別の人数を男女で比べたいとき、男性の棒と女性の棒を年齢帯ごとに上下に並べると、14 本の棒を目で往復することになります。人口ピラミッドは中央に縦線を引き、男性を右へ、女性を左へ伸ばします。同じ年齢帯の行で左右の棒の長さを見比べるだけで、男女どちらが多いかと差の大きさ(この例では最大 200 人)が分かります。全体の形がピラミッド(下が広い)なら若い層が多い、逆三角形なら高齢層が多い、と人口構成の特徴も一目で読めます。この例では 18〜24 歳が最も多く、年齢が上がるほど減る典型的なピラミッド型です。
Python で描く #
次のコードは 7 つの年齢帯の男女の人数を用意し、男性を正、女性を負の値として barh で描いたうえで、負の目盛りを正の表示に書き換え、各棒の先に人数を添え、中央に 0 の縦線を引きます。
| |

実行結果の読み方 #
右の水色が男性、左のピンクが女性で、同じ行の左右の長さを比べます。18〜24 歳は男性 4,200・女性 4,000 と男性がやや多く、30〜34 歳だけは女性 3,500 が男性 3,300 を上回っており、左の棒が右より長い唯一の行です。全体の形は下(若い層)が広く上(50〜54 歳)が狭いピラミッド型で、会員が若年層に偏っていることが読めます。棒の先の数値ラベルがあるので、200 人程度の差も見落としません。
使いどころと落とし穴 #
人口ピラミッドは、男女や「対照群と処置群」のように 2 グループの年齢帯別(または階層別)の分布を比べる場面に特化した図です。3 グループ以上を比べたいなら左右に振り分けられないので、積み上げ棒グラフやグループごとにパネルを分けたファセット棒グラフに切り替えます。左右で xlim の幅が違うと同じ人数でも長さが変わって比率を誤読するため、必ず set_xlim(-4500, 4500) のように対称に固定してください。年齢区分の幅が「18〜24(7 歳)」と「25〜29(5 歳)」のように不揃いだと、幅の広い区分が無条件に多く見えるので、比較が目的なら区分幅を揃えるか、1 歳あたりの人数に換算してから描きます。