diff --git a/arbeit/.vscode/settings.json b/arbeit/.vscode/settings.json index 572aaf9..3197826 100644 --- a/arbeit/.vscode/settings.json +++ b/arbeit/.vscode/settings.json @@ -7,7 +7,6 @@ "pdflatex", "biber", "makeglossaries", - "pdflatex", "pdflatex" ] } diff --git a/arbeit/Thesis.pdf b/arbeit/Thesis.pdf index c26f9fb..8979b07 100644 Binary files a/arbeit/Thesis.pdf and b/arbeit/Thesis.pdf differ diff --git a/arbeit/chapter/Anhang.tex b/arbeit/chapter/Anhang.tex index 5100710..b9abef4 100644 --- a/arbeit/chapter/Anhang.tex +++ b/arbeit/chapter/Anhang.tex @@ -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} \ No newline at end of file +\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} diff --git a/arbeit/chapter/Einleitung.tex b/arbeit/chapter/Einleitung.tex index e1b4c0d..a53c225 100644 --- a/arbeit/chapter/Einleitung.tex +++ b/arbeit/chapter/Einleitung.tex @@ -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. diff --git a/arbeit/chapter/Grundlagen.tex b/arbeit/chapter/Grundlagen.tex index 73ef633..094bb83 100644 --- a/arbeit/chapter/Grundlagen.tex +++ b/arbeit/chapter/Grundlagen.tex @@ -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}} diff --git a/arbeit/chapter/InfluxDB.tex b/arbeit/chapter/InfluxDB.tex index 4f6ab7f..406f721 100644 --- a/arbeit/chapter/InfluxDB.tex +++ b/arbeit/chapter/InfluxDB.tex @@ -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. \ No newline at end of file +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. \ No newline at end of file diff --git a/arbeit/config/Abkuerzungen.tex b/arbeit/config/Abkuerzungen.tex index 3a0ceca..a066186 100644 --- a/arbeit/config/Abkuerzungen.tex +++ b/arbeit/config/Abkuerzungen.tex @@ -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} \ No newline at end of file +\newacronym{CSV}{CSV}{Comma-separated values} +\newacronym{UI}{UI}{User Interface} +\newacronym{HTML}{HTML}{Hypertext Markup Language} \ No newline at end of file diff --git a/arbeit/library/BESCHREIBUNG_obsgermany_climate_10min_tu_now_de.pdf b/arbeit/library/BESCHREIBUNG_obsgermany_climate_10min_tu_now_de.pdf new file mode 100644 index 0000000..2623276 Binary files /dev/null and b/arbeit/library/BESCHREIBUNG_obsgermany_climate_10min_tu_now_de.pdf differ diff --git a/data/influxdb/data/influxd.bolt b/data/influxdb/data/influxd.bolt index f2ff016..ba3fff8 100644 Binary files a/data/influxdb/data/influxd.bolt and b/data/influxdb/data/influxd.bolt differ diff --git a/data/jupyLab/Wetterdaten-Import.ipynb b/data/jupyLab/Wetterdaten-Import.ipynb index a30d1e9..e53118c 100644 --- a/data/jupyLab/Wetterdaten-Import.ipynb +++ b/data/jupyLab/Wetterdaten-Import.ipynb @@ -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" ] } ],