Close
Photo by Xavier Mouton Photographie on Unsplash

Najpopularniejsze imiona ostatnich lat

Od pewnego czasu na stronach Ministerstwa Cyfryzacji można znaleźć informacje o najpopularniejszych imionach, jakie rodzice nadawali swoim nowonarodzonym pociechom w określonym roku w Polsce. Jest to ciekawe zestawienie, gdyż można zorientować się jakie imiona były czy są popularne i jaka jest ich powtarzalność.

Jedyny problem to, że Ministerstwo nie usystematyzowało sposobu podawania tych danych. Praktycznie w każdym roku, począwszy od 2013 r., sposób przekazania tych informacji to pliki w różnych formatach, w  różnych układach czy tak jak w 2018 roku wprost dane podane zostały bezpośrednio na stronie internetowej ministerstwa jako osobna podstrona dla każdego województwa w podziale na płeć. W związku z tym należało wszystkie dane zebrać, połączyć i uporządkować. Najciekawszym etapem tych prac był scrapping stron internetowych ministerstwa. Dla zainteresowanych przygotowany kod, oczywiście w środowisku R, podałem na końcu niniejszego wpisu. Z kolei plik wynikowy jest do pobrania celem samodzielnych analiz.

W tym miejscu zabierzmy się za analizę zgromadzonego materiału. Wczytujemy go zatem do środowiska R.

imiona.df <- read.table("imiona.txt", header=TRUE, encoding="UTF-8")
imiona.df$imie <- as.character(imiona.df$imie)

W efekcie mamy utworzony obiekt DataFrame (ramka danych) z 37236 wierszami reprezentującymi statystykę ilościową imion nadanych dzieciom urodzonych w latach 2013-2018 w podziale na płeć oraz województwa. Do pełni szczęścia brakuje jedynie tych danych, dla których wystąpienie imienia w danym roku było jednokrotne. Z uwagi na ochronę danych osobowych Ministerstwo Cyfryzacji tych danych nie podaje, choć trzeba zaznaczyć, że w latach 2015-2016 ograniczyło się do podania jedynie tych imion, które wystąpiły w ilości większej niż cztery.

Przedstawmy zatem te imiona, które cieszyły się największą popularnością w okresie ostatniego pięciolecia. Skorzystam z kodu rozdzielającego dane na grupę dziewczynek i chłopców, wybiorę dla każdego rocznika sześć topowych imion, a następnie wyświetlę je w postaci gotowego kodu html. W tym celu wykorzystam funkcję kable() z biblioteki knitr.

library(knitr)

imiona.df %>% 
  filter(plec == 'dziewczynek') %>% 
  group_by(rok,imie) %>% 
  summarise(
    all = sum(liczba)
  ) %>%  
  arrange(desc(rok),desc(all)) -> TopGirlsAllYears

TopGirlsList = split(TopGirlsAllYears, TopGirlsAllYears$rok)
TopHeadGirls <- lapply(TopGirlsList, head)
TopHeadGirls <- do.call(rbind,TopHeadGirls)

imiona.df %>% 
  filter(plec == 'chlopcow') %>% 
  group_by(rok,imie) %>% 
  summarise(
    all = sum(liczba)
  ) %>% 
  arrange(desc(rok),desc(all)) -> TopBoysAllYears

TopBoysList = split(TopBoysAllYears, TopBoysAllYears$rok)
TopHeadBoys <- lapply(TopBoysList, head)
TopHeadBoys <- do.call(rbind,TopHeadBoys)

TopHead <- arrange(cbind(TopHeadGirls,TopHeadBoys),desc(rok))[,-c(1,4)]  
kable(TopHead,
      col.names = c('Imię dla dziewczynki','Ilość - ranking ogólnopolski','Imię dla chłopca','Ilość - ranking ogólnopolski'),
      format = "html")

W rezultacie:

Najpopularniejsze imiona w grupie dziewczynek i chłopców w rankingu ogólnokrajowym.

