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.