Quick start guide

Waar begin je met het implementeren van de toolbox continu inzicht? Dat kan best wisselend zijn en is per implementatie verschillend. Dit is namelijk afhankelijk van de wensen die je als gebruiker hebt en de randvoorwaarden van de omgeving waar in je implementeerd. Continu Inzicht is een operationeel systeem dus het ophalen de huidige belastingen is een goed begin punt.

Loads (belastingen)

In toolbox continu inzicht zijn een aantal bronnen voor belastingen opgenomen. Je kan natuurlijk ook data uit andere bronnen ophalen. Voor dit voorbeeld worden waterstanden uit RWS water webservices gebruikt. Alle voorbeelden zijn onder Belastingen inladen te vinden

Configuratie
GlobalVariables:
    rootdir: "data_sets/103.quick_start_guide"
    moments: [ -24, 0, 24, 48 ]
    aquo_alias:
        WATHTE [m][NAP][OW]: "WATHTE"

    LoadsWaterwebservicesRWS:
        parameters: [ "WATHTE" ]
        MISSING_VALUE: 999

DataAdapter:
    default_options:
        csv:
            sep: ";"
    belasting_locaties_waterwebservices_RWS:
        type: csv
        path: "locaties.csv"
    waterstanden_waterwebservices:
        type: csv
        path: "hidden_waterstanden_waterwebservices_rws.csv"
from pathlib import Path
import pandas as pd

path = Path.cwd() / "data_sets" / "102.quick_start_guide"
from toolbox_continu_inzicht.base.data_adapter import Config, DataAdapter

config = Config(config_path=path / "loads.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
from toolbox_continu_inzicht.loads import LoadsWaterwebservicesRWS

waterwebservices_rws = LoadsWaterwebservicesRWS(data_adapter=data_adapter)
waterwebservices_rws.run(
    input="belasting_locaties_waterwebservices_RWS",
    output="waterstanden_waterwebservices",
)

Deze reeks kan gebruikt worden om de waterstanden te tonen aan de gebruiker

df_waterstanden = data_adapter.input("waterstanden_waterwebservices")

df_waterstanden["date_time"] = pd.to_datetime(df_waterstanden["date_time"])
df_waterstanden.plot(
    x="date_time", y="value", title="Water standen van Waterwebservices"
);

Loads to moments

De beslastingen worden gebruikt om een kans uit te rekenen. Deze berekening kan elk moment in de tijd, deze tijdsstippen leggen we vast en heten: ‘moments’. De moments worden (in uren) gedefineerd in de configuratie en zijn relatief ten opzichte van de tijd waarop de functie wordt uitgevoerd. Voor sommige toepassingen is het wenselijk om op een andere manier de tijden te beinvloeden; voor dat geval is de variable calc_time van toepassing, zoals in dit voorbeeld waarbij de data statisch is.

Om duidelijk te maken welk stukje configuratie bij welke functie hoort, is dit opgeknipt in aparte bestanden. In de praktijk hoeft dit niet zo te zijn en kan je een of een aantal keer de data adapter defineren.

Configuratie
GlobalVariables:
    rootdir: "data_sets/102.quick_start_guide"
    moments: [ -24, 0, 24, 48 ]
    calc_time: '2026-02-02 06:53:00'

DataAdapter:
    default_options:
        csv:
            sep: ";"
    waterstanden_waterwebservices:
        type: csv
        path: "waterstanden_waterwebservices_rws.csv"
    moments_waterstanden_waterwebservices:
        type: csv
        path: "momenten_waterstanden.csv"
config = Config(config_path=path / "loads_to_moments.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
from toolbox_continu_inzicht.loads import LoadsToMoments

load_moments = LoadsToMoments(data_adapter=data_adapter)
load_moments.run(
    input="waterstanden_waterwebservices",
    output="moments_waterstanden_waterwebservices",
)
df_waterlevels = data_adapter.input("waterstanden_waterwebservices")
df_moments = data_adapter.input("moments_waterstanden_waterwebservices")
df_waterlevels["date_time"] = pd.to_datetime(df_waterlevels["date_time"])
df_moments["date_time"] = pd.to_datetime(df_moments["date_time"])
ax = df_waterlevels.plot(x="date_time", y="value")
df_moments.plot(
    x="date_time",
    y="value",
    title="Water standen van Waterwebservices",
    lw=0,
    markersize=5,
    marker="o",
    ax=ax,
)
df_moments[
    ["date_time", "value", "hours", "measurement_location_description", "value_type"]
]
date_time value hours measurement_location_description value_type
0 2026-02-01 14:00:00+01:00 125.0 0 Hoek van Holland meting
1 2026-02-02 13:40:00+01:00 16.0 24 Hoek van Holland verwachting
2 2026-02-02 13:40:00+01:00 16.0 48 Hoek van Holland verwachting

Loads classify

Hierbij wordt per belastinglocaties een classificatie gemaakt met een bijbehorende kleur of duiding.

Bijbehorende configuratie
GlobalVariables:
    rootdir: "data_sets/102.quick_start_guide"
    moments: [ -24, 0, 24, 48 ]

DataAdapter:
    default_options:
        csv:
            sep: ";"

    belasting_locaties_grenzen:
        type: csv
        path: "belasting_locaties_grenzen.csv"
    momenten_waterstanden:
        type: csv
        path: "momenten_waterstanden.csv"
    geclassificeerde_waterstanden:
        type: csv
        path: "hidden_geclassificeerde_waterstanden.csv"
config = Config(config_path=path / "loads_classify.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
from toolbox_continu_inzicht.loads import LoadsClassify

loads_classify = LoadsClassify(data_adapter=data_adapter)

loads_classify.run(
    input=["belasting_locaties_grenzen", "momenten_waterstanden"],
    output="geclassificeerde_waterstanden",
)
data_adapter.input("geclassificeerde_waterstanden")
measurement_location_id date_time value lower_boundary upper_boundary color label hours
0 1 2026-02-01 14:00:00+01:00 125.0 -92.0 200.0 #39870C Normaal (-92 tot 200cm) 0
1 1 2026-02-02 13:40:00+01:00 16.0 -92.0 200.0 #39870C Normaal (-92 tot 200cm) 24
2 1 2026-02-02 13:40:00+01:00 16.0 -92.0 200.0 #39870C Normaal (-92 tot 200cm) 48

Sections Loads

Vervolgens wordt een kopeling gelegd tussen de belastingslocatie en de dijkvakken. Hierbij is interpolatie tussen twee belasting locaties mogelijk.

config = Config(config_path=path / "sections_loads.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
from toolbox_continu_inzicht.sections import SectionsLoads

sections_loads = SectionsLoads(data_adapter=data_adapter)
sections_loads.run(
    input=[
        "dijkvak_namen",
        "momenten_waterstanden",
        "koppeling_dijkvak_belastinglocatie",
    ],
    output="waterstanden_per_dijkvak",
)
sections_loads.df_out[sections_loads.df_out["value_type"] == "meting"]
id name date_time value unit parameter_id value_type
0 1 vak1.1 2026-02-01 14:00:00+01:00 125.0 cm 4724 meting
5 2 vak1.2 2026-02-01 14:00:00+01:00 125.8 cm 4724 meting
10 3 vak1.3 2026-02-01 14:00:00+01:00 126.2 cm 4724 meting
15 4 vak1.4 2026-02-01 14:00:00+01:00 126.6 cm 4724 meting

Fragility Curves

Hier zijn een veel verschillende stappen mogelijk om fragility curves te laden, uit te rekenen en combineren. Deze zijn in andere documentatie en voorbeelden te vinden. In dit voorbeeld lezen we alleen de gecombineerde curve in en brekenen alleen de technische faalkans.

config = Config(config_path=path / "technical_failure_probability.yaml")
config.lees_config()
data_adapter = DataAdapter(config=config)
from toolbox_continu_inzicht.sections import SectionsTechnicalFailureprobability

sections_failureprobability = SectionsTechnicalFailureprobability(
    data_adapter=data_adapter
)

sections_failureprobability.run(
    input=[
        "technical_failure_probability_fragility_curves",
        "waterstanden_per_dijkvak",
    ],
    output="technical_failure_probability_data",
)
sections_failureprobability.df_out.head(2)
section_id name date_time value unit parameter_id value_type failureprobability failuremechanism
0 1 vak1.1 2026-02-01 14:00:00+01:00 125.0 cm 4724 meting 3.228006e-14 COMB
1 1 vak1.1 2026-02-02 13:40:00+01:00 16.0 cm 4724 verwachting 3.195134e-24 COMB

In deze ‘quick start guide’ hebben we per locatie, voor meerdere tijdstappen de belasting opgehaald. Ook hebben we de faalkans bepaald op de opgegeven momenten voor een gecombineerde fragility curve. Vanaf hier kan dit voorbeeld uitgebreid worden naar meerdere faalmechanismen of functionaliteiten.