Sider med ekstra påfyll

onsdag 1. januar 2020

Reiser virkelig flere med kollektivtransport?

Klikk for å se større.
En ganske selvforklarende og enkel graf. Statistisk sentralbyrå (SSB) har noen lignende grafer, som også viser at antall passasjerer med kollektivtransporten øker. Problemet med de grafene er at de viser antall kollektivreisende i absolutte tall, og tar ikke høyde befolkningsveksten. Selv om det er flere som reiser med kollektivtransport, så kan det i så fall være en lavere andel som reiser med kollektivtransporten.

Grafen over her tar høyde for det, og den viser at andelen som reiser med kollkektivtrqansport øker. Nå er det imidlertid to ting jeg må bemerke.

For det første, så ble metoden for å registrere kollektivpassasjerer endret i 2017 blant mange av kollektivtransportsøknadene, ifølge SSB. Vi bør altså ikke legge for mye inn i tolkningen av 2017 og 2018 sammenlignet med tidligere år.

For det andre, så behøver det ikke nødvendigvis å være flere enkeltpersoner som har begynt å reise. En passasjer er i denne sammenheng én påstigning, altså bør det tolkes mer som enkeltreiser. Med andre ord er det antall reiser som har økt.

Min egentlige motivasjon for å lage denne grafen var å bli bedre kjent med å bearbeide utseendet til grafen, når jeg lager den med ggplot2-pakken i R. Ggplot2 og R er utrolig fint til å lage grafer med, og det er ganske enkelt å velge mellom en del forhåndsdefinerte utseender (vil du ha Economist-stil på grafen din? Bare å skrive inn et ord i syntaksen din).

Under er koden min. Det fine med denne koden er at den henter statistikken direkte fra SSBs API, ved hjelp av PxWebApiData-pakken, som visstnok brukes til å kommunisere med en god del offentlige statistikkbanker i Europa og det som måtte være.


library(tidyverse)
library(PxWebApiData)
library(ggthemes)
# Import dataset
# Take a look at the meta data and parameter options
meta <- ApiData("https://data.ssb.no/api/v0/no/table/11347/",
returnMetaFrames = TRUE)
#meta$TransportA
#meta$Ruteform
#meta$ContentsCode
#meta$Tid
# Import the dataset
stats_raw <- ApiData("https://data.ssb.no/api/v0/no/table/11347/",
TransportA = c("00", "10", "20", "32", "31"),
Ruteform = "00", # I alt, til forskjell fra kommersielle og fylkeskommunale ruter
ContentsCode = "Passasjer",
Tid = TRUE) # All time values
# Import population data to normalise with
meta_pop <- ApiData("https://data.ssb.no/api/v0/no/table/07459/",
returnMetaFrames = TRUE)
#meta_pop$Region
#meta_pop$Kjonn
#meta_pop$Alder
#meta_pop$ContentsCode
#meta_pop$Tid
pop_raw <- ApiData("https://data.ssb.no/api/v0/no/table/07459/",
Region = "0",
ContentsCode = "Personer1",
Alder = TRUE,
Tid = TRUE)
pop2 <- pop_raw$`07459: Befolkning, etter region, kjønn, alder, statistikkvariabel og år`
pop <- pop2 %>%
filter(år > 2004 & år < 2019) %>%
group_by(år) %>%
summarise(befolkning = sum(value)) %>% # To gender classes
select(år, befolkning)
# Make a dataframe from one of the two list elements we received
stats <- stats_raw$`11347: Kollektivtransport. Billettinntekter og passasjerer, etter transportmåte, ruteform, statistikkvariabel og kvartal`
# Split the time variable into years and quarters
stats <- stats %>%
separate(kvartal, c("år", "kvartal"), "K")
# Get annual statistics
stats_annual <- stats %>%
group_by(år, transportmåte) %>%
summarise(passasjerer = sum(value)) %>%
filter(år < 2019) %>% # Drops 2019 because we do not have data for the entire year
left_join(pop, by = "år") %>%
mutate(pass_per_pop = passasjerer / befolkning)
stats_annual$år <- as.numeric(stats_annual$år)
# Make dataset with only the specific public transport modes
stats_submodes <- stats_annual %>%
filter(transportmåte != "Alle transportformer")
# Make dataset with only the total public transport numbers
stats_total <- stats_annual %>%
filter(transportmåte == "Alle transportformer")
# Customise my own personal theme
meso_theme <- theme_update(
plot.background = element_rect(fill = "grey25", colour = NA),
plot.title = element_text(colour = "grey85", size = 32, face='bold'),
plot.subtitle = element_text(colour = "grey85"),
plot.caption = element_text(colour = "grey75"),
panel.background = element_rect(fill = "grey25", colour = NA),
panel.grid.minor = element_line(colour = "grey40",
size = 0.1),
panel.grid.major = element_line(colour = "grey45",
size = 1),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.text = element_text(colour = "grey75"),
axis.title = element_text(colour = "grey75"),
axis.title.x = element_blank()
)
#theme_set(meso_theme)
# Need to convert data type
stats_total$pass_per_pop <- as.numeric(stats_total$pass_per_pop)
stats_total$år <- as.numeric(stats_total$år)
# Make a graph!
g <- ggplot(stats_total, aes(x = år, y = pass_per_pop, group = transportmåte)) +
geom_line(colour = "orange", size = 1) +
geom_point(colour = "orange", size = 2) +
scale_x_continuous(breaks = c(2005,2010, 2015, 2018)) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), # Show the values as percentages
limits = c(0,.15)) + # Make 15% (0.15) the max value on y axis
ggtitle("Stadig flere reiser med \nkollktivtransport i Norge",
subtitle = "Det totale antallet passasjerer som brukte kollektiv-\ntransport sammenlignet med den totale befolkningen.") +
labs(
y = "Prosentandel kollektivpassasjerer av befolkningen",
caption = "Datakilde: SSB")
# Show the graph
g