Grafische Darstellung der Stauinhalte der Harzer Talsperren





1. Harzer Talsperren und Trinkwasserversorgung

Die Trinkwasserversorgung im mittleren Niedersachsen wird hauptsächlich durch Grundwasser, aber auch durch einige Stauseen im Harz gesichert. So wurden zum Beispiel in 2013 für die öffentliche Wasserversorgung in Niedersachsen 557 Millionen m³ (ein halber Kubikkilometer etwa) Wasser gefördert, davon 86% Grundwasser und 11%, also 61 Mio m³ Wasser der Harzer Talsperren (Quelle: Niedersächsisches Ministerium für Umwelt, Energie, Bauen und Klimaschutz).

Von den sechs durch die Harzwasserwerke GmbH verwalteten Harzer Talsperren führen Leitungen nach Wolfenbüttel, Braunschweig und Wolfsburg, nach Göttingen, Bad Gandersheim, Hildesheim, Lehrte, Neustadt, sogar nach Bremen, aber auch in das Hannoversche Umland, z.B. werden Teile der Vororte Laatzen, Rethen und Seelze über den Versorger enercity komplett mit Wasser aus den Talsperren versorgt (Quelle: Trinkwasseranalyse der Harzerwasserwerke auf enercity AG). Weiterhin wird das Wasser aus dem Harz mancherorts (z.B. im Süden Hannovers, im Wasserwerk Grasdorf) auch gefördertem Grundwasser beigemischt, da es generell sehr weich ist und hilft, zu kalkhaltiges Grundwasser zu enthärten.

Da Grundwasser eine teils sehr hohe Verweilzeit aufweist, je nach Beschaffenheit des Untergrundes, der Tiefe des Entnahmepunkts und anderen Parametern zwischen mehreren Jahren und Jahrzehnten, kann die "Latenz" (Zeitabstand Zufluss - Abfluss bzw. Entnahme, im englischsprachigen Raum als "groundwater recharge rate" bezeichnet) dieser Trinkwasserquelle als relativ hoch angenommen werden.

Die Latenz von Talsperrenwasser dagegen scheint weit geringer (abhängig von den Eigenschaften des Einzugsgebietes), nach einem kräftigen Regen können die Pegelstände von Stauseen und Flüssen innerhalb von Tagen signifikant ansteigen, manchmal sogar von Stunden. Verglichen mit dem Grundwasser verhält sich also Talsperrenwasser zeitlich weit dynamischer, und beinhaltet zudem eine in Maßen steuerbare Komponente: die Abgabe von Stauwasser in den weiteren Flusslauf.

Seit Juli 2017, der hier auffällig regenreich war, interessierte mich, welche Auswirkungen Wetterphänomene auf die Talsperren, und damit auf die lokale Trinkwasserversorgung haben. Dazu begann ich, die täglichen Wasserstandsdaten der Harzer Talsperren zu beobachten (interaktive Karte des Nordharzes hier):

Eckertalsperre
Eintrag auf Wikipedia
Pegelstand des Niedersächsischen Landesbetriebs für Wasserwirtschaft,Küsten- und Naturschutz (NLWKN)
Granetalsperre
Eintrag auf Wikipedia
Pegelstand des NLWKN
Innerstetalsperre
Eintrag auf Wikipedia
Pegelstand des NLWKN
Odertalsperre
Eintrag auf Wikipedia
Pegelstand des NLWKN
Okertalsperre
Eintrag auf Wikipedia
Pegelstand des NLWKN
Sösetalsperre
Eintrag auf Wikipedia
Pegelstand des NLWKN

Die Grane-, Oker- und Innerstetalsperre bilden zusammen das "Nordharzverbundsystem" (Link öffnet PDF der Harzwasserwerke zum Neubewilligungsverfahren des Verbundes 2017), welches unter allen sechs Talsperren die Hauptverantwortung für die Trinkwasserversorgung aus dem Harz trägt. Zu diesem Zweck existiert eine wasserführende Verbindung zwischen der Oker- und der Granetalsperre, der Oker-Grane-Stollen, eine Pumpleitungsverbindung Innerste- zur Granetalsperre (knapp 50m Höhenunterschied) und der Radau-Stollen vom Fluss Radau zur Okertalsperre (und folglich auch zu Granetalsperre).

