From 104b1dc6c6933079415c4741e66b5048ebff0b88 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Wed, 16 Oct 2024 21:15:23 +0200 Subject: [PATCH] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 82 +++++++++++++++++++++++++++++++---------- code/corelation_old2.py | 50 +++++++++++++++++++++++++ 2 files changed, 113 insertions(+), 19 deletions(-) create mode 100644 code/corelation_old2.py diff --git a/code/corelation.py b/code/corelation.py index c2cf59a..15cad3a 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -1,4 +1,31 @@ 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=';') @@ -11,40 +38,57 @@ print(hr_data.head()) 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'):") +# 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()) -# 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) +# Schritt 2: Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) 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 +# Zeige die ersten Zeilen der 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') +# Konvertiere auch das 'Datum' der Schlafdaten in Kalenderwoche (KW) +sleep_data['week'] = sleep_data['Datum'].apply(convert_to_week_number) -# Schritt 5: Kombiniere die beiden Datensätze anhand der 'week' Spalte -combined_data = pd.merge(hr_data, sleep_data, on='Datum') +# 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.head()) +print(combined_data) -# Schritt 6: Berechne die Korrelation zwischen dem durchschnittlichen Herzfrequenzwert ('avg_hr') und der Schlafdauer ('sleep_duration') +# 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_old2.py b/code/corelation_old2.py new file mode 100644 index 0000000..c2cf59a --- /dev/null +++ b/code/corelation_old2.py @@ -0,0 +1,50 @@ +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}")