Befolkningsregnskabet

Folketal i lokaliteter efter størrelse

Til inddeling efter størrelse følges i Statistikbankens tabeller normalt adresselovens inddeling efter størrelse i følgende kategorier:

  1. Hovedstad
  2. Hovedbosteder
  3. Større bosteder: 700 - 3.000 indbyggere
  4. Bosteder: 200 - 699 indbyggere
  5. Mindre bosteder: 50 - 199 indbyggere
  6. Mindste bosteder: mindre end 50 indbyggere
  7. Andre lokaliteter: Udenfor kommuneinddelingen som fx Pitufik, Sirius mm

I det konsoliderede befolkningsregnskab https://bank.stat.gl/bedcalcr2 er de mindste lokaliteter slået sammen og lokaliteternes gruppetilhør fast over tid.

  1. Hovedstad
  2. Hovedbosteder
  3. Større bosteder: 700 - 3.000 indbyggere
  4. Bosteder: 200 - 699 indbyggere
  5. Andre lokaliteter
klik for at se/skjule kode
library(tidyverse)
library(janitor)
library(arrow)
library(pxmake)

x <- px("https://bank.stat.gl/Resources/PX/Databases/GSmicro/BE/BEP/BEXST77/BEXLOKKOD.px")

codelist_fmt <-  x %>% px_values() %>% clean_names() %>% filter(language=="da" & variable_code=="localitycode") %>% 
  select(lokkod=code,lokkod_txt=value)


sti <- file.path("S:","STATGS","BE","Reg","BEXST77","Datasaet")

data <- read_parquet(file.path(sti,"bexst77.parquet"), col_select = c(taar,lokkod, fsted)) %>% mutate(taar=strtoi(taar)) %>% 
#  filter(fsted=="N") %>% 
  select(-fsted)


# Definer en funktion til at bestemme 'omr' ud fra 'lokkod'
assign_omr <- function(lokkod) {
  prefix <- substr(lokkod, 1, 4)
  case_when(
    prefix == "0600" ~ "LP6",
    prefix %in% c("0200", "0800", "1000", "1200") ~ "LP5",
    prefix %in% c("0700", "1800", "0300", "0500", "1500", "0100", "1100", "1600", "1400") ~ "LP4",
    prefix %in% c("1700", "0900", "0820", "1607", "1900", "0703", "1806", "0906", "1605", "0108", "1504", "1804", "1503", "1802", "0902") ~ "LP3",
    TRUE ~ "LP2"
  )
}

hi <- data %>% 
  mutate(omr = assign_omr(lokkod)) %>% 
  group_by(taar, omr, lokkod) %>% 
  summarise(n = n(), .groups = "drop") %>% 
  complete(taar, lokkod, fill = list(n = 0)) %>% 
  left_join(codelist_fmt, by = "lokkod") %>% 
  mutate(omr = assign_omr(lokkod))

Nuuk

hi %>% 
  filter(omr=="LP6") %>% 
  select(-omr) %>% 
  ggplot(aes(x=taar,y=n,color=lokkod)) + 
  geom_line() +
  theme(legend.position = "none") + 
  labs(x="", y="",color=NULL)

Hovedbosteder

# Udtræk de sidste datapunkter for hver gruppe
last_points <- hi %>% 
  filter(omr == "LP5") %>% 
  group_by(lokkod_txt) %>% 
  filter(taar == max(taar))

# Plot grafen med linjer og labels
ggplot(hi %>% filter(omr == "LP5"), aes(x = taar, y = n, color = lokkod_txt)) +
  geom_line() +
  theme(legend.position = "none") + 
  labs(x = "", y = "", color = "") +
  geom_text(data = last_points, aes(label = lokkod_txt), hjust = 0.9, vjust = -0.9)

Større bosteder: 700 - 3.000 indbyggere

hi %>% 
  filter(omr == "LP4") %>% 
  select(-omr) %>% 
  ggplot(aes(x = taar, y = n, color = lokkod_txt, linetype = lokkod_txt)) +
  geom_line() +
  labs(x = "", y = "", color = "", linetype = "") +
  theme(legend.position = "bottom", legend.direction = "horizontal")  

Bosteder: 200 - 699 indbyggere

hi %>% 
  filter(omr=="LP3") %>% 
  select(-omr) %>% 
  ggplot(aes(x=taar,y=n,color=lokkod)) + 
  geom_line() +
  theme(legend.position = "none") + 
  labs(x="", y="",color=NULL)

Andre lokaliteter

# Transformér lokkod_txt i hele datasættet, så gruppen "2070" får samme label
hi_mod <- hi %>% 
  mutate(lokkod_txt = if_else(lokkod == "2070", 
                              str_replace(lokkod_txt, "2070 ", ""), 
                              lokkod_txt))

# Udtræk de datapunkter, hvor label skal placeres
last_points <- hi_mod %>% 
  filter(lokkod == "2070") %>% 
  filter(taar == min(taar))

# Plot grafen med linjer og label med samme farve
hi_mod %>% 
  filter(omr == "LP2") %>% 
  select(-omr) %>% 
  ggplot(aes(x = taar, y = n, color = lokkod_txt)) + 
  geom_line() +
  geom_text(data = last_points, 
            aes(label = lokkod_txt, color = lokkod_txt), 
            hjust = -1.0, vjust = 2.9) +
  labs(x = "", y = "", color = NULL) +
  theme(legend.position = "none")