Zwar veröffentlichen der NLWKN und die Harzwasserwerke GmbH statistische und wasserwirtschaftliche Untersuchungen wie z.B. dieses sehr interessante Papier "Wasserwirtschaft im Harz 1941 - 2018" des Jahres 2018, auf den öffentlich zugänglichen Seiten sind bis auf derartige Kompendien und die täglichen Talsperren-Wasserstandsdaten jedoch kaum zeitnahe oder historische Zahlen zu finden.

Diese täglichen Wasserstandsdaten der Harzwasserwerke enthalten die Staustände inklusive des Niederschlags, Zuflusses, sowie der Unterwasserabgabe in Form einer PDF-Datei (Gesamtübersicht dort genannt). Die PDFs lud ich mir seit Herbst 2018 mehr oder minder regelmäßig runter, um die Assoziation jährliches Wetter im Verhältnis zum Stand der Talsperren (und damit im Verhältnis zur teilweisen Sicherstellung unserer Trinkwasserversorgung) selbst genauer beobachten zu können.




2. Grafische Auswertungen der Daten der Harzer Talsperren

2021 im Sommer begann ich dann, diese PDF-Daten in einer Datenbank zu speichern, und grafisch auszuwerten. Die Daten enthalten für jeder der sechs Talsperren die Werte

  • Stand: Zeitpunkt der Erstellung der Daten, hoffentlich auch in etwa der der Messungen
  • Niederschlag: in Millimetern (Liter pro Quadratmeter) zwischen Vortag 07:30 und dem Zeitpunkt der Gesamtmessung
  • Stauhöhe: aktueller Wasserstand in Metern über Normalnull
  • Stauinhalt: aktueller Gesamtinhalt (oder entnehmbarer Inhalt?) in Millionen Kubikmetern
  • Füllungsgrad: Inhalt relativ zum Maximalinhalt in Prozent
  • Zufluss: insgesamt zufließendes Wasser in Kubikmetern pro Sekunde
  • UW-Abgabe: Unterwasserabgabe, also steuerbarer Abfluss in den folgenden Ablauf (Fluss) in Kubikmetern pro Sekunde

Ausgehend von diesen Daten schrieb ich mir ein Skript (kleines Programm), das einzelne Grafikdateien vom zeitlichen Verlauf und Vergleich dieser Größen liefert. Sinn der verschiedenen grafischen Darstellungen ist der Versuch, durch unterschiedliche Blickwinkel auf die Daten mögliche Zusammenhänge zwischen den Werten erkennbar zu machen (Data-Mining im Kleinen, da nur geringfügige Datenmenge), die auf individuelle Eigenschaften der jeweiligen Talsperren oder der Region hinweisen könnten.




3. Absolute Stauinhalte

Die Stabilität der Trinkwasserversorgung hängt in erster Linie vom Gesamtstand der versorgenden Talsperren ab, daher zuerst die Visualisierung der aufsummierten absoluten Stauinhalte aller sechs Talsperren. Der maximal mögliche Inhalt beträgt 182 Millionen Kubikmeter. Die Entwicklungen in Jahresintervallen:




Man kann schön als zuflussreichste Zeit das erste Quartal zwischen Anfang Januar und Ende März identifizieren. In 2019 stieg in dieser Periode der Gesamtstand von etwas über 80 Mio m³ auf über 150 Mio m³, also fast eine Verdopplung des Stauvolumens. Ab Anfang/Mitte April fällt der Inhalt dann jahreszeitlich bedingt regelmäßig und stetig ab. Der durchschnittliche Stauinhalt aller Talsperren im Verbund betrug 113 in 2019, 104 in 2020 und 107 Mio m³ in 2021.

Ich sollte hier vielleicht noch schnell einschieben, dass meine Deutungen hauptsächlich auf Laienwissen beruhen, insbesondere auf Wikipedia-Einträge zu Stauseen und ähnlichen Quellen. Ich habe nie Wasserwirtschaft studiert, ich weiss nicht einmal, wie man das schreibt. Meine Interpretationen also bitte nicht überbewerten, die können auch ganz leicht ganz weit danebenliegen. Nichtsdestotrotz.



Auffällig ist die anfangs sehr trockene Herbst-Winterperiode 2018, in der der Gesamtpegel auf unter 50 Mio m³ fiel, um dann allerdings wie erwähnt innerhalb eines Quartals wieder auf über 150 Mio m³ zu steigen.

