<jupyter_start><jupyter_text>Verarbeitung und Vorverarbeitung vom DatensatzIn diesem Abschnitt wird der Datensatz bearbeitet. Die Daten befinden sich noch im Rohzustand, für eine weitere Verarbeitung, werden sie in bestimmte Formate umgewandelt. Anschließend werden die Messdaten mit Python analysiert. Für die Umsetzung wird das Pandas Framework genutzt. Hauptbestandteil ist die Klasse DataFrame, mit der sich zweidimensionale Tabellen, die aus Zeilen und Spalten bestehen, aufbereiten und umarbeiten lassen. Die Datei messwerte.txt liefert Hinweise, wie die Datei in Python geladen werden soll. Deutschland verwendet ein Komma (,) als Dezimaltrennzeichen. Die meisten europäischen Länder, trennen mit ‚;“ anstatt ‚,‘ und das Dezimaltrennzeichen ist ‚,‘ statt ‚.‘ Datum;Zeit;Kohlendioxid (CO2)[mg/m³];Temperatur[°C];Luftdruck[hPa]01.12.2019;01:00;867;-3,5;102301.12.2019;02:00;885;-3,6;1023Die Rohdaten stellen folgenden Aufgaben:Der Datentyp muss von Objekt in Zahl umwgewandelt werden. Die Datumspalte und Zeitspalte in ein Datumsformat bringen („%d-%m-%y %H:%M“).Die pandas Bibliothek wird geladen und mit mit pd abgekürzt. Stand: 27.04.2021<jupyter_code>import pandas as pd<jupyter_output><empty_output><jupyter_text>Die Messdaten einlesen (pd.read_csv) und die Zellen mit ‚;‘ trennen. Dezimaltrennzeichen ‚,‘ ( sep=‘;‘ , decimal=‘,‘).<jupyter_code>df_wasserkuppe = pd.read_csv('daten/messwerte_wasserkuppe.txt', sep = ';' , decimal = ',')<jupyter_output><empty_output><jupyter_text>Die head-Methode liefert eine Übersicht über die ersten fünf Zeilen.<jupyter_code>df_wasserkuppe.head()<jupyter_output><empty_output><jupyter_text>Beim Einlesen von Daten versucht Pandas, die Daten automatisch in ein Zahlenformat (Integer oder Floats) zu konvertieren. Mit df.dtypes erhalten wir den entsprechenden Datentyp. Für die Messparameter und das Datum ist das nicht gelungen. Für die Verarbeitungsschritte, die uns noch bevorstehen, ist dieses Format ungeeignet.<jupyter_code>df_wasserkuppe.dtypes<jupyter_output><empty_output><jupyter_text>Die Dezimaltrennzeichen in Spalte Temperatur[°C] ',' mit '.' tauschen und erstelle eine neue Spalte Temperatur (df['Temperatur']). (x.replace)<jupyter_code>df_wasserkuppe['Temperatur'] = [x.replace(',' , '.') for x in df_wasserkuppe['Temperatur[°C]']]
df_wasserkuppe.head()<jupyter_output><empty_output><jupyter_text>Die Datenreihe Luftdruck[hPa], Temperatur und Kohlendioxid (CO2)[mg/m³] von object zu float umwandeln, und erstelle eine neue Spalten namens Luftdruck, Temperatur und Kohlendioxid. (pd.to_numeric) Der Parameter errors='coerce' wandelt '-' und andere Parsingfehler zu NaN (Not a Number) um.Pandas-Operationen wie to_numeric arbeiten standardmäßig nicht "in-place". Deswegen werden die Ergebnisse, einer neuen Spalte zugewiesen.<jupyter_code>df_wasserkuppe['Luftdruck'] = pd.to_numeric(df_wasserkuppe['Luftdruck[hPa]'], errors = 'coerce')

df_wasserkuppe['Temperatur'] = pd.to_numeric(df_wasserkuppe['Temperatur'], errors = 'coerce')

