Door de noodsituatie in de gasleveringen die is ontstaan als gevolg van de oorlog tussen Rusland en Oekraïne, zijn zowel bedrijven als huishoudens de niveaus van de gasopslag angstvallig in de gaten aan het houden. Als je die gegevens zelf systematisch wilt analyseren, kun je ze uit een gratis API halen. Met de Python-tool Altair kun je diagrammen van de gasopslag maken.
Ontvang gratis tips voor Python, schrijf je in voor de nieuwsbrief:
Gas Infrastructure Europe
De Gas Infrastructure Europe (GIE) is een vereniging van Europese bedrijven uit de gasindustrie, waar ook de gasopslagbedrijven lid van zijn. De belangstelling voor deze vereniging is nog zo gering dat er niet eens een Wikipedia-pagina van is. Toch staat staat deze vereniging nu plotseling in het middelpunt van de belangstelling. Zij lobbyt niet alleen, maar verzamelt ook gegevens van haar leden, aggregeert die en stelt ze ter beschikking op haar website. AGSI+ staat voor Aggregated Gas Storage Inventory (geaggregeerde gasopslaginventaris) en bevat in hoofdzaak twee soorten gegevens:
- De vulniveaus en de toe- en afvoerhoeveelheden
- Nieuws over storingen en gepland en ongepland onderhoud.
Op de website kun je terecht voor informatie zoals bijvoorbeeld hoeveel terawattuur gas opslagfaciliteiten kunnen opslaan.
Gasopslag met Python-tool Altair analyseren: de informatie verkrijgen
Alle gegevens zijn te vinden op de voor een vakpubliek bedoelde website agsi.gie.eu en via een onlangs herziene en gedocumenteerde HTTP-API. Sinds begin juli kun je snel gestructureerde gegevens krijgen en er je eigen analyses op loslaten. Voorwaarde voor het opvragen van gegevens is een gratis account, dat je kunt aanmaken op agsi.gie.eu/account. Je hoeft overigens niet tot een gasbedrijf te behoren, de API staat ook open voor geïnteresseerde leken. Als je op de hoogte wilt blijven van wijzigingen aan de API, kun je je meteen aanmelden voor een mailinglijst wanneer je je registreert.
Onmiddellijk na het registreren zie je het belangrijkste hulpmiddel voor het opvragen van de gegevens: je eigen API-sleutel – een tekenreeks van 32 tekens waarmee je je bij de API identificeert. De exploitanten gebruiken die sleutel om het opvragen van gegevens te beperken en zo hun servers te beschermen. De zogeheten rate-limiting voorkomt dat een gebruiker meer dan 60 verzoeken in één minuut doet – dat moet voor de meeste toepassingen ruim voldoende zijn, omdat één request veel gegevens kan opleveren. Begin juni leek het erop dat de ESV nog niet helemaal klaar was met het authentificeren via de API. Het lukte regelmatig om ook requests te doen zonder sleutel.
Gasopslag met Python-tool Altair analyseren: officiële API documentatie
De officiële documentatie voor de API is een pdf-document dat nogal snel in elkaar lijkt te zijn geflanst in Microsoft Word (zoals de metadata verraden). Zo zijn de voorbeelden van de JSON-gegevens van de API ingesloten als screenshots. Helemaal volgens de industriestandaard is dat niet bepaald gewoon. Van een pas herziene API, die de providers een REST-API noemen, verwacht men vandaag de dag gestandaardiseerde documentatie in OpenAPI-formaat.
Gasopslag met Python-tool Altair analyseren: documentatie versimpeld
Het goede nieuws is dat wij de documentatie voor je hebben doorgespit en de relevante datasets eruit hebben gehaald. De eerste request met het commandline-tool Curl (standaard geïnstalleerd bij Windows, macOS en de meeste Linux distributies) is snel gedaan. Het enige wat je hoeft te doen is de placeholder <API-KEY> te vervangen door je API-sleutel in de header genaamd x-key:
“https://agsi.gie.eu/api?country=nl&from=2022-08-01&size=300” -H “x-key: <API-KEY>”
Het eindpunt verstrekt de geaggregeerde gegevens voor een heel land (nl voor Nederland, be voor België), maar je kunt ook gegevens opvragen voor afzonderlijke opslagfaciliteiten en exploitanten – dergelijke waarden zijn eerder van belang voor specialisten dan voor gewone gasafnemers. Als je zulke gegevens nodig hebt, moet je de zogenaamde EIC-code voor een exploitant opzoeken bij de API-portal (die ook de persoonlijke sleutel bevat) en die aan de url toevoegen met de parameter &company=<EIC>, naast de landcode.
Gasopslag met Python-tool Altair analyseren: JSON-formaat
De gegevens worden altijd terug geleverd in JSON-formaat, het Curl-voorbeeld hierboven levert tot 300 datapunten (size=300), beginnend op 1 augustus 2022. Als je de periode wilt beperken, kun je naast from= ook to= specificeren, of date= gebruiken om alleen een enkele dag uit te lezen. Voor verzamelingen met meerdere dagen staan de relevante gegevens in de datastructuur onder data en ziet een enkel datapunt er bijvoorbeeld zo uit:
{
“name”: “Netherlands”,
“code”: “NL”,
“url”: “NL”,
“gasDayStart”: “2022-08-17”,
“gasInStorage”: “100.7432”,
“consumption”: “420.2735”,
“consumptionFull”: “23.96”,
“injection”: “255.35”,
“withdrawal”: “65.6”,
“workingGasVolume”: “141.4911”,
“injectionCapacity”: “1410.79”,
“withdrawalCapacity”: “2767.65”,
“status”: “E”,
“trend”: “0.13”,
“full”: “71.2”,
“info”: []
},
De gegevensstructuur bevat verschillende technische fouten die later moeten worden afgehandeld. Alle getallen die eigenlijk van het gegevenstype float zouden moeten zijn, zijn in de JSON-dataset omringd door aanhalingstekens en zijn dus strings. Voordat je er dus mee kunt rekenen, moet je ze met een programmeertaal omzetten.
Gasopslag met Python-tool Altair analyseren: afzonderlijke waarden
De uitleg van de afzonderlijke waarden is te vinden in de tabel hieronder De belangrijkste velden die voor de meeste gelegenheidsgebruikers van belang zijn, zijn waarschijnlijk full (het vulniveau in procenten), injection (gastoevoer in gigawattuur per dag) en withdrawal (gasopname).
Gasopslag met Python-tool Altair analyseren: c’t Python-script
Met die informatie heb je snel een diagram samengesteld over de laatste paar maanden in een voor jou bekende programmeertaal. Om te demonstreren wat je met de gegevens kunt doen, hebben we een klein Python-script geschreven dat gebruik maakt van de zeer veelzijdige bibliotheek Altair om een diagram te tekenen. Je kunt onze code als uitgangspunt gebruiken voor je eigen experimenten., die je overigens kunt terug vinden op deze GitHub-pagina.
Gasopslag met Python-tool Altair analyseren: het programma
Het programma bestaat uit drie stappen: met een methode uit het requests-pakket worden de gegevens via HTTP-GET van de API naar de variabele data overgebracht. De API-sleutel is niet hard gecodeerd in de code, maar komt van de omgevingsvariabele API_KEY. Zodra het downloaden gelukt is, zet de methode json_normalize van de Python data-analysebibliotheek Pandas de gegevens om in een zogeheten dataframe. Pandas werkt als een spreadsheet zonder grafische interface en wordt in de data-analysewereld veel gebruikt vanwege zijn snelheid. Van de mogelijkheden kun je met de volgende regels al een voorproefje krijgen:
df[‘full’].astype(float)
Die ene regel Python-code zet een volledige kolom van strings om in floatingpoint-getallen – zonder een loop te hoeven programmeren. Nog een voorbeeld om je op weg te helpen: je wilt de gemiddelde waarde van het vulniveau weten? Dat gebeurt dan met de volgende regel:
mean = df[‘full’].mean()
Bij de derde stap komt Altair in het spel en maakt een diagram van het Pandas-dataframe. Een X-as met de kalendergegevens (gasDayStart) dient als basis. Daarboven trekt Altair een rode lijn met het vulniveau full. Dat wordt aangevuld met een staafdiagram met groene balken voor de injection. Aan het eind combineert de +-operator staven en lijnen, save() schrijft het voltooide diagram met onafhankelijke Y-assen als bestand data.html naar de harde schijf. Als je soortgelijke of totaal verschillende diagrammen wilt maken met Altair, vind je veel voorbeelden en suggesties in de documentatie.
Gasopslag met Python-tool Altair analyseren: diagramvoorbeeld
Hieronder zie je het Python-programma dat een diagram met twee elementen genereert uit de AGSI-gegevens. De groene balken geven de dagelijkse gastoevoer weer, de rode lijn geeft het vulniveau van alle Nederlandse opslagplaatsen in procenten aan. De linker Y-schaal hoort bij het vulniveau, de rechter bij de gastoevoer injectie.
Gasopslag met Python-tool Altair analyseren: codevoorbeeld uitvoeren
Als je ons codevoorbeeld wilt gebruiken, download dan de GitHub-repository en zet een bestand met de naam .env (zonder bestandsextensie) naast de code. Voer in het bestand je API-sleutel als volgt in:
API_KEY=<hier je sleutel>
Installeer dan alle afhankelijkheden via de Python-packagemanager Pip:
pip install altair pandas python-dotenv
Als dan alles klaar is, maak je een echt diagram met python create.py. Als de API-sleutel op de juiste plaats staat, krijg je een HTML-bestand met de naam data.html met het diagram.
Conclusie
De EIG-API heeft nog steeds technische zwakke punten, maar hij dient zijn doel. Omdat hij na gratis registratie ook voor leken toegankelijk is, is hij een nuttige gegevensbron voor een van de belangrijke vragen van onze tijd. Creatieve toepassingen zijn er in overvloed – dashboards, alarmen wanneer er niveaus dalen, en nog veel meer.
Als je nog steeds op zoek bent naar een uitdaging op het gebied van data-analyse, kun je bijvoorbeeld proberen de gegevens te gebruiken om uit te zoeken wanneer het winterseizoen de afgelopen jaren ingegaan is. Wat je zoekt is de dag van het jaar waarop de gasopname voor het eerst groter was dan de toevoer.