Rechtschreib korrektur

This commit is contained in:
Henrik Mertens 2022-05-31 23:21:04 +02:00
parent 5d517695e3
commit 90c37a2b16
10 changed files with 167 additions and 136 deletions

View file

@ -7,7 +7,6 @@
"pdflatex",
"biber",
"makeglossaries",
"pdflatex",
"pdflatex"
]
}

Binary file not shown.

View file

@ -24,7 +24,7 @@
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
\caption{InfluxDB Dashboard} % Überschrift
\includegraphics[width=1\textwidth]{img/InfluxDB-Dashboard}% Pfad
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle\label{fig:dashboard}
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle\label{fig:dashboard}
\label{fig:dashboard}
\end{minipage}
\end{figure}
@ -34,7 +34,7 @@
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
\caption{InfluxDB Load Data Source} % Überschrift
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-Sources.PNG} % Pfad
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
\label{fig:load-data-source}
\end{minipage}
\end{figure}
@ -44,7 +44,7 @@
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
\caption{InfluxDB Load Data Bucket} % Überschrift
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-Bucket.PNG} % Pfad
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
\label{fig:load-data-bucket}
\end{minipage}
\end{figure}
@ -54,7 +54,7 @@
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
\caption{InfluxDB Load Data Bucket hinzufügen} % Überschrift
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-AddBucket.PNG} % Pfad
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
\label{fig:load-data-add-bucket}
\end{minipage}
\end{figure}
@ -64,7 +64,7 @@
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
\caption{InfluxDB Load Data API Tokens} % Überschrift
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-API-Key.PNG} % Pfad
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
\label{fig:load-data-api-token}
\end{minipage}
\end{figure}
@ -74,7 +74,16 @@
\begin{minipage}[t]{0.9\textwidth} % Breite, z.B. 1\textwidth
\caption{InfluxDB Load Data API Token hinzufügen} % Überschrift
\includegraphics[width=1\textwidth]{img/InfluxD-LoadData-API-Key-anlegen.PNG} % Pfad
\source{Eigner Screenshot InfluxDB Webinterface} % Quelle
\source{Eigener Screenshot InfluxDB Webinterface} % Quelle
\label{fig:load-data-add-token}
\end{minipage}
\end{figure}
\end{figure}
% Die anzeige Funktioniert leider nicht!
%\anhang{DWD Wetterdaten}
%\begin{figure}[bht]
%\begin{lstlisting}[caption=Beschreibung Stationen {Quelle: DWD Datei Download}, label=list:lineproto, basicstyle=\tiny,],
%Stations_id von_datum bis_datum Stationshoehe geoBreite geoLaenge Stationsname Bundesland
%----------- --------- --------- ------------- --------- --------- ----------------------------------------- ----------
%\end{lstlisting}
%\end{figure}

View file

@ -1,17 +1,15 @@
%!TEX root = ../Thesis.tex
\section{Einleitung}
\subsection{Zielsetzuing}
\subsection{Zielsetzung}
Das Ziel dieser Arbeit ist es eine Einführung in die Funktion von \gls{TSDB} zu geben.
Außerdem soll beispeilhaft an InfluxDB gezeigt werden wie mit einer \gls{TSDB} gearbeitet wird.
Dazu werden die Wetterdaten vom \gls{DWD} Importiert und ausgewertet.
Außerdem soll beispielhaft an InfluxDB gezeigt werden, wie mit einer \gls{TSDB} gearbeitet wird.
Dazu werden die Wetterdaten des \gls{DWD} importiert und ausgewertet.
\subsection{Aufbau und Vorgehensweise}
Im ersten Teil dieser Arbeit werden die Grundlagen von \gls{TSDB} erklärt und besonderheiten beschreiben.
Im darauf Folgenden Kapitel wird dann exemplarisch an InfluxDB gezeigt wie mit einer \gls{TSDB} gearbeitet wird. Im
Im ersten Teil dieser Arbeit werden die Grundlagen von \gls{TSDB} erklärt und Besonderheiten beschreiben.
Im darauf folgenden Kapitel wird dann exemplarisch an InfluxDB gezeigt, wie mit einer \gls{TSDB} gearbeitet wird. Im
letzen Kapitel werden die Inhalte dieser Arbeit zusammengefasst.

View file

