Gasopslag met Python-tool Altair analyseren & zo doe je het

Noud van Kruysbergen
0

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.

Gasopslag met Python


Ontvang gratis tips voor Python, schrijf je in voor de nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

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 vak­publiek 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 met­een aanmelden voor een mailinglijst wanneer je je regis­treert.

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 op­vragen 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 ge­gevens kan opleveren. Begin juni leek het erop dat de ESV nog niet helemaal klaar was met het authen­tificeren 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 ge­gevens 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).

Data uit de GIE-API

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 varia­bele 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 ge­gevens 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 injec­tion. 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 meten met Python

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 gas­opname voor het eerst groter was dan de toevoer.

Lees meer over Python in c't magazine 3/2023

Deel dit artikel

Noud van Kruysbergen
Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

Lees ook

Donkere modus Word uitschakelen of inschakelen? Zo doe je het!

Microsoft Word volgt automatisch de donkere modus van Windows. Je kunt ook afzonderlijk de donkere modus van Word uitschakelen of inschakelen. Zo doe ...

Raspberry Pi als Chromecast alternatief gebruiken & zo doe je het

De Google Chromecast is erg handig om media van je telefoon op je tv af te spelen. Helaas werkt het in sommige gevallen niet ideaal. Zo werken bepaald...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er