df_wasserkuppe['Kohlendioxid'] = pd.to_numeric(df_wasserkuppe['Kohlendioxid (CO2)[mg/m³]'], errors = 'coerce')
df_wasserkuppe.head()
df_wasserkuppe.tail()
df_wasserkuppe.dtypes<jupyter_output><empty_output><jupyter_text>Für die weitere Datenverarbeitung, zum Beispiel für FP Prophet, wird ein bestimmtes Datumsformat benötigt. Zur 'Zeit'spalte wird ":00" hinzugeügt, ohne Sekundenformat gibt es eine Fehlermeldung. [^1]Prophet ist eine Open-Source-Software, die vom Core Data Science-Team von Facebook veröffentlicht wurde. Prophet ist für die Prognose von Zeitreihendaten geeignet.<jupyter_code>df_wasserkuppe['Sekundenformat'] = df_wasserkuppe['Zeit'] + ':00'<jupyter_output><empty_output><jupyter_text>Die Pandas-Funktion to_datetime wird genutzt, um datumsspezifische Operationen durchführen zu können.<jupyter_code>df_wasserkuppe['DatumYDM'] = pd.to_datetime(df_wasserkuppe.Datum)<jupyter_output><empty_output><jupyter_text>Pandas wird informiert, dass die zu lesenden Werte nacheinander Angaben zum Tag, Monat, Jahr beinhalten.<jupyter_code>df_wasserkuppe["DatumMDY"] = df_wasserkuppe["DatumYDM"].dt.strftime("%d-%m-%y")<jupyter_output><empty_output><jupyter_text>Die Spalte Sekundenformat in 0 Tage 01:00:00 wird umgewandelt. (zählt Stunden bis 24 und beginnt bei 0 Tage)<jupyter_code>df_wasserkuppe['Stundenzaehler'] = pd.to_timedelta(df_wasserkuppe.Sekundenformat)<jupyter_output><empty_output><jupyter_text>Zur Spalte DatumMDY die Spalte Stundenzaehler addiert = 2019-12-01 01:00:00<jupyter_code>df_wasserkuppe['DatumStundenzaehler'] = pd.to_datetime(df_wasserkuppe.DatumMDY) + pd.to_timedelta(df_wasserkuppe.Stundenzaehler)<jupyter_output><empty_output><jupyter_text>Das Datumsformat wird in 01-12-2019 01:00 umgwandelt<jupyter_code>df_wasserkuppe["DatumFinal"] = df_wasserkuppe["DatumStundenzaehler"].dt.strftime("%d-%m-%y %H:%M")<jupyter_output><empty_output><jupyter_text>Die folgenden Spalten werden gelöscht:<jupyter_code>df_wasserkuppe = df_wasserkuppe.drop(columns = ['Datum', 'Zeit','Sekundenformat','Kohlendioxid (CO2)[mg/m³]','Temperatur[°C]','Luftdruck[hPa]','DatumYDM','DatumMDY','Stundenzaehler','DatumStundenzaehler'])
df_wasserkuppe = df_wasserkuppe.drop(columns=['Windgeschwindigkeit[m/s]', 'Windrichtung[Grad]','Niederschlag[mm/30min]','Globalstrahlung[W/m²]'])<jupyter_output><empty_output><jupyter_text>Die Spalte DatumFinal in Datum umbenennen.<jupyter_code>df_wasserkuppe = df_wasserkuppe.rename(columns={'DatumFinal' : 'Datum'})<jupyter_output><empty_output><jupyter_text>Die Spalte Datum als Index setzen, dadurch werden die Vorzüge der Datumsklasse genutzt.<jupyter_code>df_wasserkuppe = df_wasserkuppe.set_index('Datum')<jupyter_output><empty_output><jupyter_text>Das Ergebnis: Das Datum wurde als nutzbares Datumsformat umgewandelt. Die Temperatur, Luftdruck und Kohlendioxid sind im Zahlenformat und NaN Werte für fehlende Daten.<jupyter_code>df_wasserkuppe.head()
df_wasserkuppe.dtypes
df_wasserkuppe.info()<jupyter_output><class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 174600 entries, 2000-05-07 01:00:00 to 2020-05-06 00:00:00
Data columns (total 4 columns):
 #   Column        Non-Null Count   Dtype  
---  ------        --------------   -----  
 0   Datum         174600 non-null  object 
 1   Temperatur    173564 non-null  float64
 2   Luftdruck     76646 non-null   float64
 3   Kohlendioxid  154136 non-null  float64
dtypes: float64(3), object(1)
memory usage: 6.7+ MB<jupyter_text>Zusammenfassung:<jupyter_code>df_wasserkuppe['Temperatur'] = [x.replace(',', '.') for x in df_wasserkuppe['Temperatur[°C]']]
df_wasserkuppe['Luftdruck'] = pd.to_numeric(df_wasserkuppe['Luftdruck[hPa]'], errors='coerce')
df_wasserkuppe['Temperatur'] = pd.to_numeric(df_wasserkuppe['Temperatur'], errors='coerce')
df_wasserkuppe['Kohlendioxid'] = pd.to_numeric(df_wasserkuppe['Kohlendioxid (CO2)[mg/m³]'], errors='coerce')
df_wasserkuppe['Sekundenformat'] = df_wasserkuppe['Zeit'] + ':00'
df_wasserkuppe['DatumYDM'] = pd.to_datetime(df_wasserkuppe.Datum)
df_wasserkuppe["DatumMDY"] = df_wasserkuppe["DatumYDM"].dt.strftime("%d-%m-%y")
df_wasserkuppe['Stundenzaehler'] = pd.to_timedelta(df_wasserkuppe.Sekundenformat)
df_wasserkuppe['DatumStundenzaehler'] = pd.to_datetime(df_wasserkuppe.DatumMDY) + pd.to_timedelta(df_wasserkuppe.Stundenzaehler)
df_wasserkuppe["DatumFinal"] = df_wasserkuppe["DatumStundenzaehler"].dt.strftime("%d-%m-%y %H:%M")
df_wasserkuppe = df_wasserkuppe.drop(columns=['Datum', 'Zeit','Sekundenformat','Kohlendioxid (CO2)[mg/m³]','Temperatur[°C]','Luftdruck[hPa]','DatumYDM','DatumMDY','Stundenzaehler','DatumStundenzaehler'])
df_wasserkuppe = df_wasserkuppe.drop(columns=['Windgeschwindigkeit[m/s]', 'Windrichtung[Grad]','Niederschlag[mm/30min]','Globalstrahlung[W/m²]'])
df_wasserkuppe = df_wasserkuppe.rename(columns={'DatumFinal': 'Datum'})
df_wasserkuppe = df_wasserkuppe.set_index('Datum')
df_wasserkuppe.head()<jupyter_output><empty_output><jupyter_text>Die Ergebnisse als csv speichern.<jupyter_code>df_wasserkuppe.to_csv('daten/wasserkuppe.csv')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1231938216243149, 'fraction_numerical': 0.022047832585949178, 'mean_word_length': 8.479338842975206, 'pattern_counts': {'":': 1, '<': 73, '<?xml version=': 0, '>': 73, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '18', 'dir': 'jupyter-structured-clean-dedup', 'id': '209976', 'license': 'MIT', 'n_tokens_mistral': 3334, 'n_tokens_neox': 3221, 'n_words': 540, 'path': 'jupyter/Kohlendioxidmessung der Messstation Wasserkuppe - Teil 4.ipynb', 'repo_name': 'mylonikos/mylon.github.io', 'size': '8028'}