Archive for October, 2011

CBS webservices ‘uncovered’

Ik had het al een paar dagen op mijn ‘to-do’ lijstje staan om, op uitnodiging van Jerry Vermanen, een blogje te schrijven voor de RegioHack. Jerry kwam zelf met een aantal voorstellen waarover ik zou kunnen schrijven en ik was dan ook van plan om braaf een onderwerp uit het lijstje te kiezen en daarover te schrijven.

Toen ik een uur geleden het interview met Jelle Kamsma had bekeken, wist ik ineens wat ik beter zou kunnen doen. De quote die bij het interview staat luidt: ‘De echt interessante datasets, daar is moeilijk aan te komen’. Nu wil het geval dat ik een paar weken terug een presentatie gaf bij Nerds Unite in Utrecht en daar verkondigde dat het CBS geen webservices ondersteunt om de statistieken toegankelijk te maken. Een webservice is een manier om gegevens opvraagbaar te maken en beschikbaar te stellen in een formaat dat is gericht op het automatische verwerking. Webservices zijn gericht op de communicatie tussen computers. Dit in tegenstelling tot bijvoorbeeld een website die gericht is op de communicatie met een mens.

Het CBS stelt haar gegevens o.a. beschikbaar via StatLine. Dit is een website waarbij je handmatig kunt zoeken naar statistieken. Resultaten kun je downloaden in de vorm van een Excel-bestand. Dit maakt het lastig om  zelf-gefabriceerde applicaties actueel te houden. Je zult altijd in de gaten moeten houden wanneer nieuwe cijfers worden gepubliceerd en vervolgens een aantal handmatige acties moeten uitvoeren om recente data in je applicatie te voeren.

Tijdens de presentatie bij Nerds Unite bedacht ik me ineens dat het CBS vorig jaar een iPhone app heeft uitgebracht. En omdat deze app actuele statistieken toont, zou het dus mogelijk kunnen zijn dat er speciaal voor de app een webservice in het leven is geroepen. Hoe deze webservice eruit ziet en wat je ermee kan doen was ik ooit van plan om uit te zoeken. Door hier nu over te bloggen haal ik in een keer twee taken van mijn to-do lijst.

Mocht deze blog voor jouw een te hoog nerdy-gehalte hebben, dan kun je meteen de demo-visualisatie bekijken. Dan hoef je verder alleen nog te weten dat de data automatisch wordt verkregen en dat er geen handmatige handelingen nodig zijn om de data te verversen.

Deze blog schrijf ik terwijl ik het ‘project’ aan het uitvoeren ben. Ik wil dit nu als volgt aanpakken.

Stappenplan:
1. Uitzoeken of het CBS inderdaad een webservice heeft ontwikkeld voor de app.
2. Uitzoeken op welke manier je gegevens kan opvragen.
3. Uitzoeken in welk formaat gegevens worden teruggestuurd
4. Zoeken naar een geschikte demo-dataset
5. Een simpele datavisualisatie maken op basis van deze demo-dataset

Stap 1:
Door met Google te zoeken op ‘cbs iphone app’ kom je via het eerste zoekresultaat uit op een pagina waar staat:
‘Met CBS-StatLine, de iPhone-app van het CBS, zijn de ruim 8 miljard cijfers uit de CBS-databank StatLine altijd en overal te bekijken. ‘

Daarmee wordt het vermoeden bevestigd dat er een webservice bestaat. Je gaat namelijk niet 8 miljard cijfers in tekstbestandjes opslaan. Nu is het dus zaak om erachter te komen hoe de app de gegevens ophaalt. Zover ik weet is het niet mogelijk om via een menuutje in je iPhone een log op te vragen van al het internetverkeer dat via je telefoon heeft plaatsgevonden. Op de desktop kan dat wel. Je kunt namelijk gebruik maken van een zogenaamde debugging proxy. Dit is een programmaatje dat tussen je browser en het internet in zit. Het kan al het internetverkeer monitoren en dat is heel handig als je bezig bent met het testen van bijvoorbeeld een webapplicatie.

