Zobraziť R kód
library(readxl)Práca s databázou Eurostat v prostredí R
Tému Koľko stojí single život? som si vybrala preto, že ma zaujíma, ako sa líšia životné náklady človeka, ktorý žije sám, a ľudí, ktorí žijú v spoločnej domácnosti. Pri spoločnom bývaní sa niektoré výdavky rozdeľujú medzi viacerých členov domácnosti, no zároveň môže byť celková spotreba vyššia. Preto ma zaujíma, či je z finančného hľadiska výhodnejšie žiť samostatne alebo v dvojici a aký veľký je medzi nimi rozdiel.
Cieľom analýzy je porovnať priemerné spotrebné výdavky jednočlenných a dvojčlenných domácností, zistiť, koľko v priemere pripadá na jedného človeka, a sledovať, ako sa tieto rozdiely menili v priebehu rokov.
Na analýzu využijem databázu Household Budget Survey z Eurostatu, ktorá obsahuje údaje o priemerných spotrebných výdavkoch rôznych typov domácností v európskych krajinách. Dostupné údaje pokrývajú vybrané roky od 1988 do 2020. Výdavky sú vyjadrené v štandarde kúpnej sily (PPS), čo umožňuje porovnávať krajiny s rozdielnou cenovou úrovňou.
Výskumná otázka: Ako sa líšia spotrebné výdavky jednočlenných a dvojčlenných domácností v európskych krajinách a ako sa tento rozdiel menil v čase?
library(readxl)library(readxl)
data <- read_excel(
"household budget survey data.xlsx",
sheet = "Data"
) New names:
• `` -> `...2`
• `` -> `...3`
• `` -> `...4`
• `` -> `...5`
• `` -> `...6`
• `` -> `...7`
• `` -> `...8`
dim(data)[1] 518 8
names(data)[1] "Data extracted on 21/10/2026 20:43:47 from [ESTAT]"
[2] "...2"
[3] "...3"
[4] "...4"
[5] "...5"
[6] "...6"
[7] "...7"
[8] "...8"
head(data)# A tibble: 6 × 8
Data extracted on 21/10/2026 20:43…¹ ...2 ...3 ...4 ...5 ...6 ...7 ...8
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Dataset: Mean… <NA> <NA> <NA> <NA> <NA> <NA>
2 Last updated: 15/1… <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
4 Time frequency <NA> Annu… <NA> <NA> <NA> <NA> <NA>
5 Household composition <NA> Total <NA> <NA> <NA> <NA> <NA>
6 Unit of measure <NA> Purc… <NA> <NA> <NA> <NA> <NA>
# ℹ abbreviated name: ¹`Data extracted on 21/10/2026 20:43:47 from [ESTAT]`
str(data)tibble [518 × 8] (S3: tbl_df/tbl/data.frame)
$ Data extracted on 21/10/2026 20:43:47 from [ESTAT]: chr [1:518] "Dataset:" "Last updated:" NA "Time frequency" ...
$ ...2 : chr [1:518] "Mean consumption expenditure by type of household [hbs_exp_t134$defaultview]" "15/10/2025 23:00" NA NA ...
$ ...3 : chr [1:518] NA NA NA "Annual" ...
$ ...4 : chr [1:518] NA NA NA NA ...
$ ...5 : chr [1:518] NA NA NA NA ...
$ ...6 : chr [1:518] NA NA NA NA ...
$ ...7 : chr [1:518] NA NA NA NA ...
$ ...8 : chr [1:518] NA NA NA NA ...
data[1:20, ]# A tibble: 20 × 8
Data extracted on 21/10/2026 20:4…¹ ...2 ...3 ...4 ...5 ...6 ...7 ...8
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Dataset: Mean… <NA> <NA> <NA> <NA> <NA> <NA>
2 Last updated: 15/1… <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
4 Time frequency <NA> Annu… <NA> <NA> <NA> <NA> <NA>
5 Household composition <NA> Total <NA> <NA> <NA> <NA> <NA>
6 Unit of measure <NA> Purc… <NA> <NA> <NA> <NA> <NA>
7 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
8 TIME 1988 1994 1999 2005 2010 2015 2020
9 GEO (Labels) <NA> <NA> <NA> <NA> <NA> <NA> <NA>
10 European Union - 27 countries (fro… : : : : : 1734… 1727…
11 European Union - 27 countries (200… : : : 1522… 1583… : :
12 European Union - 25 countries (200… : : : 1599… 1644… : :
13 European Union - 15 countries (199… : 1263… 1531… 1782… 1783… : :
14 Belgium 1046… 1404… 1675… 1883… 2013… 2257… 2012…
15 Bulgaria : : : 4213… 5644… 7821… 8680…
16 Czechia : : : 6520… 8328… 9677… 1095…
17 Denmark : 1276… 1556… 1619… 1920… 2038… 2060…
18 Germany 1085… 1334… 1555… 1895… 1923… 2099… 2207…
19 Estonia : : : 6531… 6755… 1057… 1178…
20 Ireland : 1124… 1560… 2058… 1895… 1955… 1932…
# ℹ abbreviated name: ¹`Data extracted on 21/10/2026 20:43:47 from [ESTAT]`
which(data[[1]] == "TIME") [1] 8 60 112 164 216 268 320 372 424 476
data[c(5, 57, 109, 161, 213, 265, 317, 369, 421, 473), 1:3]# A tibble: 10 × 3
`Data extracted on 21/10/2026 20:43:47 from [ESTAT]` ...2 ...3
<chr> <chr> <chr>
1 Household composition <NA> Total
2 Household composition <NA> Total
3 Household composition <NA> One adult
4 Household composition <NA> One adult
5 Household composition <NA> One adult with de…
6 Household composition <NA> One adult with de…
7 Household composition <NA> Two adults
8 Household composition <NA> Two adults
9 Household composition <NA> Two adults with d…
10 Household composition <NA> Two adults with d…
data[c(5, 57, 109, 161, 213, 265, 317, 369, 421, 473), 3]# A tibble: 10 × 1
...3
<chr>
1 Total
2 Total
3 One adult
4 One adult
5 One adult with dependent children
6 One adult with dependent children
7 Two adults
8 Two adults
9 Two adults with dependent children
10 Two adults with dependent children
data[c(110, 162, 318, 370), 3]# A tibble: 4 × 1
...3
<chr>
1 Purchasing power standard (PPS) per adult equivalent
2 Purchasing power standard (PPS) per household
3 Purchasing power standard (PPS) per adult equivalent
4 Purchasing power standard (PPS) per household
data[164:175, ]# A tibble: 12 × 8
Data extracted on 21/10/2026 20:4…¹ ...2 ...3 ...4 ...5 ...6 ...7 ...8
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 TIME 1988 1994 1999 2005 2010 2015 2020
2 GEO (Labels) <NA> <NA> <NA> <NA> <NA> <NA> <NA>
3 European Union - 27 countries (fro… : : : : : 1734… 1745…
4 European Union - 27 countries (200… : : : 1479… 1538… : :
5 European Union - 25 countries (200… : : : 1557… 1598… : :
6 European Union - 15 countries (199… : 1244… 1476… 1735… 1731… : :
7 Belgium 1103… 1949… 1644… 1934… 2021… 2260… 2194…
8 Bulgaria : : 2495… 4153… 5650… 8020… 8730…
9 Czechia : : 5364… 6401… 7617… 8965… 1041…
10 Denmark : 1184… 1403… 1517… 1767… 1940… 1933…
11 Germany 1032… 1277… 1460… 1747… 1778… 1937… 2019…
12 Estonia : : 4037… 5703… 6335… 1017… 1170…
# ℹ abbreviated name: ¹`Data extracted on 21/10/2026 20:43:47 from [ESTAT]`
single <- data[166:199, ]dim(single)[1] 34 8
names(single) <- c("Krajina", "1988", "1994", "1999",
"2005", "2010", "2015", "2020")
names(single)[1] "Krajina" "1988" "1994" "1999" "2005" "2010" "2015"
[8] "2020"
pary <- data[374:407, ]
names(pary) <- c("Krajina", "1988", "1994", "1999",
"2005", "2010", "2015", "2020")
names(pary)[1] "Krajina" "1988" "1994" "1999" "2005" "2010" "2015"
[8] "2020"
dim(pary)[1] 34 8
table(single$`2020`)
: 10415.0 10683.0 11701.0 11738.0 13312.0 13633.0 14437.0 14765.0 15694.0
5 1 1 1 1 1 1 1 1 1
16229.0 17453.0 18327.0 18660.0 18809.0 19335.0 19598.0 19846.0 20108.0 20191.0
1 1 1 1 1 1 1 1 1 1
21942.0 22033.0 22964.0 24207.0 35200.0 8730.0 9068.0 9359.0 9389.0 9736.0
1 1 1 1 1 1 1 1 1 1
single[, 2:8] <- lapply(single[, 2:8], function(x) {
as.numeric(replace(x, x == ":", NA))
})str(single)tibble [34 × 8] (S3: tbl_df/tbl/data.frame)
$ Krajina: chr [1:34] "European Union - 27 countries (from 2020)" "European Union - 27 countries (2007-2013)" "European Union - 25 countries (2004-2006)" "European Union - 15 countries (1995-2004)" ...
$ 1988 : num [1:34] NA NA NA NA 11032 ...
$ 1994 : num [1:34] NA NA NA 12442 19492 ...
$ 1999 : num [1:34] NA NA NA 14767 16445 ...
$ 2005 : num [1:34] NA 14798 15577 17355 19341 ...
$ 2010 : num [1:34] NA 15381 15981 17316 20214 ...
$ 2015 : num [1:34] 17343 NA NA NA 22600 ...
$ 2020 : num [1:34] 17453 NA NA NA 21942 ...
pary[, 2:8] <- lapply(pary[, 2:8], function(x) {
as.numeric(replace(x, x == ":", NA))
})
str(pary)tibble [34 × 8] (S3: tbl_df/tbl/data.frame)
$ Krajina: chr [1:34] "European Union - 27 countries (from 2020)" "European Union - 27 countries (2007-2013)" "European Union - 25 countries (2004-2006)" "European Union - 15 countries (1995-2004)" ...
$ 1988 : num [1:34] NA NA NA NA 16586 ...
$ 1994 : num [1:34] NA NA NA 20652 23230 ...
$ 1999 : num [1:34] NA NA NA 24956 26664 ...
$ 2005 : num [1:34] NA 24483 25771 28724 30451 ...
$ 2010 : num [1:34] NA 25533 26571 28970 32722 ...
$ 2015 : num [1:34] 28458 NA NA NA 37329 ...
$ 2020 : num [1:34] 27998 NA NA NA 32016 ...
pary[, 2:8] <- lapply(pary[, 2:8], function(x) {
x <- trimws(x)
x[x == ":" | x == ""] <- NA
as.numeric(x)
})
str(pary)tibble [34 × 8] (S3: tbl_df/tbl/data.frame)
$ Krajina: chr [1:34] "European Union - 27 countries (from 2020)" "European Union - 27 countries (2007-2013)" "European Union - 25 countries (2004-2006)" "European Union - 15 countries (1995-2004)" ...
$ 1988 : num [1:34] NA NA NA NA 16586 ...
$ 1994 : num [1:34] NA NA NA 20652 23230 ...
$ 1999 : num [1:34] NA NA NA 24956 26664 ...
$ 2005 : num [1:34] NA 24483 25771 28724 30451 ...
$ 2010 : num [1:34] NA 25533 26571 28970 32722 ...
$ 2015 : num [1:34] 28458 NA NA NA 37329 ...
$ 2020 : num [1:34] 27998 NA NA NA 32016 ...
identical(single$Krajina, pary$Krajina)[1] TRUE
# Prvých 6 záznamov
head(single)# A tibble: 6 × 8
Krajina `1988` `1994` `1999` `2005` `2010` `2015` `2020`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 European Union - 27 countrie… NA NA NA NA NA 17343 17453
2 European Union - 27 countrie… NA NA NA 14798 15381 NA NA
3 European Union - 25 countrie… NA NA NA 15577 15981 NA NA
4 European Union - 15 countrie… NA 12442 14767 17355 17316 NA NA
5 Belgium 11032 19492 16445 19341 20214 22600 21942
6 Bulgaria NA NA 2495 4153 5650 8020 8730
# Rozmery a názvy premenných
dim(single)[1] 34 8
names(single)[1] "Krajina" "1988" "1994" "1999" "2005" "2010" "2015"
[8] "2020"
# Výber prvých troch krajín
single[1:3, ]# A tibble: 3 × 8
Krajina `1988` `1994` `1999` `2005` `2010` `2015` `2020`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 European Union - 27 countrie… NA NA NA NA NA 17343 17453
2 European Union - 27 countrie… NA NA NA 14798 15381 NA NA
3 European Union - 25 countrie… NA NA NA 15577 15981 NA NA
# Výber krajiny a výdavkov za rok 2020
single[, c("Krajina", "2020")]# A tibble: 34 × 2
Krajina `2020`
<chr> <dbl>
1 European Union - 27 countries (from 2020) 17453
2 European Union - 27 countries (2007-2013) NA
3 European Union - 25 countries (2004-2006) NA
4 European Union - 15 countries (1995-2004) NA
5 Belgium 21942
6 Bulgaria 8730
7 Czechia 10415
8 Denmark 19335
9 Germany 20191
10 Estonia 11701
# ℹ 24 more rows
# Základná deskriptívna štatistika
summary(single) Krajina 1988 1994 1999 2005
Length :34 Min. : 8310 Min. : 7198 Min. : 1903 Min. : 2596
N.unique :34 1st Qu.: 8908 1st Qu.: 9878 1st Qu.: 5267 1st Qu.: 6568
N.blank : 0 Median : 9811 Median :12142 Median :11958 Median :14798
Min.nchar: 5 Mean :10684 Mean :12814 Mean :11164 Mean :13468
Max.nchar:41 3rd Qu.:11032 3rd Qu.:13311 3rd Qu.:14646 3rd Qu.:17416
Max. :17477 Max. :25546 Max. :27374 Max. :35071
NAs :25 NAs :18 NAs :6 NAs :3
2010 2015 2020
Min. : 5650 Min. : 7181 Min. : 8730
1st Qu.: 9234 1st Qu.:10882 1st Qu.:11701
Median :15381 Median :15329 Median :16229
Mean :14391 Mean :16083 Mean :16468
3rd Qu.:18040 3rd Qu.:19390 3rd Qu.:19846
Max. :30759 Max. :33724 Max. :35200
NAs :3 NAs :3 NAs :5
# Priemerné výdavky v roku 2020
mean(single$`2020`, na.rm = TRUE)[1] 16467.66
library(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
# Výber krajín s dostupnými údajmi za rok 2020
single %>%
filter(!is.na(`2020`)) %>%
select(Krajina, `2020`)# A tibble: 29 × 2
Krajina `2020`
<chr> <dbl>
1 European Union - 27 countries (from 2020) 17453
2 Belgium 21942
3 Bulgaria 8730
4 Czechia 10415
5 Denmark 19335
6 Germany 20191
7 Estonia 11701
8 Ireland 19846
9 Greece 14437
10 Spain 18660
# ℹ 19 more rows
# Zoradenie podľa výdavkov v roku 2020
single %>%
filter(!is.na(`2020`)) %>%
arrange(desc(`2020`)) %>%
select(Krajina, `2020`)# A tibble: 29 × 2
Krajina `2020`
<chr> <dbl>
1 Luxembourg 35200
2 Norway 24207
3 Austria 22964
4 Netherlands 22033
5 Belgium 21942
6 Germany 20191
7 Italy 20108
8 Ireland 19846
9 Cyprus 19598
10 Denmark 19335
# ℹ 19 more rows
# Vytvorenie novej premennej
single %>%
mutate(Vydavky_2020 = `2020`) %>%
select(Krajina, Vydavky_2020)# A tibble: 34 × 2
Krajina Vydavky_2020
<chr> <dbl>
1 European Union - 27 countries (from 2020) 17453
2 European Union - 27 countries (2007-2013) NA
3 European Union - 25 countries (2004-2006) NA
4 European Union - 15 countries (1995-2004) NA
5 Belgium 21942
6 Bulgaria 8730
7 Czechia 10415
8 Denmark 19335
9 Germany 20191
10 Estonia 11701
# ℹ 24 more rows
# Základná sumarizácia
single %>%
summarise(
Pocet_udajov = sum(!is.na(`2020`)),
Priemer = mean(`2020`, na.rm = TRUE),
Median = median(`2020`, na.rm = TRUE)
)# A tibble: 1 × 3
Pocet_udajov Priemer Median
<int> <dbl> <dbl>
1 29 16468. 16229
library(ggplot2)
# Údaje za rok 2020
graf_data <- single %>%
filter(!is.na(`2020`))
# Bodový graf
ggplot(graf_data, aes(x = Krajina, y = `2020`)) +
geom_point() +
coord_flip() +
theme_minimal() +
labs(
title = "Spotrebné výdavky jednočlenných domácností v roku 2020",
x = "Krajina",
y = "Výdavky (PPS na domácnosť)"
)# Boxplot výdavkov v roku 2020
ggplot(graf_data, aes(y = `2020`)) +
geom_boxplot() +
theme_minimal() +
labs(
title = "Rozdelenie výdavkov v roku 2020",
y = "Výdavky (PPS na domácnosť)"
)library(knitr)
statistiky <- single %>%
summarise(
Pocet = sum(!is.na(`2020`)),
Priemer = mean(`2020`, na.rm = TRUE),
SD = sd(`2020`, na.rm = TRUE),
Minimum = min(`2020`, na.rm = TRUE),
Median = median(`2020`, na.rm = TRUE),
Maximum = max(`2020`, na.rm = TRUE)
)
kable(
statistiky,
digits = 2,
caption = "Základné štatistiky výdavkov za rok 2020"
)| Pocet | Priemer | SD | Minimum | Median | Maximum |
|---|---|---|---|---|---|
| 29 | 16467.66 | 5936.11 | 8730 | 16229 | 35200 |
V rámci cvičenia som pracovala s údajmi Eurostatu z databázy Household Budget Survey, ktorá obsahuje informácie o spotrebných výdavkoch domácností.
Precvičila som si import údajov do R, prácu s dátovými rámcami, výber a úpravu premenných, filtrovanie a triedenie údajov pomocou knižnice dplyr. Následne som využila knižnicu ggplot2 na grafické zobrazenie údajov a základné štatistické funkcie na vytvorenie súhrnnej tabuľky.
Cieľom tohto cvičenia bolo osvojiť si základné postupy práce s databázou v prostredí R.