I ett tidigare inlägg tittade jag på hur man kan hämta data direkt från SCB till R med hjälp av paketet pxweb
.
SCB har massa intressant data men mycket är på en nationell nivå. En annan datakälla, som är helt inriktad på kommunal och regional statistik, är Kolada, som är Sveriges kommuner och regioners (SKR) webbtjänst för regional statistik.
Likt SCB har Kolada ett gränssnitt på webben, och precis som SCB har de också ett öppet API. Love Hansson, som är analytiker på Pensionsmyndigheten, har byggt ett paket för att anropa Kolada från R. Det här innebär att om du jobbar mycket med kommunal eller regional statistik kan du med hjälp av R-skript automatisera all inhämtning och rapportering av regional statistik från Kolada.
rKolada
Paketet installeras enkelt med install.packages("rKolada")
.
För att få en övergripande bild över Koladas datamodell och paketet rKolada
kan jag varmt rekommendera Love Hanssons vignette som finns här.
Hur Kolada fungerar
På Koladas hemsida kan du enkelt söka efter olika KPI-er. Där kan du också få en enkel tabell och visualisering av resultatet. rKolada
ger oss möjlighet att programmatiskt ta ut dessa tabeller, vilket underlättar om vi behöver ta ut statistik fler gånger än en.
Med funktionen get_kpi()
får vi en tabell med alla KPI-er som finns tillgängliga.
library(rKolada)
library(tidyverse)
kpis <- get_kpi()
kpis
## # A tibble: 4,887 x 13
## auspices description has_ou_data id is_divided_by_g… municipality_ty…
## <chr> <chr> <lgl> <chr> <int> <chr>
## 1 E Personalko… FALSE N000… 0 K
## 2 E Personalko… FALSE N000… 0 K
## 3 X Kommunalek… FALSE N000… 0 K
## 4 <NA> Externa in… FALSE N000… 0 K
## 5 <NA> Inkomstutj… FALSE N000… 0 K
## 6 <NA> Kostnadsut… FALSE N000… 0 K
## 7 X Reglerings… FALSE N000… 0 K
## 8 <NA> Utjämnings… FALSE N000… 0 K
## 9 X Införandeb… FALSE N000… 0 K
## 10 X Strukturbi… FALSE N000… 0 K
## # … with 4,877 more rows, and 7 more variables: operating_area <chr>,
## # ou_publication_date <chr>, perspective <chr>, prel_publication_date <chr>,
## # publ_period <chr>, publication_date <chr>, title <chr>
Vi kan filtrera dessa med dplyr
och stringr
eller använda den inbyggda funktionen kpi_search()
:
kpi_bygglov <- kpi_search(kpis, c("bostäder som beviljats bygglov"), column = "description")
kpi_bygglov
## # A tibble: 1 x 13
## auspices description has_ou_data id is_divided_by_g… municipality_ty…
## <chr> <chr> <lgl> <chr> <int> <chr>
## 1 X Antal bost… FALSE N079… 0 K
## # … with 7 more variables: operating_area <chr>, ou_publication_date <chr>,
## # perspective <chr>, prel_publication_date <chr>, publ_period <chr>,
## # publication_date <chr>, title <chr>
För att få ner data för detta KPI behöver 1) ett ID och 2) specificera vilken eller vilka kommuner du vill ha data för.
ID får du enkelt ut genom kpi_extract_ids()
.
kpi_extract_ids(kpi_bygglov)
## [1] "N07925"
De kommuner, eller regionala indelningar som finns, kan vi på motsvarande sätt få genom get_municipality()
.
get_municipality()
## # A tibble: 312 x 3
## id title type
## <chr> <chr> <chr>
## 1 1440 Ale K
## 2 1489 Alingsås K
## 3 0764 Alvesta K
## 4 0604 Aneby K
## 5 1984 Arboga K
## 6 2506 Arjeplog K
## 7 2505 Arvidsjaur K
## 8 1784 Arvika K
## 9 1882 Askersund K
## 10 2084 Avesta K
## # … with 302 more rows
En bra sak med Kolada är att de för alla Sveriges kommuner har referenskommuner, kommuner som på olika sätt liknar kommunen du är intresserad av. På så sätt kan vi enkelt ta fram kommuner som är relevanta att jämföra med. I rKolada
gör vi det med get_municipality_groups()
och den tillhörande search-funktionen.
get_municipality_groups() %>%
municipality_grp_search("Finspång")
## # A tibble: 11 x 3
## id members title
## <chr> <list> <chr>
## 1 G123871 <df[,2] [7 × 2]> Liknande kommuner socioekonomi, Finspång, 2018
## 2 G146009 <df[,2] [7 × 2]> Liknande regioner socioekonomi, Finspång, 2018
## 3 G35908 <df[,2] [7 × 2]> Liknande kommuner grundskola, Finspång, 2018
## 4 G36200 <df[,2] [7 × 2]> Liknande kommuner gymnasieskola, Finspång, 2018
## 5 G36492 <df[,2] [7 × 2]> Liknande kommuner IFO, Finspång, 2018
## 6 G36784 <df[,2] [7 × 2]> Liknande kommuner äldreomsorg, Finspång, 2018
## 7 G37368 <df[,2] [7 × 2]> Liknande kommuner, övergripande, Finspång, 2018
## 8 G39541 <df[,2] [7 × 2]> Liknande kommuner LSS, Finspång, 2018
## 9 G85502 <df[,2] [7 × 2]> Liknande kommuner fritidshem, Finspång, 2018
## 10 G85794 <df[,2] [7 × 2]> Liknande kommuner förskola, Finspång, 2018
## 11 G87668 <df[,2] [7 × 2]> Liknande kommuner integration, Finspång, 2018
I slutändan har vi nu all metadata vi behöver och vill då få in den faktiska datan. För att få tag i den använder vi bara get_values()
, då får vi tillbaka en data.frame med all data som vi frågat efter.
kpi_id <- kpi_search(kpis, c("bostäder som beviljats bygglov"),
column = "description") %>%
kpi_extract_ids()
munic_grp <- get_municipality_groups() %>%
municipality_grp_search("Liknande kommuner socioekonomi, Finspång") %>%
municipality_grp_extract_ids()
finspang_id <- get_municipality() %>%
municipality_search("Finspång") %>%
municipality_extract_ids()
# Get values
grp_data <- get_values(
kpi = kpi_id,
municipality = c(
munic_grp,
finspang_id
)
)
grp_data
## # A tibble: 24 x 8
## kpi municipality_id year count gender value municipality municipality_ty…
## <chr> <chr> <int> <int> <chr> <dbl> <chr> <chr>
## 1 N07925 0562 2015 1 T 0.7 Finspång K
## 2 N07925 0687 2015 1 T 2.3 Tranås K
## 3 N07925 0884 2015 1 T 0.6 Vimmerby K
## 4 N07925 1082 2015 1 T 1.4 Karlshamn K
## 5 N07925 1272 2015 1 T 6 Bromölla K
## 6 N07925 1472 2015 1 T 1.4 Tibro K
## 7 N07925 1981 2015 1 T 3.8 Sala K
## 8 N07925 1984 2015 1 T 0.9 Arboga K
## 9 N07925 0562 2017 1 T 4.54 Finspång K
## 10 N07925 0687 2017 1 T 8.57 Tranås K
## # … with 14 more rows
Vi har nu data som antingen kan visualiseras, inkluderas i en Rmarkdown-genererad PDF-rapport, skrivas till en Excel, PowerPoint, lagra i en databas med mera.
Här nöjer vi oss med en enkel visualisering:
ggplot(grp_data, aes(x = year, y = value, color = municipality)) +
geom_line() +
labs(
title = "Antal bostäder som beviljats bygglov under två senaste åren",
subtitle = "Antal/100 invånare",
caption = "Källa: SKR och SCB",
y = "Antal/1000 invånare",
x = "År",
color = "Kommun"
) +
theme_minimal() +
ggthemes::scale_color_colorblind()
Ett stort tack till Love Hansson som lagt tid på att designa ett paket som jag tror kan underlätta för många analytiker på myndigheter, universitet och ute bland Sveriges kommuner och landsting.
/ Filip