2022年度長野市の人口を gglot2 でグラフにしてみた

R の gglot2 を使用して人口のグラフを作成してみました。
使用したデータは、長野市がクリエイティブ・コモンズ・ライセンス表示4.0国際(CC-BY4.0)ライセンスの下に公開している「長野市 令和4年地区別年齢別人口」(2022/05/20 更新)です。

サイト上だと画像が小さくて見づらいです。。
画像を保存するか、ブラウザの別タブで開くなどをお試しください。

全体

地区別

ソースコード

実行した環境は Google Colab です。

library(tidyverse)
chikubetsu_nenreibetsu_202205 <- read.delim(f <- file("http://linkdata.org/api/1/rdf1s9117i/chikubetsu_nenreibetsu_202205_R.txt", open="r", encoding="UTF-8"), header=T)
close(f)

data <- chikubetsu_nenreibetsu_202205[, -1]

必要なライブラリと、人口データの読み込みです。
データの1列目は、以下の通り不要なので除外しています。

area_levels = data[["地区名"]]
gender <- c("男","女")

cols <- data %>%
  colnames() %>%
  as.array()
ages <- cols[str_detect(cols, pattern="^X")] %>%
  str_extract(pattern="[0-9]+.+") %>%
  str_replace(pattern="(男|女)", "") %>%
  unique()

data2 <- data.frame()
for (r in 1:nrow(data)) {
  for (g in 1:length(gender)) {
    for (a in 1:length(ages)) {
      col <- sprintf("X%s%s", ages[a], gender[g])
      age <- as.numeric(str_replace(ages[a], "歳.*", ""))
      row <- c(
        data[r, "地区名"],
        gender[g], 
        age, 
        data[r, col]
      )
      data2 <- rbind(data2, row)
    }
  }
}
colnames(data2) <- c("Area", "Gender", "Age", "Population")
data2$Age <- as.numeric(data2$Age)
data2$Population <- as.numeric(data2$Population)
data2 <- data2 %>%
  mutate(Area = factor(Area, levels = area_levels))

データの形式を、以下のように変換します。グラフのデータとして扱いやすくする為です。

system("apt-get install -y fonts-noto-cjk")
# systemfonts::system_fonts()
# theme_update(text=element_text(family="Noto Sans Mono CJK JP"))

グラフの日本語が化けないように、フォントをインストールします。
systemfonts::system_fonts() で使えるフォントが分かります。
theme_update でデフォルトのフォントを設定したのですが、効いたり効かなかったりしたので、グラフの所で指定するようにしました。

options(repr.plot.width=24, repr.plot.height=9)
ggplot(data2, aes(x = as.factor(Age), y = Population, fill = Gender)) +
  geom_col(position = "dodge") +
  labs(title = "長野市 令和4年年齢別人口", x = "歳", y = "人口") +
  theme(text=element_text(family="Noto Sans CJK JP"))
ggsave("2022_nagano-shi_Population_All.png", width = 24, height = 9, dpi = 96)

全体のグラフを描画してファイルに保存します。

options(repr.plot.width = 48, repr.plot.height = 32)
ggplot(data2, aes(x = Age, y = Population, fill = Gender)) +
  geom_col(position = "dodge") +
  facet_wrap(~Area, ncol = 4) +
  labs(title = "長野市 令和4年地区別年齢別人口") +
  theme(text=element_text(family="Noto Sans CJK JP"))
ggsave("2022_nagano-shi_Population_Area.png", width = 48, height = 32, dpi = 96)

地区別のグラフを描画してファイルに保存します。

データ分析のためのデータ可視化入門 (Amazon)

コメント