TenderNed data en Common Procurement Vocabulary

[Datablog]
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.

Break-out sessie: Open en Actieve Regels

[Datablog]

De Belastingdienst geeft vrijdag ook een break-out sessie tijdens Accountability Hack. Hieronder lichten ze hun onderwerp toe. Pfoeh! En dan krijg je de gelegenheid een blog voor de Accountability hack 2017 te schrijven… Ik moest even achter mijn oren krabben. Maar eens een nachtje over slapen. De volgende dag een presentatie over de proeftuin ZVW   >

Een centraal register van overheden?

[Datablog]

Naar aanleiding van de vorige editie van Accountability Hack, in 2016, is er onderzoek gedaan naar de mogelijkheden van een register van overheden. Ter gelegenheid van de editie in 2016 is het actorenregister van het Nationaal Archief gelanceerd, maar er zijn meerdere manieren mogelijk om een al dan niet uitputtende lijst van overheden te creëren.   >

Ontwikkelingssamenwerking en de IATI-standaard

[Datablog]

Een veelbesproken onderwerp is toch altijd het geld dat door de staat wordt uitgegeven aan ontwikkelingssamenwerking. Het heeft er vooral mee te maken dat het lastig is om te volgen waar het terecht komt en met welk resultaat. De laatste jaren zijn initiatieven ontwikkeld om dit transparanter te maken. Zo is een International Aid Transparency   >

Tweede Kamer API

[Datablog]

In deze datablog voor Accountability Hack 2017 gaan we in op een bijzondere databron: de nieuwe API van de Tweede Kamer. Bijzonder, omdat het een nieuw ontwikkelde bron is, en voor Accountability Hack 2017 in het bijzonder, omdat het de locatie is waar de hackathon op 9 juni plaats zal vinden. De API biedt toegang   >