Imię dla dziewczynki Ilość – ranking ogólnopolski Imię dla chłopca Ilość – ranking ogólnopolski
Rok 2018
ZUZANNA 8862 ANTONI 9325
JULIA 8463 JAKUB 8905
MAJA 8027 JAN 8455
ZOFIA 7928 SZYMON 8234
HANNA 7718 ALEKSANDER 7323
LENA 7647 FRANCISZEK 7093
Rok 2017
JULIA 9397 ANTONI 9811
ZUZANNA 9203 JAKUB 9119
ZOFIA 8454 JAN 8559
LENA 8311 SZYMON 8148
MAJA 8075 FRANCISZEK 6963
HANNA 7936 FILIP 6941
Rok 2016
ZUZANNA 8859 ANTONI 9216
JULIA 8667 JAKUB 8974
LENA 8386 SZYMON 8299
MAJA 8329 JAN 7627
HANNA 7969 FILIP 6691
ZOFIA 7731 FRANCISZEK 6562
Rok 2015
ZUZANNA 9151 JAKUB 8730
LENA 8768 ANTONI 7988
JULIA 8541 SZYMON 7553
MAJA 8092 JAN 7271
ZOFIA 7380 FILIP 6801
HANNA 6940 KACPER 6479
Rok 2014
LENA 10570 JAKUB 10165
JULIA 9603 KACPER 7877
ZUZANNA 9566 ANTONI 7715
MAJA 8842 FILIP 7640
ZOFIA 7176 JAN 7367
HANNA 6989 SZYMON 6510
Rok 2013
LENA 11380 JAKUB 10810
JULIA 11209 KACPER 8590
ZUZANNA 9626 FILIP 8049
MAJA 9264 SZYMON 7092
ZOFIA 6668 JAN 7004
AMELIA 6449 ANTONI 6669

Jeżeli przyjrzeć się uzyskanym wynikom to widać, że preferencje wśród imion nadawanym dzieciom są raczej stabilne. Wśród imion dla dziewczynek prym wiodą Zuzanna, Julia oraz Maja. Lena, która na początku okresu analizy (lata 2013-2014) była liderem zestawienia powoli traci w rankingu. Z kolei wśród chłopców dominują imiona Jakub i Antoni. Kacper, który jeszcze w 2013-2014 był w czołówce rankingu wypadł poza pierwszą szóstkę. Zastąpił go Franciszek.

Najbardziej popularne imiona nadawane dziewczynkom i chłopcom w 2018r.

Zresztą aby mieć pełny obraz zmian pomiędzy poszczególnymi latami warto przeanalizować procentowe zmiany jakie wystąpiły dla danego imienia. Szkopuł jednak w tym, że dla imienia które występuje rzadko już zmiana np z dwóch wystąpień na cztery to zmiana 100%-owa. Dlatego analizę przeprowadziłem wyróżniając dwie grupy, pierwsza określona jako:

  • grupa A – to grupa, gdzie liczba wystapień była większa niż 200 (ok 0,1% całej rocznej populacji) a mniejsza niż 1000 wystąpień
  • grupa B – to grupa, w której liczba wystąpień przekraczała 1000 wystąpień.
# wzrost popularności imienia pomiędzy 2017 a 2018

TopGirlsAllYears %>% 
  spread(rok,all) %>% 
  set_names('Imie','R2013','R2014','R2015','R2016','R2017','R2018') %>% 
  select(-c('R2013','R2014','R2015','R2016')) %>% 
  filter(R2018 > 200 &amp; R2018 < 1000) %>% 
  mutate(zmiana = (R2018-R2017)/R2017*100) %>% arrange(desc(zmiana)) %>% top_n(10) -> TopGirlsNameChangeLess

TopGirlsAllYears %>% 
  spread(rok,all) %>% 
  set_names('Imie','R2013','R2014','R2015','R2016','R2017','R2018') %>% 
  select(-c('R2013','R2014','R2015','R2016')) %>% 
  filter(R2018 >= 1000) %>% 
  mutate(zmiana = (R2018-R2017)/R2017*100) %>% arrange(desc(zmiana)) %>% top_n(10) -> TopGirlsNameChangeMore

plot1 <- TopGirlsNameChangeLess %>%
  arrange(zmiana) %>%
  mutate(Imie = fct_inorder(Imie)) %>% 
  ggplot(aes(Imie, zmiana)) +
  geom_col(fill="orange") +
  geom_text(aes(label=R2018)) +
  coord_flip() +
  labs(title = "Wzrost popularności imienia dla dziewczynki",
       subtitle = "Porównanie: 2018/2017 (2017 = 100%) (grupa A)",
       x = "", y = "Procentowa zmiana popularności imienia")

