概要
2020年の国勢調査の結果から,人口ピラミッドを作成する。データはe-statのAPIで取得可能。
- 年齢不詳の人口は無視(気になる場合は,不詳補完結果を用いると良い)。
- 人口ピラミッドはggplotだけで描き,追加のパッケージは使わない。
- 男女・年齢別人口のデータを整理して,男性については数値をマイナスにすることで,人口ピラミッドのグラフを作成する。
- 人口ピラミッドの作成には,pyramidsというパッケージを用いる方法もある。多分,そっちの方が簡単にできる。
コードと実行結果
library(tidyverse)
library(estatapi)
# e-statのappIDが必要
# 利用申請(無料)をすればだれでも入手できる
# appID = "入手したappIDをここに設定(行頭の#を外す)"
# e-statからデータ取得 statID 0003445133
# 国勢調査 令和2年国勢調査 人口等基本集計
# (主な内容:男女・年齢・配偶関係,世帯の構成,
# 住居の状態,母子・父子世帯,国籍など)
# 表番号2-1-1
# 男女,年齢(各歳),国籍総数か日本人別人口
# -全国,都道府県,21大都市,特別区,人口50万以上の市
estat_census2020 <- estat_getStatsData(
appId = appID,
statsDataId = "0003445133",
cdCat01 = "0", # 総人口
cdCat02 = c("1", "2"), # 男・女
cdArea = "00000" # 全国
)
Fetching record 1-240... (total: 240 records)
# 人口ピラミッドを描くためのデータの整理
pop2020 <- estat_census2020 |>
filter(
str_detect(cat03_code, "00[1-9]|0[1-9][0-9]|100|R6")
) |>
mutate(
cat03_code = str_replace(cat03_code, "R6", "101"), # 100歳以上は100歳に
age = as.numeric(cat03_code) - 1,
value =case_when(
`男女` == "男" ~ -value / 1000, # 男性の人口はマイナス(人口ピラミッドを描くため)
`男女` == "女" ~ value / 1000 # 人口は1000人単位に
)
) |>
select(age, `男女`, value)
# 人口ピラミッドの描画
pop2020 |>
ggplot(
aes( # x軸に年齢,y軸に人口をとり性別で塗り分け(縦横は入れ替える)
x = age,
y = value,
fill = `男女`
)
) +
geom_bar(stat = "identity", color = "black") +
scale_x_continuous(n.breaks = 10) +
scale_y_continuous(
breaks = seq(- 1000, 1000, 500),
labels = abs(seq(- 1000, 1000, 500))
) +
scale_fill_hue(
name = "",
labels = c(
"F" = "女",
"M" = "男"
)
) +
labs(
y = "人口(単位:1,000人)",
x = "年齢"
) +
coord_flip() # グラフの回転 (縦軸と横軸の入替)