LV2 software - documentatie van ALVA

LV2 heeft over de jaren heen zijn eigen software ontwikkeld en gebruikt (genaamd ALVA). Bij het ontwerp werd gezocht naar flexibiliteit - de gegevens van RIVM stations, KNMI stations en citizen science stations werden gezien als tijdreeksen, die naar gelang van behoefte konden worden gemanipuleerd, gecombineerd en geplot.
De userinterface is ouderwets - de input voor het programma is een carddeck waarbij elke regel een opdracht bevat. De opdrachten worden na elkaar uitgevoerd. Met de software kunnen nieuwe tijdreeksen worden berekend uit reeks bestaande tijdreeksen. Optellen, aftrekken, interpoleren, resampling, onderlinge afhankelijkheden, berekeningen van statistieken.
Voor de technici: alle data zijn opgeslagen in een dubbel geïndexeerde pandas dataframe (index 1; meetstation, index 2: soort tijdreeks). Een opdracht specificeert naast de soort taak de input tijdreeksen en de output tijdreeksen.
De laatste beschrijving van de software is hier bijgevoegd - wellicht een inspiratiebron voor andere CS groepen. LV2 is opgehouden te bestaan en de software wordt op het ogenblik niet meer gebruikt. De python code is nog wel beschikbaar.
ALVAbeschrijving25_221125c.pdf (5,1 MB)

1 like

Hierbij een voorbeeld hoe “ingewikkeld” een set instructies voor ALVA kan worden. Doel van dit carddeck was het berekenen van de relatie tussen het aantal overschrijdingen van een daglimiet per jaar en de gemiddelde vervuiling in een jaar.

#Het teken # wordt gebruikt als begin van commentaar
#Geef diagnostische output naar debugfiles
DEBUG 0 1 2 3 4 5 6 7 8 9
#bepaal de dataverzameling - zet tijdbereik iets ruimer dan nodig voor plots

Datadirectory 2020CumDatafile
Periode 1/1/2011 0 31/12/2022 23 Periode 2011-2022

#data display-tijdsbereik kleiner dan die op PERIODE kaart

Analyseperiode 1/1/2011 0 31/12/2022 23 Test

#KNMI gegevens in deze run niet nodig
#KNMI_gegevens

- dit carddeck is voor PM10 gegevens

VERVANG $Z% P10

#Lees de officiele RIVM meetnet data in met taak Meetnet
ALS $Z% == P25 Meetnet 2011 2022 PM25
ALS $Z% == P10 Meetnet 2011 2022 PM10
ALS $Z% == NO2 Meetnet 2011 2022 NO2
#maxima for plotting
ALS $Z% == P25 Vervang $YLIML% 40
ALS $Z% != P25 Vervang $YLIML% 80
ALS $Z% == P25 Vervang $YLIMS% 25
ALS $Z% != P25 Vervang $YLIMS% 60
#maxima for binning
ALS $Z% == P25 VERVANG $LL% 50
ALS $Z% != P25 VERVANG $LL% 80
ALS $Z% == P25 VERVANG $LS% 25
ALS $Z% != P25 VERVANG $LS% 40
#Wettelijke limieten
ALS $Z% == P25 VERVANG $Dlimiet% 25
ALS $Z% == P10 VERVANG $Dlimiet% 45
ALS $Z% == NO2 VERVANG $Dlimiet% 50
#Limietseries voor Bayes
ALS $Z% == P25 VERVANG $Dlimser% 12 15 18 21 24
ALS $Z% == P10 VERVANG $Dlimser% 12 15 18 21 24
ALS $Z% == NO2 VERVANG $Dlimser% 12 15 18 21 24
#Percentnorm voor jaardata
VERVANG $Jpc% 15

##lees wat RIVM stations in om de tijd-as goed to initialiseren (daarna weggooien)
##Bepaal ook dat je alle meetnet data nodig hebt (groep gegeven met LM)

Kader LM RIVM 0 1 2 3

ONDERHOUD Verwijder RIVM 0 1 2 3
Plotparam SAVEONLY

#maak een selectiefilter dat alleen data doorlaat als aantal NAs per dag kleiner is dan 5
BLOK Uur AantalNA UNa$Z% $Z% LM
BLOK DAG AantalNA DNa$Z% $Z% LM
Kopieer_als ( DNa$Z% < 5 ) Mask$Z% 1 LM

#filter de Z waarden - wordt vertaald naar Zc

Bereken_attr $Z%c $Z% Mask$Z% * LM
#reample naar dag
RESAMPLE 1D

BLOK Jaar PercentNA JPc$Z%x $Z%c LM
Kopieer_als ( JPc$Z%x < $Jpc% ) JPc$Z% JPc$Z%x LM
#- correctie factor voor overschrijdingen
#wordt alleen berekend als aantal NA s klein is
Bereken_attr Jcor$Z% 100 100 JPc$Z% - / LM
AANPASSING Ylimiet 0 25
PLOT_SOORT JPc$Z% LM
AANPASSING Ylimiet
PLOT_SOORT Jcor$Z% LM

#bereken aantal overschrijdingen per jaar en corrigeer

KOPIEER_ALS ( $Z%c >= $Dlimiet% ) Exc$Z%x 1 LM
BLOK Jaar Aantal JEx$Z%x Exc$Z%x LM
Bereken_attr Exc$Z%xx JEx$Z%x Jcor$Z% * LM

#gebruik alleen data als er voldoende gegevens zijn in een jaar

KOPIEER_ALS ( JPc$Z% < $Jpc% ) JEx$Z% Exc$Z%xx LM

BLOK Jaar Gemiddelde JGm$Z%xx $Z%c LM

KOPIEER_ALS ( JPc$Z% < $Jpc% ) JGm$Z% JGm$Z%xx LM

Onderhoud Verwijder JGm$Z%xx JGm$Z%x
PLOT_SOORT JGm$Z% LM
PLOT_SOORT JEx$Z% LM

OVERZICHT JGm$Z% JEx$Z% LM

Resample 1Y

##geef de diagnostrische output als 1d functie en als functies met aanduiding van kans (Bayes)
AANPASSING XLIMIET 10 38
AANPASSING YLIMIET 0 100
Functie1D 1Y JGm$Z% voor JEx$Z% Samen LM
AANPASSING XLIMIET 10 40
AANPASSING YLIMIET 0 100
PUNTGRAFIEK JGm$Z% JEx$Z% LM

PUNTGRAFIEK Jaar JGm$Z% JEx$Z% LM
AANPASSING XLIMIET 12 28
AANPASSING YLIMIET 0 60
Functie1D 1Y JGm$Z% voor JEx$Z% Samen LM
AANPASSING XLIMIET 10 30
AANPASSING YLIMIET 0 110
Bayes 1Y JGm$Z% kans JEx$Z% $Dlimser% LM