TenderNed data en Common Procurement Vocabulary

Aanbesteding

Voor Accountability Hack doen we een aanvulling op het datablog over aanbestedingsdata van TenderNed. Marcus Schaefers van de Algemene Rekenkamer heeft namelijk een script gemaakt waarmee de data van TenderNed samengevoegd wordt en gekoppeld kan worden aan de CPV codes: Common Procurement Vocabulary. Dit is het het classificatiesysteem voor werken, leveringen en diensten specifiek voor overheidsopdrachten. Uitleg over CPV-codes is hier te vinden.

De brondata van TenderNed is gepubliceerd door PIANOO van het ministerie van Economische Zaken. Gebruiksvoorwaarden en aanvullende informatie zijn hier te vinden op.

Uitleg Tenderned

Onderstaande datasets (7 xlsx-bestanden) bevatten de data van alle aankondigingen op TenderNed tot en met 31 december 2016. Per aanbesteding kunnen meerdere aankondigingen gepubliceerd zijn ((voor)aankondiging, rectificatie, gunning). Zie ook de leeswijzer op het tweede tabblad van elk bestand.”Dit bestand is een samenvoeging van die 7 datasets. Naast het samenvoegen zijn de volgende mutaties uitgevoerd:

  • corrigeren van afwijkende kolomnamen in een aantal bestanden
  • toevoegen van de CPV hoofdcategorieën (cpv_ov.csv). CPV codes: Common Procurement Vocabulary; het classificatiesysteem voor werken, leveringen en diensten specifiek voor overheidsopdrachten. De CPV codes in de bestanden zijn zeer gedetailleerd (meer dan 2400) . Door het toevoegen van de hoofdcategorieën kan de dataset geaggregeerd worden. Uitleg over CPV-codes: https://www.pianoo.nl/regelgeving/cpv-codes
  • splitsen van de kolom in valuta en bedrag
  • splitsen van de kolom in valuta en bedrag

Deze bewerkingen zijn uitgevoerd met R (en package Stringr). Wil je aanvullende informatie over het samenvoegen en muteren van het bestand? Neem dan tijdens de Accountability Hack contact op met Marcus Schaefers van de Algemene Rekenkamer.

 

#set work directory
dir.in <- "O://Open_data/Tenderned/input"
dir.out<- "O://Open_data/Tenderned/output"
dir.scr<- "O://Open_data/Tenderned/script"
dir.cpv<- "O://Open_data/Tenderned/CPV"

setwd(dir.in)

options( stringsAsFactors=F )

csv.list <- list.files(pattern="*.csv")

for(a in 1:length(csv.list)) {
  tmp <- read.csv2(csv.list[a],sep=";")
  if (a==1){
    tender <- tmp
  } else {
    shared.names <- intersect(names(tender), names(tmp))
    if (length(shared.names)!=length(colnames(tmp))) {
      colnames(tmp) <- colnames(tender)
    }
    tender <- rbind(tender,tmp)
  }
}

# read CPV codes categories
cpv_ov <- read.table("H:/open data/tenderned/CPV/cpv_ov.csv",sep=";", as.is=T)
colnames(cpv_ov) <- cpv_ov[1,]
cpv_ov <- cpv_ov[-1,]

#combine tenderned and cpv categories
tender$cpv.code <- str_sub(tender$Hoofd.cpv.definitie,1,8)
tender$cpv.tmp <- paste0(str_sub(tender$Hoofd.cpv.definitie,1,2),"000000")
tender$cpv.cat <- tender$cpv.tmp

tender <- merge(tender,cpv_ov,by.x="cpv.tmp",by.y="Code")

# split columns in valuta and value
tender$Definitieve.waarde.val <- str_sub(tender$Definitieve.waarde,1,3)
tender$Definitieve.waarde.bedrag <- as.numeric(str_sub(tender$Definitieve.waarde,5))
tender$Geraamde.waarde.val <- str_sub(tender$Geraamde.waarde,1,3)
tender$Geraamde.waarde.bedrag <- as.numeric(str_sub(tender$Geraamde.waarde,5))

# export to csv
fil.nam <- "tender_all.csv"
write.csv2(tender,paste0(dir.out,"/",fil.nam))

# characteristics
aantal <- nrow(tender)
pack.list <- (.packages())

Kenmerken script

  • doel script : Het script leest de bestanden in, past de kolomnamen aan en voegt ze samen tot 1 bestand
  • directory input : O://Open_data/Tenderned/input
  • directory CPV codes: O://Open_data/Tenderned/CPV
  • directory output: O://Open_data/Tenderned/output
  • directory script: O://Open_data/Tenderned/script

Het script gebruikt, naast Base, de volgende packages:

stringr

Kenmerken data

De volgende bestanden worden ingelezen:

Dataset_TenderNed_2010_2011.csv
Dataset_TenderNed_2012.csv
Dataset_TenderNed_2013.csv
Dataset_TenderNed_2014.csv
Dataset_TenderNed_2015.csv
Dataset_TenderNed_2016_Q1_Q2.csv
Dataset_TenderNed_2016_Q3_Q4_0.csv

Toevoegen CPV categorien

De tenderned bestanden bevatten gedetailleerde CPV codes. Tbv aggregatie worden de CPV hoofdcategorien toegevoegd. Deze staan in de kolom cpv.cat met daarop volgend kolommen met NL en EN omschrijving.

Resultaat

Deze bestanden zijn samengevoegd tot: [tender_all.csv]

Het samengevoegde bestand bevat 67975 records.