Das Jahr 2021 zeigte eine geringere Dynamik als die beiden vorausgegangenen Jahre: ein geringerer Gesamtpegel, aber dafür aufgrund des regenreicheren Sommers ein höheren Stauinhalt im Herbst. In Zahlen: der maximale Stauinhalt aller Talsperren 2021 lag mit knapp über 120 Mio m³ weit unter den 150 Mio m³ in den beiden vorausgehenden Jahren. Andererseits aber nahm dieser Inhalt bis in den Herbst auf nur 100 Mio m³ ab gegenüber zum Teil weniger als 80 Mio m³ in 2018, 2019 und 2020.




4. Relative Stauinhalte

Eine weitere Sicht auf die Stauseen-Daten ist der direkte Vergleich der prozentualen Stauinhalte, des relativen Füllungsgrades aller Talsperren:




Die geringsten Varianzen des Stauinhalts sind bei der Grane- und Eckertalsperre aufzufinden, wobei die Granetalsperre etwa das 3,5-fache Stauvolumen der Eckertalsperre besitzt.

Die höchste Standardabweichung des Jahresinhalts weist die Odertalsperre auf. obwohl sie, wie in ihrer Einzelbetrachtung sichtbar wird, im Vergleich weder den höchsten Zufluss noch die höchste Niederschlagsmenge aller sechs Talsperren empfängt. Allerdings "führt" die Odertalsperre bei der Unterwasser-Abgabe. Laut Harzwasserwerken dient sie nicht als Trinkwasserreservoir, sondern nur zur Regelung der abfließenden Oder und vielleicht der nachfolgenden Rhume.



Wie in den einzelnen Jahresgraphen oben wird auch hier deutlich, dass der Füllungsgrad der Granetalsperre im Jahresmittel am höchsten ist, mit einem durchschnittlichen Füllungsgrad von 72,5% mehr als zehn Prozentpunkte über dem der restlichen Talsperren. Die Daten zeigen gut, dass die Granetalsperre auch durch ihre Verbindungen mit den anderen Talsperren als "Rückgrat" der Trinkwasserversorgung konzipiert wurde: ein relativ grosses und auf hohem Stand stabilisierbares Volumen, das auch dann noch beansprucht werden kann, wenn die Wasserstände der anderen Stauseen durch eine längere Trockenperiode schon weit abgesunken sind, und diese wieder verstärkt andere Aufgaben wie die Niedrigwasseraufhöhung übernehmen müssen.




5. Tagesdifferenzen Stauinhalte

An den Graphen der Stauinhalte lassen sich tagesweise Veränderungen nur schwer ablesen, deshalb hier die geplotteten Tagesdifferenzen der Stauinhalte der Talsperren:




Bemerkenswert hier das "Rechtecksignal" der Odertalsperre, eine Art "Entnahmetaktung" in den Sommer- und Herbstmonaten: etwa alle drei bis vier Tage verringert sich die Entnahme bzw der Abfluss um einen geringen, aber halbwegs konstanten Wert (~0,1 Mio m³), um dann nach weiteren vier Tagen wieder um diesen Wert zu steigen. In 2019 kann abgeschwächt ähnliches auch bei der Innerstetalsperre beobachtet werden. Ich habe keine Ahnung, was der Zweck dieser Übung sein könnte, ob dem ein natürliches Phänomen oder aktiver Regeleingriff der Harzwasserwerke (wahrscheinlicher) zugrunde liegt.

Die Tagesdifferenzen im gesamten Erfassungszeitraum:





6. Einzeldarstellungen der Talsperren

Neben den oben gezeigten Entwicklungen der Stauinhalte enthält die Datenbasis auch die Werte des Niederschlags, Zuflusses und der Unterwasser-Abgabe der einzelnen Talsperren. Für jede Talsperre habe ich diese Werte mit dem Stauinhalt in Einzeldiagrammen grafisch übereinander dargestellt (Jahresaufschlüsselung auf der jeweiligen Seite):




Mir fiel beim ersten Hinsehen die zum Teil sehr unterschiedlichen Unterwasser-Abgaben auf: Grane- und Eckertalsperre haben sowohl die geringste aller sechs Unterwasser-Abgaben über die Jahre als auch die geringsten Schwankungen eben dieser.




7. Statistische Vergleiche

Zur besseren Vergleichbarkeit habe ich mehrere statistische Kennzahlen der sechs Talsperren in einer Matrix zusammen dargestellt:

∅(%I)Durchschnittlicher Füllungsgrad in Prozent
S(%I)Standardabweichung Füllungsgrad
∅(N)Durchschnittlicher Niederschlag in Millimeter pro 24h
S(N)Standardabweichung vom durchschnittlichen Niederschlag
∅(Z)Durchschnittlicher Zufluss im Kubikmeter pro Sekunde
S(Z)Standardabweichung Zufluss
∅(UW)Durchschnittliche Unterwasser-Abgabe in Kubikmeter pro Sekunde
S(UW)Standardabweichung Unterwasser-Abgabe
C(Z,I)Kovarianz Zufluss zum Inhalt
C(N,Z)Kovarianz Niederschlag zum Zufluss
C(UW,I)Kovarianz Unterwasser-Angabe zum Inhalt

Die Kovarianzen können Hinweise geben, ob bei der jeweiligen Talsperre ein positiv linearer Zusammenhang z.B. zwischen Zufluss und Inhalt existiert, ob und inwieweit also bei steigendem Zufluss auch der Inhalt steigt. Man sollte allerdings diese Werte nicht über-interpretieren, da der zeitliche Zusammenhang teils nicht linear und die Meßfrequenz sehr grob ist (Tagesbasis).

So würde als Beispiel ein starker, halbtägiger Regenguss als eintägiger, hoher Niederschlag gemessen werden, der resultierende Zufluss sich aber je nach Einzugsgebiet über mehrere Folgetage verteilen, selbst wenn an diesen Tagen kein Niederschlag mehr fallen sollte. Besitzt das Einzugsgebiet zudem noch relevante eigene Speicherkapazität (Moor), kann man eigentlich nur langfristige statistische Relationen bewerten.

In den folgenden Matrixdarstellungen sind die Maximalwerte innerhalb der Spalten in grün und die Minimalwerte in rot gehalten. Die Kreisgrösse deutet in etwa auf die Größe der jeweiligen Kennzahl der jeweiligen Talsperre hin. Die Zahlen des Jahres 2018 sind aufgrund der wenigen Datenpunkte mit Vorsicht zu geniessen.




Einige Muster werden offenbar: die Okertalsperre weist sowohl den höchsten durchschnittlichen Niederschlag als auch die höchste durchschnittliche Zuflussmenge auf. Gleichzeitig sind ihre Standardabweichungen in beiden Kategorien ebenfalls am höchsten; sie variieren also vergleichsweise am stärksten über den jeweiligen Zeitraum gesehen. Der durchschnittliche Stauinhalt der Okertalsperre ist der niedrigste aller sechs betrachteten Talsperren.

Die Granetalsperre dagegen fast das diametrale Gegenteil der Okertalsperre: Niederschlag und Zufluss der geringste aller Talsperren, eine relativ geringe Abweichung dieser Werte von ihrem Durchschnitt, dafür aber der höchste durchschnittliche Stauinhalt. Die Granetalsperre bezieht Wasser von der Oker- und teilweise der Innerstetalsperre; das erklärt zumindest teilweise, wieso die Granetalsperre die niedrigste Kovarianz Unterwasser-Abgabe zum Inhalt und Niederschlag zum Zufluss besitzt, wieso also der Niederschlag in ihrem Einzugsgebiet nicht oder kaum mit ihrem Zufluss korreliert.

Beide Talsperren haben in etwa den gleichen maximalen Stauinhalt, ein wie oben schon erwähnt sehr unterschiedlich großes Einzugsgebiet, die Höhe über Normalnull der Okertalsperre beträgt 416m, die der Grane 311m. Die abgehenden Flüsse unterscheiden sich ebenfalls wesentlich: die Länge der Oker bis zum Zufluss zur Aller beträgt 128,3km, die der Grane bis zur Innerste 8,9km. Die Oker fliesst durch einige Städte, die Grane mündet noch im Harz selbst in die Innerste, deren Zuflussrate von der Innerstetalsperre aus geregelt werden kann. Die Okertalsperre trägt meiner Ansicht nach also eine weit höhere "Verantwortung" für Hochwasserschutz und Niedrigwasseraufhöhung des nachgeordneten Flusses.






8. Datenaufbereitung

Die Daten der Talsperren als PDF-Datei werden täglich durch ein Python-Skript heruntergeladen, gesichert, und in einer Instanz der Open Source-Datenbank PostgreSQL gespeichert. Ein weiteres Skript erzeugt dann obige Grafiken. Insbesondere das erste Skript bevorzugt eine Linux-Umgebung, da z.B. das Werkzeugs "pdftotext" unter Linux (eigentlich unixoide Betriebssysteme) keine weiteren Vorbereitungen benötigt. Es spricht allerdings nichts dagegen, die nötigen Werkzeuge in einer WSL-, Cygwin- oder MinGW-Umgebung zu installieren und die Funktion der Skripte zu testen.

