Ik wil data van een watersensornetwerk gebruiken (data broker vraagzijde)

Opvragen

Data opvragen technisch gezien kan best verlopen via:

  • API op database
  • subscription op een data broker

Momenteel zijn er verschillende bronnen waar water gerelateerde data kan opgevraagd worden.


Analyseren (machine learning, AI, data science, …)

Data pipeline concept

Bij het verwerken dan data in de brede zin (vanaf hier "data analyse" genoemd) is het belangrijk de data analyse als een pipeline te beschouwen. Data start als een ruw object, wordt code-matig bewerkt tot een meer verwerkt data object, en eindigt na verschillende stappen als een finaal product dat meerwaarde geeft tov het originele ruwe data object.

Codematig data behandelen

Het is belangrijk dat de data verwerking code matig gebeurd. Editeer geen excel files met de hand, programeer dit proces. Ruwe data mag niet overschreven worden, sla deze apart op, en laat een script een nieuwe versie van dit bestand maken na bewerking ervan.

Project structuur

Eens data analyse code matig gebeurd, is er nog altijd het risico dat de transparantie van de code verloren gaat na een tijd, beschouw volgende gedachtegangen tijdens een data analyse project:

Was het nu make_figures.py, make_figures_working.py or new_make_figures01.py om de figuren te plotten?

Moet ik read_process.py eerst lopen of is clean_data2.py het eerste script om te laten lopen?

Indien de code niet gestructureerd bijgehouden wordt, gaan na verloop van tijd zulke vragen de transparantie van de analyse ondermijnen.

Hoe kan dit opgelost worden? Er zijn verschillende project management structuren om je code in te gieten. Eentje hiervan is Cookie Cutter. [1] Het volgen van deze structuur kan de pijn al enigszins verlichten.

Configuratie files

Eens er een goede structuur is, kan het lopen van verschillende analyses best ook gestructureerd worden obv een configuratie file. Een configuratie file kan je zien als een bestand dat allerlei verschillende processen bijhoudt, en de bijhorende parameters oplijst die gebruikt werden om een bepaald process te laten lopen. Zo'n configuratie file zou er als volgt kunnen uitzien:


Deze configuratie file kan gebruik worden om obv één naam (in deze 2 voorbeelden "first_sim" en "second_sim") een volledige keten van analyses te definiëren en te laten lopen. Er zijn verschillende velden die de data bronnen specifieren. In deze 2 voorbeelden worden er 2 verschillende machine learning modellen gebruikt. Voorbeeld 1 gebruikt een suipport vector machine, voorbeeld 2 een neuraal netwerk. Er wordt ook genoteerd welk script gebruikt wordt voor het plotten van figuren.

Uiteraard kan dit zo ver uitgebreid worden als wenselijk, maar dit geeft een idee hoe een data pipeline degelijk gedocumenteerd kan worden.

Data oplevering = data + metadata

Indien er data gedeeld of opgeleverd wordt, is het aan te raden om niet enkel de data maar ook methodes en parameters mee te geven. In volgend draaiboek worden suggesties gedaan hoe dit best gebeurd: Hoe deel ik mijn data?

Online vs offline learning

Notebooks

Notebooks dienen in de eerste plaats voor data exploratie en communicatie. Vermijd het gebruik van notebooks als single point of truth's. Refereer in notebooks naar functies die in de source code van het project gedefinieerd zijn.

Environment + requirements file

Om data analyse reproduceerbaar te maken, wordt sterk aangeraden om de data analyse te laten beginnen vanuit een requirements file die specificeert welke packages (en versienummer) gebruikt werden. Voor elk project wordt best een unieke omgeving (environment) aangemaakt, zodat er geen conflicten ontstaan tussen verschillende projecten. Het is standaard om in python - data science projecten een requirements.txt file te voorzien in de root van de repository, die je via de command line kan opgeroepen via:

pip install -r requirements.txt indien pip gebruikt wordt

conda install --file requirements.txt indien conda gebruikt wordt

Meer info over conda hier. Meer info over pip hier.

Version control

Het is sterk aangeraden om de code die de data analyse stuurt te opslaan en bijhouden in een repository met version control. Dit laat toe om een gedocumenteerde geschiedenis van alle wijzigingen bij te houden, waarop later naar terug gegrepen kan worden.

Meer info over een populair version control system: git.

Visualiseren (dashboard, …)

Er zijn een groot aantal verschillende opties om water data te visualiseren en te communiceren. Het belangrijkste voor VLOCA is dat de data eerst beschikbaar is en correct, de visualisatie ervan kan makkelijk volgen.

Enkele guidelines voor het visualiseren van data, en de keuze van de geschikte visualisatie (in python): https://www.python-graph-gallery.com/matplotlib/

Enkele opties voor het opzetten van dashboards in Python en R (open source):

Dash is het meest gedownloadede Python framework om machine learning en data science apps/dashboards op het web te bouwen. Deployment kan o.a. via Heroku