plot2 <- TopGirlsNameChangeMore %>%
  arrange(zmiana) %>%
  mutate(Imie = fct_inorder(Imie)) %>% 
  ggplot(aes(Imie, zmiana)) +
  geom_col(fill="orange") +
  geom_text(aes(label=R2018)) +
  coord_flip() +
  labs(title = "Wzrost popularności imienia dla dziewczynki",
       subtitle = "Porównanie: 2018/2017 (2017 = 100%) (grupa B)",
       x = "", y = "Procentowa zmiana popularności imienia")

require(gridExtra)
grid.arrange(plot1, plot2, ncol=2)

Liczby podane przy słupkach określają liczby wystąpień w 2018 roku. W grupie A największy przyrost w ilości wystąpień zanotowała Wanda (zmiana o 70% w stosunku do 2017 r.). Znaczącym wzrostem zainteresowania rodziców w nadaniu imienia cieszyła się również Stefania (wzrost o 55%) oraz Gaja (wzrost o 41%). Prawdziwym rekordzistą zmiany wśród imienia dla dziewczynek pomiędzy 2018 a 2017 rokiem w grupie B jest jednak Klara, wzrost jaki miał miejsce w tym przypadku to 58%.

Sprawdźmy także, które z imion dla dziewczynki przestało się cieszyć zwiększonych zainteresowaniem wśród przyszłych rodziców w 2018 roku.

Jak widać najwięcej na popularności w grupie A straciła Sandra. Zainteresowanie tym imieniem spadło aż o 24%. Z kolei, w grupie B blisko 20% spadek miał miejsce w przypadku imienia Nikola.

W grupie imion dla chłopców sytuacja wyglądała następująco:

W grupie A największy wzrost odnotowano dla imienia Leo (wzrost o 51% w ilości nadania tego imienia pomiędzy rokiem 2017 a 2018). Wysoki także wzrost, powyżej 40% odnotowano dla imienia Florian. W grupie B, czyli bardziej popularnych imion największą zmianę mamy w przypadku Ignacego. Tutaj odnotowano o blisko 17% więcej nadań tego imienia w 2018r, niż w roku poprzednim. Na popularności w 2018r w grupie A stracił przede wszystkim Brajan, w 2018 r. o ponad 40% mniej nadań niż rok wcześniej. Z kolei w grupie B na „zapotrzebowanie” na imię Patryk w 2018 r. było o 27% mniejsze niż w 2017 r.

A jak wygląda sytuacja w poszczególnych województwach. Czy pomiędzy województwami występują znaczące różnice w wyborze imienia dla pociech przekonamy się po wykonaniu następującego kodu. Przy okazji wyznaczę procentowy udział danego imienia w każdym województwie na tle wszystkich imion nadanych z uwzględnieniem podziału na płeć.

imiona.df %>% 
  group_by(rok, plec, woj) %>% 
  summarise(
    all = sum(liczba)
  ) -> imiona.rok.woj

imiona.df <- left_join(imiona.df,imiona.rok.woj,by = c('rok','plec','woj'))
imiona.df['procent'] <- imiona.df['liczba']/imiona.df['all']*100

# wybieramy top imie w kazdym województwie w danym roku

imiona.df %>% 
  group_by(rok, plec, woj) %>% 
  filter(procent == max(procent)) %>%  
  ungroup() %>% 
  select(rok, woj, plec, imie, procent) -> imiona.rok.woj.top1

I wynik zaprezentujemy na mapkach:

Rok 2018 to dominacja wśród imion dla dziewczynek imienia Zuzanna, praktycznie jest to najczęściej nadawane imię w środkowej i wschodniej części Polski, w zachodniej części Polski dominuje Hanna. W trzech województwach dominują inne imiona, i tak w województwie wielkopolskim najczęściej nadawanym imieniem dla dziewczynek była Zofia, w świętokrzyskim Maja, a w małopolskim Julia. Wśród imion dla chłopców obserwujemy znacznie większe zróżnicowanie terytorialne.