@ -1,23 +1,24 @@
%!TEX root = ../Thesis.tex
\section{Grundlagen}
\gls{TSDB} gehören zu den NoSQL Datenbanken und sind besonders darauf optimiert mit Time Series Data zu arbeiten. Daruch können die große Mengen an
Time Series Daten verarbeiten durchsuchen und Speichern.\footnote{\cite[vgl.][]{ComputerWeekly}}
\gls{TSDB} gehören zu den NoSQL Datenbanken und sind besonders darauf optimiert, mit Time Series Data zu arbeiten. Daruch können die große Mengen an
Time Series Data verarbeiten durchsuchen und Speichern.\footnote{\cite[vgl.][]{ComputerWeekly}}
\subsection{Time Series Data}
Um \gls{TSDB} zu verstehen muss als erstes geklärt werden was Time Series Data überhaupt ist und wie sie sich von anderen Daten unterscheiden.
Wie der Name schon sagt ist Time Series Data eine Reihe von Daten die über einen Zeitraum gesammelt wordern sind. Es wird also nicht nur der Endwert aufgezeichnet
sonder die Veränderung über einen Zeitraum. Diese Daten können z.B. Servermetriken, Anwendungs Leistungsüberwachung, Netzwerkdaten, \gls{IOT} Sensordaten,
Ereignisse, Klicks, Marktgeschäfte und viele andere Arten von Daten sein. Time Series Data können gut daran erkannt, dass die Zeit eine Wichtige
Axe bei der Darstellung der Werte ist.\footnote{\cite[vgl.][1\psqq]{PaulDix}}
Um \gls{TSDB} zu verstehen, muss als erstes geklärt werden, was Time Series Data überhaupt ist und wie sie sich von anderen Daten unterscheiden.
Wie der Name schon impliziert, ist Time Series Data eine Reihe von Daten die über einen Zeitraum gesammelt worden sind. Es wird also nicht nur der Endwert aufgezeichnet,
sonder die Veränderung über einen Zeitraum. Diese Daten können z.B. Servermetriken, %Anwendungs Leistungsüberwachung, finde ich kein besseres Wort für weglassen
Netzwerkdaten, \gls{IOT} Sensordaten, Ereignisse, Klicks, Marktgeschäfte und viele andere Arten von Daten sein.
Time Series Data können gut daran erkannt werden, dass die Zeit eine wichtige Achse bei der Darstellung der Werte ist.\footnote{\cite[vgl.][1\psqq]{PaulDix}}
Manchmal ist es nicht notwendig alle Daten zu erfassen. Zum Beispiel wird in vielen Anwendungen nur der letze Login gespeichert und mehr ist auch für die
Funktion nicht notwendig. Allerdings können zusätzliche Informationen gewonnen werden wenn nicht nur die letzen Daten sondern die Veränderung aufgezeichnet werden.
So kann zum Beispeil festgestellt werden wie oft und wann sich der Kunde einloggt und ob es dabei ein Muster gibt. Anhand dieser Daten können Kunden dann Kategorisiert werden.\footnote{\cite[vgl.][]{DataScienceTeam2020}}
Manchmal ist es nicht notwendig, alle Daten zu erfassen. Zum Beispiel wird in vielen Anwendungen nur der letze Login gespeichert. Mehr ist auch für die
Funktion nicht notwendig. Allerdings können zusätzliche Informationen gewonnen werden, wenn nicht nur die letzen Daten sondern die Veränderung aufgezeichnet wird.
So kann zum Beispiel festgestellt werden, wie oft und wann sich der Kunde einloggt und ob es dabei ein Muster gibt. Anhand dieser Daten können Kunden
dann kategorisiert werden.\footnote{\cite[vgl.][]{DataScienceTeam2020}}
Eine besonderheit von Time Series Data ist das sie sich nicht verändert. Wenn die Daten einmal erfasst wurden wird an ihnen nichts mehr verändert.
Es werden nur neue Daten hinzugefügt\footnote{\cite[vgl.][]{SamFangman2019}}
Eine Besonderheit von Time Series Data ist, dass sie sich nicht verändert. Wenn die Daten einmal erfasst wurden wird an ihnen nichts mehr verändert.
Es werden nur neue Daten hinzugefügt.\footnote{\cite[vgl.][]{SamFangman2019}}
%
%\subsection{{Funktionen von Time Series Database}}
%
@ -30,29 +31,29 @@ Es werden nur neue Daten hinzugefügt\footnote{\cite[vgl.][]{SamFangman2019}}
%
%Im Aufbau unterscheiden sich \gls{TSDB} vorallendingen darin das sie nur dazu
\subsection{{Unterschiede zwishen Time Series und relationalen Datenbanken}}
\subsection{{Unterschiede zwischen Time Series und relationalen Datenbanken}}
%Umschreiben und andere Quellen verwenden
Um Time Series Data zu speichern ist es nicht unbedingt erforderlich eine \gls{TSDB} zu nutzen. Auch relationalen Datenbanken können Time Series
Data speichern. Einer der wichtigesten unterschiede zwischen einer \gls{TSDB} im gegensatz zu einer \gls{RDBMS} ist es, dass kein Datenbank Schema notwendig ist.
Wenn Time Series Daten in eine Rationale Datenbank geschreiben werden sollen müssen erst entsprechende Tabellen angelegt werden in denen die Daten immer im
gleichen Format abgelegt werden müssem. Im gegensatz dazu können in einer \gls{TSDB} die Daten einfach Schemafrei in die Datenbank geschreiben werden. Ein
weiterer Vorteil ist es, dass \gls{TSDB} im gegensatz zu relationalen Datenbanken besser und einfacher Skaliert werden
Um Time Series Data zu speichern, ist es nicht unbedingt erforderlich, eine \gls{TSDB} zu nutzen. Auch relationale Datenbanken können Time Series
Data speichern. Einer der wichtigsten Unterschiede zwischen einer \gls{TSDB} im Gegensatz zu einem \gls{RDBMS} ist es, dass kein Datenbank Schema notwendig ist.
Wenn Time Series Daten in einer Rationalen Datenbank geschrieben werden sollen, müssen erst entsprechende Tabellen angelegt werden, in denen die Daten immer im
gleichen Format abgelegt werden müssen. Im Gegensatz dazu können in einer \gls{TSDB} die Daten einfach schemafrei in die Datenbank geschrieben werden. Ein
weiterer Vorteil ist, dass \gls{TSDB} im Gegensatz zu relationalen Datenbanken besser und einfacher Skaliert werden
können.\footnote{\cite[vgl.][]{InfluxDataSQL}}
Aber \gls{TSDB} haben nicht nur Vorteile. Wie in \cref{fig:db-ranking} zu sehen sind sie viel weniger verbreitet als Zeitbasierte Datenbank Systeme. Dadurch gibt
es viel weniger Entwickler die sich mit \gls{TSDB} auskennen und auch das Okösystem um die Datenbank ist deutlich kleiner. Außerdem sind \gls{RDBMS}
dadurch das es sie viel länger gibt sehr Stabil und sehr gut unterstützt.\footnote{\cite[vgl.][]{InfluxDataSQL}}
Aber \gls{TSDB} haben nicht nur Vorteile. Wie in \cref{fig:db-ranking} zu sehen, sind sie viel weniger verbreitet als nicht zeit basierte Datenbank Systeme. Dadurch gibt
es viel weniger Entwickler die sich mit \gls{TSDB} auskennen und auch das Ökosystem um die Datenbank ist deutlich kleiner. Außerdem sind \gls{RDBMS}
dadurch, dass es sie viel länger gibt, sehr stabil und sehr gut unterstützt.\footnote{\cite[vgl.][]{InfluxDataSQL}}
\gls{RDBMS} Arbeiten nach dem \gls{CRUD} Prinzip welches für Time Series Data nicht optimal ist. Auf Time Seires Data werden keine Update Befehle durchgeführt, da
neue Daten immer nur als neuer Datenpunkt angehängt werden. Auch das Löschen von Daten wird nicht sehr häufig durchgeführt und im gegensatz zu \gls{RDBMS}
meistens gleichzeit auf einer großen Menge an Datensätzen. Daher sind \gls{TSDB} besser dafür geeignet mit Time Series Data zu arbeiten und weisen auch eine
\gls{RDBMS} arbeiten nach dem \gls{CRUD} Prinzip, welches für Time Series Data nicht optimal ist. Auf Time Seires Data werden keine Update Befehle durchgeführt, da
neue Daten immer nur als neuer Datenpunkt angehängt werden. Auch das Löschen von Daten wird nicht sehr häufig durchgeführt und im Gegensatz zu \gls{RDBMS}
meistens gleichzeitig auf einer großen Menge an Datensätzen. Daher sind \gls{TSDB} besser dafür geeignet, mit Time Series Data zu arbeiten und weisen auch eine
höhere Performance auf.\footnote{\cite[vgl.][]{InfluxDataSQL}}
\subsection{Verbreitete DBMS}
Aktuell gibt es wie in \cref{fig:db-ranking} zu sehen einige beliebte Mulit-Model Datenbanken die als \gls{TSDB} gentuzt werden können.
Aktuell gibt es wie in \cref{fig:db-ranking} zu sehen, einige beliebte Mulit-Model Datenbanken, die als \gls{TSDB} genutzt werden können.
So können die Datenbanken MongoDB, Redis, Teradata und Couchbase mit Time Series Daten arbeiten. Die erste reine \gls{TSDB} im Ranking ist InfluxDB
auf Platz 29.\footnote{\cite[vgl.][]{dbranking}}
@ -67,10 +68,10 @@ auf Platz 29.\footnote{\cite[vgl.][]{dbranking}}
\end{minipage}
\end{figure}
Allerdings haben Datenbanken die nur auf das verarbeiten von Time Series Data ausgelegt sind deutliche Performance Vorteile
gegenüber Multi Model Datenbanken. In einem Vergleich von InfluxDB und MongoDB hat InfluxDB eine 2,4 mal bessere
Schreibperformance als MongoDB und ist beim lesen sogar 5,7 mal schneller. InfluxDB benötigt außerdem 20 mal weniger
Speicherplatz auf der Festplatte um die gleiche Menge an Daten zu speichern.\footnote{\cite[vgl.][]{InfluxDBvsMongo}}
Allerdings haben Datenbanken, die nur auf das verarbeiten von Time Series Data ausgelegt sind, deutliche Performance Vorteile
gegenüber Multi Model Datenbanken. In einem Vergleich von InfluxDB und MongoDB, hat InfluxDB eine 2,4 mal bessere
Schreibperformance als MongoDB und ist beim Lesen sogar 5,7 mal schneller. InfluxDB benötigt außerdem 20 mal weniger
Speicherplatz auf der Festplatte, um die gleiche Menge an Daten zu speichern.\footnote{\cite[vgl.][]{InfluxDBvsMongo}}
% Der Teil kommt in die Arbeit wenn ich zu wenig Seiten habe
@ -98,6 +99,5 @@ Speicherplatz auf der Festplatte um die gleiche Menge an Daten zu speichern.\foo
% Python
% Jupyter Notebooks
\subsubsection{{InfluxDB installation}}
\subsubsection{{InfluxDB Installation}}

