R skript för att sammanfoga betyg i Canvas

I vår lärplattform Canvas är närvaro, inlämningsuppgifter m.m. utspridda på olika platser och går inte att få samlat i en fil på ett bra sätt. Jag tröttnade till slut på att klippa ihop saker för hand, speciellt efter att ett fel smugit sig in och en student plötsligt hade fel personnummer i min excellista (jag upptäckte felet i tid som tur är). Dessutom har jag en idé om att vilja automatisera mycket mer av kursadministrationen och planeringen som trots allt är sig väldigt lik från år till år. Ett steg på vägen blev att utveckla några skript för hanteringen av csv-filer exporterade från Canvas och för att matcha ihop dem på student-id.

rkod.PNG

Projektet är uppladdat på GitHub .

R: Hämta annonsdata från Platsbanken

I helgen pysslade jag med att hämta ut annonsdata från Platsbankens API, med användning av R. En student ska analysera annonser, och jag funderade på om det inte fanns något enklare sätt att samla in annonserna än klipp & klistra. Det gjorde det.

En initialt klurig sak var att få fatt i alla träffar och inte bara de 20 första. Där fick jag cykla över alla sidor och skapa en lista över samtliga annons-ID i en kategori.

# Initiera en tom lista
totalAnnonsIDlista <- c()

# När detta körs, fylls listan på
for(page in pages) {
  pageURL <- paste0("http://api.arbetsformedlingen.se/platsannons/matchning?yrkesomradeid=", yrkesomradeid, "&sida=", page)
  # print(pageURL)
  annonsIDXML <- GET(pageURL, add_headers("Accept-Language" = "se-sv,sv"), accept_xml())
  annonsIDDOM = xmlRoot(xmlTreeParse(annonsIDXML))
  annonsIDlistasida <- getAnnonsIDlista(annonsIDDOM)
  totalAnnonsIDlista <- append(totalAnnonsIDlista, annonsIDlistasida)
}

Sen ville jag för varje annons plocka ut rubrik, vem som satt in annonser, yrkeskategori, och annonstext.

getAnnonser <- function(doc) {
  matrix <- data.frame(annonsid=NA, annonsrubrik=NA, yrkesbenamning=NA, arbetsplatsnamn=NA, annonstext=NA)
  for(i in doc) {
    print(i)
    URLannons <- paste0("http://api.arbetsformedlingen.se/platsannons/", i)
    print(URLannons)
    annonsXML <- GET(URLannons, add_headers("Accept-Language" = "se-sv,sv"), accept_xml())
    annonsDOM = xmlRoot(xmlTreeParse(annonsXML))
    row <- c(annonsDOM[[1]][1]$annonsid[1]$text$value, annonsDOM[[1]][2]$annonsrubrik[1]$text$value, annonsDOM[[1]][4]$yrkesbenamning[1]$text$value, annonsDOM[[4]][1]$arbetsplatsnamn[1]$text$value, annonsDOM[[1]][3]$annonstext[1]$text$value )
    matrix <- rbind(matrix, row)
  }
  return(matrix)
}

# Stoppa in lista med ID i denna funktion, t.ex. ovan totalAnnonsIDlista
annonser <- getAnnonser(totalAnnonsIDlista)

EGENTLIGEN skulle jag ha velat ha en funktion som kunde hitta, i den fria annonstexten, enbart sådant som beskriver kandidatens egenskaper, men det känns som det krävs nån slags avancerad språkmotor för något sånt. Det här hjälper dock till med att samla in data i ett första steg, som sen måste analyseras av en människa i vilket fall.

Hela koden med för-steg och skriv till fil etc finns på GitHub.