Gdyby prześledzić żeńskie i męskie imiona słowiańskie to łatwo zauważyć, że imiona żeńskie kończą się na literę „a”. Staropolskie mogą się jeszcze kończyć na „ć” oraz „ń”. Będzie zatem łatwo stwierdzić ile w 2018 r. nadano imion, które kończyły się na literę inną niż „a” i jaki jest to odsetek w prawie całej populacji (jak wspomniałem Ministerstwo Cyfryzacji nie podaje imion o pojedynczych wystąpieniach). Okazuje się, że ilość wystąpień wsród imion dla dziewczynek, które nie kończą się na literę „a” to 986. Zatem wśród 192714 przypadków jest to 0,5%, czyli 1 wystąpienie na 195. Najpopularniejsze żeńskie imiona to:

imiona.df %>% 
  filter(rok == '2018',plec == 'dziewczynek', substr(imie,nchar(imie),nchar(imie)) != "A") %>% 
  group_by(imie) %>% 
  summarise(
    liczba = sum(liczba)
  ) %>% 
  arrange(desc(liczba)) %>% top_n(10) %>% 
  kable(col.names = c('Imię dla dziewczynki','Liczba wystąpień'),
      format = "html")
Imię dla dziewczynki Liczba wystąpień
NEL 213
NOEMI 111
INES 60
SOPHIE 55
NICOLE 45
EMILY 37
ZOE 36
LILY 34
LILLY 31
NAOMI 30

W przypadku imion dla chłopców już tak prostej zależności jak z literką „a” nie da się uchwycić. Nie mniej jednak większość imion słowiańskich męskich kończy się na spółgloskę. Zatem do dzieła, szukamy tych, które kończą się samogłoską.

vowels <- c("a","e","i","o","u","A","E","I","O","U")

imiona.df %>% 
  filter(rok == '2018', plec == 'chlopcow', substr(imie,nchar(imie),nchar(imie)) %in% vowels) %>% 
  group_by(imie) %>% 
  summarise(
    liczba = sum(liczba)
  ) %>% 
  arrange(desc(liczba)) %>% top_n(10) %>% 
  kable(col.names = c('Imię dla Chłopca','Liczba wystąpień'),
        format = "html")

Imię dla chłopca Liczba wystąpień
ANTONI 9325
BRUNO 1281
KUBA 913
MIESZKO 395
LEO 251
JEREMI 242
IWO 219
HUGO 116
MARCELI 94
KOSMA 63

Wśród tej grupy są jak widać dobrze znane nam imiona słowiańskie. W dodatku na literę „a” wśród najbardziej popularnych kończących się samogłoską jest Kuba oraz Kosma.

Jurandy, gdzie się podzialiście?

I na koniec tego wpisu wprowadzę trochę prywaty by sprawdzić ile to razy w ostatnich pięciu latach nadano chłopcom imię Jurand 🙂

library(knitr)

imiona.df %>% 
  filter(imie == 'JURAND') %>% 
  select(-c(rok,plec)) %>% 
  kable(
    col.names = c('wojewodztwo','imie','ilość','Chłopcy ogółem','Procent/Populacja chłopców'),
    format = "html")

Nie powiem, wynik mnie zaskoczył. Jeżeli już któremuś z chłopców nadano imię Jurand, to jest to pojedynczy przypadek nie odnotowany w danych Ministerstwa 🙁 ze względu na ochronę danych osobowych.

To sprawdźmy jak sytuacja wygląda w przypadku imienia Igor.

imiona.df %>% 
  filter(rok == '2018',imie == 'IGOR') %>% 
  select(-c(rok,plec)) %>% 
  kable(
      col.names = c('wojewodztwo','imie','ilość','Chłopcy ogółem','Procent/Populacja chłopców'),
      format = "html")
wojewodztwo ilość chłopcy ogółem procent
dolnoslaskie 218 14575 1.49
kujawsko-pomorskie 218 10761 2.02
lubelskie 163 10072 1.61
lubuskie 76 4920 1.54
lodzkie 213 12013 1.77
malopolskie 331 20467 1.61
mazowieckie 392 32245 1.21
opolskie 60 4557 1.31
podkarpackie 187 11379 1.64
podlaskie 98 6265 1.56
pomorskie 229 13651 1.67
slaskie 479 22714 2.10
swietokrzyskie 109 5276 2.06
warminsko-mazurskie 136 7324 1.85
wielkopolskie 371 20243 1.83
zachodniopomorskie 120 8302 1.44