View file

@ -1,10 +1,15 @@
\section{{InfluxDB}}
InfluxDB ist eine in Go geschreiben open source \gls{TSDB} die darauf ausgelegt ist mit großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
In Kapitel 4 dieser Arbeit wird am Beispeil von Wetterdaten gezeigt wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die integration in eigene Anwendungen
ein \gls{HTTP} \gls{API} zur verfügung für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
InfluxDB ist eine in Go geschriebene open source \gls{TSDB}, die darauf ausgelegt ist, mit einer großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
Im weiterem verlauf dieses Kapitels wird am Beispiel von Wetterdaten gezeigt, wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die Integration in
eigene Anwendungen ein \gls{HTTP} \gls{API} zur Verfügung, für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
\footnote{\cite[vgl.][]{InfluxAPI}}
%
% Bis hierhin korrigiert!
%
%\subsection{{Installation}}
%\subsection{InfluxDB Webinterface}
@ -13,25 +18,25 @@ ein \gls{HTTP} \gls{API} zur verfügung für die es in vielen Programmiersprache
\subsection{{Daten einfügen}}
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen muss zunächst erst einmal ein Bucket angelegt werden. Dazu gibt es zwei
Möglichkeiten. Die einfachste ist es über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt Data
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen, muss zunächst ein Bucket angelegt werden. Dazu gibt es zwei
Möglichkeiten. Die Einfachste ist es, über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt Data
und der Reiter Buckets ausgewählt werden. Hier kann dann mit dem Button Create Bucket ein neuer Bucket angelegt werden. Bein anlegen kann noch eine
Lebensdauer für die Daten ausgewählt werden nach welcher die jeweiligen Datenpunkte gelöscht werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
Lebensdauer für die Daten ausgewählt werden, nach welcher die jeweiligen Datenpunkte gelöscht werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
Daten werden immer nach dem InfluxDB Line Protokoll formatiert an die Datenbank gesendet. Das Protokoll ist wie in Listing~\ref{list:lineproto}
dargestellt aufgebaut. Im ersten Teil des Line Protokolls wird der Name der Messreihe angegeben. Das kann zum Beispiel der Name des Sensors sein oder
der Ort an dem der Messwert genommen wurde. Wichtig ist, dass groß und Kleinschreibung beachtete werden muss und Unterstriche nicht
genutzt werden dürfen. Sonderzeichen müssen mit einem %\textbackslash
der Ort an dem der Messwert genommen wurde. Wichtig ist, dass Groß und Kleinschreibung beachtet werden muss und Unterstriche nicht
genutzt werden dürfen. Sonderzeichen müssen mit einem \textbackslash \ %Bachslash mit Leerzeichen
maskiert werden. Nach dem Namen kommen getrennt durch ein Komma die Tags der Messung.
Tags werden indexiert und dazu genutzt um Messwerte zu durchsuchen. Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
zum Beispiel der Standort des Sensors oder der Name des Servers einzutragen werden zu dem die Datenpunkt/e gehören. Die eigentlichen Werte sind mit einem
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennte Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
In einer Datei oder anfrage kann es mehrere Zeilen mit Daten geben.\footnote{\cite[vgl.][]{InfluxDBLineProtolkoll}}
Tags werden indexiert und dazu genutzt, um Messwerte zu durchsuchen. Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
zum Beispiel der Standort des Sensors oder der Name des Servers eingetragen werden, zu dem die Datenpunkt/e gehören. Die eigentlichen Werte sind mit einem
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennten Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
In einer Datei oder Anfrage kann es mehrere Zeilen mit Daten geben.\footnote{\cite[vgl.][]{InfluxDBLineProtolkoll}}
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#naming-restrictions
\begin{figure}[bht]
\begin{lstlisting}[caption=InfluxDB Line Protokoll {Quelle: \cite[][]{InfluxDBLineProtolkoll}}, label=list:lineproto]
\begin{lstlisting}[caption=InfluxDB Line Protokoll {Quelle: \cite[][]{InfluxDBLineProtolkoll}}, label=list:lineproto],
measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
--------------- --------------- --------------------- -------------------
| | | |
@ -42,12 +47,12 @@ measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#naming-restrictions
Die im Line Protokoll formatierten Daten können jetzt entweder mithilfe eines Rest Requests oder des InfluxDB \gls{CLI} in die Datenbank übertragen werden.
Um diese Anfragen zu Autorisieren muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
Um einen Token zu bekommen kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelget werden. Der einfachste Weg ist es
Um diese Anfragen zu autorisieren muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
Um einen Token zu bekommen, kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelegt werden. Der einfachste Weg ist es,
den Token über das Webinterface anzulegen. Dazu wird wie beim anlegen eines Buckets zunächst der Menüpunkt Data ausgewählt und anschließend der Reiter API
Tokens. Mit einem Klick auf Generate API Token kann dann ein API Token erstellt werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-api-token}, \cref{fig:load-data-add-token}}
Dabei kann zwischen einem All-Access token und einem Read/Write token ausgewählt werden. Mit dem All Access Token kann auf alles zugegriffen werden.
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen ausgewählt werden auf welchen Bucket geschrieben oder gelesen werden kann.
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen, ausgewählt werden, auf welchen Bucket geschrieben oder gelesen werden kann.
\footnote{\cite[vgl.][]{InfluxDBToken}}
@ -60,7 +65,7 @@ Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen a
%InfluxDB QUerrys
\subsection{{Daten verarbeiten und Visualisieren}}
\subsection{{Daten verarbeiten und visualisieren}}
%InfluxDB Tasks
% InfluxDB Graphen
@ -75,80 +80,102 @@ Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen a
\subsubsection{{Wetterdaten Aufbau}}
Die Wetterdaten des DWD können über den CDC OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über FTP und HTTPS zum Download angeboten.
Unter der URL \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute übersicht über die zum Download angeboten Daten geboten.
Die Werte für die aktuelle Lufttemperatur können über \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
abgerufen werden. Historische Daten können über \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
Die Wetterdaten des DWD können über den CDC OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über FTP und HTTPS zum Download
angeboten. Unter der URL \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute Übersicht über die zum
Download angeboten Daten geboten. Die Werte für die aktuelle Lufttemperatur können über
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
abgerufen werden. Historische Daten können über
\url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
abgerufen werden.
Aktuell werden auf der Webseite für die aktuelle Lufttemperatur ca 480 Datein zum Download angeboten. Die meisten dieser Datein entspricht einer Messstatione
und je nach Tageszeit kann deswegen die Menge der Daten varieiren, weil immer um 00:00 eine neue Datei angefangen wird. In den Zip Dateinen finden sich außerdem
Metadaten über die Messtationen. Die eigentlichen Daten sind als CSV formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} dargestellt
Aktuell werden auf der Webseite, für die aktuelle Lufttemperatur, ca 480 Dateien zum Download angeboten. Die meisten dieser Dateien entsprechen jeweils
einer Messstation und je nach Tageszeit kann deswegen die Menge der Zeilen in der Datei variieren, weil immer um 00:00 eine neue Datei angefangen wird.
In den Zip-Dateien finden sich außerdem Metadaten über die Messtationen. Die eigentlichen Daten sind als \gls{CSV} formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} gekürzt dargestellt
In der \gls{CSV} Datei gibt es 9 Felder. Der Inhalt der Felder wird in \cref{tab:csv-explenation} beschreiben.
\begin{figure}[bht]
\begin{lstlisting}[caption=Wetterdaten CSV, label=list:wetter_csv]
STATIONS_ID;MESS_DATUM; QN;PP_10;TT_10;TM5_10;RF_10;TD_10;eor
73;202205120000; 2; -999; 12.9; 11.2; 84.2; 10.3;eor
73;202205120010; 2; -999; 12.7; 11.2; 84.9; 10.2;eor
73;202205120020; 2; -999; 12.9; 11.4; 83.0; 10.1;eor
73;202205120030; 2; -999; 12.4; 10.7; 86.9; 10.3;eor
73;202205120040; 2; -999; 12.4; 10.5; 86.2; 10.2;eor
73;202205120050; 2; -999; 12.3; 10.3; 85.5; 9.9;eor
73;202205120100; 2; -999; 12.1; 10.1; 88.1; 10.2;eor
73;202205120110; 2; -999; 11.7; 9.9; 90.1; 10.1;eor
73;202205120120; 2; -999; 11.7; 10.0; 89.0; 10.0;eor
73;202205120130; 2; -999; 11.9; 10.2; 86.3; 9.7;eor
73;202205120140; 2; -999; 12.3; 10.6; 83.5; 9.6;eor
73;202205120150; 2; -999; 12.4; 10.9; 83.3; 9.7;eor
73;202205120200; 2; -999; 11.7; 9.8; 86.2; 9.5;eor
73;202205120210; 2; -999; 11.6; 9.6; 88.5; 9.8;eor
73;202205120220; 2; -999; 11.4; 9.4; 88.6; 9.6;eor
73;202205120230; 2; -999; 11.8; 9.9; 88.7; 10.0;eor
73;202205120240; 2; -999; 11.4; 9.9; 88.7; 9.6;eor
73;202205120250; 2; -999; 11.5; 9.7; 89.5; 9.8;eor
73;202205120300; 2; -999; 11.6; 10.0; 88.4; 9.8;eor
73;202205120310; 2; -999; 11.4; 10.3; 87.5; 9.4;eor
73;202205120320; 2; -999; 11.6; 9.9; 89.0; 9.9;eor
73;202205120330; 2; -999; 12.1; 10.4; 87.3; 10.1;eor
73;202205120340; 2; -999; 12.1; 10.6; 87.2; 10.0;eor
73;202205120350; 2; -999; 11.9; 10.2; 87.2; 9.8;eor
...
\end{lstlisting}
\end{figure}
%Eventuell kürzen wenn zu viele Seiten
\begin{figure}[bht]
\begin{lstlisting}[caption=Wetterdaten CSV {Quelle: DWD Wetterdaten CSV Download}, label=list:wetter_csv]
STATIONS_ID;MESS_DATUM; QN;PP_10;TT_10;TM5_10;RF_10;TD_10;eor
73;202205120000; 2; -999; 12.9; 11.2; 84.2; 10.3;eor
73;202205120010; 2; -999; 12.7; 11.2; 84.9; 10.2;eor
73;202205120020; 2; -999; 12.9; 11.4; 83.0; 10.1;eor
73;202205120030; 2; -999; 12.4; 10.7; 86.9; 10.3;eor
73;202205120040; 2; -999; 12.4; 10.5; 86.2; 10.2;eor
73;202205120050; 2; -999; 12.3; 10.3; 85.5; 9.9;eor
73;202205120100; 2; -999; 12.1; 10.1; 88.1; 10.2;eor
73;202205120110; 2; -999; 11.7; 9.9; 90.1; 10.1;eor
73;202205120120; 2; -999; 11.7; 10.0; 89.0; 10.0;eor
\end{lstlisting}
\end{figure}
In der CSV Datei gibt es 9 Felder.
%Quelle einfügen
\begin{tabular}{l|p{13.0cm}}
\begin{table}[hbt]
\centering
\begin{minipage}[t]{1\textwidth} % Breite, z.B. 1\textwidth
\caption{Bedeutung der CSV Felder} % Überschrift
\begin{tabularx}{\columnwidth}{rXrr}
\toprule
Feld Name & Bedeutung \\
\midrule
STATION\_ID & Gibt an von welcher Station die Werte stammen \\ \hline
MESS\_DATUM & Gibt an wann gemessen wurde im Format "\%Y\%m\%d\%H\%M" Also Jahr Monat Tag Stunde Minute als eine zusammengeschriebene Zahl. \\ \hline
MESS\_DATUM & Gibt an wann gemessen wurde im Format \%Y\%m\%d\%H\%M. Also Jahr Monat Tag Stunde Minute als eine zusammengeschriebene Zahl. \\ \hline
QN & Gibt die Qualität der Messwerte an. Hier gibt es die Werte 1 bis 3
\begin{compactenum}
\item nur formale Kontrolle bei Dekodierung und Import
\item Kontrolle mit individuell festgelegten Kriterien
\item ROUTINE automatische Kontrolle und Korrektur mit QUALIMET
\item ROUTINE automatische Kontrolle und Korrektur mit Software (QUALIMET)
\end{compactenum} \\ \hline
PP\_10 & Luftdruck auf Stationshöhe \\ \hline
TT\_10 & Lufttemperatur auf 2 Meter höhe \\ \hline
TM5\_10 & Lufttemperatur auf 5cm höhe \\ \hline
TD\_10 & relative Luftfeuchtigkeit auf 2m höhe \\ \hline
eor & END OF RECORD kann ignriert werden.
TT\_10 & Lufttemperatur auf 2m Höhe \\ \hline
TM5\_10 & Lufttemperatur auf 5cm Höhe \\ \hline
TD\_10 & relative Luftfeuchtigkeit auf 2m Höhe \\ \hline
eor & END OF RECORD" Bedeutet die Zeile ist zu Ende. \\
\bottomrule
\end{tabularx}
\source{Eigene Darstellung \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/BESCHREIBUNG_obsgermany_climate_10min_tu_now_de.pdf}} % Quelle
\label{tab:csv-explenation}
\end{minipage}
\end{table}
\end{tabular}
In der Datei zehn\_now\_tu\_Beschreibung\_Stationen.txt werden die Wetterstationen beschrieben. Diese Datei ist nicht als \gls{CSV} Datei formatiert sondern als Tabelle und erhält
Daten über die Wetterstationen. Die Daten der Stationen in der heruntergeladenen Textdatei stimmen mit den Daten der Hauptamtliches Messnetz Karte überein.
Allerdings enthält die Textdatei nicht alle Stationen sondern nur Station für die auch Messwerte im Datensatz hinterlegt sind. Die Bedeutung der einzelnen
Spalten der Tabelle sind in der \cref{tab:file-stations} beschreiben.
In dieser CSV Datei sind die Daten mit einem Semikoln voneinander getrennt. Der erste Wert in der CSV Datei ist die STATIONS\_ID auf die später noch weiter eingegangen wird.
Danach folgt das Feld Mess\_Datum Formatiert nach dem
\begin{table}[hbt]
\centering
\begin{minipage}[t]{1\textwidth} % Breite, z.B. 1\textwidth
\caption{Bedeutung Stationstabelle} % Überschrift
\begin{tabularx}{\columnwidth}{rXrr}
\toprule
Feld Name & Bedeutung \\
\midrule
STATION\_ID & Gibt an von welcher Station die Werte stammen \\ \hline
von\_datum & Datum seit dem die Station aktiv ist. \\ \hline
bis\_datum & Hohe der Station. \\ \hline
Stationshoehe & Hohe über dem Normalnullpunkt \\ \hline
geoBreite & Breitengrad der Station. \\ \hline
geoLaenge \_10 & Längengrad der Stations. \\ \hline
Stationsname & Name der Station. \\ \hline
Bundesland & Bundesland in dem die Station steht. \\
\bottomrule
\end{tabularx}
\source{Vergleich der Werte mit der Hauptamtliches Messnetz Karte \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/zehn_now_tu_Beschreibung_Stationen.txt}} % Quelle
\label{tab:file-stations}
\end{minipage}
\end{table}
%\pagebreak %Damit die Tabelle nicht auf der falschen Seite ist.
\subsubsection{{Wetterdaten abrufen}}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Um die Daten auswerten zu können müssen diese als erstes heruntergeladen und entpackt werden. Dazu wird mithilfe von BeautifulSoup aus der \gls{HTML} Seite
des \gls{DWD} für jede Datei eine URL ausgelesen. Die so gewonnen URLs können dann mithilfe einer Schleife heruntergeladen werden.
Um den Messwerten eine Station zuzuordnen zu können wird als erstes die Datei mit den Station verarbeitet. Für jede Station wird Objekt erstellt und in ein
dictionary gespeichert. Dadurch kann in im dictionary einfach über die STATIONS\_ID die passende Station gefunden werden. Weil diese Datei allerdings nicht
CSV formatiert ist musst die Datei auf eine andere Art ausgewertete werden. Um die einzelnen Felder aus einer Zeile zu bekommen wird also immer so lange
gelesen bis wieder ein bestimmte Anzahl von Leerzeichen hintereinander erkannt worden ist. Die Zeichen zwischen den Leerzeichen sind dann ein ausgelesenes Feld.
Nachdem die Stationsdatei ausgewertet word ist werden die CSV Datein in einer Schleife entpackt und mithilfe der Bibliothek Pandas in ein Dataframe
umgewandelt. Das so erzeugte Dataframe wir im letzten Schritt mit den Daten der Stations zusammengeführt und als Datenpunkt in InfluxDB geschrieben.
Weitere Erklärungen und der Code selbst kann im angehängten Jupyter notebook eingesehen und ausgeführt werden.

