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.

Kommundata

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.

Skapa tabeller

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.

A: Andel invånare med utländsk härkomst

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.

B: Medelinkomst

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

C: Våldsbrott

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.

D: Medellivslängd

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.

E: Andel elever ej behöriga till gymnasiet

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å samman och illustrera

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.

Illustrera på karta

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.

Tunnelbanerelationer

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.

Kamratgranskning

När du fått tillgång till en kamrats inlämning: