diff --git a/code/corelation_old.py b/code/corelation_old.py deleted file mode 100644 index a597b71..0000000 --- a/code/corelation_old.py +++ /dev/null @@ -1,35 +0,0 @@ -import pandas as pd - -# Lade die CSV-Dateien -# Datei 1 mit Semikolon (;) separiert (HR-Daten) -hr_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_gramic.csv', sep=';') - -# Datei 2 mit Komma (,) separiert (Schlafdaten) -sleep_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/sleep_gramic.csv', sep=',') - -# Überprüfen der ersten Zeilen der Dateien -print("HR-Daten:") -print(hr_data.head()) - -print("\nSchlafdaten:") -print(sleep_data.head()) - -# Annahme: Beide Datensätze enthalten eine Spalte für Wochen (z.B. 'week') -# und die jeweiligen Werte (z.B. 'avg_hr' für Herzfrequenz und 'sleep_duration' für Schlafdauer) - -# Sicherstellen, dass beide Datensätze nach Woche sortiert sind -hr_data = hr_data.sort_values(by='Datum') -sleep_data = sleep_data.sort_values(by='week') - -# Kombinieren der beiden Datensätze anhand der 'week' Spalte -combined_data = pd.merge(hr_data, sleep_data, on='Datum') - -# Überprüfen der kombinierten Daten -print("\nKombinierte Daten:") -print(combined_data.head()) - -# Berechne die Korrelation zwischen der durchschnittlichen Herzfrequenz (z.B. 'avg_hr') -# und der Schlafdauer (z.B. 'sleep_duration') -correlation = combined_data['avg_hr'].corr(combined_data['Durchschnittliche Dauer']) - -print(f"\nDie Korrelation zwischen der Herzfrequenz und der Schlafdauer ist: {correlation}") diff --git a/code/corelation_old2.py b/code/corelation_old2.py deleted file mode 100644 index c2cf59a..0000000 --- a/code/corelation_old2.py +++ /dev/null @@ -1,50 +0,0 @@ -import pandas as pd - -# Schritt 1: Lade die HR-Daten (mit Semikolon separiert) und entferne 'bpm' -hr_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_gramic.csv', sep=';') - -# Zeige die ersten Zeilen der HR-Daten vor der Bereinigung -print("HR-Daten (vor der Bereinigung):") -print(hr_data.head()) - -# Entferne 'bpm' und konvertiere die Werte in numerische Daten -hr_data['In Ruhe'] = hr_data['In Ruhe'].str.replace(' bpm', '').astype(float) -hr_data['Hoch'] = hr_data['Hoch'].str.replace(' bpm', '').astype(float) - -# Zeige die bereinigten HR-Daten -print("\nHR-Daten (nach der Entfernung von 'bpm'):") -print(hr_data.head()) - -# Speichere die bereinigten HR-Daten in eine neue CSV-Datei (Zwischendatei) -hr_data.to_csv('hr_data_cleaned.csv', sep=';', index=False) -print("\nBereinigte HR-Daten wurden in '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_data_cleaned.csv' gespeichert.") - -# Schritt 2: Berechne den Durchschnitt der Herzfrequenzdaten (Resting HR und High HR) -hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) - -# Zeige die HR-Daten nach der Berechnung des Durchschnitts -print("\nHR-Daten (nach der Berechnung des Durchschnitts):") -print(hr_data.head()) - -# Schritt 3: Lade die Schlafdaten (mit Komma separiert) -sleep_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/sleep_gramic.csv', sep=',') - -# Zeige die Schlafdaten -print("\nSchlafdaten:") -print(sleep_data.head()) - -# Schritt 4: Sicherstellen, dass beide Datensätze nach 'week' sortiert sind -hr_data = hr_data.sort_values(by='Datum') -sleep_data = sleep_data.sort_values(by='Datum') - -# Schritt 5: Kombiniere die beiden Datensätze anhand der 'week' Spalte -combined_data = pd.merge(hr_data, sleep_data, on='Datum') - -# Zeige die kombinierten Daten -print("\nKombinierte Daten:") -print(combined_data.head()) - -# Schritt 6: Berechne die Korrelation zwischen dem durchschnittlichen Herzfrequenzwert ('avg_hr') und der Schlafdauer ('sleep_duration') -correlation = combined_data['avg_hr'].corr(combined_data['Durchschnittliche Dauer']) - -print(f"\nDie Korrelation zwischen der durchschnittlichen Herzfrequenz und der Schlafdauer ist: {correlation}") diff --git a/code/corelation_old3.py b/code/corelation_old3.py deleted file mode 100644 index 15cad3a..0000000 --- a/code/corelation_old3.py +++ /dev/null @@ -1,94 +0,0 @@ -import pandas as pd -import matplotlib.pyplot as plt -import numpy as np -from datetime import datetime - - -# Manuelle Zuordnung der Monatsnamen von Deutsch auf Englisch -month_translation = { - 'Jan': 'Jan', 'Feb': 'Feb', 'Mär': 'Mar', 'Apr': 'Apr', 'Mai': 'May', 'Jun': 'Jun', - 'Jul': 'Jul', 'Aug': 'Aug', 'Sep': 'Sep', 'Okt': 'Oct', 'Nov': 'Nov', 'Dez': 'Dec' -} - -# Funktion, um 'Okt 10-16' in eine Kalenderwoche zu konvertieren -def convert_to_week_number(date_range_str): - # Splitte den Datumsbereich in Monat und Tage - month_str, day_range = date_range_str.split(" ") - start_day = int(day_range.split("-")[0]) # Nimm den Starttag - current_year = datetime.now().year - - # Konvertiere den deutschen Monatsnamen in den englischen - if month_str in month_translation: - month_str = month_translation[month_str] - - # Erstelle das Datum basierend auf dem Starttag und dem aktuellen Jahr - date_str = f"{month_str} {start_day} {current_year}" - start_date = datetime.strptime(date_str, "%b %d %Y") # Konvertiere in ein Datum - return start_date.isocalendar()[1] # Gib die Kalenderwoche zurück - - -# Schritt 1: Lade die HR-Daten (mit Semikolon separiert) und entferne 'bpm' -hr_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_gramic.csv', sep=';') - -# Zeige die ersten Zeilen der HR-Daten vor der Bereinigung -print("HR-Daten (vor der Bereinigung):") -print(hr_data.head()) - -# Entferne 'bpm' und konvertiere die Werte in numerische Daten -hr_data['In Ruhe'] = hr_data['In Ruhe'].str.replace(' bpm', '').astype(float) -hr_data['Hoch'] = hr_data['Hoch'].str.replace(' bpm', '').astype(float) - -# Konvertiere die Spalte 'Datum' in Kalenderwoche (KW) -hr_data['week'] = hr_data['Datum'].apply(convert_to_week_number) - -# Zeige die HR-Daten nach der Umwandlung in Wochen -print("\nHR-Daten (nach der Umwandlung in KW):") -print(hr_data.head()) - -# Schritt 2: Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) -hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) - -# Schritt 3: Lade die Schlafdaten (mit Komma separiert) -sleep_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/sleep_gramic.csv', sep=',') - -# Zeige die ersten Zeilen der Schlafdaten -print("\nSchlafdaten:") -print(sleep_data.head()) - -# Konvertiere auch das 'Datum' der Schlafdaten in Kalenderwoche (KW) -sleep_data['week'] = sleep_data['Datum'].apply(convert_to_week_number) - -# Schritt 4: Sicherstellen, dass beide Datensätze nach 'week' sortiert sind -hr_data = hr_data.sort_values(by='week') -sleep_data = sleep_data.sort_values(by='week') - -# Schritt 5: Kombiniere die beiden Datensätze anhand der 'week' Spalte mit einem äußeren Join -combined_data = pd.merge(hr_data, sleep_data, on='week', how='outer') - -# Zeige die kombinierten Daten -print("\nKombinierte Daten:") -print(combined_data) - -# Schritt 6: Entferne alle Zeilen mit fehlenden Daten -combined_data = combined_data.dropna() - -# Schritt 7: Berechne die Korrelation zwischen dem durchschnittlichen Herzfrequenzwert ('avg_hr') und der Schlafdauer ('Durchschnittliche Dauer') -correlation = combined_data['avg_hr'].corr(combined_data['Durchschnittliche Dauer']) - -print(f"\nDie Korrelation zwischen der durchschnittlichen Herzfrequenz und der Schlafdauer ist: {correlation}") - -# Schritt 8: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer -plt.figure(figsize=(10, 6)) -plt.scatter(combined_data['avg_hr'], combined_data['Durchschnittliche Dauer'], color='blue', label='Datenpunkte') -plt.title('Zusammenhang zwischen Herzfrequenz (Durchschnitt) und Schlafdauer') -plt.xlabel('Durchschnittliche Herzfrequenz (bpm)') -plt.ylabel('Schlafdauer (Stunden)') -plt.grid(True) - -# Linie zur Visualisierung des Trends hinzufügen -m, b = np.polyfit(combined_data['avg_hr'], combined_data['Durchschnittliche Dauer'], 1) -plt.plot(combined_data['avg_hr'], m * combined_data['avg_hr'] + b, color='red', - label=f'Trendlinie (Kor = {correlation:.2f})') - -plt.legend() -plt.show() diff --git a/code/corelation_old4.py b/code/corelation_old4.py deleted file mode 100644 index 2b55ec6..0000000 --- a/code/corelation_old4.py +++ /dev/null @@ -1,266 +0,0 @@ -import pandas as pd -import matplotlib.pyplot as plt -import numpy as np -from datetime import datetime -import os - -# Manuelle Zuordnung der Monatsnamen von Deutsch auf Englisch -# month_translation = { -# 'Jan': 'Jan', 'Feb': 'Feb', 'Mär': 'Mar', 'Apr': 'Apr', 'Mai': 'May', 'Jun': 'Jun', -# 'Jul': 'Jul', 'Aug': 'Aug', 'Sep': 'Sep', 'Okt': 'Oct', 'Nov': 'Nov', 'Dez': 'Dec', 'Mrz': 'Mar' -# } - - -# Funktion, um 'Okt 10-16' in eine Kalenderwoche zu konvertieren und das Startdatum zurückzugeben -# def convert_to_week_number_and_start_date(date_range_str): -# # Splitte den Datumsbereich in Monat und Tage -# start_part, end_part = date_range_str.split(" - ") -# start_month_str, start_day = start_part.split(" ") -# start_day = int(start_day) # Nimm den Starttag -# -# # Konvertiere den deutschen Monatsnamen in den englischen -# if start_month_str in month_translation: -# start_month_str = month_translation[start_month_str] -# -# # Erstelle das Datum basierend auf dem Starttag und dem aktuellen Jahr -# current_year = datetime.now().year -# date_str = f"{start_month_str} {start_day} {current_year}" -# -# try: -# start_date = datetime.strptime(date_str, "%b %d %Y") # Konvertiere in ein Datum -# except ValueError: -# raise ValueError(f"Ungültiges Datum: {date_str}") -# -# week_number = start_date.isocalendar()[1] # Kalenderwoche ermitteln -# -# return week_number, start_date.strftime('%Y-%m-%d') # Gib KW und das Startdatum zurück -# Funktion, um 'Okt 10-16' oder 'Okt 10 - 16' in eine Kalenderwoche zu konvertieren und das Startdatum zurückzugeben -# def convert_to_week_number_and_start_date(date_range_str): -# # Entferne zusätzliche Leerzeichen um den Bindestrich herum -# date_range_str = date_range_str.replace(" - ", "-") -# -# # Splitte den Datumsbereich in Start- und Endbereich -# start_part, end_part = date_range_str.split("-") -# start_month_str, start_day = start_part.split(" ") -# start_day = int(start_day.strip()) # Nimm den Starttag und entferne etwaige Leerzeichen -# -# # Konvertiere den deutschen Monatsnamen in den englischen -# if start_month_str in month_translation: -# start_month_str = month_translation[start_month_str] -# -# # Erstelle das Datum basierend auf dem Starttag und dem aktuellen Jahr -# current_year = datetime.now().year -# date_str = f"{start_month_str} {start_day} {current_year}" -# -# try: -# start_date = datetime.strptime(date_str, "%b %d %Y") # Konvertiere in ein Datum -# except ValueError: -# raise ValueError(f"Ungültiges Datum: {date_str}") -# -# week_number = start_date.isocalendar()[1] # Kalenderwoche ermitteln -# -# return week_number, start_date.strftime('%Y-%m-%d') # Gib KW und das Startdatum zurück - -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4' oder 'Okt 10-16' in die Kalenderwoche zu konvertieren -# und das Startdatum zurückzugeben -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4' oder 'Okt 10-16' in die Kalenderwoche zu konvertieren -# und das Startdatum zurückzugeben -# def convert_to_week_number_and_start_date(date_range_str): -# # Entferne zusätzliche Leerzeichen um den Bindestrich herum -# date_range_str = date_range_str.replace(" - ", "-") -# -# # Splitte den Datumsbereich in Start- und Endteil -# start_part, end_part = date_range_str.split("-") -# -# # Verarbeite den Startteil -# start_month_str, start_day = start_part.split(" ") -# start_day = int(start_day.strip()) # Nimm den Starttag und entferne etwaige Leerzeichen -# -# # Wenn der Endteil einen Monat enthält, verarbeite ihn ebenfalls -# if " " in end_part: -# end_month_str, end_day = end_part.split(" ") -# end_day = int(end_day.strip()) # Nimm den Endtag -# else: -# # Wenn der Endteil keinen Monat enthält, verwenden wir denselben Monat wie im Startteil -# end_month_str = start_month_str -# end_day = int(end_part.strip()) -# -# # Konvertiere den deutschen Monatsnamen in den englischen für beide Monate -# if start_month_str in month_translation: -# start_month_str = month_translation[start_month_str] -# if end_month_str in month_translation: -# end_month_str = month_translation[end_month_str] -# -# # Erstelle das Datum basierend auf dem Starttag und dem aktuellen Jahr -# current_year = datetime.now().year -# start_date_str = f"{start_month_str} {start_day} {current_year}" -# -# try: -# # Konvertiere in ein Datum -# start_date = datetime.strptime(start_date_str, "%b %d %Y") -# except ValueError: -# raise ValueError(f"Ungültiges Startdatum: {start_date_str}") -# -# # Berechne die Kalenderwoche basierend auf dem Startdatum -# week_number = start_date.isocalendar()[1] -# -# return week_number, start_date.strftime('%Y-%m-%d') # Gib KW und das Startdatum zurück -# Manuelle Zuordnung der Monatsnamen von Deutsch auf Englisch -month_translation = { - 'Jan': 'Jan', 'Feb': 'Feb', 'Mär': 'Mar', 'Mrz': 'Mar', 'Apr': 'Apr', 'Mai': 'May', 'Jun': 'Jun', - 'Jul': 'Jul', 'Aug': 'Aug', 'Sep': 'Sep', 'Okt': 'Oct', 'Nov': 'Nov', 'Dez': 'Dec' -} - - -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4', 'Dez 29, 2023-Jan 4, 2024', 'Dez 22-28 2023' oder 'Dez 28' in Kalenderwoche und Startdatum zu konvertieren -def convert_to_week_number_and_start_date(date_range_str): - # Entferne zusätzliche Leerzeichen um den Bindestrich herum und entferne Kommas - date_range_str = date_range_str.replace(" - ", "-").replace(",", "") - - # Prüfen, ob das Format nur einen Tag und Monat enthält (z.B. 'Dez 28') - if "-" not in date_range_str and len(date_range_str.split(" ")) == 2: - # Nur ein Datum (Monat und Tag) - month_str, day_str = date_range_str.split(" ") - day = int(day_str.strip()) - year_str = str(datetime.now().year) # Verwende das aktuelle Jahr - - # Konvertiere den deutschen Monatsnamen in den englischen - if month_str in month_translation: - month_str = month_translation[month_str] - - # Konvertiere das Datum - start_date = datetime.strptime(f"{month_str} {day} {year_str}", "%b %d %Y") - - # Berechne die Kalenderwoche - week_number = start_date.isocalendar()[1] - - return week_number, start_date.strftime('%Y-%m-%d') - - # Prüfen, ob das Jahr am Ende steht (z.B. 'Dez 22-28 2023') - if date_range_str[-4:].isdigit(): - # Jahr am Ende des Datums - year_str = date_range_str[-4:] - date_range_str = date_range_str[:-5] # Entferne das Jahr aus der Datumsangabe - else: - # Kein Jahr am Ende -> nutze das aktuelle Jahr - year_str = str(datetime.now().year) - - # Splitte den Datumsbereich in Start- und Endteil - start_part, end_part = date_range_str.split("-") - - # Verarbeite den Startteil - start_parts = start_part.split(" ") - start_month_str = start_parts[0] - start_day = int(start_parts[1].strip()) # Nimm den Starttag und entferne etwaige Leerzeichen - - # Verarbeite den Endteil - end_parts = end_part.split(" ") - - # Verarbeite das Enddatum, basierend darauf, ob der Endteil das Jahr enthält - if len(end_parts) == 2: # Fall: 'Apr 4' - end_month_str = end_parts[0] - end_day = int(end_parts[1].strip()) - else: - # Fall: kein Monat -> nur Tag (z.B. '28' im Format 'Dez 22-28 2023') - end_month_str = start_month_str - end_day = int(end_parts[0].strip()) - - # Konvertiere den deutschen Monatsnamen in den englischen für beide Monate - if start_month_str in month_translation: - start_month_str = month_translation[start_month_str] - if end_month_str in month_translation: - end_month_str = month_translation[end_month_str] - - try: - # Konvertiere das Startdatum in ein Datum - start_date = datetime.strptime(f"{start_month_str} {start_day} {year_str}", "%b %d %Y") - except ValueError: - raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {year_str}") - - try: - # Konvertiere das Enddatum in ein Datum - end_date = datetime.strptime(f"{end_month_str} {end_day} {year_str}", "%b %d %Y") - except ValueError: - raise ValueError(f"Ungültiges Enddatum: {end_month_str} {end_day} {year_str}") - - # Berechne die Kalenderwoche basierend auf dem Startdatum - week_number = start_date.isocalendar()[1] - - return week_number, start_date.strftime('%Y-%m-%d') # Gib KW und das Startdatum zurück - - -# Funktion zum Bereinigen und Zwischenspeichern der Daten -def clean_and_save_data(hr_data, sleep_data, output_dir='sandbox'): - # Entferne 'bpm' und konvertiere die Werte in numerische Daten - hr_data['In Ruhe'] = hr_data['In Ruhe'].str.replace(' bpm', '').astype(float) - hr_data['Hoch'] = hr_data['Hoch'].str.replace(' bpm', '').astype(float) - - # Konvertiere die Spalte 'Datum' in Kalenderwoche (KW) und Startdatum - hr_data[['week', 'start_date']] = hr_data['Datum'].apply( - lambda x: pd.Series(convert_to_week_number_and_start_date(x))) - - # Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) - hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) - - # Konvertiere auch das 'Datum' der Schlafdaten in Kalenderwoche (KW) und Startdatum - sleep_data[['week', 'start_date']] = sleep_data['Datum'].apply( - lambda x: pd.Series(convert_to_week_number_and_start_date(x))) - - # Speichere die bereinigten Daten in 'sandbox' - if not os.path.exists(output_dir): - os.makedirs(output_dir) - - hr_data_clean_path = os.path.join(output_dir, 'hr_data_clean.csv') - sleep_data_clean_path = os.path.join(output_dir, 'sleep_data_clean.csv') - - hr_data.to_csv(hr_data_clean_path, sep=';', index=False) - sleep_data.to_csv(sleep_data_clean_path, sep=',', index=False) - - print(f"HR-Daten wurden bereinigt und in {hr_data_clean_path} gespeichert.") - print(f"Schlafdaten wurden bereinigt und in {sleep_data_clean_path} gespeichert.") - - return hr_data, sleep_data - - -# Schritt 1: Lade die HR- und Schlafdaten -hr_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_gramic.csv', - sep=';') -sleep_data = pd.read_csv('/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/sleep_gramic.csv', - sep=',') - -# Bereinige und speichere die Daten -hr_data, sleep_data = clean_and_save_data(hr_data, sleep_data) - -# Schritt 2: Sortiere beide Datensätze nach 'week' und 'start_date' -hr_data = hr_data.sort_values(by=['week', 'start_date']) -sleep_data = sleep_data.sort_values(by=['week', 'start_date']) - -# Schritt 3: Kombiniere die beiden Datensätze anhand der 'week' und 'start_date' Spalten mit einem äußeren Join -combined_data = pd.merge(hr_data, sleep_data, on=['week', 'start_date'], how='outer') - -# Zeige die kombinierten Daten -print("\nKombinierte Daten:") -print(combined_data) - -# Schritt 4: Entferne alle Zeilen mit fehlenden Daten -combined_data = combined_data.dropna() - -# Schritt 5: Berechne die Korrelation zwischen 'avg_hr' und 'Durchschnittliche Dauer' -correlation = combined_data['avg_hr'].corr(combined_data['Durchschnittliche Dauer']) -print(f"\nDie Korrelation zwischen der durchschnittlichen Herzfrequenz und der Schlafdauer ist: {correlation}") - -# Schritt 6: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer -plt.figure(figsize=(10, 6)) -plt.scatter(combined_data['avg_hr'], combined_data['Durchschnittliche Dauer'], color='blue', label='Datenpunkte') -plt.title('Zusammenhang zwischen Herzfrequenz (Durchschnitt) und Schlafdauer') -plt.xlabel('Durchschnittliche Herzfrequenz (bpm)') -plt.ylabel('Schlafdauer (Stunden)') -plt.grid(True) - -# Linie zur Visualisierung des Trends hinzufügen -m, b = np.polyfit(combined_data['avg_hr'], combined_data['Durchschnittliche Dauer'], 1) -plt.plot(combined_data['avg_hr'], m * combined_data['avg_hr'] + b, color='red', - label=f'Trendlinie (Kor = {correlation:.2f})') - -plt.legend() -plt.show() diff --git a/code/corelation_old5.py b/code/corelation_old5.py deleted file mode 100644 index 79bc956..0000000 --- a/code/corelation_old5.py +++ /dev/null @@ -1,144 +0,0 @@ -import pandas as pd -import matplotlib.pyplot as plt -import numpy as np -from datetime import datetime - -# Manuelle Zuordnung der Monatsnamen von Deutsch auf Englisch -month_translation = { - 'Jan': 'Jan', 'Feb': 'Feb', 'Mär': 'Mar', 'Mrz': 'Mar', 'Apr': 'Apr', 'Mai': 'May', 'Jun': 'Jun', - 'Jul': 'Jul', 'Aug': 'Aug', 'Sep': 'Sep', 'Okt': 'Oct', 'Nov': 'Nov', 'Dez': 'Dec' -} - - -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4', 'Dez 22-28 2023' oder 'Dez 28' in Kalenderwoche und Jahr zu konvertieren -def convert_to_week_and_year(date_range_str): - # Entferne zusätzliche Leerzeichen um den Bindestrich herum und entferne Kommas - date_range_str = date_range_str.replace(" - ", "-").replace(",", "") - - # Prüfen, ob das Format nur einen Tag und Monat enthält (z.B. 'Dez 28') - if "-" not in date_range_str and len(date_range_str.split(" ")) == 2: - # Nur ein Datum (Monat und Tag) - month_str, day_str = date_range_str.split(" ") - day = int(day_str.strip()) - year_str = str(datetime.now().year) # Verwende das aktuelle Jahr - - # Konvertiere den deutschen Monatsnamen in den englischen - if month_str in month_translation: - month_str = month_translation[month_str] - - # Konvertiere das Datum - start_date = datetime.strptime(f"{month_str} {day} {year_str}", "%b %d %Y") - - # Berechne die Kalenderwoche und das Jahr - week_number = start_date.isocalendar()[1] - year = start_date.year - - return f"W{week_number}-{year}" - - # Prüfen, ob das Jahr am Ende steht (z.B. 'Dez 22-28 2023') - if date_range_str[-4:].isdigit(): - # Jahr am Ende des Datums - year_str = date_range_str[-4:] - date_range_str = date_range_str[:-5] # Entferne das Jahr aus der Datumsangabe - else: - # Kein Jahr am Ende -> nutze das aktuelle Jahr - year_str = str(datetime.now().year) - - # Splitte den Datumsbereich in Start- und Endteil - start_part, end_part = date_range_str.split("-") - - # Verarbeite den Startteil - start_parts = start_part.split(" ") - start_month_str = start_parts[0] - start_day = int(start_parts[1].strip()) # Nimm den Starttag und entferne etwaige Leerzeichen - - # Verarbeite den Endteil - end_parts = end_part.split(" ") - - # Verarbeite das Enddatum, basierend darauf, ob der Endteil das Jahr enthält - if len(end_parts) == 2: # Fall: 'Apr 4' - end_month_str = end_parts[0] - end_day = int(end_parts[1].strip()) - else: - # Fall: kein Monat -> nur Tag (z.B. '28' im Format 'Dez 22-28 2023') - end_month_str = start_month_str - end_day = int(end_parts[0].strip()) - - # Konvertiere den deutschen Monatsnamen in den englischen für beide Monate - if start_month_str in month_translation: - start_month_str = month_translation[start_month_str] - if end_month_str in month_translation: - end_month_str = month_translation[end_month_str] - - try: - # Konvertiere das Startdatum in ein Datum - start_date = datetime.strptime(f"{start_month_str} {start_day} {year_str}", "%b %d %Y") - except ValueError: - raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {year_str}") - - # Berechne die Kalenderwoche und das Jahr basierend auf dem Startdatum - week_number = start_date.isocalendar()[1] - year = start_date.year - - return f"W{week_number}-{year}" # Gib Kalenderwoche und Jahr im Format W-YYYY zurück - - -# Datei Pfade -hr_data_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_gramic.csv' -sleep_data_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/sleep_gramic.csv' -hr_clean_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/sandbox/hr_data_clean.csv' -sleep_clean_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/sandbox/sleep_data_clean.csv' -combined_data_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/sandbox/combined_data.csv' - -# Schritt 1: Lade die HR-Daten (mit Semikolon separiert) und entferne 'bpm' -hr_data = pd.read_csv(hr_data_path, sep=';') - -# Entferne 'bpm' und konvertiere die Werte in numerische Daten -hr_data['In Ruhe'] = hr_data['In Ruhe'].str.replace(' bpm', '').astype(float) -hr_data['Hoch'] = hr_data['Hoch'].str.replace(' bpm', '').astype(float) - -# Konvertiere die Spalte 'Datum' in Kalenderwoche (KW und Jahr) -hr_data['Woche'] = hr_data['Datum'].apply(convert_to_week_and_year) - -# Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) -hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) - -# Speichere nur die Spalten 'Woche' und 'avg_hr' in einer neuen CSV-Datei -hr_data_clean = hr_data[['Woche', 'avg_hr']] -hr_data_clean.to_csv(hr_clean_path, index=False) - -# Schritt 2: Lade die Schlafdaten (mit Komma separiert) -sleep_data = pd.read_csv(sleep_data_path, sep=',') - -# Konvertiere die Spalte 'Datum' in Kalenderwoche (KW und Jahr) -sleep_data['Woche'] = sleep_data['Datum'].apply(convert_to_week_and_year) - -# Speichere nur die Spalten 'Woche' und 'Durchschnittliche Dauer' in einer neuen CSV-Datei -sleep_data_clean = sleep_data[['Woche', 'Durchschnittliche Dauer']] -sleep_data_clean.to_csv(sleep_clean_path, index=False) - -# Schritt 3: Kombiniere die HR- und Schlafdaten basierend auf der 'Woche' -combined_data = pd.merge(hr_data_clean, sleep_data_clean, on='Woche', how='inner') - -# Speichere das kombinierte Dataset in einer neuen CSV-Datei -combined_data.to_csv(combined_data_path, index=False) - -# Schritt 4: Berechne die Korrelation zwischen avg_hr und der Schlafdauer -correlation = combined_data['avg_hr'].corr(combined_data['Durchschnittliche Dauer']) -print(f"Die Korrelation zwischen der durchschnittlichen Herzfrequenz und der Schlafdauer ist: {correlation}") - -# Schritt 5: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer -plt.figure(figsize=(10, 6)) -plt.scatter(combined_data['avg_hr'], combined_data['Durchschnittliche Dauer'], color='blue', label='Datenpunkte') -plt.title('Zusammenhang zwischen Herzfrequenz (Durchschnitt) und Schlafdauer') -plt.xlabel('Durchschnittliche Herzfrequenz (bpm)') -plt.ylabel('Schlafdauer (Stunden)') -plt.grid(True) - -# Linie zur Visualisierung des Trends hinzufügen -m, b = np.polyfit(combined_data['avg_hr'], combined_data['Durchschnittliche Dauer'], 1) -plt.plot(combined_data['avg_hr'], m * combined_data['avg_hr'] + b, color='red', - label=f'Trendlinie (Kor = {correlation:.2f})') - -plt.legend() -plt.show() diff --git a/code/crawler.py b/code/crawler.py deleted file mode 100644 index b15145f..0000000 --- a/code/crawler.py +++ /dev/null @@ -1,21 +0,0 @@ -import requests -from bs4 import BeautifulSoup -import queue -import re -import time -import random - -urls = queue.PriorityQueue() -urls.put((0.5, "https://www.scrapingcourse.com/ecommerce/")) -visited_urls = [] - -while not urls.empty(): - _, current_url = urls.get() - soup = BeautifulSoup(get_html(current_url), "html.parser") - - visited_urls.append(current_url) - crawl_page(soup, current_url, visited_urls, urls) - - # if it is a product page: - # scrape_page(soup, url, products) -time.sleep(random.uniform(1, 3)) \ No newline at end of file diff --git a/code/hr_data_cleaned.csv b/code/hr_data_cleaned.csv deleted file mode 100644 index e30f4a3..0000000 --- a/code/hr_data_cleaned.csv +++ /dev/null @@ -1,53 +0,0 @@ -Datum;In Ruhe;Hoch -Okt 4-10;67.0;130.0 -Sep 27 - Okt 3;67.0;143.0 -Sep 20-26;66.0;149.0 -Sep 13-19;66.0;144.0 -Sep 6-12;62.0;132.0 -Aug 30 - Sep 5;64.0;141.0 -Aug 23-29;67.0;150.0 -Aug 16-22;63.0;143.0 -Aug 9-15;69.0;141.0 -Aug 2-8;67.0;140.0 -Jul 26 - Aug 1;67.0;147.0 -Jul 19-25;69.0;136.0 -Jul 12-18;66.0;151.0 -Jul 5-11;67.0;146.0 -Jun 28 - Jul 4;66.0;157.0 -Jun 21-27;64.0;141.0 -Jun 14-20;70.0;145.0 -Jun 7-13;69.0;134.0 -Mai 31 - Jun 6;70.0;139.0 -Mai 24-30;72.0;142.0 -Mai 17-23;72.0;135.0 -Mai 10-16;71.0;147.0 -Mai 3-9;73.0;142.0 -Apr 26 - Mai 2;69.0;151.0 -Apr 19-25;61.0;135.0 -Apr 12-18;58.0;140.0 -Apr 5-11;64.0;131.0 -Mrz 29 - Apr 4;63.0;139.0 -Mrz 22-28;65.0;135.0 -Mrz 15-21;66.0;137.0 -Mrz 8-14;62.0;136.0 -Mrz 1-7;70.0;134.0 -Feb 23-29;68.0;144.0 -Feb 16-22;71.0;132.0 -Feb 9-15;65.0;143.0 -Feb 2-8;66.0;133.0 -Jan 26 - Feb 1;59.0;142.0 -Jan 19-25;62.0;136.0 -Jan 12-18;60.0;134.0 -Jan 5-11;56.0;139.0 -Dez 29, 2023 - Jan 4, 2024;59.0;128.0 -Dez 22-28, 2023;52.0;124.0 -Dez 15-21, 2023;57.0;133.0 -Dez 8-14, 2023;65.0;133.0 -Dez 1-7, 2023;69.0;134.0 -Nov 24-30, 2023;68.0;139.0 -Nov 17-23, 2023;68.0;143.0 -Nov 10-16, 2023;64.0;144.0 -Nov 3-9, 2023;63.0;140.0 -Okt 27 - Nov 2, 2023;57.0;133.0 -Okt 20-26, 2023;55.0;138.0 -Okt 13-19, 2023;50.0;121.0