View file

@ -7,4 +7,6 @@
\newacronym{HTTP}{HTTP}{HyperText Transfer Protocol}
\newacronym{API}{API}{Application Programming Interface}
\newacronym{CLI}{CLI}{Command Line Interface}
\newacronym{UI}{UI}{User Interface}
\newacronym{CSV}{CSV}{Comma-separated values}
\newacronym{UI}{UI}{User Interface}
\newacronym{HTML}{HTML}{Hypertext Markup Language}

Binary file not shown.

View file

@ -30,7 +30,7 @@
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 8,
"id": "c87fe05a-63e3-4748-a01a-d46cb12e9b05",
"metadata": {
"tags": []
@ -40,7 +40,6 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Daten Ordner erstellt\n",
"Fertig\n"
]
}
@ -84,7 +83,7 @@
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 9,
"id": "b9acf473-2f26-40c6-9c48-1a4ec159bd3d",
"metadata": {},
"outputs": [
@ -123,7 +122,7 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 10,
"id": "90f1eb08-b4dd-4743-ad38-492bfd742fec",
"metadata": {},
"outputs": [
@ -161,12 +160,9 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 11,
"id": "2524986b-9c26-42d5-8d76-f4e228d0eb48",
"metadata": {
"jupyter": {
"source_hidden": true
},
"tags": []
},
"outputs": [
@ -179,7 +175,6 @@
}
],
"source": [
"\n",
"download_counter = int(1)\n",
"dwd_len = len(dwd_links)\n",
"station_file = ''\n",
@ -220,7 +215,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 13,
"id": "430041d7-21fa-47d8-8df9-7933a8749f82",
"metadata": {},
"outputs": [
@ -229,7 +224,8 @@
"output_type": "stream",
"text": [
"dwd-data/zehn_now_tu_Beschreibung_Stationen.txt\n",
"Großenkneten \n"
"Großenkneten \n",
"52.9336 \n"
]
}
],
@ -307,7 +303,7 @@
"\n",
"print(station_file)\n",
"stations = read_station_file()\n",
"print(stations[\"44\"].name)\n"
"print(stations[\"44\"].name)"
]
},
{
@ -328,7 +324,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Import durchgeführt \r"
"Import durchgeführt \r"
]
}
],