Laborationen består av två uppgifter med ett antal delfrågor och kamratgranskning. Lösningen skall presenteras i form av en källkodsfil laboration3.Rmd
skriven i R Markdown med output: github_document
tillsammans med en kompilerad version laboration3.md
och tillhörande bilder/figurer. Använd ett kodblock (“R chunk”) per delfråga och fyll på med så mycket beskrivande text mellan kodblocken så att det går att följa vad som görs. Att skriva lättläst kod är en konst, men en god början är att följa en konsekvent stil som i The tidyverse style guide. Ta dig lite tid att läsa igenom delar som verkar relevanta, att följa reglerna i 2.2 är en bra början.
Arbetet skall utföras individuellt och samarbete, speciellt kopiering/delning av kurskamraters kod, är inte tillåtet. Det är inte heller tillåtet att ställa direkta frågor relaterade till problemen på forum som t.ex. Stack Overflow. Samtidigt uppmuntras ni att söka efter inspiration till lösningar baserat på redan ställda frågor på dylika forum. Tänk dock på att alltid redovisa källan.
Underlaget till laborationen finns tillgängligt på https://github.com/MT3003-ST21 som lab3_xxx
där xxx
är ditt användarnamn på GitHub. Hämta detta som ett projekt i RStudio Cloud på samma sätt som tidigare laborationer.
I denna uppgift skall vi skapa en tabell med data över kommunerna i valfritt län genom att kombinera olika material med så kallade kopplingar/joins. Nycklar för att koppla tabellerna är i samtliga fall kommun och årtal. Som utgångspunkt finns en färdig tabell över kommuner med befolkning hämtad från SCB
kommun_data <- read_csv("data/kommun_pop_2021-07-09.csv")
head(kommun_data)
## # A tibble: 6 x 4
## code name year population
## <chr> <chr> <dbl> <dbl>
## 1 0114 Upplands Väsby 1968 16230
## 2 0114 Upplands Väsby 1969 17835
## 3 0114 Upplands Väsby 1970 19032
## 4 0114 Upplands Väsby 1971 20621
## 5 0114 Upplands Väsby 1972 22948
## 6 0114 Upplands Väsby 1973 25523
Kolumnen code
är kommunkoden där de första två siffrorna motsvarar länets kod.
För att utöka tabellen kommun_data
med nya variabler börjar vi med att skapa separata tabeller för varje variabel. Nedan följer instruktioner för fem tabeller A-E. För godkänt resultat på uppgiften skall ni skapa minst tre av dessa tabeller samt lösa efterföljande hopslagning och illustration, varje tabell utöver detta ger en bonuspoäng om korrekt utförd.
Tips: Ta gärna hjälp av RStudios Import Dataset under File-menyn när ni läser in filerna. Då får ni ett visuellt gränssnitt och kan sedan kopiera koden som genereras under Code preview nere till höger.
Notera att det kan förekomma koder i de numeriska kolumnerna (~100
, ..
, .
, …) beroende på saknade värden eller att underlaget är så litet att värdet döljs av sekretessskäl. Dessa kan ges värde NA
utan vidare diskussion.
Denna tabell skall innehålla andelen invånare med utländsk härkomst baserat på data i data/utl_harkomst_2021-07-09.csv
(hämtad från SCB). Tabellen behöver vridas, förslagsvis i två steg där det första genererar tabellen
## # A tibble: 11,020 x 4
## region `utländsk/svensk bakgrund` year count
## <chr> <chr> <chr> <dbl>
## 1 0114 Upplands Väsby utländsk bakgrund 2002 10132
## 2 0114 Upplands Väsby utländsk bakgrund 2003 10327
## 3 0114 Upplands Väsby utländsk bakgrund 2004 10507
## 4 0114 Upplands Väsby utländsk bakgrund 2005 10708
## 5 0114 Upplands Väsby utländsk bakgrund 2006 10913
## 6 0114 Upplands Väsby utländsk bakgrund 2007 11167
## 7 0114 Upplands Väsby utländsk bakgrund 2008 11488
## 8 0114 Upplands Väsby utländsk bakgrund 2009 11839
## 9 0114 Upplands Väsby utländsk bakgrund 2010 12350
## 10 0114 Upplands Väsby utländsk bakgrund 2011 13115
## # ... with 11,010 more rows
och det andra
## # A tibble: 5,510 x 4
## region year `utländsk bakgrund` `svensk bakgrund`
## <chr> <chr> <dbl> <dbl>
## 1 0114 Upplands Väsby 2002 10132 27312
## 2 0114 Upplands Väsby 2003 10327 27070
## 3 0114 Upplands Väsby 2004 10507 27010
## 4 0114 Upplands Väsby 2005 10708 26916
## 5 0114 Upplands Väsby 2006 10913 26935
## 6 0114 Upplands Väsby 2007 11167 26888
## 7 0114 Upplands Väsby 2008 11488 26760
## 8 0114 Upplands Väsby 2009 11839 26802
## 9 0114 Upplands Väsby 2010 12350 26939
## 10 0114 Upplands Väsby 2011 13115 27079
## # ... with 5,500 more rows
varefter den eftersökta andelen kan bestämmas. Det går bra att kombinera alla stegen i en pipe. Använd slutligen separate
för att dela upp region
i code
och name
som ovan (se på ?separate
hur du kan använda argumentet extra
). Slutresultatet skall innehålla kolumner code
, name
, year
och foreign_perc
.
Denna tabell skall innehålla inkomster i form av medelmånadslön (utan uppdelning efter kön) i tusental kronor. I data/inkomst_2021-07-09.csv
finns total årsinkomst och antal personer (ålder 16+) uppdelat på kvinnor och män. Sammanställ data till motsvarande nedanstående tabellformat.
## # A tibble: 8,410 x 4
## code name year income
## <chr> <chr> <dbl> <dbl>
## 1 0114 Upplands Väsby 1991 12.3
## 2 0114 Upplands Väsby 1992 12.4
## 3 0114 Upplands Väsby 1993 12.7
## 4 0114 Upplands Väsby 1994 13.1
## 5 0114 Upplands Väsby 1995 13.5
## 6 0114 Upplands Väsby 1996 14.1
## 7 0114 Upplands Väsby 1997 14.6
## 8 0114 Upplands Väsby 1998 15.3
## 9 0114 Upplands Väsby 1999 16.0
## 10 0114 Upplands Väsby 2000 16.9
## # ... with 8,400 more rows
Denna tabell skall innehålla antalet anmälda våldsbrott per 100000 invånare. Data är hämtade från Kolada och sparade i en Excel-fil data/Kolada_vldsbrott_2021-07-09.xlsx
(läs med readxl::read_excel
). Tabellens utseende skall motsvara
## # A tibble: 870 x 3
## name year viol_crime
## <chr> <dbl> <dbl>
## 1 Ale 2018 686.
## 2 Ale 2019 615.
## 3 Ale 2020 643.
## 4 Alingsås 2018 769.
## 5 Alingsås 2019 666.
## 6 Alingsås 2020 596.
## 7 Alvesta 2018 690.
## 8 Alvesta 2019 805.
## 9 Alvesta 2020 860.
## 10 Aneby 2018 644.
## # ... with 860 more rows
Notera att kommunkod saknas i denna tabell.
Denna tabell skall innehålla medellivslängder. Även dessa data är hämtade från Kolada och sparade i en Excel-fil (med lite annorlunda formatering än ovan) data/Kolada_livslngd_2021-07-09.xlsx
. Filen innehåller livslängd för kvinnor och män separat, bilda medelvärdet av dessa för varje kommun och år. Även här saknas kommunkod.
Nästa tabell skall innehålla andelen elever som slutar årskurs 9 utan behörighet till gymnasiet. Det är totalen vi är ute efter, det vill säga utan uppdelning efter skolform eller kön (Typ av huvudman
och Kön
antar värde Samtliga
). Data är hämtade från Skolverket som fyra filer data/exp_behorig_gy_kommun_2016_17.csv
till data/exp_behorig_gy_kommun_2019_20.csv
uppdelade efter läsår. Du kan koppla kalenderår till vårterminen, det vill säga läsåret 2019-20 får kalenderår 2020. Läs in som fyra tabeller och slå samman med bind_rows
med resultatet
## # A tibble: 1,159 x 4
## code name year not_qualified_perc
## <chr> <chr> <dbl> <dbl>
## 1 1440 Ale 2017 19.3
## 2 1489 Alingsås 2017 13.5
## 3 0764 Alvesta 2017 29.6
## 4 0604 Aneby 2017 26.7
## 5 1984 Arboga 2017 13.9
## 6 2506 Arjeplog 2017 NA
## 7 2505 Arvidsjaur 2017 26.2
## 8 1784 Arvika 2017 18
## 9 1882 Askersund 2017 13.1
## 10 2084 Avesta 2017 30.5
## # ... with 1,149 more rows
Slå ihop dina tabeller med kommun_data
genom att använda lämpliga *_join
. Som nyckel använder du kommunkod och år. För tabeller från Kolada som saknar kommunkod får du istället använda namn, kontrollera då med t.ex. anti_join(kommun_data, crime_data, by = "name")
för att försäkra dig om att namnen i crime_data
matchar de i kommun_data
(speciellt dubbelnamn som Upplands Väsby
och Upplands-Bro
kan skilja sig i stavning mellan källor). Välj ett län och illustrera hur variablerna varierar mellan länets kommuner med ett punktdiagram i “gapminder stil” för ett givet år.
En karta över Sveriges kommuner kan läsas in med
library(sf)
swe_map <- st_read("data/KommunSweref99TM/Kommun_Sweref99TM_region.shp",
quiet = TRUE)
head(swe_map)
## Simple feature collection with 6 features and 2 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 640139.6 ymin: 6565746 xmax: 724460.3 ymax: 6620834
## Projected CRS: SWEREF99 TM
## KnKod KnNamn geometry
## 1 0114 Upplands Väsby MULTIPOLYGON (((665740.7 65...
## 2 0115 Vallentuna MULTIPOLYGON (((682869.5 66...
## 3 0117 Österåker MULTIPOLYGON (((702182.4 66...
## 4 0120 Värmdö MULTIPOLYGON (((697991.6 65...
## 5 0123 Järfälla MULTIPOLYGON (((658883.7 65...
## 6 0125 Ekerö MULTIPOLYGON (((658561.5 65...
Som synes består den av kommunkod, kommunnamn och en kolumn geometry
som innehåller polygoner beskrivande kommunens gränser.
En av kommunerna har olika namn i swe_map
och kommun_data
. Använd anti_join
för att hitta den.
Välj ett län och plotta valfri variabel som en koroplet med geom_sf
(se övningarna eller mer utförligt), lägg till kommunnamnen med geom_sf_text
.
I första uppgiften utnyttjade vi relationer mellan tabeller från olika källor för att sammanställa en ny tabell. I en relationsdatabas används tabeller och nycklar för att effektivt lagra en datamängd. Filerna data/Line.csv
, data/LinePlatform.csv
och data/Platform.csv
utgör tillsammans en relationsdatabas över Stockholms tunnelbanesystem.
Line <- read_csv("data/Line.csv")
LinePlatform <- read_csv("data/LinePlatform.csv")
Platform <- read_csv("data/Platform.csv")
head(Line)
## # A tibble: 6 x 2
## LineNumber LineName
## <dbl> <chr>
## 1 10 tunnelbanans blå linje
## 2 11 tunnelbanans blå linje
## 3 13 tunnelbanans röda linje
## 4 14 tunnelbanans röda linje
## 5 17 tunnelbanans gröna linje
## 6 18 tunnelbanans gröna linje
head(LinePlatform)
## # A tibble: 6 x 3
## LineNumber PlatformNumber Direction
## <dbl> <dbl> <dbl>
## 1 10 3031 1
## 2 10 3051 1
## 3 10 3131 1
## 4 10 3151 1
## 5 10 3161 1
## 6 10 3201 1
head(Platform)
## # A tibble: 6 x 4
## PlatformNumber StationName Longitude Latitude
## <dbl> <chr> <dbl> <dbl>
## 1 1011 Slussen 18.1 59.3
## 2 1012 Slussen 18.1 59.3
## 3 1021 Gamla stan 18.1 59.3
## 4 1022 Gamla stan 18.1 59.3
## 5 1051 T-Centralen 18.1 59.3
## 6 1052 T-Centralen 18.1 59.3
Som vi ser innehåller tabellen Line
linjerna och deras nummer, tabellen LinePlatform
vilka plattformar varje linje passerar och Platform
information om plattformarna. Att dela upp informationen på detta sätt minskar lagringsutrymmet och gör det enklare att underhålla databasen då samma information inte sparas på så många ställen. OBS: Filerna är hämtade från Trafiklabs API och innehåller en del konstigheter/felaktigheter som skall ignoreras. Till exempel anges att Universitetet trafikeras av linje 13 och 14, välj 14 om du vill komma fram.
Kombinera de tre tabellerna till en gemensam tabell som innehåller all information. Den skall ha 407 rader och kolumner LineNumber
, PlatformNumber
, Direction
, LineName
, StationName
, Longitude
, Latitude
.
Vilka stationer (StationName
) trafikeras av fler än en linje (LineName
)?
När du fått tillgång till en kamrats inlämning:
laboration3.Rmd
och kontrollera att den kompilerar (Knit) utan problem.