W tym przypadku sytuacja przedstawia się odmiennie, w województwie śląskim w 2018 r. imię Igor nadano 479 chłopcom (2,10%).

Z dedykacją dla przyszłej mamy sprawdzamy jeszcze imię Bruno.

wojewodztwo ilość chłopcy ogółem procent
dolnoslaskie 128 14575 0.8782161
kujawsko-pomorskie 56 10761 0.5203977
lubelskie 31 10072 0.3077840
lubuskie 46 4920 0.9349593
lodzkie 57 12013 0.4744860
malopolskie 102 20467 0.4983632
mazowieckie 227 32245 0.7039851
opolskie 15 4557 0.3291639
podkarpackie 36 11379 0.3163723
podlaskie 17 6265 0.2713488
pomorskie 125 13651 0.9156838
slaskie 143 22714 0.6295677
swietokrzyskie 28 5276 0.5307051
warminsko-mazurskie 36 7324 0.4915347
wielkopolskie 175 20243 0.8644964
zachodniopomorskie 59 8302 0.7106721

W województwie śląskim w zeszłym roku imię Bruno nadano 143 chłopcom, czyli 6 na 1000 chłopców nosi to imię. Jest zatem bardzo duża szansa że wybrane imię dla syna nie powtórzy się w grupie przedszkolnej, ani potem w szkole :).

Dodatkowe materiały

Scrapping danych za rok 2018

library(rvest)
library(xml2)
library(readxl)

get_names_list <- function(url) {

#wczytanie strony
webpage <- read_html(url)
#odszukanie wezła
webpage %>% html_node("div.paragraph") -> names
#pozbycie sie znaczników
names <- gsub('<div class=\"paragraph article_section_content\"><p>|</p></div>','',names)
names <- gsub('<.{0,1}br.{0,1}>','\n',names)
#utworzenie listy imion
names <- unlist(strsplit(names,'\n ',fixed = TRUE))
#tworzymy ramkę danych z imion i nazywamy kolumny
names.df <- data.frame(do.call(rbind,strsplit(names,' - ',fixed = FALSE)))
colnames(names.df) <- c('imie','liczba')
#zamieniamy typ zmiennej imie na znak, a zmiennej liczba na liczbe // ewentulanie zostawic jako factor imie
names.df$imie <- as.character(names.df$imie)
names.df$liczba <- as.numeric(as.character(names.df$liczba))
#utworzenie dodatkowych kolumn plec i woj
plec <- sub('.*?dla-(.*?)-.*','\\1',url)
names.df['plec'] <- plec
woj <- sub('.*?woj-','\\1',url)
names.df['woj'] <- woj
names.df['rok'] <- 2018
#przekazanie ramki do funkcji wywolującej 
return(names.df)
}

get_path_list <- function(url) {
#wczytanie strony
webpage <- read_html(url)
#odszukanie adresów stron
webpage %>% html_node("ul.layouts.level-1") %>% 
  html_nodes("li.lfr-nav-item") %>% 
  html_nodes("a.lfr-nav-item") %>% 
  html_attr("href") -> links
#tworzymy ramkę danych z adresów
links.df <- data.frame(links)
colnames(links.df) <- 'http'
#przekazanie ramki z adresami
return(links.df)
}

url <- "https://www.gov.pl/web/cyfryzacja/imiona"
# zbieramy adresy do stron
adresy <- get_path_list(url)
# utworzenie ramki z imionami
imiona.2018.df <- data.frame()

# zbieramy imiona z wojewodztw (ogolnopolski pomijamy)
for (i in 1:nrow(adresy)) {
  if ( !grepl('nopolski',as.character(adresy[i,'http'])) ) {
    tm.df <- get_names_list(as.character(adresy[i,'http']))
    imiona.2018.df <- rbind(imiona.2018.df,tm.df)
  }
}

imiona.2018.df <- imiona.2018.df %>% select(rok,woj,plec,imie,liczba)
dr hab. inż., prof. PCz (Politechniki Częstochowskiej); zainteresowania: gospodarowanie odpadami (praktyczne), danologia, analiza danych (hobbystycznie)

Leave a Reply

Your email address will not be published. Required fields are marked *