Filters OData v4

Icoon computer

Bij het gebruik van grote datasets kan het lang duren voor alle data is gedownload. Het is mogelijk om de data al te filteren voor het downloaden, zodat alleen de benodigde cellen worden opgevraagd. In deze handleiding wordt uitgelegd hoe de wijk- en buurtinfo voor één specifiek gebied kan worden opgevraagd.

De codevoorbeelden kunnen eenvoudig naar het klembord worden gekopieerd door op de knop in het codeblok te klikken. De voorbeelden op deze pagina zijn ook gebundeld te vinden op GitHub.

Keuzemenu programmeertaal:

Om te filteren op een locatiecode is het nodig om eerst de codelijst met wijk-en buurtcodes te downloaden:

tableUrl <- "https://datasets.cbs.nl/odata/v1/CBS/83765NED"
wijken_en_buurtencodes <- get_odata(paste0(tableUrl,"/WijkenEnBuurtenCodes"))

Vervolgens kan er met bijvoorbeeld str_detect gezocht worden naar de code van het gewenste gebied. Dit geeft bij de naam "Amsterdam" een gemeente, drie wijken en tien buurten:

wijken_en_buurtencodes <- wijken_en_buurtencodes %>%
    filter(str_detect(Title, "Amsterdam"))
   Identifier                                  Title
1  WK036214                          Amsterdamse Bos
2  BU03621401                  Amsterdamse Bos Noord
3  BU03621402                   Amsterdamse Bos Zuid
4  GM0363                                  Amsterdam
5  BU03639004                        Amsterdamse Bos
6  BU03639304                      Amsterdamse Poort
7  WK011406                  Wijk 06 Nieuw-Amsterdam
8  BU01140600                Nieuw-Amsterdam-Centrum
9  BU01140609      Verspreide huizen Nieuw-Amsterdam
10 BU01140701                      Amsterdamscheveld
11 WK039207                          Amsterdamsewijk
12 BU03920701                  Oude Amsterdamsebuurt
13 BU15810400        Maarn waaronder Klein Amsterdam
14 BU03520101 Gebied ten Z. van Amsterdam-Rijnkanaal

Door de link naar de dataset in get_odata(targetUrl) aan te passen kan het juiste gedeelte worden gedownload. Opdrachten aan de API beginnen met een vraagteken, waarna verschillende parameters kunnen worden ingevuld. Dit is de standaard voor HTTP GET-verzoeken. Om te filteren moet vervolgens de variabele $filter gelijkgesteld worden aan de filteropdracht, in dit geval WijkenEnBuurten eq 'GM0363'.

targetUrl <- paste0(tableUrl,"/Observations?$filter=WijkenEnBuurten eq \'GM0363\'")
data_amsterdam <- get_odata(targetUrl)

Merk op dat er enkele aanhalingstekens om codes moeten worden gezet.

Er wordt nu een tabel van slechts 89 rijen en 5 kolommen gedownload. Het is mogelijk om naar nog meer variabelen te filteren door de filteropdrachten te concateneren met and, zoals $filter=WijkenEnBuurten eq 'GM0363 ' and Measure eq 'T001036'.

Om te filteren op een locatiecode is het nodig om eerst de codelijst met wijk-en buurtcodes te downloaden:

table_url = "https://datasets.cbs.nl/odata/v1/CBS/83765NED"
wijken_en_buurtencodes = get_odata(table_url + "/WijkenEnBuurtenCodes")

Vervolgens kan er met bijvoorbeeld str.contains gezocht worden naar de code van het gewenste gebied. Dit geeft bij de naam "Amsterdam" een gemeente, drie wijken en tien buurten:

ams = wijken_en_buurtencodes[wijken_en_buurtencodes['Title'].str.contains("Amsterdam")]
print(ams[['Title','Identifier']])
                                        Title  Identifier
856                           Amsterdamse Bos  WK036214  
857                     Amsterdamse Bos Noord  BU03621401
858                      Amsterdamse Bos Zuid  BU03621402
859                                 Amsterdam  GM0363    
1375                          Amsterdamse Bos  BU03639004
1396                        Amsterdamse Poort  BU03639304
4820                  Wijk 06 Nieuw-Amsterdam  WK011406  
4821                  Nieuw-Amsterdam-Centrum  BU01140600
4824        Verspreide huizen Nieuw-Amsterdam  BU01140609
4827                        Amsterdamscheveld  BU01140701
6250                          Amsterdamsewijk  WK039207  
6251                    Oude Amsterdamsebuurt  BU03920701
14370         Maarn waaronder Klein Amsterdam  BU15810400
15756  Gebied ten Z. van Amsterdam-Rijnkanaal  BU03520101

Let op: regiocodes bevatten vaak spaties. Voor het koppelen van datasets moeten deze worden opgeschoond. Door de link naar de dataset in get_odata(targetUrl) aan te passen kan het juiste gedeelte worden gedownload. Opdrachten aan de API beginnen met een vraagteken, waarna verschillende parameters kunnen worden ingevuld. Dit is de standaard voor HTTP GET-verzoeken. Om te filteren moet vervolgens de variabele $filter gelijkgesteld worden aan de filteropdracht, in dit geval WijkenEnBuurten eq 'GM0363 '.

target_url = table_url + "/Observations?$filter=WijkenEnBuurten eq 'GM0363'"
data_amsterdam = get_odata(target_url)

Merk op dat er enkele aanhalingstekens om codes moeten worden gezet.

Er wordt nu een tabel van slechts 89 rijen en 5 kolommen gedownload. Het is mogelijk om naar nog meer variabelen te filteren door de filteropdrachten te concateneren met and, zoals $filter=WijkenEnBuurten eq 'GM0363' and Measure eq 'T001036'.