Nu heeft een slimmerik uitgezocht hoe je je iPhone via je Mac en de debugging proxy (in dit geval Charles) aan het internet kunt koppelen. Zie:

http://www.ravelrumba.com/blog/ipad-http-debugging/

Voor Windows gebruikers zal er ongetwijfeld een soortgelijke oplossing bestaan.

Ik heb inmiddels het recept dat via bovenstaande link wordt beschreven uitgevoerd. En, hoera, elke keer wanneer mijn iPhone contact heeft met het internet, zie ik op mijn laptop precies wat wordt opgevraagd en wordt teruggestuurd.

Bij het opstarten van de CBS app zie ik het volgende verschijnen op mijn laptop:

En zie hier, de daadwerkelijke bevestiging van het bestaan van een webservice! Leuk detail, het lijkt er op dat de app het wachtwoord ‘godin’ gebruikt.

Stap 2 & 3:
Nu begint het grasduinen in de data. Het liefste wil ik een overzicht zien van wat er aan data te verkrijgen is. Het meest logische is om op de iPhone “Thema’s” te kiezen en te kijken wat er gebeurt. Via de iPhone zie je dit. Overigens zie ik in werkelijkheid alles in het Engels. Ik weet niet waarom, maar ik kan de app niet in het Nederlands zetten. Onderstaand screenshot heb ik uit de App store gekopieerd:

En via de proxy zie ik het onderstaande.

Aan de linkerkant zie je hoe de thema’s worden opgevraagd. Simpelweg via een url. Kun je zelf ook intikken in een browser:

http://statlinemservices.cbs.nl/ThemaServices.asmx/GetTopLevelThemas?taalCode=EN&pwd=godin

En aan de rechterkant zie je hoe de gegevens worden teruggestuurd, namelijk in XML. Elk thema heeft een referentiecode (bijv. 5350 in het geval van Agriculture).

Daarmee zijn de vragen van zowel stap 2 als stap 3 beantwoord.

Stap 4

Nu wil ik een ‘leuke’ dataset kiezen en die gebruiken voor een visualisatie. Ik heb op het forum al iets voorbij zien komen over vergrijzing, dus misschien is het leuk om demografiegegevens te bekijken.

Na wat proberen kom ik uit op het thema ‘Population’ en daarbinnen de tabel ‘Population dynamics; region’  en daaronder weer de topics:
- ‘Population on 1 January’
- ‘Natural increase’  (dwz het verschil tussen aantal geboortes en aantal sterfgevallen)

Het blijkt dat je het aantal inwoners in Twente op de volgende manier kunt opvragen:

http://statlinemservices.cbs.nl/PublicatieServices.asmx/GetPublicatieMetSelectie?publicatieKey=37259ENG&selectionQuery=D1%3D22%26D2%3D0%26D3%3D28%26D4%3Da&lijstStart=0&lijstEind=99&taalCode=EN&pwd=godin

Dit is uiteraard een onleesbare rij karakters, maar uiteindelijk draait het om de parameter ‘selectionQuery’. Je kunt hiermee 3 relevante parameter opgeven:
D1:  gevraagde dataset (bijv. inwonersaantallen, migratiecijfers, sterfgevallen, geboortes etc.)
D2:  verfijning van de dataset, door te zoeken op mannen en/of vrouwen
D3:  regio (bijv. Twente=28, Veluwe=29)

Hiermee heb ik een demo-visualisatie gemaakt, die aantoont dat je de CBS webservices kunt gebruiken voor je eigen apps. En ik weet het, de grafieken voldoen vast niet aan alle eisen zoals beschrijving van de assen etc.

Wil je zelf ook gebruik maken van de CBS webservices, dan is het het beste om de iPhone app te bekijken en te zoeken naar interessante data. Zodra je dat hebt gevonden kun je bijvoorbeeld te werk gaan zoals ik heb gedaan.

1 Comment