Die Python-Skripte benötigen vorinstalliert folgende, externen Module:

  • PostgreSQL: die freie Datenbank wird manchmal von den jeweiligen Linux-Dialekten standardmäßig mitinstalliert.
  • pdftotext: ein Werkzeug aus dem Unix Poppler-Paket zur Text/Layout-Extraktion aus PDF-Dateien
  • Python Module: psycopg2 (PostgreSQL), numpy (Numerik), scipy (Algorithmen), pandas (Datenanalyse) und matplotlib (Plots)

Alle Python-Module sind weit verbreitete Standards, und können z.B. mit dem Paketmanager "pip" ganz einfach heruntergeladen und installiert werden, am Shellprompt z.B. via "pip install psycopg2".

Das pdftotext-Programm ist meist Teil der poppler-utils, und kann unter diesem Namen mit dem jeweiligen Software-Management (apt, yast, pkg etc.) unter Linux, FreeBSD oder anderen heruntergeladen und installiert werden.

Beide Python-Skripte ts_get_data.py und ts_make_charts.py habe ich als Open Source (GPL3) verfasst. Die Datentabellen werden innerhalb PostgreSQL in der Datenbank "postgres", Benutzer "postgres" angelegt. Sollen die Daten woanders gespeichert werden, muss dies auf der Kommandozeile der Skripte (Option "--pgconstr") angegeben, oder direkt im Skript geändert werden. In der DB wird die parent table ts_reservoirs mit den Talsperren-Stammdaten und dem Primärschlüssel der Talsperrennummer angelegt:

create table ts_reservoirs
(
        rid             integer not null,
        name            character varying(64) not null,
        region          character varying(64),
        coordinates     point,
        maxcontent      float not null,
        maxheight       float not null,
        comments        text
);
alter table ts_reservoirs
        add constraint pk_ts_reservoirs primary key (rid);

dazu deren child table ts_levels (dort landen alle PDF-Daten):

create table ts_levels
(
        rid             integer not null,
        mtime           timestamp not null,
        rainfall        float not null,
        curcontent      float not null,
        curheight       float not null,
        influx          float not null,
        uwefflux        float not null,
        lastupdate      timestamp
);
alter table ts_levels
        add constraint fk_ts_levels foreign key (rid) references ts_reservoirs(rid);
alter table ts_levels
        add constraint ukey_ts_levels unique (rid,mtime);

und einer kleinen Tabelle der Spezifizierungen obiger Spalten:

create table ts_valuespecs
(
        valname         character varying(16) not null,
        description     character varying(64) not null,
        uom             character varying(16) not null -- unit of measure
);

Mit dem ersten Skript ts_get_data.py können obige Datenbankobjekte vor dem ersten Einlesen angelegt werden:

$> ./ts_get_data.py --initialize
WARNING: initializing the DB tables will drop all previously stored reservoir data.
Continue (y,n)? y
Successfully dropped and created 3 tables and 1 function

Die möglichen Kommandozeilenoptionen beider Skripte können wie gewohnt aufgelistet werden:

$> ./ts_get_data.py --help
usage: ts_get_data.py [-h] [--initialize] [-d] [-u] [-s [DATADIR]] [-r [DATAURL]] [-p [PGCONSTR]]
                      [-v] [-V]

Download and store daily Harz reservoir data

