Bereiten Sie sich durch Klonen des Übungs-Repository:
git clone https://github.com/Ecohydraulics/Exercise-FloodReturn.git
Figure 1:Flut am Mangfall River in Bayern (Quelle: KSS 2020).
Terminologie¶
Die Flutfrequenzanalyse verwendet eine Reihe von Entladungsdaten (z.B. von einer Messstation) und wertet die Auftretenswahrscheinlichkeit einer bestimmten Entladung aus. So definiert die Ereigniswahrscheinlichkeit die Häufigkeit einer Entladung, die aus zwei Gründen wichtig ist:
** Sicherheit**: Viele Rechtsrahmen verwenden ein -Recurrence-Intervall (d.h. eine Retourendauer oder Häufigkeit in Einheiten von Jahren), um Sicherheitsniveaus zu definieren, die Gebäude und Infrastruktur erfüllen müssen.
*Ecohydraulik: Insbesondere in trockenen Gebieten ist es wichtig zu wissen, wie lange bestimmte Entladungen unter bestimmten Ebenen liegen, wo viele aquatische Lebensräume nicht tief genug, zu heiß oder vom Hauptkanal getrennt sein können. Daher wollen wir die -Exceedance-Wahrscheinlichkeit einer gegebenen Entladung kennen.
Die Beziehung zwischen der Überschreitungswahrscheinlichkeit und dem Wiederauftretensintervall ergibt sich aus der Definition beider Begriffe:
Die -Exceedance Wahrscheinlichkeit ist die Wahrscheinlichkeit eines Ereignisses einer bestimmten Größe (in m/s oder CFS) oder höher.
Das -Recurrence-Intervall ist die Inverse der Überschreitungswahrscheinlichkeit und drückt die durchschnittliche Rücklaufzeit eines Ereignisses bestimmter Größe in Zeiteinheiten aus.
Das Berechnungskonzept der Rückgabeperiode macht zwei elementare Annahmen. Zunächst wird angenommen, dass die einzelnen Strömungsereignisse einen stationären Peak aufweisen. Zweitens wird die statistische Unabhängigkeit einzelner Ereignisse angenommen. Die Annahme der statistischen Unabhängigkeit bedeutet, dass in diesem Jahr eine 100-jährige Flut mit der gleichen Wahrscheinlichkeit wie im nächsten Jahr auftritt, unabhängig davon, ob in diesem Jahr tatsächlich eine 100-jährige Flut aufgetreten ist. So beträgt die Wahrscheinlichkeit einer 100-jährigen Überschwemmung für jedes Jahr 1/100 (oder 1/50 für eine 50-jährige Überschwemmung usw.).
Die Wahrscheinlichkeit einer 100-jährigen Überschwemmung in 100 Jahren beträgt 63 %¶
Als Ingenieure wollen wir oft wissen, wie wahrscheinlich es ist, dass eine 100-jährige Flut innerhalb der nächsten 2, 5, 10, ... oder 100 Jahre auftreten wird (d.h. was sind die wahrscheinlichen Kosten für Flutschäden im Zusammenhang mit einer 100-jährigen Flut?). Die Antwort auf diese Frage ist “die entgegengesetzte Wahrscheinlichkeit, dass in den nächsten 2, 5 oder 10 Jahren keine 100-jährige Flut auftritt”. Mathematisch bedeutet das die jährliche Eintrittswahrscheinlichkeit einer Veranstaltung mit einem Wiederauftretensintervall Jahre über einen Beobachtungszeitraum von Jahre:
Table 1 zeigt Lösungen zur Wahrscheinlichkeit Funktion für Beobachtungsperioden von 2, 5, 10 und 100 Jahren sowie Rekursionsintervalle von 10, 50 und 100 Jahren.
Table 1:Solutions to the probability function for selected observation periods .
= 2 | = 5 | = 10 | = 100 | |
|---|---|---|---|---|
= 10 | 19.00% | 40,95% | 65.13% | 100.00% |
= 50 | 3,96% | 9.61% | 18.29% | 86.74 % |
= 100 | 1,9 % | 4,90% | 9.56% | 63,40% |
Besuchen Sie die USGS Wasserwissenschaftsschule, um mehr über Flut (und Dürre)-Rekurs zu erfahren.
Löschen von Daten¶
Datenquellen deaktivieren¶
Durchflussdaten können von Messstationen abgerufen werden. In Deutschland bietet das “Gewässerkundliches Jahrbuch” eine Übersicht über statistische Daten von gauging Stationen. Beachten Sie, dass viele Messstellen, wie auch in vielen anderen Ländern, von staatlichen Behörden verwaltet werden und nur ein kleiner Datenanteil von Bundeseinrichtungen zur Verfügung steht. Zum Beispiel sind Lehrdaten für Baden-Württemberg am Staatlichen Institut für Umwelt, Umwelt und Naturschutz (LUBW) verfügbar geo portal. Die folgende Liste enthält mehr Quellen für die Datenerhebung auf der ganzen Welt.
Die Bundesanstalt für Gewässerkunde BfG betreibt das Global Runoff Data Centre GRDC für die Weltorganisation für Meteorologie WMO zur Bereitstellung von Flussabflussdaten weltweit. Die Download-Plattform von GRDC ist in Form einer interaktiven web-GIS. Um die Daten zu erhalten, gehen Sie an ihre download interface, wählen Sie die gewünschte Station, wechseln Sie auf Table-Ansicht (dritte Zeile oben links im Fenster), überprüfen Sie die Station, klicken Sie download* und füllen Sie das Formular aus, um die Anfrage zu senden. Sie erhalten eine E-Mail mit einem Download-Link für die gewünschten Daten (warten Sie ein paar Minuten, bevor Sie auf den Link klicken - die Vorbereitung kann mehr Zeit als die E-Mail nehmen).
Flussdatensätze aus alpinen und mittleren Flüssen werden vom Bundesamt für Umwelt hydrologische Datenplattform (für langfristige Beobachtungen muss auch hier ein Formular ausgefüllt werden).
In den Vereinigten Staaten liefert die National Oceanic and Atmospheric Administration NOAA Entladungsdaten aus der Vergangenheit und Prognosen für Wassersheds in Nordamerika. Zum Beispiel bietet das California Nevada River Forecast Center Flussprognosen für die südwestlichen Vereinigten Staaten, und historische Daten können vom California Data Exchange Center CDEC.
Eine allgemeine US-gestützte Schnittstelle zum Laden von Flussdaten und Statistiken enthält die
hydrofunctionsPython library der United States Geological Survey USGS. Diese Bibliothek ermöglicht es, Messdaten und Statistiken auf Basis einer Stream-ID direkt zu erhalten. Zum Beispieloutput = hydrofunctions.peaks("01541200")Um
hydrofunctionsin einer conda-Umgebung zu installieren, geben Sie bitteconda install -c conda-forge hydrofunctionsin Anaconda Prompt ein.Beispielnutzung:
import hydrofunctions as hf
hf.draw_map()` # only runs in JupyterLabDaten laden mit pandas¶
Erstellen Sie eine neue Python-Datei (z.B. discharge_analysis.py) und importieren Sie pandas als pd zu Beginn. Lesen Sie die bereitgestellte Datenreihendatei "daily-flow-series.csv" mit pd.read_csv.
Der Header (Spaltennamen) befindet sich in Zeile 36, aber wir verwenden nicht die Spaltennamen aus der csv-Datei und überschreiben sie mit dem namesArgument ("Date" und "Q (CMS)" (für Cubic Meters per Second)). Alternativ könnten wir das Argument skiprows verwenden, um anzuzeigen, wo der Dateninhalt in der Datei beginnt.
Mit sep=";" geben wir an, dass Spalten durch ein Semikolon getrennt werden. Das usecols=[0, 2]-Argument gibt an, dass wir nur die Spalten 0 (Datum) und 2 (Entladung) lesen wollen, da der Informationsinhalt der Spalte 1 (Zeit) für die tägliche Entladung nicht relevant ist. Das parse_dates=[0]Argument lässt pandas wissen, dass Spalte 0 datenformatierte Werte enthält. Alternativ können wir ein dtype={"Date": ... } Wörterbuch verwenden, um die Datenformate der Spalten anzugeben. Die Nutzung von dtype erfordert jedoch den Import von datetime und induziert unnötige Komplexität. Darüber hinaus definiert das index_col Argument die Spaltenindizes, die ein Datumsformat für die späteren Analysen haben müssen. Darüber hinaus verwenden Sie das optionale Keyword-Argument encoding="latin1", da die bereitgestellte Datendatei einige Sonderzeichen enthält, die mit der Standard-utf-8 encoding nicht erkannt werden können.
import pandas as pd
df = pd.read_csv("flow-data/daily-flow-series.csv",
header=36,
sep=";",
names=["Date", "Q (CMS)"],
usecols=[0, 2],
parse_dates=[0],
index_col="Date")Hat alles funktioniert? Überprüfen Sie die geladenen data_series mit print(data_series.head())
Wenn Ihre CSV-Datei besondere Zeichen hat (z.B. 3) müssen Sie das optionale Keyword-Argument encoding="latin1" verwenden, da einige Sonderzeichen nicht mit der Standard utf-8 encoding erkannt werden können.
Geben Sie die Daten¶
Die Plotting-Daten stehen nicht im Mittelpunkt dieser Übung, weshalb im Skript plot_discharge.py eine gebrauchsfertige Funktion zur Verfügung steht. Stellen Sie sicher, dass die plot_discharge.py im gleichen Verzeichnis wie das oben genannte discharge_analysis.py Python-Skript steht (wie man Pakete, Module und Bibliotheken lädt). Verwenden Sie die plot_discharge-Funktion in plot_discharge.py wie folgt:
from plot_discharge import plot_discharge
plot_discharge(df.index, df["Q (CMS)"], title="Daily Flows 1826 - 2016")plot_discharge verwendet die Bibliothek Matplotlib.
Baureihe der jährlichen maximalen Entladung¶
Die Wiederholungsintervalle der Flutereignisse ergeben sich aus Statistiken der jährlichen Höchstentladung. Verwenden Sie daher die Funktion resample](https://DateTimeIndex, die wir bereits mit dem index_col Argument implementiert haben, wenn wir die Daten geladen haben. Das erste (und nur erforderliche) Argument für die resample-Funktion ist die Regel, die die Länge des Zeitrahmens definiert, auf den eine erneute Probenahme Anwendung findet. Hier verwenden wir "A" für Jahresstatistiken. Für die Nutzung von zwei- oder 5-Jahres-Zeiträumen können wir die Regel "5A" verwenden. Weitere Regeln finden Sie unter der pandas docs.
Darüber hinaus verwenden wir das Argument kind=period, denn wir sind nur an dem Jahr interessiert, in dem die Entlastung stattgefunden hat. Schließlich wenden wir .max() an, um maximum Statistiken über den Datenrahmen auszuführen. Da der wieder abgetastete Datenrahmen wiederum ein Datenrahmen ist, können auch alle Dataframe-Methoden darauf angewendet werden. Das heißt, statt max() können wir auch min(), sum(), median(), mean() und so weiter (siehe pandas dataframe Methoden) verwenden.
annual_max_df = df.resample(rule="A", kind="period").max()Da wir kind="period" verwenden, entsprechen die Zeilenindizes von annual_max_df den Zeiträumen von Jahren. So entspricht der Zeilenindex 1826 dem Zeitraum 1826-01-01 durch1826-12-31. Wir brauchen jedoch ganzzahlige Zahlen von Jahren und nicht Perioden für die Berechnung von Rückgabeperioden. Um ganzzahlige Formate von Jahren zu erhalten, übertragen wir das Jahr jeder Periode in eine neue Spalte des Datenrahmens und setzen die Zeilenindizes zurück. Das Zurücksetzen der Zeilenindizes auf Standard-Indizes durch (drop=True) ist nicht unbedingt erforderlich, sondern dient der physikalischen Korrektheit des Datenrahmens. Das Argument inplace=True ersetzt die Indizes innerhalb annual_max_df (anders müssen wir annual_max_df = annual_max_df.reset_index(drop=True) schreiben).
annual_max_df["year"] = annual_max_df.index.year
annual_max_df.reset_index(inplace=True, drop=True)
print(annual_max_df.head()Optional die jährlichen Maxima mit:
plot_discharge(annual_max_df["year"], annual_max_df["Q (CMS)"], title="Annual Flows 1826 - 2016")Berechnen von Exceedance Probability und Recurrence Intervals¶
Die Überschreitungswahrscheinlichkeit eines bestimmten Ereignisses innerhalb des Beobachtungszeitraums ist:
wenn
ist die Gesamtzahl der Beobachtungsjahre und
ist der rank der Veranstaltung.
Um die Ereignisse zu ordnen, müssen wir zunächst den maximalen jährlichen Entladungsdatenrahmen (annual_max_df) um den kleinsten bis größten Entladewert (anstatt rechtzeitig) sortieren:
annual_max_df_sorted = annual_max_df.sort_values(by="Q (CMS)")Dann leiten wir die Anzahl der Beobachtungen (n = annual_max_df_sorted.shape[0]) ab und fügen eine "rank" Spalte hinzu, in der wir einfach die Zeilen mit der range-Methode auszählen.
n = annual_max_df_sorted.shape[0]
annual_max_df_sorted.insert(0, "rank", range(1, 1 + n)Jetzt haben wir alle Zutaten, um die Wahrscheinlichkeit jeder Veranstaltung zu berechnen, mit der oben angegebenen -formula.
annual_max_df_sorted["pr"] = (n - annual_max_df_sorted["rank"] + 1) / (n + 1)Recall, das Wiederholungsintervall (hier: Rückkehrzeit in Jahren) ist das Invers der Überschreitungswahrscheinlichkeit und wir können es in den Datenrahmen mit:
annual_max_df_sorted["return-period"] = 1 / annual_max_df_sorted["pr"]Prüfen Sie die resultierende höchste Entladung und ihre Rückgabezeit:
print(annual_max_df_sorted.tail()Geben Sie die resultierende Wahrscheinlichkeit und Rückgabekurven mit den im Skript plot_result.py Python bereitgestellten Plotfunktionen aus:
plot_q_freq(annual_max_df_sorted)
plot_q_return_period(annual_max_df_sorted)Außerhalb der Box¶
Das hier dargestellte Verfahren ist nur eine Interpolation. Für die Extrapolation von Rückführungszeiten über die Länge des Beobachtungszeitraums (z.B. für Extremereignisse wie eine 1000-jährige Flut) ist ein Prädiktionsmodell erforderlich (z.B. Gumbel verteilte Extrapolation).
Schließlich gibt es bereits Software, die Rückgabefristen berechnet, frei verfügbar im U.S. Army Corps of Engineers Hydrologic Engineering Center (HEC) U.S. Army Corps of Engineeers, 2016: HEC-SPP. HEC-SPP ermöglicht die Berechnung von Flussereignisfrequenzen und Rücklaufperioden nach US-Standards. Wenn Sie also nicht in oder für die Vereinigten Staaten arbeiten, können Sie immer noch Ihren Code bereit haben. Darüber hinaus erfordert HEC-SPP eine Vorverarbeitung von Entladungsdaten (d.h. es funktioniert nur mit jährlichen Maxima).
- U.S. Army Corps of Engineeers. (2016). Hydrologic Engineering Centers River Analysis System (HEC-RAS). U.S. Army Corps of Engineeers (USACE). http://www.hec.usace.army.mil/software/hec-ras/