|
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 |