optional arguments:
  -h, --help            show this help message and exit
  --initialize          Initialize necessary DB structures (default: False)
  -d, --download        Download current data and store in database (default: False)
  -u, --updatedir       Update or insert the whole data directory in database (default: False)
  -s [DATADIR], --datadir [DATADIR]
                        Set data directory (default: Harzwasserwerke)
  -r [DATAURL], --dataurl [DATAURL]
                        Data url to download (default:
                        https://www.harzwasserwerke.de/talis/hochwasserdaten.pdf)
  -p [PGCONSTR], --pgconstr [PGCONSTR]
                        PostgreSQL connection string (default: dbname=postgres user=postgres)
  -v, --verbose         Be more talkative (default: False)
  -V, --version         Show script version and exit (default: False)

Die aktuelle PDF-Datei der Harzwasserwerke herunterladen, im Downloadverzeichnis sichern und die Talsperren-Werte in der DB speichern:

$> ./ts_get_data.py --download

Voreinstellung des Downloadverzeichnisses ist "Harzwasserwerke" im lokalen Verzeichnis. Wurden die DB-Tabellen neu angelegt, oder alte PDFs direkt in das Downloadverzeichnis gestellt, kann der Inhalt aller dort liegenden PDFs in die DB geladen werden:

$> ./ts_get_data.py --updatedir

Bestehende DB-Einträge werden nicht gelöscht, sondern gegebenenfalls geupdated.

Die eigentliche Erzeugung der Grafiken geschieht durch das zweite Skript ts_make_charts.py. Es erzeugt per Voreinstellung DIN A4 Grafikdateien im PNG-Format. Keine Web-Darstellung (Javascript-Klassen zur Einbettung), da diese bezüglich einer Skalierbarkeit Raster- oder Vektor-Grafikdateien eher unterlegen sind; ein schneller 1200dpi Ausdruck auf DIN A3 (Kommandozeilenoption: "ts_make_charts.py -x 420 -y 297 -d 1200", braucht zweistellig GB Ram, wenn Bitmaps gewünscht sind!) oder eine sinnvolle Darstellung auf einem 50" Monitor kann man meist komplett knicken.

Die Grafiken können entweder für den gesamten Erfassungszeitraum oder das aktuelle Jahr erzeugt werden. Mögliche Kommandozeilenparameter:

$> ./ts_make_charts.py --help
usage: ts_make_charts.py [-h] [-c [CHARTSDIR]] [-d DPI] [-f [IMAGEFORMAT]] [-m] [-p [PGCONSTR]]
                         [-s] [-t] [-x [XFIGSIZE]] [-y [YFIGSIZE]] [-v] [-V]

Create Harz reservoir data charts

optional arguments:
  -h, --help            show this help message and exit
  -c [CHARTSDIR], --chartsdir [CHARTSDIR]
                        Set charts directory (default: Harzwasserwerke/Charts)
  -d DPI, --dpi DPI     Set charts image resolution in dpi (default: 300)
  -f [IMAGEFORMAT], --imageformat [IMAGEFORMAT]
                        Set charts image format (jpg, png, svg, ...) (default: png)
  -m, --nominmax        Do not show min/max comments on chart (default: False)
  -p [PGCONSTR], --pgconstr [PGCONSTR]
                        PostgreSQL connection string (default: dbname=postgres user=postgres)
  -s, --nosumming       Do not show summed values in charts (default: False)
  -t, --thisyear        Recreate charts just for the current year (default: False)
  -x [XFIGSIZE], --xfigsize [XFIGSIZE]
                        Image width (landscape) in mm (default: 297)
  -y [YFIGSIZE], --yfigsize [YFIGSIZE]
                        Image height (landscape) in mm (default: 210)
  -v, --verbose         Be more talkative (default: False)
  -V, --version         Show script version and exit (default: False)

Ein tägliches Update (automatisch dann via cron-job, dort natürlich ohne -v) sieht hier so aus:


$> ./ts_get_data.py -vd && ./ts_make_charts.py -vt
Connected to:
PostgreSQL 11.13 (Debian 11.13-0+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
Downloaded "/mb/Harzwasserwerke/Harzwasserwerke-Talsperrendaten-2021-11-23.pdf"
Entry: Oder,0,16.96,369.36,0.46
Entry: Söse,0,16.13,317.81,0.75
Entry: Ecker,0,9.52,551.81,0.26
Entry: Oker,0,15.48,397.10,1.35
Entry: Grane,0,31.74,303.35,0.17
Entry: Innerste,0,12.42,255.47,0.84
Files read: 1, skipped: 0, records processed: 6, time: 0:00:00.427199
Connected to:
PostgreSQL 11.13 (Debian 11.13-0+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
Creating summarized charts for 2021...
Creating single reservoir charts for 2021...
Creating statistics charts for 2021...
Charts created: 18, time: 0:00:49.055829

Die Abszisse (x-Achse) der Graphen enthält fast immer die Zeit in Tagesauflösung. Da einige Meßtage fehlen (kaum Daten an Wochenenden, ich hab's verpennt, Urlaub usw.), werden vor dem Erzeugen der Grafiken und Statistiken die Werte an nicht gegebenen Tagen linear interpoliert. Das Skript liest die erforderlichen Daten aus der Datenbank, erzeugt daraus pandas DataFrames und stellt diese mit den Möglichkeiten der Python matplotlib dar.




9. Kontakt

Bitte old-school nur über untenstehende Email-Adresse.

Alle Inhalte und Bilder (cc by-sa) 2021 - 2022 Michail Brzitwa, Hannover, Deutschland
Letzte Änderung: $Date: 2022-01-02 20:10:53 +0100 (So, 02 Jan 2022) $