W 2014 roku Główny Urząd Statystyczny wydał publikację zatytułowaną „Prognoza ludności na lata 2014-2050„. Jak zaznaczono we wstępie czas transformacji ustrojowej rozpoczętej w 1989r przyniósł wiele znaczących zmian w zakresie zachowań demograficznych Polek i Polaków. Korzystnym trendom w poziomie umieralności, towarzyszą zmiany wzorca płodności oraz zachowań związanych z tworzeniem i rozpadem związków małżeńskich, a rosnące znaczenie migracji zagranicznych znacząco pogłębia niepomyślen przeobrażenia struktury populacji. Generalnie zachęcam do zapoznania się z dokumentem, gdyż wnioski jakie z niego płyna dla Polski do optymistycznych nie należą. A to jaki wpływ wywiera demografia choćby na giełdę, gospodarkę i inflację można przeczytać tutaj. Zresztą trudno byłoby znaleźć dziedzinę gdzie demografia nie odgrywa roli.
Wróćmy do opracowanego raportu. Jedną z popularnych metod pokazania struktury demograficznej jest przedstawienie populacji w formie wykresu piramidy. Stąd wykorzystując dane zawarte w publikacji zbudujemy krótki skrypt, dzięki któremu program R taką formę wykresu nam przygotuje. Dane bezpośrednio pobierzemy z pliku Excel, stąd skorzystam z biblioteki readxl oraz zestawu bilbliotek zamkniętych w tidyverse.
library(tidyverse)
library(readxl)
# wczytujemy plik z katalogu roboczego
plik <- paste0("00__Polska.xls")
# określamy zawartość komórek do wczytania
df <- as.data.frame(read_excel(plik, sheet = 1, range = "A5:E840", col_names = FALSE))
# przeprowadzamy uporządkowanie i czyszczenie danych
names(df) <- c("Year","Age","Total","Male","Female")
df$Year <- rep(2013:2050,each=22)
df$Age <- factor(df$Age, levels = df$Age, labels = df$Age)
df$Male <- df$Male*(-1)
df <- df[df$Age != 'Ogółem',-3]
a następnie przekształcam uzyskaną tabele do postaci tzw tabeli wąskiej, po to by za chwilę skorzystać z niej przy wyświetlaniu za pomocą biblioteki ggplot2.
df.melt <- df %>%
gather(Gender, Value , -Year, -Age)
Do prezentacji struktury demograficznej wybiorę trzy lata: 2017, 2035 oraz 2050.
rok_baza <- 2017
rok_comp <- 2035
rok_last <- 2050
df.melt %>%
filter(Year == rok_baza | Year == rok_comp | Year == rok_last) %>%
arrange(Year, Age) -> df.melt
ggplot(data=df.melt,aes(x=Age,y=Value,fill=Gender)) +
geom_bar(data = subset(df.melt,Gender == "Female"), stat = "identity") +
geom_bar(data = subset(df.melt,Gender == "Male"), stat = "identity") +
scale_y_continuous(breaks = seq(-2000000, 2000000, 500000),
labels = paste0(as.character(c(4:0, 1:4)), "m")) +
coord_flip() +
scale_fill_brewer(palette = "Set1") +
theme_bw() +
facet_wrap(~Year)+
labs(x="Wiek",y="Populacja") +
theme(legend.title = element_blank(),legend.position = "bottom")
Efekt to:
Wnioski: myślę, że widać wyraźnie jak z każdym oknem początkowe wybrzuszenie dzisiejszych 30-39 latków przesuwa się coraz bardziej w górę, przy zawężającej się populacji młodego pokolenia. Zresztą można to jeszcze pokazać na wykresie słupkowym:
df.total <- df[df$Age != 'Ogółem', -c(4,5)]
df.total %>%
filter(Year == rok_baza | Year == rok_comp | Year == rok_last) %>%
ggplot(aes(x=Age,y=Total)) +
geom_bar(stat="identity",fill="pink",colour="black") +
scale_y_continuous(breaks = seq(0, 4000000, 1000000),
labels = paste0(as.character( c(0:4), "m"))) +
facet_wrap(~Year) +
labs(x="Wiek",y="Populacja") +
theme(axis.text.x = element_text(angle = 90, vjust= 0.4))
A jak nie chcecie się bawić sami w budowę wykresów, a jesteście zainteresowani jak przedstawiają prognozy odnośnie struktury demograficznej na świecie zachęcam do odwiedzenia strony
www.populationpyramid.net/pl/polska/
Można tu znaleźć, tak jak wspomniałem piramidy populacji począwszy od roku 1950 aż z prognozą do 2100 roku.