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)
コメント