Housekeeping
Gå til denne side i din browser: https://kubdatalab.github.io/DM-arrangement
Følg med ved at bruge piletasterne.
Stil endelig spørgsmål!
KUB Datalab
Hvem er vi?
Service på Københavns Universitetsbibliotek (som er en del af Det Kgl. Bibliotek).
Vi hjælper studerende - og deres undervisere og undertiden forskere - med at arbejde med data.
Kurser, åbne konsultationer, “indlejrede” kurser.
Bred portefølje: R, Python, Excel, Voyant, NVivo, SQL, OpenRefine, Orange, VOSViewer
Os tre, og en god håndfuld hangarounds blandt kollegerne
Find os på vores hjemmeside
Hvad er R?
R er et generelt, scriptet, programmeringssprog der er særligt udviklet til statistisk dataanalyse.
Det er relativt let at gå fra nybegynder til at få lavet en visualisering.
Let som i: En kategori 2 stigning i Tour de France er let sammenlignet med en kategori 1 stigning…
Hvad gør det let?
Det er open-source.
Så rare mennesker skriver funktioner der gør ting.
Og deler dem i såkaldte “pakker”
Det kommer vi til at bruge!
Jamen jeg har ikke R installeret på min computer!
No worries. De her slides kommer med R indbygget.
Klik på det lille “>_” ikon i nederste venstre hjørne.
Det er en ret primitiv udgave af R - så der er ting vi gerne ville gøre, som vi ikke kan gøre. Men vi kan lave fine ting alligevel.
Hvad vil vi vise?
Vi vil hente noget data fra Danmarks Statistik.
Og så vil vi gøre ting med det
Målet
BOPOMR HFUDD TID INDHOLD
1 hele landet H10 Grundskole 2024 938039
2 hele landet H20 Gymnasiale uddannelser 2024 463884
3 hele landet H30 Erhvervsfaglige uddannelser 2024 1120906
4 hele landet H40 Korte videregående uddannelser, KVU 2024 222851
5 hele landet H50 Mellemlange videregående uddannelser, MVU 2024 649128
6 hele landet H60 Bacheloruddannelser, BACH 2024 142432
Trin for trin
- Definer hvilke data vi skal have.
- Vi har snydt lidt og forberedt os.
- Befolkningens højst fuldførte uddannelse (15-69 år) efter bopælsområde, herkomst, højest fuldføte uddannelse, alder og køn.
- Blandt venner HFUDD11
- Datavejviser
- Hov! Man skal logge på!
- Dann haben wir anderen Methoden…
En smutvej
- Egentlig ville vi gerne vise et avanceret POST kald op mod Danmarks Statistiks API, med komplekse datastrukturer og avancerede udvælgelseskriterier.
- Men det kan vores hjemmeside ikke.
- Og det er måske også lidt avanceret for absolutte nybegyndere…
- De har en såkaldt “konsol”, som man kan bruge til at konstruere og teste den slags.
Den besøger vi!
Konsollen er her
Det her kalder API’et og giver os vores ønskede data:
data_url <- "https://api.statbank.dk/v1/data/HFUDD11/CSV?BOPOMR=*&HFUDD=H10%2CH20%2CH30%2CH40%2CH50%2CH60%2CH70%2CH80%2CH90&Tid=2024"
Hent data
Vi så hvordan vi kunne gemme oplysninger i “objekter” i R.
Vi kan også gemme mere komplekse data i R.
library(readr)
data <- read_csv2(data_url)
Manipuler data
Og så skal vi have taget stilling til hvad vi faktisk vil have på det kort!
Vi kunne godt tænke os at se hvor stor en andel af befolkningen i hver kommune, der har grundskolen som den højest gennemførte uddannelse.
Husk - vi har borgere ned til 15 år, så vi ser både tal der afspejler lavt uddannelsesniveau. Men også hvor ung befolkningen er. Det er ikke et udtryk for lavt uddannelsesniveau, at en 15-årig ikke har en lang videregående uddannelse endnu.
Inspicer data
head(data)
data |> summary()
Så vi har et antal borgere med forskelligt niveau af uddannelse. Men ikke en andel. Hvordan får vi det?
Grupper og opsummer data
Vi starter med at finde ud af hvor mange der bor i hvert bopælsområde:
library(tidyverse)
data <- data |>
group_by(BOPOMR) |>
mutate(totbefolk = sum(INDHOLD)) |>
ungroup()
Beregn andel
data <- data |>
mutate(andel = INDHOLD/totbefolk)
Udvælg det vi var interesserede i
Vi var særligt interesserede i hvor stor en andel af befolkningen, der har grundskolen som højste uddannelse.
data |>
filter(HFUDD == "H10 Grundskole")
Lidt om plotDK - choropleth
Vi vil gerne have lavet et kort. Og vi vil gerne farvelægge kommunerne på kortet.
Rare mennesker har lavet en pakke der kan hjælpe med det. Den er ret hjælpsom
plotDK
Hvordan bruger man det?
Indbygget hjælpefunktion
?plotDK
Som ser en del bedre ud i RStudio eller Positron.
Læg mærke til at plotDK antager at alle kommunenavne er med småt!
Andele på kort
data |>
filter(HFUDD == "H10 Grundskole") |>
plotDK(id = "BOPOMR", value = "andel")
Trælse farver…
Dem kan vi da ændre!
data |>
filter(HFUDD == "H10 Grundskole") |>
plotDK(id = "BOPOMR", value = "andel") +
scale_fill_gradient(low = "blue",
high = "red")
Hvordan gør jeg det derhjemme?
Gør dig selv en tjeneste - download og installer R (først) og (dernæst) Positron
Der er begrænsninger i denne side som bliver trælse på sigt.
Det samlede script - det vi lavede
data_url <- "https://api.statbank.dk/v1/data/HFUDD11/CSV?BOPOMR=*&HFUDD=H10%2CH20%2CH30%2CH40%2CH50%2CH60%2CH70%2CH80%2CH90&Tid=2024"
library(readr)
data <- read_csv2(data_url)
head(data)
data |> summary()
library(dplyr)
data <- data |>
group_by(BOPOMR) |>
mutate(totbefolk = sum(INDHOLD)) |>
ungroup()
data <- data |>
mutate(andel = INDHOLD/totbefolk)
data |>
filter(HFUDD == "H10 Grundskole")
library(plotDK)
data <- data |>mutate(BOPOMR = tolower(BOPOMR))
data |>
filter(HFUDD == "H10 Grundskole") |>
plotDK(id = "BOPOMR", value = "andel")
data |>
filter(HFUDD == "H10 Grundskole") |>
plotDK(id = "BOPOMR", value = "andel") +
scale_fill_gradient(low = "blue",
high = "red")
Det samlede script - det vi gerne ville have lavet
library(httr2)
library(tidyverse)
library(plotDK)
endpoint <- "http://api.statbank.dk/v1/data"
variables <- list(list(code = "BOPOMR", values = I("*")),
list(code = "HFUDD", values = c("H10", "H20", "H30", "H40", "H50", "H60", "H70", "H80", "H90")),
list(code = "Tid", values = I(2024))
)
our_body <- list(table = "HFUDD11", lang = "da", format = "CSV", variables = variables)
resp <- request(endpoint) |>
req_body_json(our_body) |>
req_perform()
csv_text <- resp_body_string(resp)
df <- read.csv2(text = csv_text)
df <- df |>mutate(BOPOMR = tolower(BOPOMR))
df |>
group_by(BOPOMR) |>
mutate(totbefolk = sum(INDHOLD)) |>
mutate(andel = INDHOLD/totbefolk) |>
filter(HFUDD == "H10 Grundskole") |>
plotDK(id = "BOPOMR", value = "andel", interactive = TRUE)
Lidt ekstra
Søjlediagrammer
data |>
filter(BOPOMR %in% c("københavn", "tårnby")) |>
ggplot(aes(x = BOPOMR, y = andel, fill = HFUDD)) +
geom_col(position = "dodge")