Tilastokeskuksen energiatilastoista löytyy aikasarja polttonesteiden kuluttajahinnoista ulottuen aina vuoteen 1988 asti, mutta se ei sisällä havaintoja viime kuukausilta. Sen sijaan kuluttajahintaindeksin tilastotauluista löytyy tieto hinnoista myös viime kuukausilta. Seuraavassa yhdistämme nämä tilastot, jotta saamme pidemmän aikasarjan.
bensa_energiatilasto <-
data("StatFin/ene/ehi/statfin_ehi_pxt_12ge.px", tidy_time = TRUE) |>
filter(Polttoneste == "Moottoribensiini 95 E 10, snt/l",
Tiedot == "Hinta") |>
mutate(value = value/100)
## Energiatilasto on tarkempi
max_time <- max(bensa_energiatilasto$time)
bensa_khi <-
data("StatFin/hin/khi/kk/statfin_khi_pxt_11xx.px", tidy_time = TRUE) |>
filter(Hyödyke == "Bensiini 95 E 10, 1 l",
time > max_time)
bensa <-
bind_rows(
select(bensa_energiatilasto, time, value),
select(bensa_khi, time, value)
) |>
mutate(Tiedot = "Bensiini 95 E 10" ) |>
relocate(Tiedot, time, value)
vuosikeskiarvo <-
bensa |>
group_by(Vuosi = year(time)) |>
summarize(Keskihinta = mean(value)) |>
mutate(Vuosimuutos = 100*(Keskihinta/lag(Keskihinta, order_by = Vuosi) - 1))
Seuraavaksi bensiinin hinta suhteutetaan ansiotasoon käyttäen ansiotasoindeksiä. Ansiotasoindeksin julkaisuviive on hieman pidempi kuin hintatiedoilla, joten viimeisimpien havaintojen deflatoimiseksi ansiotasoindeksiä jatketaan ETS-malliin perustuvalla ennusteella. Ansiotasoindeksiä tuotetaan neljännesvuositasolla, joten muunnetaan kuukausisarjaksi Denton-Cholette-menetelmällä.
ati <-
data_get("StatFin/pal/ati/nj/statfin_ati_pxt_11zt.px", tidy_time = TRUE) |>
mutate(time = yearquarter(time)) |>
as_tsibble(Tiedot, time)
fcst <-
ati |>
model(ets = ETS(value ~ trend(method = "M"))) |>
forecast(h = 1)
ati_ext <-
bind_rows(
ati,
fcst |>
as_tibble() |>
select(Tiedot, time, value = .mean)
) |>
as.ts()
ati_2021 <-
td(ati_ext ~ 1, conversion = "mean", to = 12, method = "denton-cholette") |>
predict() |>
as_tsibble() |>
rename(time = index) |>
mutate(Tiedot = "ATI", value = value/mean(value[year(time) == 2021]))
reaali <-
bind_rows(bensa, as_tibble(ati_2021)) |>
pivot_wider(names_from = Tiedot) |>
drop_na(`Bensiini 95 E 10`) |>
mutate(Reaalihinta = `Bensiini 95 E 10`/ATI) |>
select(time, `Bensiini 95 E 10`, Reaalihinta)
ka <- mean(reaali$Reaalihinta)
## Saving 6,3 x 3,6 in image
Ansiotasoindeksi ei huomioi muuoksia tuloveroissa, tulonsiirroissa, muissa tuloissa tai säännöllisen työajan pituudessa. Nämä voidaan huomioida tarkastelemalla kotitalouksien käytettäviä tuloja tehtyä työtuntia kohden.
Käytettävissä oleva tulo tehtyä työtuntia kohden oli 8,55 euroa vuonna 1988 ja 30,79 euroa vuonna 2022.
litraa_per_tunti <-
tuntitulot_ext |>
select(Vuosi, `Tulo työtuntia kohden`) |>
as_tsibble(index = as.integer(Vuosi)) |>
as.ts() |>
(\(.) {
td(. ~ 1,
conversion = "mean", to = 12, method = "denton-cholette")
})() |>
predict() |>
as_tsibble() |>
left_join(
bensa |>
transmute(index = yearmonth(time),
`Bensiini 95 E 10` = value) |>
as_tsibble(index = index),
by = "index"
) |>
mutate(`litraa per tunti` = value/`Bensiini 95 E 10`) |>
select(index, `litraa per tunti`) |>
drop_na()
polttoaineiden_meno_osuus <-
data("StatFin/kan/vtp/statfin_vtp_pxt_127s.px", tidy_time = TRUE) |>
filter(Taloustoimi == "P31DCK Yksityiset kulutusmenot Suomessa, menona",
Kestävyysluokka == "Yhteensä",
Kulutusluokka %in% c("Yhteensä", "07.2.2 Yksityisajoneuvojen polttoaineet ja voiteluöljyt"),
Tiedot == "Käypiin hintoihin, miljoonaa euroa") |>
select(Kulutusluokka, time, value) |>
pivot_wider(names_from = Kulutusluokka) |>
mutate(`Meno-osuus` = 100*`07.2.2 Yksityisajoneuvojen polttoaineet ja voiteluöljyt`/Yhteensä)
polttoaineiden_meno_osuus |>
ggplot(aes(time, `Meno-osuus`)) +
geom_line() +
scale_y_continuous(limit = c(0, NA)) +
labs(title = "Polttoaineiden osuus kotitalouksien kulutusmenoista",
subtitle = "%",
caption = "Lähde: Tilastokeskus.", x=NULL,y=NULL)
ggsave("bensa_meno_osuus.png", height = 4, scale = 0.9)
## Saving 6,3 x 3,6 in image
DT::datatable(polttoaineiden_meno_osuus) |>
DT::formatRound("Meno-osuus")
data("StatFin/kan/vtp/statfin_vtp_pxt_127s.px", tidy_time = TRUE) |>
filter(Taloustoimi == "P31DCK Yksityiset kulutusmenot Suomessa, menona",
Kestävyysluokka == "Yhteensä",
Kulutusluokka == "07.2.2 Yksityisajoneuvojen polttoaineet ja voiteluöljyt",
Tiedot == "Volyymisarja, viitevuosi 2020") |>
ggplot(aes(time, value)) +
geom_line() +
labs(title = "Yksityisajoneuvojen polttoaineet ja voiteluöljyt",
subtitle = "Volyymi viitevuoden 2020 hintoihin",
caption = "Lähde: Tilastokeskus.", x=NULL,y=NULL)
päästöt_ensi_wltp <-
data("traficom/Ensirekisteroinnit/080_ensirek_tau_108.px§MA1§Bensiini$§CO2", tidy_time=T) |>
select(Tieto, time, value)
päästöt_ensi_nedc <-
data("StatFin/lii/merek/statfin_merek_pxt_11cy.px§Bensiini§CO2", tidy_time = TRUE)
päästöt_ensi_nedc |>
filter(time %in% range(time))
## # Robonomist id: StatFin/lii/merek/statfin_merek_pxt_11cy.px
## # A tibble: 2 × 4
## # Title: 11cy -- Ensirekisteröityjen henkilöautojen keskimääräiset
## # CO2-päästöt, 2006-2020
## # Last updated: 2021-02-26 08:00:00
## Käyttövoima Tiedot time value
## <chr> <chr> <date> <dbl>
## 1 Bensiini CO2-päästöarvo g/km 2006-01-01 180
## 2 Bensiini CO2-päästöarvo g/km 2020-01-01 114.
100*(113.6/180-1)
## [1] -36,88889
päästöt_ensi_nedc_disagg <-
päästöt_ensi_nedc |>
mutate(time = yearmonth(time)) |>
as_tsibble(index = time) |>
as.ts() |>
(\(.) {
td(.[,"value"] ~ 1, conversion = "mean", to = 12, method = "denton-cholette")
})() |>
predict() |>
as_tsibble() |>
as_tibble() |>
transmute(Tieto = "CO2-päästöarvo g/km (NEDC)", time = as.Date(index), value) ## |>
## filter(time < "2014-01-01")
# Päättyykin jo vuoteen 2018
## päästöt_ensi_kk <-
## data("traficom/Ensirekisteroinnit/100_ensirek_tau_110.px§MA1§Bensiini$§§CO2") |>
## mutate(time = parse_date(Kuukausi, "%YM%m")) |>
## select(Tieto, time, value)
bensankulutus <-
bind_rows(päästöt_ensi_nedc_disagg, päästöt_ensi_wltp) |>
mutate(
`Bensankulutus, l/100 km` = value / 2.335 / 10
)
bensankulutus |>
ggplot(aes(time, `Bensankulutus, l/100 km`, color = Tieto)) +
geom_line() +
scale_x_date(breaks = "2 years", date_labels = "%Y") +
theme(legend.position = "bottom") +
labs(title = "Ensirekisteröityjen bensiiniautojen keskimääräinen kulutus",
subtitle = "Litraa per 100 kilometriä",
caption = "Lähteet: Tilastokeskus (NEDC, disaggregoitu) ja Trafi (WLTP).",
x=NULL,y=NULL)
bensankulutus |>
rename(`CO2-päästöarvo g/km` = value) |>
DT::datatable() |>
DT::formatRound(3:4)
## Lähde: https://liikennefakta.fi/fi/ymparisto/henkiloautot/hiilidioksidipaastot
päästöt_liikennekäytössä <-
read_csv2("vuodesta-2020-keskimrist.csv", col_type = cols(
Category = col_double(),
`Liikennekäytössä olevien henkilöautojen hiilidioksidipäästöt` = col_double()
)) |>
mutate(
Vuosi = make_date(Category),
value = `Liikennekäytössä olevien henkilöautojen hiilidioksidipäästöt`
)
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
päästöt_liikennekäytössä |>
ggplot(aes(Vuosi, value)) +
geom_line() +
labs(title = "Liikennekäytössä olevien henkilöautojen hiilidioksidipäästöt",
subtitle = "CO2-päästöarvo g/km (NEDC)",
caption = "Lähde: Liikennefakta.",
x=NULL,y=NULL)
reaalikustannus <-
data("StatFin/lii/merek/statfin_merek_pxt_11cy.px§Bensiini§§CO2") |>
mutate(
Vuosi = as.integer(Vuosi),
`Bensankulutus, l/100 km` = value / 2.335 / 10
) |>
left_join(select(vuosikeskiarvo, Vuosi, Keskihinta), by = "Vuosi") |>
left_join(tuntitulot, by = "Vuosi") |>
mutate(
Vuosi = make_date(Vuosi),
`Ajamisen kustannus, €/100 km` = `Bensankulutus, l/100 km` * Keskihinta,
`Ajamisen kustannus, tuntia/100 km` = `Ajamisen kustannus, €/100 km` / `Tulo työtuntia kohden`
)
reaalikustannus |>
ggplot(aes(Vuosi, `Ajamisen kustannus, tuntia/100 km`)) +
scale_y_continuous(limits = c(0,NA)) +
scale_x_date(breaks = "2 years", date_labels = "%Y") +
geom_line() +
labs(title = "Ajamisen reaalinen kustannus",
subtitle = "Tehtyä työtuntia per 100 km",
caption = "Lähteet: Tilastokeskus, Trafi ja omat laskelmat.",
x=NULL,y=NULL)
ggsave("bensa_reaalinen_tunneissa.png", height = 4, scale = 0.9)
## Saving 6,3 x 3,6 in image
reaalikustannus |>
select(Vuosi, starts_with("Ajamisen kustannus")) |>
DT::datatable() |>
DT::formatRound(2:3)
reaalikustannus |>
ggplot(aes(Vuosi, `Ajamisen kustannus, €/100 km`)) +
scale_y_continuous(limits = c(0,NA)) +
scale_x_date(breaks = "2 years", date_labels = "%Y") +
geom_line() +
labs(title = "Ajamisen reaalinen kustannus",
subtitle = "Euroa per 100 km", x=NULL,y=NULL)
100 kilometrin matkaan tarvittava työmäärä oli vuonna 2020 noin 17 minuuttia, kun vuonna 2006 oli noin 30 minuuttia. Toisin sanoen autolla ajamisen reaalikustannus puolittui 15 vuodessa.
do.call(htmltools::tagList, p)