From bee98b90dab8c31b2a651f53552242a31f368425 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Wed, 16 Oct 2024 20:48:05 +0200 Subject: [PATCH 01/15] adding corelation.py, corelation_old.py, README.md, hr_gramic.csv and sleep_gramic.csv --- README.md | 17 ++++++++++++- code/corelation.py | 40 +++++++++++++++++++++++++++++ code/corelation_old.py | 35 ++++++++++++++++++++++++++ code/crawler.py | 21 ++++++++++++++++ data/raw/hr_gramic.csv | 53 +++++++++++++++++++++++++++++++++++++++ data/raw/sleep_gramic.csv | 53 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 code/corelation.py create mode 100644 code/corelation_old.py create mode 100644 code/crawler.py create mode 100644 data/raw/hr_gramic.csv create mode 100644 data/raw/sleep_gramic.csv diff --git a/README.md b/README.md index 846c077..24f5817 100644 --- a/README.md +++ b/README.md @@ -18,4 +18,19 @@ Für die folgenden Aufträge dürfen Sie je nach Vorkenntnisse beliebige Tools ( ## Problems - Garmin Weekly Algorithmus unknown. Reverse Engineering necessery -- Comparition between Garmin (Instict Solar 2X) and Withings (Steel HR Sport) not necessarely given \ No newline at end of file +- Comparition between Garmin (Instict Solar 2X) and Withings (Steel HR Sport) not necessarely given + +## Python Depencencis +- + +```shell +pip install --upgrade pip +pip install matplotlib +pip install pandas +pip install pybtex +pip install requests +pip install pyyaml +pip install setuptools +pip install bs4 +pip install requests +``` \ No newline at end of file diff --git a/code/corelation.py b/code/corelation.py new file mode 100644 index 0000000..8cbab6c --- /dev/null +++ b/code/corelation.py @@ -0,0 +1,40 @@ +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 (vor der Berechnung des Durchschnitts):") +print(hr_data.head()) + +# Berechne den Durchschnitt der HR-Daten (zwischen Ruhe und Hoch) +# Erstelle eine neue Spalte 'avg_hr', die den Durchschnitt von 'Resting HR' und 'High HR' enthält +hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) + +# Überprüfen der ersten Zeilen nach dem Hinzufügen der 'avg_hr' Spalte +print("\nHR-Daten (nach der Berechnung des Durchschnitts):") +print(hr_data.head()) + +# Überprüfen der ersten Zeilen der Schlafdaten +print("\nSchlafdaten:") +print(sleep_data.head()) + +# Sicherstellen, dass beide Datensätze nach Woche sortiert sind +hr_data = hr_data.sort_values(by='Datum') +sleep_data = sleep_data.sort_values(by='Datum') + +# 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 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_old.py b/code/corelation_old.py new file mode 100644 index 0000000..a597b71 --- /dev/null +++ b/code/corelation_old.py @@ -0,0 +1,35 @@ +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/crawler.py b/code/crawler.py new file mode 100644 index 0000000..b15145f --- /dev/null +++ b/code/crawler.py @@ -0,0 +1,21 @@ +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/data/raw/hr_gramic.csv b/data/raw/hr_gramic.csv new file mode 100644 index 0000000..3bf5a06 --- /dev/null +++ b/data/raw/hr_gramic.csv @@ -0,0 +1,53 @@ +Datum;In Ruhe;Hoch +Okt 4-10;67 bpm;130 bpm +Sep 27 - Okt 3;67 bpm;143 bpm +Sep 20-26;66 bpm;149 bpm +Sep 13-19;66 bpm;144 bpm +Sep 6-12;62 bpm;132 bpm +Aug 30 - Sep 5;64 bpm;141 bpm +Aug 23-29;67 bpm;150 bpm +Aug 16-22;63 bpm;143 bpm +Aug 9-15;69 bpm;141 bpm +Aug 2-8;67 bpm;140 bpm +Jul 26 - Aug 1;67 bpm;147 bpm +Jul 19-25;69 bpm;136 bpm +Jul 12-18;66 bpm;151 bpm +Jul 5-11;67 bpm;146 bpm +Jun 28 - Jul 4;66 bpm;157 bpm +Jun 21-27;64 bpm;141 bpm +Jun 14-20;70 bpm;145 bpm +Jun 7-13;69 bpm;134 bpm +Mai 31 - Jun 6;70 bpm;139 bpm +Mai 24-30;72 bpm;142 bpm +Mai 17-23;72 bpm;135 bpm +Mai 10-16;71 bpm;147 bpm +Mai 3-9;73 bpm;142 bpm +Apr 26 - Mai 2;69 bpm;151 bpm +Apr 19-25;61 bpm;135 bpm +Apr 12-18;58 bpm;140 bpm +Apr 5-11;64 bpm;131 bpm +Mrz 29 - Apr 4;63 bpm;139 bpm +Mrz 22-28;65 bpm;135 bpm +Mrz 15-21;66 bpm;137 bpm +Mrz 8-14;62 bpm;136 bpm +Mrz 1-7;70 bpm;134 bpm +Feb 23-29;68 bpm;144 bpm +Feb 16-22;71 bpm;132 bpm +Feb 9-15;65 bpm;143 bpm +Feb 2-8;66 bpm;133 bpm +Jan 26 - Feb 1;59 bpm;142 bpm +Jan 19-25;62 bpm;136 bpm +Jan 12-18;60 bpm;134 bpm +Jan 5-11;56 bpm;139 bpm +Dez 29, 2023 - Jan 4, 2024;59 bpm;128 bpm +Dez 22-28, 2023;52 bpm;124 bpm +Dez 15-21, 2023;57 bpm;133 bpm +Dez 8-14, 2023;65 bpm;133 bpm +Dez 1-7, 2023;69 bpm;134 bpm +Nov 24-30, 2023;68 bpm;139 bpm +Nov 17-23, 2023;68 bpm;143 bpm +Nov 10-16, 2023;64 bpm;144 bpm +Nov 3-9, 2023;63 bpm;140 bpm +Okt 27 - Nov 2, 2023;57 bpm;133 bpm +Okt 20-26, 2023;55 bpm;138 bpm +Okt 13-19, 2023;50 bpm;121 bpm diff --git a/data/raw/sleep_gramic.csv b/data/raw/sleep_gramic.csv new file mode 100644 index 0000000..90d5bfc --- /dev/null +++ b/data/raw/sleep_gramic.csv @@ -0,0 +1,53 @@ +Datum,Ø Score,Ø Qualität,Durchschnittliche Dauer,Ø Schlafenszeit,Ø Aufstehzeit +Okt 10-16,46,Schlecht,6h 11min,1:28,7:50 +Okt 3-9,56,Schlecht,6h 34min,0:33,7:22 +Sep 26 - Okt 2,52,Schlecht,6h 23min,0:00,6:37 +Sep 19-25,59,Schlecht,6h 41min,0:27,7:16 +Sep 12-18,59,Schlecht,6h 18min,0:48,7:12 +Sep 5-11,55,Schlecht,6h 19min,0:56,7:22 +Aug 29 - Sep 4,66,Ausreichend,7h 1min,0:21,7:31 +Aug 22-28,57,Schlecht,6h 17min,0:35,6:59 +Aug 15-21,72,Ausreichend,6h 36min,0:38,7:25 +Aug 8-14,56,Schlecht,5h 45min,0:16,6:06 +Aug 1-7,64,Ausreichend,7h 4min,0:39,8:10 +Jul 25-31,61,Ausreichend,6h 52min,0:40,7:56 +Jul 18-24,54,Schlecht,6h 26min,2:16,9:19 +Jul 11-17,74,Ausreichend,7h 10min,0:06,7:26 +Jul 4-10,58,Schlecht,7h 35min,0:45,9:05 +Jun 27 - Jul 3,60,Ausreichend,6h 8min,1:22,7:42 +Jun 20-26,69,Ausreichend,6h 30min,0:19,6:58 +Jun 13-19,59,Schlecht,6h 1min,0:25,6:33 +Jun 6-12,60,Ausreichend,6h 22min,0:02,6:30 +Mai 30 - Jun 5,60,Ausreichend,6h 33min,0:34,7:15 +Mai 23-29,51,Schlecht,6h 47min,0:56,7:54 +Mai 16-22,50,Schlecht,5h 51min,1:13,7:08 +Mai 9-15,55,Schlecht,6h 21min,0:58,7:23 +Mai 2-8,40,Schlecht,5h 36min,0:39,6:19 +Apr 25 - Mai 1,55,Schlecht,6h 2min,1:18,7:26 +Apr 18-24,56,Schlecht,6h 28min,3:11,9:55 +Apr 11-17,56,Schlecht,6h 17min,1:23,7:51 +Apr 4-10,62,Ausreichend,6h 18min,0:39,7:10 +Mrz 28 - Apr 3,68,Ausreichend,6h 50min,1:45,8:51 +Mrz 21-27,60,Ausreichend,6h 9min,0:56,7:13 +Mrz 14-20,54,Schlecht,6h 11min,1:03,7:24 +Mrz 7-13,54,Schlecht,6h 22min,0:49,7:17 +Feb 29 - Mrz 6,50,Schlecht,6h 4min,0:56,7:09 +Feb 22-28,61,Ausreichend,7h 11min,0:08,7:25 +Feb 15-21,44,Schlecht,6h 58min,0:19,7:51 +Feb 8-14,50,Schlecht,8h 17min,0:09,8:47 +Feb 1-7,43,Schlecht,6h 12min,1:06,7:25 +Jan 25-31,57,Schlecht,7h 21min,1:17,8:40 +Jan 18-24,51,Schlecht,6h 25min,0:56,7:26 +Jan 11-17,50,Schlecht,6h 27min,1:36,8:12 +Jan 4-10,59,Schlecht,6h 44min,1:26,8:24 +Dez 28, 2023 - Jan 3, 2024,54,Schlecht,7h 2min +Dez 21-27, 2023,55,Schlecht,7h 16min,0:38 +Dez 14-20, 2023,56,Schlecht,7h 17min,0:31 +Dez 7-13, 2023,44,Schlecht,7h 53min,23:46 +Nov 30 - Dez 6, 2023,48,Schlecht,6h 51min,0:33 +Nov 23-29, 2023,48,Schlecht,7h 11min,0:21 +Nov 16-22, 2023,53,Schlecht,7h 7min,0:23 +Nov 9-15, 2023,47,Schlecht,7h 5min,0:19 +Nov 2-8, 2023,50,Schlecht,6h 2min,0:00 +Okt 26 - Nov 1, 2023,59,Schlecht,6h 39min,0:14 +Okt 19-25, 2023,48,Schlecht,6h 17min,0:46 \ No newline at end of file From 6804054cc69f206f102b2aac29021037e5eb45b5 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Wed, 16 Oct 2024 20:58:01 +0200 Subject: [PATCH 02/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 40 ++++++++++++++++++------------ code/hr_data_cleaned.csv | 53 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 code/hr_data_cleaned.csv diff --git a/code/corelation.py b/code/corelation.py index 8cbab6c..c2cf59a 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -1,40 +1,50 @@ import pandas as pd -# Lade die CSV-Dateien -# Datei 1 mit Semikolon (;) separiert (HR-Daten) +# 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=';') -# 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 (vor der Berechnung des Durchschnitts):") +# Zeige die ersten Zeilen der HR-Daten vor der Bereinigung +print("HR-Daten (vor der Bereinigung):") print(hr_data.head()) -# Berechne den Durchschnitt der HR-Daten (zwischen Ruhe und Hoch) -# Erstelle eine neue Spalte 'avg_hr', die den Durchschnitt von 'Resting HR' und 'High HR' enthält +# 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) -# Überprüfen der ersten Zeilen nach dem Hinzufügen der 'avg_hr' Spalte +# Zeige die HR-Daten nach der Berechnung des Durchschnitts print("\nHR-Daten (nach der Berechnung des Durchschnitts):") print(hr_data.head()) -# Überprüfen der ersten Zeilen der Schlafdaten +# 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()) -# Sicherstellen, dass beide Datensätze nach Woche sortiert sind +# 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') -# Kombinieren der beiden Datensätze anhand der 'week' Spalte +# Schritt 5: Kombiniere die beiden Datensätze anhand der 'week' Spalte combined_data = pd.merge(hr_data, sleep_data, on='Datum') -# Überprüfen der kombinierten Daten +# Zeige die kombinierten Daten print("\nKombinierte Daten:") print(combined_data.head()) -# Berechne die Korrelation zwischen dem durchschnittlichen Herzfrequenzwert ('avg_hr') und der Schlafdauer ('sleep_duration') +# 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/hr_data_cleaned.csv b/code/hr_data_cleaned.csv new file mode 100644 index 0000000..e30f4a3 --- /dev/null +++ b/code/hr_data_cleaned.csv @@ -0,0 +1,53 @@ +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 From 104b1dc6c6933079415c4741e66b5048ebff0b88 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Wed, 16 Oct 2024 21:15:23 +0200 Subject: [PATCH 03/15] 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}") From 0cc75b78c76916de4c09ef9e6939126381014387 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Thu, 17 Oct 2024 20:42:54 +0200 Subject: [PATCH 04/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 246 ++++++++++++++++++++++++++++++++-------- code/corelation_old3.py | 94 +++++++++++++++ data/raw/Schlaf.csv | 53 +++++++++ 3 files changed, 347 insertions(+), 46 deletions(-) create mode 100644 code/corelation_old3.py create mode 100644 data/raw/Schlaf.csv diff --git a/code/corelation.py b/code/corelation.py index 15cad3a..47917ad 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -2,82 +2,236 @@ 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', 'Apr': 'Apr', 'Mai': 'May', 'Jun': 'Jun', + '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 '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] +# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4' oder 'Dez 29, 2023-Jan 4, 2024' in die Kalenderwoche und das Startdatum zu konvertieren +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(" - ", "-").replace(",", "") - # 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 + # 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(" ") + + if len(end_parts) == 2: + end_month_str = end_parts[0] + end_day = int(end_parts[1].strip()) # Nimm den Endtag + else: + end_month_str = start_month_str # Falls kein Monat angegeben, setze den Startmonat + 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] + + # Wenn der Startteil ein Jahr enthält, nutze dieses + if len(start_parts) == 3: + current_year = int(start_parts[2]) + else: + current_year = datetime.now().year + + # Wenn der Datumsbereich über den Dezember hinausgeht, endet das Enddatum im nächsten Jahr + if start_month_str == 'Dec' and end_month_str == 'Jan': + end_year = current_year + 1 + else: + end_year = current_year + + try: + # Konvertiere das Startdatum in ein Datum + start_date = datetime.strptime(f"{start_month_str} {start_day} {current_year}", "%b %d %Y") + except ValueError: + raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {current_year}") + + try: + # Konvertiere das Enddatum in ein Datum + end_date = datetime.strptime(f"{end_month_str} {end_day} {end_year}", "%b %d %Y") + except ValueError: + raise ValueError(f"Ungültiges Enddatum: {end_month_str} {end_day} {end_year}") + + # 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 -# 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=';') +# 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) -# Zeige die ersten Zeilen der HR-Daten vor der Bereinigung -print("HR-Daten (vor der Bereinigung):") -print(hr_data.head()) + # 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))) -# 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) + # Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) + hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) -# Konvertiere die Spalte 'Datum' in Kalenderwoche (KW) -hr_data['week'] = hr_data['Datum'].apply(convert_to_week_number) + # 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))) -# Zeige die HR-Daten nach der Umwandlung in Wochen -print("\nHR-Daten (nach der Umwandlung in KW):") -print(hr_data.head()) + # Speichere die bereinigten Daten in 'sandbox' + if not os.path.exists(output_dir): + os.makedirs(output_dir) -# Schritt 2: Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) -hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) + 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') -# 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=',') + hr_data.to_csv(hr_data_clean_path, sep=';', index=False) + sleep_data.to_csv(sleep_data_clean_path, sep=',', index=False) -# Zeige die ersten Zeilen der Schlafdaten -print("\nSchlafdaten:") -print(sleep_data.head()) + 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.") -# Konvertiere auch das 'Datum' der Schlafdaten in Kalenderwoche (KW) -sleep_data['week'] = sleep_data['Datum'].apply(convert_to_week_number) + return hr_data, sleep_data -# 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') +# 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 6: Entferne alle Zeilen mit fehlenden Daten +# Schritt 4: 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') +# 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 8: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer +# 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') diff --git a/code/corelation_old3.py b/code/corelation_old3.py new file mode 100644 index 0000000..15cad3a --- /dev/null +++ b/code/corelation_old3.py @@ -0,0 +1,94 @@ +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/data/raw/Schlaf.csv b/data/raw/Schlaf.csv new file mode 100644 index 0000000..1296df2 --- /dev/null +++ b/data/raw/Schlaf.csv @@ -0,0 +1,53 @@ +Datum,Ø Score,Ø Qualität,Durchschnittliche Dauer,Ø Schlafenszeit,Ø Aufstehzeit +Okt 11-17,45,Schlecht,5h 59min,1:40,7:50 +Okt 4-10,52,Schlecht,6h 38min,0:29,7:25 +Sep 27 - Okt 3,53,Schlecht,6h 5min,0:14,6:31 +Sep 20-26,60,Ausreichend,7h 5min,0:12,7:23 +Sep 13-19,61,Ausreichend,6h 27min,0:44,7:18 +Sep 6-12,53,Schlecht,6h 8min,1:08,7:22 +Aug 30 - Sep 5,66,Ausreichend,6h 59min,0:11,7:19 +Aug 23-29,61,Ausreichend,6h 39min,0:35,7:19 +Aug 16-22,67,Ausreichend,6h 25min,0:41,7:17 +Aug 9-15,57,Schlecht,5h 43min,0:17,6:04 +Aug 2-8,61,Ausreichend,6h 30min,0:31,7:24 +Jul 26 - Aug 1,62,Ausreichend,6h 55min,0:31,7:48 +Jul 19-25,55,Schlecht,7h 0min,2:35,10:14 +Jul 12-18,72,Ausreichend,6h 48min,0:03,7:05 +Jul 5-11,58,Schlecht,7h 42min,0:32,8:57 +Jun 28 - Jul 4,66,Ausreichend,6h 26min,1:24,7:57 +Jun 21-27,65,Ausreichend,6h 25min,0:39,7:17 +Jun 14-20,59,Schlecht,5h 43min,0:24,6:14 +Jun 7-13,61,Ausreichend,6h 34min,23:47,6:26 +Mai 31 - Jun 6,61,Ausreichend,6h 47min,0:35,7:33 +Mai 24-30,52,Schlecht,6h 33min,1:00,7:38 +Mai 17-23,51,Schlecht,6h 11min,1:12,7:30 +Mai 10-16,48,Schlecht,5h 44min,0:48,6:39 +Mai 3-9,45,Schlecht,5h 55min,0:49,6:48 +Apr 26 - Mai 2,56,Schlecht,6h 11min,1:26,7:41 +Apr 19-25,51,Schlecht,6h 19min,2:55,9:31 +Apr 12-18,57,Schlecht,6h 24min,1:28,8:03 +Apr 5-11,62,Ausreichend,6h 4min,0:56,7:09 +Mrz 29 - Apr 4,73,Ausreichend,6h 59min,1:34,8:53 +Mrz 22-28,59,Schlecht,5h 59min,1:05,7:11 +Mrz 15-21,55,Schlecht,6h 25min,0:47,7:23 +Mrz 8-14,53,Schlecht,6h 22min,0:56,7:25 +Mrz 1-7,47,Schlecht,5h 56min,0:51,6:56 +Feb 23-29,64,Ausreichend,7h 11min,0:09,7:27 +Feb 16-22,46,Schlecht,6h 56min,0:24,7:52 +Feb 9-15,50,Schlecht,8h 26min,23:58,8:48 +Feb 2-8,43,Schlecht,6h 13min,1:06,7:26 +Jan 26 - Feb 1,55,Schlecht,7h 17min,1:12,8:32 +Jan 19-25,55,Schlecht,6h 33min,0:59,7:37 +Jan 12-18,49,Schlecht,6h 16min,1:39,8:04 +Jan 5-11,54,Schlecht,6h 35min,1:28,8:14 +Dez 29, 2023 - Jan 4, 2024,55,Schlecht,7h 15min,0:52,8:34 +Dez 22-28, 2023,56,Schlecht,7h 10min,1:02,8:33 +Dez 15-21, 2023,61,Ausreichend,7h 40min,0:18,8:18 +Dez 8-14, 2023,43,Schlecht,7h 45min,23:45,8:52 +Dez 1-7, 2023,47,Schlecht,6h 51min,0:31,7:25 +Nov 24-30, 2023,48,Schlecht,7h 5min,0:29,8:01 +Nov 17-23, 2023,53,Schlecht,7h 1min,0:26,7:34 +Nov 10-16, 2023,47,Schlecht,7h 5min,0:19,7:28 +Nov 3-9, 2023,49,Schlecht,6h 10min,23:58,7:12 +Okt 27 - Nov 2, 2023,61,Ausreichend,6h 33min,0:08,6:50 +Okt 20-26, 2023,47,Schlecht,6h 11min,0:41,7:14 \ No newline at end of file From 9005b4fbfbac208caefbb2e94e5923f884b1ee31 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Thu, 17 Oct 2024 20:47:31 +0200 Subject: [PATCH 05/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/code/corelation.py b/code/corelation.py index 47917ad..c5ea7dc 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -114,7 +114,7 @@ month_translation = { # Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4' oder 'Dez 29, 2023-Jan 4, 2024' in die Kalenderwoche und das Startdatum zu konvertieren def convert_to_week_number_and_start_date(date_range_str): - # Entferne zusätzliche Leerzeichen um den Bindestrich herum + # Entferne zusätzliche Leerzeichen um den Bindestrich herum und entferne Kommas date_range_str = date_range_str.replace(" - ", "-").replace(",", "") # Splitte den Datumsbereich in Start- und Endteil @@ -128,12 +128,20 @@ def convert_to_week_number_and_start_date(date_range_str): # Verarbeite den Endteil end_parts = end_part.split(" ") - if len(end_parts) == 2: + # Verarbeite das Enddatum, basierend darauf, ob ein Jahr enthalten ist oder nicht + if len(end_parts) == 3: # Fall: 'Jan 4 2024' end_month_str = end_parts[0] - end_day = int(end_parts[1].strip()) # Nimm den Endtag + end_day = int(end_parts[1].strip()) + end_year = int(end_parts[2].strip()) # Nimm das Jahr aus dem Endteil + elif len(end_parts) == 2: # Fall: 'Jan 4' ohne Jahr + end_month_str = end_parts[0] + end_day = int(end_parts[1].strip()) + end_year = datetime.now().year # Nutze das aktuelle Jahr, wenn kein Jahr angegeben ist else: - end_month_str = start_month_str # Falls kein Monat angegeben, setze den Startmonat + # Falls kein Monat angegeben, setze den Startmonat für den Endteil + end_month_str = start_month_str end_day = int(end_parts[0].strip()) + end_year = datetime.now().year # Nutze das aktuelle Jahr # Konvertiere den deutschen Monatsnamen in den englischen für beide Monate if start_month_str in month_translation: @@ -143,21 +151,19 @@ def convert_to_week_number_and_start_date(date_range_str): # Wenn der Startteil ein Jahr enthält, nutze dieses if len(start_parts) == 3: - current_year = int(start_parts[2]) + start_year = int(start_parts[2]) else: - current_year = datetime.now().year + start_year = datetime.now().year - # Wenn der Datumsbereich über den Dezember hinausgeht, endet das Enddatum im nächsten Jahr + # Falls der Datumsbereich über den Dezember hinausgeht, endet das Enddatum im nächsten Jahr if start_month_str == 'Dec' and end_month_str == 'Jan': - end_year = current_year + 1 - else: - end_year = current_year + end_year = start_year + 1 try: # Konvertiere das Startdatum in ein Datum - start_date = datetime.strptime(f"{start_month_str} {start_day} {current_year}", "%b %d %Y") + start_date = datetime.strptime(f"{start_month_str} {start_day} {start_year}", "%b %d %Y") except ValueError: - raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {current_year}") + raise ValueError(f"Ungültiges Startdatum: {start_month_str} {start_day} {start_year}") try: # Konvertiere das Enddatum in ein Datum From 37ae6b437d30a4be83f5dce3666fff48fa159834 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Thu, 17 Oct 2024 20:50:23 +0200 Subject: [PATCH 06/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 41 +++++++++++++++++------------------------ 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/code/corelation.py b/code/corelation.py index c5ea7dc..9ab54d2 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -112,11 +112,20 @@ month_translation = { } -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4' oder 'Dez 29, 2023-Jan 4, 2024' in die Kalenderwoche und das Startdatum zu konvertieren +# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4', 'Dez 29, 2023-Jan 4, 2024' oder 'Dez 22-28 2023' 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 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("-") @@ -128,20 +137,14 @@ def convert_to_week_number_and_start_date(date_range_str): # Verarbeite den Endteil end_parts = end_part.split(" ") - # Verarbeite das Enddatum, basierend darauf, ob ein Jahr enthalten ist oder nicht - if len(end_parts) == 3: # Fall: 'Jan 4 2024' + # 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()) - end_year = int(end_parts[2].strip()) # Nimm das Jahr aus dem Endteil - elif len(end_parts) == 2: # Fall: 'Jan 4' ohne Jahr - end_month_str = end_parts[0] - end_day = int(end_parts[1].strip()) - end_year = datetime.now().year # Nutze das aktuelle Jahr, wenn kein Jahr angegeben ist else: - # Falls kein Monat angegeben, setze den Startmonat für den Endteil + # 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()) - end_year = datetime.now().year # Nutze das aktuelle Jahr # Konvertiere den deutschen Monatsnamen in den englischen für beide Monate if start_month_str in month_translation: @@ -149,27 +152,17 @@ def convert_to_week_number_and_start_date(date_range_str): if end_month_str in month_translation: end_month_str = month_translation[end_month_str] - # Wenn der Startteil ein Jahr enthält, nutze dieses - if len(start_parts) == 3: - start_year = int(start_parts[2]) - else: - start_year = datetime.now().year - - # Falls der Datumsbereich über den Dezember hinausgeht, endet das Enddatum im nächsten Jahr - if start_month_str == 'Dec' and end_month_str == 'Jan': - end_year = start_year + 1 - try: # Konvertiere das Startdatum in ein Datum - start_date = datetime.strptime(f"{start_month_str} {start_day} {start_year}", "%b %d %Y") + 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} {start_year}") + 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} {end_year}", "%b %d %Y") + 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} {end_year}") + 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] From 692099b36d3acc94245a673af7351f0d907129fc Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Thu, 17 Oct 2024 20:52:26 +0200 Subject: [PATCH 07/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 21 +++++++++++- code/sandbox/hr_data_clean.csv | 53 +++++++++++++++++++++++++++++++ code/sandbox/sleep_data_clean.csv | 53 +++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 code/sandbox/hr_data_clean.csv create mode 100644 code/sandbox/sleep_data_clean.csv diff --git a/code/corelation.py b/code/corelation.py index 9ab54d2..2b55ec6 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -112,11 +112,30 @@ month_translation = { } -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4', 'Dez 29, 2023-Jan 4, 2024' oder 'Dez 22-28 2023' in Kalenderwoche und Startdatum zu konvertieren +# 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 diff --git a/code/sandbox/hr_data_clean.csv b/code/sandbox/hr_data_clean.csv new file mode 100644 index 0000000..e098c31 --- /dev/null +++ b/code/sandbox/hr_data_clean.csv @@ -0,0 +1,53 @@ +Datum;In Ruhe;Hoch;week;start_date;avg_hr +Okt 4-10;67.0;130.0;40;2024-10-04;98.5 +Sep 27 - Okt 3;67.0;143.0;39;2024-09-27;105.0 +Sep 20-26;66.0;149.0;38;2024-09-20;107.5 +Sep 13-19;66.0;144.0;37;2024-09-13;105.0 +Sep 6-12;62.0;132.0;36;2024-09-06;97.0 +Aug 30 - Sep 5;64.0;141.0;35;2024-08-30;102.5 +Aug 23-29;67.0;150.0;34;2024-08-23;108.5 +Aug 16-22;63.0;143.0;33;2024-08-16;103.0 +Aug 9-15;69.0;141.0;32;2024-08-09;105.0 +Aug 2-8;67.0;140.0;31;2024-08-02;103.5 +Jul 26 - Aug 1;67.0;147.0;30;2024-07-26;107.0 +Jul 19-25;69.0;136.0;29;2024-07-19;102.5 +Jul 12-18;66.0;151.0;28;2024-07-12;108.5 +Jul 5-11;67.0;146.0;27;2024-07-05;106.5 +Jun 28 - Jul 4;66.0;157.0;26;2024-06-28;111.5 +Jun 21-27;64.0;141.0;25;2024-06-21;102.5 +Jun 14-20;70.0;145.0;24;2024-06-14;107.5 +Jun 7-13;69.0;134.0;23;2024-06-07;101.5 +Mai 31 - Jun 6;70.0;139.0;22;2024-05-31;104.5 +Mai 24-30;72.0;142.0;21;2024-05-24;107.0 +Mai 17-23;72.0;135.0;20;2024-05-17;103.5 +Mai 10-16;71.0;147.0;19;2024-05-10;109.0 +Mai 3-9;73.0;142.0;18;2024-05-03;107.5 +Apr 26 - Mai 2;69.0;151.0;17;2024-04-26;110.0 +Apr 19-25;61.0;135.0;16;2024-04-19;98.0 +Apr 12-18;58.0;140.0;15;2024-04-12;99.0 +Apr 5-11;64.0;131.0;14;2024-04-05;97.5 +Mrz 29 - Apr 4;63.0;139.0;13;2024-03-29;101.0 +Mrz 22-28;65.0;135.0;12;2024-03-22;100.0 +Mrz 15-21;66.0;137.0;11;2024-03-15;101.5 +Mrz 8-14;62.0;136.0;10;2024-03-08;99.0 +Mrz 1-7;70.0;134.0;9;2024-03-01;102.0 +Feb 23-29;68.0;144.0;8;2024-02-23;106.0 +Feb 16-22;71.0;132.0;7;2024-02-16;101.5 +Feb 9-15;65.0;143.0;6;2024-02-09;104.0 +Feb 2-8;66.0;133.0;5;2024-02-02;99.5 +Jan 26 - Feb 1;59.0;142.0;4;2024-01-26;100.5 +Jan 19-25;62.0;136.0;3;2024-01-19;99.0 +Jan 12-18;60.0;134.0;2;2024-01-12;97.0 +Jan 5-11;56.0;139.0;1;2024-01-05;97.5 +Dez 29, 2023 - Jan 4, 2024;59.0;128.0;52;2024-12-29;93.5 +Dez 22-28, 2023;52.0;124.0;51;2023-12-22;88.0 +Dez 15-21, 2023;57.0;133.0;50;2023-12-15;95.0 +Dez 8-14, 2023;65.0;133.0;49;2023-12-08;99.0 +Dez 1-7, 2023;69.0;134.0;48;2023-12-01;101.5 +Nov 24-30, 2023;68.0;139.0;47;2023-11-24;103.5 +Nov 17-23, 2023;68.0;143.0;46;2023-11-17;105.5 +Nov 10-16, 2023;64.0;144.0;45;2023-11-10;104.0 +Nov 3-9, 2023;63.0;140.0;44;2023-11-03;101.5 +Okt 27 - Nov 2, 2023;57.0;133.0;43;2023-10-27;95.0 +Okt 20-26, 2023;55.0;138.0;42;2023-10-20;96.5 +Okt 13-19, 2023;50.0;121.0;41;2023-10-13;85.5 diff --git a/code/sandbox/sleep_data_clean.csv b/code/sandbox/sleep_data_clean.csv new file mode 100644 index 0000000..0fc8250 --- /dev/null +++ b/code/sandbox/sleep_data_clean.csv @@ -0,0 +1,53 @@ +Datum,Ø Score,Ø Qualität,Durchschnittliche Dauer,Ø Schlafenszeit,Ø Aufstehzeit,week,start_date +Okt 10-16,46,Schlecht,6h 11min,1:28,7:50,41,2024-10-10 +Okt 3-9,56,Schlecht,6h 34min,0:33,7:22,40,2024-10-03 +Sep 26 - Okt 2,52,Schlecht,6h 23min,0:00,6:37,39,2024-09-26 +Sep 19-25,59,Schlecht,6h 41min,0:27,7:16,38,2024-09-19 +Sep 12-18,59,Schlecht,6h 18min,0:48,7:12,37,2024-09-12 +Sep 5-11,55,Schlecht,6h 19min,0:56,7:22,36,2024-09-05 +Aug 29 - Sep 4,66,Ausreichend,7h 1min,0:21,7:31,35,2024-08-29 +Aug 22-28,57,Schlecht,6h 17min,0:35,6:59,34,2024-08-22 +Aug 15-21,72,Ausreichend,6h 36min,0:38,7:25,33,2024-08-15 +Aug 8-14,56,Schlecht,5h 45min,0:16,6:06,32,2024-08-08 +Aug 1-7,64,Ausreichend,7h 4min,0:39,8:10,31,2024-08-01 +Jul 25-31,61,Ausreichend,6h 52min,0:40,7:56,30,2024-07-25 +Jul 18-24,54,Schlecht,6h 26min,2:16,9:19,29,2024-07-18 +Jul 11-17,74,Ausreichend,7h 10min,0:06,7:26,28,2024-07-11 +Jul 4-10,58,Schlecht,7h 35min,0:45,9:05,27,2024-07-04 +Jun 27 - Jul 3,60,Ausreichend,6h 8min,1:22,7:42,26,2024-06-27 +Jun 20-26,69,Ausreichend,6h 30min,0:19,6:58,25,2024-06-20 +Jun 13-19,59,Schlecht,6h 1min,0:25,6:33,24,2024-06-13 +Jun 6-12,60,Ausreichend,6h 22min,0:02,6:30,23,2024-06-06 +Mai 30 - Jun 5,60,Ausreichend,6h 33min,0:34,7:15,22,2024-05-30 +Mai 23-29,51,Schlecht,6h 47min,0:56,7:54,21,2024-05-23 +Mai 16-22,50,Schlecht,5h 51min,1:13,7:08,20,2024-05-16 +Mai 9-15,55,Schlecht,6h 21min,0:58,7:23,19,2024-05-09 +Mai 2-8,40,Schlecht,5h 36min,0:39,6:19,18,2024-05-02 +Apr 25 - Mai 1,55,Schlecht,6h 2min,1:18,7:26,17,2024-04-25 +Apr 18-24,56,Schlecht,6h 28min,3:11,9:55,16,2024-04-18 +Apr 11-17,56,Schlecht,6h 17min,1:23,7:51,15,2024-04-11 +Apr 4-10,62,Ausreichend,6h 18min,0:39,7:10,14,2024-04-04 +Mrz 28 - Apr 3,68,Ausreichend,6h 50min,1:45,8:51,13,2024-03-28 +Mrz 21-27,60,Ausreichend,6h 9min,0:56,7:13,12,2024-03-21 +Mrz 14-20,54,Schlecht,6h 11min,1:03,7:24,11,2024-03-14 +Mrz 7-13,54,Schlecht,6h 22min,0:49,7:17,10,2024-03-07 +Feb 29 - Mrz 6,50,Schlecht,6h 4min,0:56,7:09,9,2024-02-29 +Feb 22-28,61,Ausreichend,7h 11min,0:08,7:25,8,2024-02-22 +Feb 15-21,44,Schlecht,6h 58min,0:19,7:51,7,2024-02-15 +Feb 8-14,50,Schlecht,8h 17min,0:09,8:47,6,2024-02-08 +Feb 1-7,43,Schlecht,6h 12min,1:06,7:25,5,2024-02-01 +Jan 25-31,57,Schlecht,7h 21min,1:17,8:40,4,2024-01-25 +Jan 18-24,51,Schlecht,6h 25min,0:56,7:26,3,2024-01-18 +Jan 11-17,50,Schlecht,6h 27min,1:36,8:12,2,2024-01-11 +Jan 4-10,59,Schlecht,6h 44min,1:26,8:24,1,2024-01-04 +Dez 28, 2023 - Jan 3, 2024,54,Schlecht,7h 2min,52,2024-12-28 +Dez 21-27, 2023,55,Schlecht,7h 16min,0:38,51,2024-12-21 +Dez 14-20, 2023,56,Schlecht,7h 17min,0:31,50,2024-12-14 +Dez 7-13, 2023,44,Schlecht,7h 53min,23:46,49,2024-12-07 +Nov 30 - Dez 6, 2023,48,Schlecht,6h 51min,0:33,48,2024-11-30 +Nov 23-29, 2023,48,Schlecht,7h 11min,0:21,47,2024-11-23 +Nov 16-22, 2023,53,Schlecht,7h 7min,0:23,46,2024-11-16 +Nov 9-15, 2023,47,Schlecht,7h 5min,0:19,45,2024-11-09 +Nov 2-8, 2023,50,Schlecht,6h 2min,0:00,44,2024-11-02 +Okt 26 - Nov 1, 2023,59,Schlecht,6h 39min,0:14,43,2024-10-26 +Okt 19-25, 2023,48,Schlecht,6h 17min,0:46,42,2024-10-19 From 5e2c6e7187d6ace681abae75dea6c3766a927cf7 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 09:59:08 +0200 Subject: [PATCH 08/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 202 +++++------------------ code/corelation_old4.py | 266 ++++++++++++++++++++++++++++++ code/sandbox/hr_data_clean.csv | 53 ------ code/sandbox/sleep_data_clean.csv | 53 ------ data/sandbox/combined_data.csv | 42 +++++ data/sandbox/hr_data_clean.csv | 53 ++++++ data/sandbox/sleep_data_clean.csv | 53 ++++++ 7 files changed, 454 insertions(+), 268 deletions(-) create mode 100644 code/corelation_old4.py delete mode 100644 code/sandbox/hr_data_clean.csv delete mode 100644 code/sandbox/sleep_data_clean.csv create mode 100644 data/sandbox/combined_data.csv create mode 100644 data/sandbox/hr_data_clean.csv create mode 100644 data/sandbox/sleep_data_clean.csv diff --git a/code/corelation.py b/code/corelation.py index 2b55ec6..79bc956 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -2,109 +2,7 @@ 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', @@ -112,8 +10,8 @@ month_translation = { } -# 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): +# 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(",", "") @@ -131,10 +29,11 @@ def convert_to_week_number_and_start_date(date_range_str): # Konvertiere das Datum start_date = datetime.strptime(f"{month_str} {day} {year_str}", "%b %d %Y") - # Berechne die Kalenderwoche + # Berechne die Kalenderwoche und das Jahr week_number = start_date.isocalendar()[1] + year = start_date.year - return week_number, start_date.strftime('%Y-%m-%d') + 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(): @@ -177,79 +76,58 @@ def convert_to_week_number_and_start_date(date_range_str): 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 + # Berechne die Kalenderwoche und das Jahr basierend auf dem Startdatum week_number = start_date.isocalendar()[1] + year = start_date.year - return week_number, start_date.strftime('%Y-%m-%d') # Gib KW und das Startdatum zurück + return f"W{week_number}-{year}" # Gib Kalenderwoche und Jahr im Format W-YYYY 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) +# 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' - # 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))) +# Schritt 1: Lade die HR-Daten (mit Semikolon separiert) und entferne 'bpm' +hr_data = pd.read_csv(hr_data_path, sep=';') - # Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) - hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) +# 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 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))) +# Konvertiere die Spalte 'Datum' in Kalenderwoche (KW und Jahr) +hr_data['Woche'] = hr_data['Datum'].apply(convert_to_week_and_year) - # Speichere die bereinigten Daten in 'sandbox' - if not os.path.exists(output_dir): - os.makedirs(output_dir) +# Berechne den Durchschnitt der Herzfrequenzdaten (In Ruhe und Hoch) +hr_data['avg_hr'] = hr_data[['In Ruhe', 'Hoch']].mean(axis=1) - 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') +# 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) - hr_data.to_csv(hr_data_clean_path, sep=';', index=False) - sleep_data.to_csv(sleep_data_clean_path, sep=',', index=False) +# Schritt 2: Lade die Schlafdaten (mit Komma separiert) +sleep_data = pd.read_csv(sleep_data_path, sep=',') - 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.") +# Konvertiere die Spalte 'Datum' in Kalenderwoche (KW und Jahr) +sleep_data['Woche'] = sleep_data['Datum'].apply(convert_to_week_and_year) - return hr_data, sleep_data +# 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') -# 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=',') +# Speichere das kombinierte Dataset in einer neuen CSV-Datei +combined_data.to_csv(combined_data_path, index=False) -# 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' +# Schritt 4: Berechne die Korrelation zwischen avg_hr und der Schlafdauer correlation = combined_data['avg_hr'].corr(combined_data['Durchschnittliche Dauer']) -print(f"\nDie Korrelation zwischen der durchschnittlichen Herzfrequenz und der Schlafdauer ist: {correlation}") +print(f"Die Korrelation zwischen der durchschnittlichen Herzfrequenz und der Schlafdauer ist: {correlation}") -# Schritt 6: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer +# 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') diff --git a/code/corelation_old4.py b/code/corelation_old4.py new file mode 100644 index 0000000..2b55ec6 --- /dev/null +++ b/code/corelation_old4.py @@ -0,0 +1,266 @@ +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/sandbox/hr_data_clean.csv b/code/sandbox/hr_data_clean.csv deleted file mode 100644 index e098c31..0000000 --- a/code/sandbox/hr_data_clean.csv +++ /dev/null @@ -1,53 +0,0 @@ -Datum;In Ruhe;Hoch;week;start_date;avg_hr -Okt 4-10;67.0;130.0;40;2024-10-04;98.5 -Sep 27 - Okt 3;67.0;143.0;39;2024-09-27;105.0 -Sep 20-26;66.0;149.0;38;2024-09-20;107.5 -Sep 13-19;66.0;144.0;37;2024-09-13;105.0 -Sep 6-12;62.0;132.0;36;2024-09-06;97.0 -Aug 30 - Sep 5;64.0;141.0;35;2024-08-30;102.5 -Aug 23-29;67.0;150.0;34;2024-08-23;108.5 -Aug 16-22;63.0;143.0;33;2024-08-16;103.0 -Aug 9-15;69.0;141.0;32;2024-08-09;105.0 -Aug 2-8;67.0;140.0;31;2024-08-02;103.5 -Jul 26 - Aug 1;67.0;147.0;30;2024-07-26;107.0 -Jul 19-25;69.0;136.0;29;2024-07-19;102.5 -Jul 12-18;66.0;151.0;28;2024-07-12;108.5 -Jul 5-11;67.0;146.0;27;2024-07-05;106.5 -Jun 28 - Jul 4;66.0;157.0;26;2024-06-28;111.5 -Jun 21-27;64.0;141.0;25;2024-06-21;102.5 -Jun 14-20;70.0;145.0;24;2024-06-14;107.5 -Jun 7-13;69.0;134.0;23;2024-06-07;101.5 -Mai 31 - Jun 6;70.0;139.0;22;2024-05-31;104.5 -Mai 24-30;72.0;142.0;21;2024-05-24;107.0 -Mai 17-23;72.0;135.0;20;2024-05-17;103.5 -Mai 10-16;71.0;147.0;19;2024-05-10;109.0 -Mai 3-9;73.0;142.0;18;2024-05-03;107.5 -Apr 26 - Mai 2;69.0;151.0;17;2024-04-26;110.0 -Apr 19-25;61.0;135.0;16;2024-04-19;98.0 -Apr 12-18;58.0;140.0;15;2024-04-12;99.0 -Apr 5-11;64.0;131.0;14;2024-04-05;97.5 -Mrz 29 - Apr 4;63.0;139.0;13;2024-03-29;101.0 -Mrz 22-28;65.0;135.0;12;2024-03-22;100.0 -Mrz 15-21;66.0;137.0;11;2024-03-15;101.5 -Mrz 8-14;62.0;136.0;10;2024-03-08;99.0 -Mrz 1-7;70.0;134.0;9;2024-03-01;102.0 -Feb 23-29;68.0;144.0;8;2024-02-23;106.0 -Feb 16-22;71.0;132.0;7;2024-02-16;101.5 -Feb 9-15;65.0;143.0;6;2024-02-09;104.0 -Feb 2-8;66.0;133.0;5;2024-02-02;99.5 -Jan 26 - Feb 1;59.0;142.0;4;2024-01-26;100.5 -Jan 19-25;62.0;136.0;3;2024-01-19;99.0 -Jan 12-18;60.0;134.0;2;2024-01-12;97.0 -Jan 5-11;56.0;139.0;1;2024-01-05;97.5 -Dez 29, 2023 - Jan 4, 2024;59.0;128.0;52;2024-12-29;93.5 -Dez 22-28, 2023;52.0;124.0;51;2023-12-22;88.0 -Dez 15-21, 2023;57.0;133.0;50;2023-12-15;95.0 -Dez 8-14, 2023;65.0;133.0;49;2023-12-08;99.0 -Dez 1-7, 2023;69.0;134.0;48;2023-12-01;101.5 -Nov 24-30, 2023;68.0;139.0;47;2023-11-24;103.5 -Nov 17-23, 2023;68.0;143.0;46;2023-11-17;105.5 -Nov 10-16, 2023;64.0;144.0;45;2023-11-10;104.0 -Nov 3-9, 2023;63.0;140.0;44;2023-11-03;101.5 -Okt 27 - Nov 2, 2023;57.0;133.0;43;2023-10-27;95.0 -Okt 20-26, 2023;55.0;138.0;42;2023-10-20;96.5 -Okt 13-19, 2023;50.0;121.0;41;2023-10-13;85.5 diff --git a/code/sandbox/sleep_data_clean.csv b/code/sandbox/sleep_data_clean.csv deleted file mode 100644 index 0fc8250..0000000 --- a/code/sandbox/sleep_data_clean.csv +++ /dev/null @@ -1,53 +0,0 @@ -Datum,Ø Score,Ø Qualität,Durchschnittliche Dauer,Ø Schlafenszeit,Ø Aufstehzeit,week,start_date -Okt 10-16,46,Schlecht,6h 11min,1:28,7:50,41,2024-10-10 -Okt 3-9,56,Schlecht,6h 34min,0:33,7:22,40,2024-10-03 -Sep 26 - Okt 2,52,Schlecht,6h 23min,0:00,6:37,39,2024-09-26 -Sep 19-25,59,Schlecht,6h 41min,0:27,7:16,38,2024-09-19 -Sep 12-18,59,Schlecht,6h 18min,0:48,7:12,37,2024-09-12 -Sep 5-11,55,Schlecht,6h 19min,0:56,7:22,36,2024-09-05 -Aug 29 - Sep 4,66,Ausreichend,7h 1min,0:21,7:31,35,2024-08-29 -Aug 22-28,57,Schlecht,6h 17min,0:35,6:59,34,2024-08-22 -Aug 15-21,72,Ausreichend,6h 36min,0:38,7:25,33,2024-08-15 -Aug 8-14,56,Schlecht,5h 45min,0:16,6:06,32,2024-08-08 -Aug 1-7,64,Ausreichend,7h 4min,0:39,8:10,31,2024-08-01 -Jul 25-31,61,Ausreichend,6h 52min,0:40,7:56,30,2024-07-25 -Jul 18-24,54,Schlecht,6h 26min,2:16,9:19,29,2024-07-18 -Jul 11-17,74,Ausreichend,7h 10min,0:06,7:26,28,2024-07-11 -Jul 4-10,58,Schlecht,7h 35min,0:45,9:05,27,2024-07-04 -Jun 27 - Jul 3,60,Ausreichend,6h 8min,1:22,7:42,26,2024-06-27 -Jun 20-26,69,Ausreichend,6h 30min,0:19,6:58,25,2024-06-20 -Jun 13-19,59,Schlecht,6h 1min,0:25,6:33,24,2024-06-13 -Jun 6-12,60,Ausreichend,6h 22min,0:02,6:30,23,2024-06-06 -Mai 30 - Jun 5,60,Ausreichend,6h 33min,0:34,7:15,22,2024-05-30 -Mai 23-29,51,Schlecht,6h 47min,0:56,7:54,21,2024-05-23 -Mai 16-22,50,Schlecht,5h 51min,1:13,7:08,20,2024-05-16 -Mai 9-15,55,Schlecht,6h 21min,0:58,7:23,19,2024-05-09 -Mai 2-8,40,Schlecht,5h 36min,0:39,6:19,18,2024-05-02 -Apr 25 - Mai 1,55,Schlecht,6h 2min,1:18,7:26,17,2024-04-25 -Apr 18-24,56,Schlecht,6h 28min,3:11,9:55,16,2024-04-18 -Apr 11-17,56,Schlecht,6h 17min,1:23,7:51,15,2024-04-11 -Apr 4-10,62,Ausreichend,6h 18min,0:39,7:10,14,2024-04-04 -Mrz 28 - Apr 3,68,Ausreichend,6h 50min,1:45,8:51,13,2024-03-28 -Mrz 21-27,60,Ausreichend,6h 9min,0:56,7:13,12,2024-03-21 -Mrz 14-20,54,Schlecht,6h 11min,1:03,7:24,11,2024-03-14 -Mrz 7-13,54,Schlecht,6h 22min,0:49,7:17,10,2024-03-07 -Feb 29 - Mrz 6,50,Schlecht,6h 4min,0:56,7:09,9,2024-02-29 -Feb 22-28,61,Ausreichend,7h 11min,0:08,7:25,8,2024-02-22 -Feb 15-21,44,Schlecht,6h 58min,0:19,7:51,7,2024-02-15 -Feb 8-14,50,Schlecht,8h 17min,0:09,8:47,6,2024-02-08 -Feb 1-7,43,Schlecht,6h 12min,1:06,7:25,5,2024-02-01 -Jan 25-31,57,Schlecht,7h 21min,1:17,8:40,4,2024-01-25 -Jan 18-24,51,Schlecht,6h 25min,0:56,7:26,3,2024-01-18 -Jan 11-17,50,Schlecht,6h 27min,1:36,8:12,2,2024-01-11 -Jan 4-10,59,Schlecht,6h 44min,1:26,8:24,1,2024-01-04 -Dez 28, 2023 - Jan 3, 2024,54,Schlecht,7h 2min,52,2024-12-28 -Dez 21-27, 2023,55,Schlecht,7h 16min,0:38,51,2024-12-21 -Dez 14-20, 2023,56,Schlecht,7h 17min,0:31,50,2024-12-14 -Dez 7-13, 2023,44,Schlecht,7h 53min,23:46,49,2024-12-07 -Nov 30 - Dez 6, 2023,48,Schlecht,6h 51min,0:33,48,2024-11-30 -Nov 23-29, 2023,48,Schlecht,7h 11min,0:21,47,2024-11-23 -Nov 16-22, 2023,53,Schlecht,7h 7min,0:23,46,2024-11-16 -Nov 9-15, 2023,47,Schlecht,7h 5min,0:19,45,2024-11-09 -Nov 2-8, 2023,50,Schlecht,6h 2min,0:00,44,2024-11-02 -Okt 26 - Nov 1, 2023,59,Schlecht,6h 39min,0:14,43,2024-10-26 -Okt 19-25, 2023,48,Schlecht,6h 17min,0:46,42,2024-10-19 diff --git a/data/sandbox/combined_data.csv b/data/sandbox/combined_data.csv new file mode 100644 index 0000000..743d87c --- /dev/null +++ b/data/sandbox/combined_data.csv @@ -0,0 +1,42 @@ +Woche,avg_hr,Durchschnittliche Dauer +W40-2024,98.5,6h 34min +W39-2024,105.0,6h 23min +W38-2024,107.5,6h 41min +W37-2024,105.0,6h 18min +W36-2024,97.0,6h 19min +W35-2024,102.5,7h 1min +W34-2024,108.5,6h 17min +W33-2024,103.0,6h 36min +W32-2024,105.0,5h 45min +W31-2024,103.5,7h 4min +W30-2024,107.0,6h 52min +W29-2024,102.5,6h 26min +W28-2024,108.5,7h 10min +W27-2024,106.5,7h 35min +W26-2024,111.5,6h 8min +W25-2024,102.5,6h 30min +W24-2024,107.5,6h 1min +W23-2024,101.5,6h 22min +W22-2024,104.5,6h 33min +W21-2024,107.0,6h 47min +W20-2024,103.5,5h 51min +W19-2024,109.0,6h 21min +W18-2024,107.5,5h 36min +W17-2024,110.0,6h 2min +W16-2024,98.0,6h 28min +W15-2024,99.0,6h 17min +W14-2024,97.5,6h 18min +W13-2024,101.0,6h 50min +W12-2024,100.0,6h 9min +W11-2024,101.5,6h 11min +W10-2024,99.0,6h 22min +W9-2024,102.0,6h 4min +W8-2024,106.0,7h 11min +W7-2024,101.5,6h 58min +W6-2024,104.0,8h 17min +W5-2024,99.5,6h 12min +W4-2024,100.5,7h 21min +W3-2024,99.0,6h 25min +W2-2024,97.0,6h 27min +W1-2024,97.5,6h 44min +W52-2024,93.5,54 diff --git a/data/sandbox/hr_data_clean.csv b/data/sandbox/hr_data_clean.csv new file mode 100644 index 0000000..8e535c3 --- /dev/null +++ b/data/sandbox/hr_data_clean.csv @@ -0,0 +1,53 @@ +Woche,avg_hr +W40-2024,98.5 +W39-2024,105.0 +W38-2024,107.5 +W37-2024,105.0 +W36-2024,97.0 +W35-2024,102.5 +W34-2024,108.5 +W33-2024,103.0 +W32-2024,105.0 +W31-2024,103.5 +W30-2024,107.0 +W29-2024,102.5 +W28-2024,108.5 +W27-2024,106.5 +W26-2024,111.5 +W25-2024,102.5 +W24-2024,107.5 +W23-2024,101.5 +W22-2024,104.5 +W21-2024,107.0 +W20-2024,103.5 +W19-2024,109.0 +W18-2024,107.5 +W17-2024,110.0 +W16-2024,98.0 +W15-2024,99.0 +W14-2024,97.5 +W13-2024,101.0 +W12-2024,100.0 +W11-2024,101.5 +W10-2024,99.0 +W9-2024,102.0 +W8-2024,106.0 +W7-2024,101.5 +W6-2024,104.0 +W5-2024,99.5 +W4-2024,100.5 +W3-2024,99.0 +W2-2024,97.0 +W1-2024,97.5 +W52-2024,93.5 +W51-2023,88.0 +W50-2023,95.0 +W49-2023,99.0 +W48-2023,101.5 +W47-2023,103.5 +W46-2023,105.5 +W45-2023,104.0 +W44-2023,101.5 +W43-2023,95.0 +W42-2023,96.5 +W41-2023,85.5 diff --git a/data/sandbox/sleep_data_clean.csv b/data/sandbox/sleep_data_clean.csv new file mode 100644 index 0000000..5416f58 --- /dev/null +++ b/data/sandbox/sleep_data_clean.csv @@ -0,0 +1,53 @@ +Woche,Durchschnittliche Dauer +W41-2024,6h 11min +W40-2024,6h 34min +W39-2024,6h 23min +W38-2024,6h 41min +W37-2024,6h 18min +W36-2024,6h 19min +W35-2024,7h 1min +W34-2024,6h 17min +W33-2024,6h 36min +W32-2024,5h 45min +W31-2024,7h 4min +W30-2024,6h 52min +W29-2024,6h 26min +W28-2024,7h 10min +W27-2024,7h 35min +W26-2024,6h 8min +W25-2024,6h 30min +W24-2024,6h 1min +W23-2024,6h 22min +W22-2024,6h 33min +W21-2024,6h 47min +W20-2024,5h 51min +W19-2024,6h 21min +W18-2024,5h 36min +W17-2024,6h 2min +W16-2024,6h 28min +W15-2024,6h 17min +W14-2024,6h 18min +W13-2024,6h 50min +W12-2024,6h 9min +W11-2024,6h 11min +W10-2024,6h 22min +W9-2024,6h 4min +W8-2024,7h 11min +W7-2024,6h 58min +W6-2024,8h 17min +W5-2024,6h 12min +W4-2024,7h 21min +W3-2024,6h 25min +W2-2024,6h 27min +W1-2024,6h 44min +W52-2024,54 +W51-2024,Schlecht +W50-2024,Schlecht +W49-2024,Schlecht +W48-2024,Schlecht +W47-2024,Schlecht +W46-2024,Schlecht +W45-2024,Schlecht +W44-2024,Schlecht +W43-2024,Schlecht +W42-2024,Schlecht From b8c420621b71b35a177fde4d7f76544b12a717f9 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 10:40:27 +0200 Subject: [PATCH 09/15] edit corelation.py and add hr_data_cleaned.csv --- code/corelation.py | 47 ++++++- code/corelation_old5.py | 144 +++++++++++++++++++++ data/final/gramic_sleep_hr_correlation.png | Bin 0 -> 39156 bytes data/final/weekly_hr_sleep.png | Bin 0 -> 43004 bytes data/sandbox/combined_data.csv | 92 +++++++------ data/sandbox/sleep_data_clean.csv | 104 +++++++-------- data/sandbox/sleep_gramic.csv | 53 ++++++++ 7 files changed, 345 insertions(+), 95 deletions(-) create mode 100644 code/corelation_old5.py create mode 100644 data/final/gramic_sleep_hr_correlation.png create mode 100644 data/final/weekly_hr_sleep.png create mode 100644 data/sandbox/sleep_gramic.csv diff --git a/code/corelation.py b/code/corelation.py index 79bc956..a1f68c0 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -9,6 +9,18 @@ month_translation = { 'Jul': 'Jul', 'Aug': 'Aug', 'Sep': 'Sep', 'Okt': 'Oct', 'Nov': 'Nov', 'Dez': 'Dec' } +# Funktion zur Umwandlung von '6h 11min' in numerische Stundenwerte +def convert_sleep_duration(sleep_duration_str): + print(sleep_duration_str) + hours = 0 + minutes = 0 + if 'h' in sleep_duration_str: + hours_part = sleep_duration_str.split('h')[0].strip() + hours = int(hours_part) + if 'min' in sleep_duration_str: + minutes_part = sleep_duration_str.split('h')[-1].replace('min', '').strip() + minutes = int(minutes_part) + return hours + (minutes / 60) # 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): @@ -85,10 +97,13 @@ def convert_to_week_and_year(date_range_str): # 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' +sleep_data_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/sandbox/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' +graphic_corr_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/final/gramic_sleep_hr_correlation.png' +graphic_weekly_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/final/weekly_hr_sleep.png' + # Schritt 1: Lade die HR-Daten (mit Semikolon separiert) und entferne 'bpm' hr_data = pd.read_csv(hr_data_path, sep=';') @@ -108,11 +123,15 @@ 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=',') +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) +# Konvertiere die Spalte 'Durchschnittliche Dauer' in numerische Stunden +sleep_data['Durchschnittliche Dauer'] = sleep_data['Durchschnittliche Dauer'].apply(convert_sleep_duration) + + # 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) @@ -141,4 +160,28 @@ plt.plot(combined_data['avg_hr'], m * combined_data['avg_hr'] + b, color='red', label=f'Trendlinie (Kor = {correlation:.2f})') plt.legend() +# Speichern der Grafik +plt.savefig(graphic_corr_path) +plt.show() + +# Schritt 6: Erstelle eine Grafik pro Kalenderwoche (Herzfrequenz und Schlafdaten) +plt.figure(figsize=(12, 6)) + +# Plot für die Herzfrequenz +plt.bar(combined_data['Woche'], combined_data['avg_hr'], width=0.4, label='Durchschnittliche Herzfrequenz', align='center') + +# Plot für die Schlafdauer (mit Verschiebung, um Überlappung zu vermeiden) +plt.bar(combined_data['Woche'], combined_data['Durchschnittliche Dauer'], width=0.4, label='Schlafdauer', align='edge') + +# Diagrammtitel und Achsenbeschriftungen +plt.title('Durchschnittliche Herzfrequenz und Schlafdauer pro Kalenderwoche') +plt.xlabel('Kalenderwoche') +plt.ylabel('Wert') + +# Legende und Rotation der x-Achse +plt.legend() +plt.xticks(rotation=45, ha='right') + +# Speichern der zweiten Grafik +plt.savefig(graphic_weekly_path) plt.show() diff --git a/code/corelation_old5.py b/code/corelation_old5.py new file mode 100644 index 0000000..79bc956 --- /dev/null +++ b/code/corelation_old5.py @@ -0,0 +1,144 @@ +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/data/final/gramic_sleep_hr_correlation.png b/data/final/gramic_sleep_hr_correlation.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f1a92530d19def5170847d88066e3b3a9ec8dd GIT binary patch literal 39156 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 AXaE2J literal 0 HcmV?d00001 diff --git a/data/sandbox/combined_data.csv b/data/sandbox/combined_data.csv index 743d87c..208422d 100644 --- a/data/sandbox/combined_data.csv +++ b/data/sandbox/combined_data.csv @@ -1,42 +1,52 @@ Woche,avg_hr,Durchschnittliche Dauer -W40-2024,98.5,6h 34min -W39-2024,105.0,6h 23min -W38-2024,107.5,6h 41min -W37-2024,105.0,6h 18min -W36-2024,97.0,6h 19min -W35-2024,102.5,7h 1min -W34-2024,108.5,6h 17min -W33-2024,103.0,6h 36min -W32-2024,105.0,5h 45min -W31-2024,103.5,7h 4min -W30-2024,107.0,6h 52min -W29-2024,102.5,6h 26min -W28-2024,108.5,7h 10min -W27-2024,106.5,7h 35min -W26-2024,111.5,6h 8min -W25-2024,102.5,6h 30min -W24-2024,107.5,6h 1min -W23-2024,101.5,6h 22min -W22-2024,104.5,6h 33min -W21-2024,107.0,6h 47min -W20-2024,103.5,5h 51min -W19-2024,109.0,6h 21min -W18-2024,107.5,5h 36min -W17-2024,110.0,6h 2min -W16-2024,98.0,6h 28min -W15-2024,99.0,6h 17min -W14-2024,97.5,6h 18min -W13-2024,101.0,6h 50min -W12-2024,100.0,6h 9min -W11-2024,101.5,6h 11min -W10-2024,99.0,6h 22min -W9-2024,102.0,6h 4min -W8-2024,106.0,7h 11min -W7-2024,101.5,6h 58min -W6-2024,104.0,8h 17min -W5-2024,99.5,6h 12min -W4-2024,100.5,7h 21min -W3-2024,99.0,6h 25min -W2-2024,97.0,6h 27min -W1-2024,97.5,6h 44min -W52-2024,93.5,54 +W40-2024,98.5,6.566666666666666 +W39-2024,105.0,6.383333333333334 +W38-2024,107.5,6.683333333333334 +W37-2024,105.0,6.3 +W36-2024,97.0,6.316666666666666 +W35-2024,102.5,7.016666666666667 +W34-2024,108.5,6.283333333333333 +W33-2024,103.0,6.6 +W32-2024,105.0,5.75 +W31-2024,103.5,7.066666666666666 +W30-2024,107.0,6.866666666666667 +W29-2024,102.5,6.433333333333334 +W28-2024,108.5,7.166666666666667 +W27-2024,106.5,7.583333333333333 +W26-2024,111.5,6.133333333333334 +W25-2024,102.5,6.5 +W24-2024,107.5,6.016666666666667 +W23-2024,101.5,6.366666666666666 +W22-2024,104.5,6.55 +W21-2024,107.0,6.783333333333333 +W20-2024,103.5,5.85 +W19-2024,109.0,6.35 +W18-2024,107.5,5.6 +W17-2024,110.0,6.033333333333333 +W16-2024,98.0,6.466666666666667 +W15-2024,99.0,6.283333333333333 +W14-2024,97.5,6.3 +W13-2024,101.0,6.833333333333333 +W12-2024,100.0,6.15 +W11-2024,101.5,6.183333333333334 +W10-2024,99.0,6.366666666666666 +W9-2024,102.0,6.066666666666666 +W8-2024,106.0,7.183333333333334 +W7-2024,101.5,6.966666666666667 +W6-2024,104.0,8.283333333333333 +W5-2024,99.5,6.2 +W4-2024,100.5,7.35 +W3-2024,99.0,6.416666666666667 +W2-2024,97.0,6.45 +W1-2024,97.5,6.733333333333333 +W52-2024,93.5,7.033333333333333 +W51-2023,88.0,7.266666666666667 +W50-2023,95.0,7.283333333333333 +W49-2023,99.0,7.883333333333333 +W48-2023,101.5,6.85 +W47-2023,103.5,7.183333333333334 +W46-2023,105.5,7.116666666666666 +W45-2023,104.0,7.083333333333333 +W44-2023,101.5,6.033333333333333 +W43-2023,95.0,6.65 +W42-2023,96.5,6.283333333333333 diff --git a/data/sandbox/sleep_data_clean.csv b/data/sandbox/sleep_data_clean.csv index 5416f58..2065d88 100644 --- a/data/sandbox/sleep_data_clean.csv +++ b/data/sandbox/sleep_data_clean.csv @@ -1,53 +1,53 @@ Woche,Durchschnittliche Dauer -W41-2024,6h 11min -W40-2024,6h 34min -W39-2024,6h 23min -W38-2024,6h 41min -W37-2024,6h 18min -W36-2024,6h 19min -W35-2024,7h 1min -W34-2024,6h 17min -W33-2024,6h 36min -W32-2024,5h 45min -W31-2024,7h 4min -W30-2024,6h 52min -W29-2024,6h 26min -W28-2024,7h 10min -W27-2024,7h 35min -W26-2024,6h 8min -W25-2024,6h 30min -W24-2024,6h 1min -W23-2024,6h 22min -W22-2024,6h 33min -W21-2024,6h 47min -W20-2024,5h 51min -W19-2024,6h 21min -W18-2024,5h 36min -W17-2024,6h 2min -W16-2024,6h 28min -W15-2024,6h 17min -W14-2024,6h 18min -W13-2024,6h 50min -W12-2024,6h 9min -W11-2024,6h 11min -W10-2024,6h 22min -W9-2024,6h 4min -W8-2024,7h 11min -W7-2024,6h 58min -W6-2024,8h 17min -W5-2024,6h 12min -W4-2024,7h 21min -W3-2024,6h 25min -W2-2024,6h 27min -W1-2024,6h 44min -W52-2024,54 -W51-2024,Schlecht -W50-2024,Schlecht -W49-2024,Schlecht -W48-2024,Schlecht -W47-2024,Schlecht -W46-2024,Schlecht -W45-2024,Schlecht -W44-2024,Schlecht -W43-2024,Schlecht -W42-2024,Schlecht +W41-2024,6.183333333333334 +W40-2024,6.566666666666666 +W39-2024,6.383333333333334 +W38-2024,6.683333333333334 +W37-2024,6.3 +W36-2024,6.316666666666666 +W35-2024,7.016666666666667 +W34-2024,6.283333333333333 +W33-2024,6.6 +W32-2024,5.75 +W31-2024,7.066666666666666 +W30-2024,6.866666666666667 +W29-2024,6.433333333333334 +W28-2024,7.166666666666667 +W27-2024,7.583333333333333 +W26-2024,6.133333333333334 +W25-2024,6.5 +W24-2024,6.016666666666667 +W23-2024,6.366666666666666 +W22-2024,6.55 +W21-2024,6.783333333333333 +W20-2024,5.85 +W19-2024,6.35 +W18-2024,5.6 +W17-2024,6.033333333333333 +W16-2024,6.466666666666667 +W15-2024,6.283333333333333 +W14-2024,6.3 +W13-2024,6.833333333333333 +W12-2024,6.15 +W11-2024,6.183333333333334 +W10-2024,6.366666666666666 +W9-2024,6.066666666666666 +W8-2024,7.183333333333334 +W7-2024,6.966666666666667 +W6-2024,8.283333333333333 +W5-2024,6.2 +W4-2024,7.35 +W3-2024,6.416666666666667 +W2-2024,6.45 +W1-2024,6.733333333333333 +W52-2024,7.033333333333333 +W51-2023,7.266666666666667 +W50-2023,7.283333333333333 +W49-2023,7.883333333333333 +W48-2023,6.85 +W47-2023,7.183333333333334 +W46-2023,7.116666666666666 +W45-2023,7.083333333333333 +W44-2023,6.033333333333333 +W43-2023,6.65 +W42-2023,6.283333333333333 diff --git a/data/sandbox/sleep_gramic.csv b/data/sandbox/sleep_gramic.csv new file mode 100644 index 0000000..74ff3b6 --- /dev/null +++ b/data/sandbox/sleep_gramic.csv @@ -0,0 +1,53 @@ +Datum;Ø Score;Ø Qualität;Durchschnittliche Dauer;Ø Schlafenszeit;Ø Aufstehzeit +Okt 10-16;46;Schlecht;6h 11min;1:28;7:50 +Okt 3-9;56;Schlecht;6h 34min;0:33;7:22 +Sep 26 - Okt 2;52;Schlecht;6h 23min;0:00;6:37 +Sep 19-25;59;Schlecht;6h 41min;0:27;7:16 +Sep 12-18;59;Schlecht;6h 18min;0:48;7:12 +Sep 5-11;55;Schlecht;6h 19min;0:56;7:22 +Aug 29 - Sep 4;66;Ausreichend;7h 1min;0:21;7:31 +Aug 22-28;57;Schlecht;6h 17min;0:35;6:59 +Aug 15-21;72;Ausreichend;6h 36min;0:38;7:25 +Aug 8-14;56;Schlecht;5h 45min;0:16;6:06 +Aug 1-7;64;Ausreichend;7h 4min;0:39;8:10 +Jul 25-31;61;Ausreichend;6h 52min;0:40;7:56 +Jul 18-24;54;Schlecht;6h 26min;2:16;9:19 +Jul 11-17;74;Ausreichend;7h 10min;0:06;7:26 +Jul 4-10;58;Schlecht;7h 35min;0:45;9:05 +Jun 27 - Jul 3;60;Ausreichend;6h 8min;1:22;7:42 +Jun 20-26;69;Ausreichend;6h 30min;0:19;6:58 +Jun 13-19;59;Schlecht;6h 1min;0:25;6:33 +Jun 6-12;60;Ausreichend;6h 22min;0:02;6:30 +Mai 30 - Jun 5;60;Ausreichend;6h 33min;0:34;7:15 +Mai 23-29;51;Schlecht;6h 47min;0:56;7:54 +Mai 16-22;50;Schlecht;5h 51min;1:13;7:08 +Mai 9-15;55;Schlecht;6h 21min;0:58;7:23 +Mai 2-8;40;Schlecht;5h 36min;0:39;6:19 +Apr 25 - Mai 1;55;Schlecht;6h 2min;1:18;7:26 +Apr 18-24;56;Schlecht;6h 28min;3:11;9:55 +Apr 11-17;56;Schlecht;6h 17min;1:23;7:51 +Apr 4-10;62;Ausreichend;6h 18min;0:39;7:10 +Mrz 28 - Apr 3;68;Ausreichend;6h 50min;1:45;8:51 +Mrz 21-27;60;Ausreichend;6h 9min;0:56;7:13 +Mrz 14-20;54;Schlecht;6h 11min;1:03;7:24 +Mrz 7-13;54;Schlecht;6h 22min;0:49;7:17 +Feb 29 - Mrz 6;50;Schlecht;6h 4min;0:56;7:09 +Feb 22-28;61;Ausreichend;7h 11min;0:08;7:25 +Feb 15-21;44;Schlecht;6h 58min;0:19;7:51 +Feb 8-14;50;Schlecht;8h 17min;0:09;8:47 +Feb 1-7;43;Schlecht;6h 12min;1:06;7:25 +Jan 25-31;57;Schlecht;7h 21min;1:17;8:40 +Jan 18-24;51;Schlecht;6h 25min;0:56;7:26 +Jan 11-17;50;Schlecht;6h 27min;1:36;8:12 +Jan 4-10;59;Schlecht;6h 44min;1:26;8:24 +Dez 28, 2023 - Jan 3, 2024;54;Schlecht;7h 2min +Dez 21-27, 2023;55;Schlecht;7h 16min;0:38 +Dez 14-20, 2023;56;Schlecht;7h 17min;0:31 +Dez 7-13, 2023;44;Schlecht;7h 53min;23:46 +Nov 30 - Dez 6, 2023;48;Schlecht;6h 51min;0:33 +Nov 23-29, 2023;48;Schlecht;7h 11min;0:21 +Nov 16-22, 2023;53;Schlecht;7h 7min;0:23 +Nov 9-15, 2023;47;Schlecht;7h 5min;0:19 +Nov 2-8, 2023;50;Schlecht;6h 2min;0:00 +Okt 26 - Nov 1, 2023;59;Schlecht;6h 39min;0:14 +Okt 19-25, 2023;48;Schlecht;6h 17min;0:46 \ No newline at end of file From 568c13053c3ee482726155a28c3fcdebd2a07c4f Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 10:58:36 +0200 Subject: [PATCH 10/15] edit pre-final --- code/corelation.py | 102 ++++++--------------- data/final/gramic_sleep_hr_correlation.png | Bin 39156 -> 38104 bytes data/final/weekly_hr_sleep.png | Bin 43004 -> 45884 bytes 3 files changed, 27 insertions(+), 75 deletions(-) diff --git a/code/corelation.py b/code/corelation.py index a1f68c0..1660b7a 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -11,7 +11,6 @@ month_translation = { # Funktion zur Umwandlung von '6h 11min' in numerische Stundenwerte def convert_sleep_duration(sleep_duration_str): - print(sleep_duration_str) hours = 0 minutes = 0 if 'h' in sleep_duration_str: @@ -22,78 +21,53 @@ def convert_sleep_duration(sleep_duration_str): minutes = int(minutes_part) return hours + (minutes / 60) -# Funktion, um Datumsbereiche wie 'Mrz 29-Apr 4', 'Dez 22-28 2023' oder 'Dez 28' in Kalenderwoche und Jahr zu konvertieren +# Funktion, um Datumsbereiche 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 + year_str = str(datetime.now().year) - # 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 + date_range_str = date_range_str[:-5] 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 + start_day = int(start_parts[1].strip()) 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' + if len(end_parts) == 2: 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 + start_date = datetime.strptime(f"{start_month_str} {start_day} {year_str}", "%b %d %Y") 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 - + return f"W{week_number}-{year}" # Datei Pfade hr_data_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/raw/hr_gramic.csv' @@ -104,84 +78,62 @@ combined_data_path = '/home/gra/PycharmProjects/cds_introduction_data_science_as graphic_corr_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/final/gramic_sleep_hr_correlation.png' graphic_weekly_path = '/home/gra/PycharmProjects/cds_introduction_data_science_assignment/data/final/weekly_hr_sleep.png' - -# Schritt 1: Lade die HR-Daten (mit Semikolon separiert) und entferne 'bpm' +# Schritt 1: Lade die HR-Daten 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) +# Schritt 2: Lade die Schlafdaten 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) - -# Konvertiere die Spalte 'Durchschnittliche Dauer' in numerische Stunden sleep_data['Durchschnittliche Dauer'] = sleep_data['Durchschnittliche Dauer'].apply(convert_sleep_duration) - - -# 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' +# Schritt 3: Kombiniere die HR- und Schlafdaten 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 +# Schritt 4: Berechne die Korrelation 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 +# Schritt 5: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer (invertierte x-Achse) 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.plot(combined_data['avg_hr'], m * combined_data['avg_hr'] + b, color='red', label=f'Trendlinie (Kor = {correlation:.2f})') +plt.gca().invert_xaxis() # X-Achse invertieren plt.legend() -# Speichern der Grafik plt.savefig(graphic_corr_path) plt.show() -# Schritt 6: Erstelle eine Grafik pro Kalenderwoche (Herzfrequenz und Schlafdaten) -plt.figure(figsize=(12, 6)) +# Schritt 6: Erstelle eine Grafik pro Kalenderwoche (HR und Schlafdaten) +fig, ax1 = plt.subplots(figsize=(12, 6)) -# Plot für die Herzfrequenz -plt.bar(combined_data['Woche'], combined_data['avg_hr'], width=0.4, label='Durchschnittliche Herzfrequenz', align='center') +# Erste Achse: Herzfrequenz +ax1.bar(combined_data['Woche'], combined_data['avg_hr'], width=0.4, label='Durchschnittliche Herzfrequenz', align='center', color='b') +ax1.set_xlabel('Kalenderwoche') +ax1.set_ylabel('Durchschnittliche Herzfrequenz (bpm)', color='b') +ax1.tick_params(axis='y', labelcolor='b') -# Plot für die Schlafdauer (mit Verschiebung, um Überlappung zu vermeiden) -plt.bar(combined_data['Woche'], combined_data['Durchschnittliche Dauer'], width=0.4, label='Schlafdauer', align='edge') +# Zweite Achse: Schlafdauer +ax2 = ax1.twinx() +ax2.bar(combined_data['Woche'], combined_data['Durchschnittliche Dauer'], width=0.4, label='Schlafdauer', align='edge', color='g') +ax2.set_ylabel('Schlafdauer (Stunden)', color='g') +ax2.tick_params(axis='y', labelcolor='g') -# Diagrammtitel und Achsenbeschriftungen plt.title('Durchschnittliche Herzfrequenz und Schlafdauer pro Kalenderwoche') -plt.xlabel('Kalenderwoche') -plt.ylabel('Wert') - -# Legende und Rotation der x-Achse -plt.legend() plt.xticks(rotation=45, ha='right') +fig.tight_layout() -# Speichern der zweiten Grafik plt.savefig(graphic_weekly_path) plt.show() diff --git a/data/final/gramic_sleep_hr_correlation.png b/data/final/gramic_sleep_hr_correlation.png index c3f1a92530d19def5170847d88066e3b3a9ec8dd..5a5d6f9520d0be657a6eb0adc0de0ceffa7f28d2 100644 GIT binary patch literal 38104 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 literal 39156 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 U+e-}X(Z8h3&()|OtM;Dx3&Bt&*#H0l literal 43004 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 AXaE2J From ac7ab0c3399b2b1927cfc9eed81f3ae6b23dbe0a Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 11:03:51 +0200 Subject: [PATCH 11/15] final branch commit --- code/corelation.py | 10 ++++++++-- data/final/weekly_hr_sleep.png | Bin 45884 -> 46318 bytes 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/corelation.py b/code/corelation.py index 1660b7a..45a587e 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -117,7 +117,7 @@ plt.savefig(graphic_corr_path) plt.show() # Schritt 6: Erstelle eine Grafik pro Kalenderwoche (HR und Schlafdaten) -fig, ax1 = plt.subplots(figsize=(12, 6)) +fig, ax1 = plt.subplots(figsize=(30, 8)) # Breitere Darstellung # Erste Achse: Herzfrequenz ax1.bar(combined_data['Woche'], combined_data['avg_hr'], width=0.4, label='Durchschnittliche Herzfrequenz', align='center', color='b') @@ -132,7 +132,13 @@ ax2.set_ylabel('Schlafdauer (Stunden)', color='g') ax2.tick_params(axis='y', labelcolor='g') plt.title('Durchschnittliche Herzfrequenz und Schlafdauer pro Kalenderwoche') -plt.xticks(rotation=45, ha='right') + +# Anpassung der x-Achse für bessere Lesbarkeit +plt.xticks(rotation=90, ha='center', fontsize=12) # Schriftgröße auf 12 erhöht + +# Zeige nur jede zweite Woche +ax1.set_xticks(ax1.get_xticks()[::2]) + fig.tight_layout() plt.savefig(graphic_weekly_path) diff --git a/data/final/weekly_hr_sleep.png b/data/final/weekly_hr_sleep.png index 2f5bd92f0efbe547f6a550ae910e4df5b092f4ac..f703abbced1c4269f4ece85f77a713ceea4ecce9 100644 GIT binary patch literal 46318 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 F{$Ecsc&Y#Z literal 45884 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 U+e-}X(Z8h3&()|OtM;Dx3&Bt&*#H0l From ea8280ba0e560b4a17a0e64adb947448b0b29c2a Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 15:29:07 +0200 Subject: [PATCH 12/15] final branch commit --- code/corelation.py | 34 ++++++++++++++++----- data/final/gramic_sleep_hr_correlation.png | Bin 38104 -> 39782 bytes 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/code/corelation.py b/code/corelation.py index 45a587e..3e2eef0 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -102,20 +102,38 @@ combined_data.to_csv(combined_data_path, index=False) 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 (invertierte x-Achse) +# # Schritt 5: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer (invertierte x-Achse) +# 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) +# 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.gca().invert_xaxis() # X-Achse invertieren +# plt.legend() +# plt.savefig(graphic_corr_path) +# plt.show() + +# Schritt 5: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer (invertierte y-Achse) 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.scatter(combined_data['Durchschnittliche Dauer'], combined_data['avg_hr'], color='blue', label='Datenpunkte') +plt.title('Zusammenhang zwischen Schlafdauer und Herzfrequenz (Durchschnitt)') +plt.xlabel('Schlafdauer (Stunden)') +plt.ylabel('Durchschnittliche Herzfrequenz (bpm)') plt.grid(True) -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.gca().invert_xaxis() # X-Achse invertieren + +# Berechne und zeichne die Trendlinie (umgekehrt) +m, b = np.polyfit(combined_data['Durchschnittliche Dauer'], combined_data['avg_hr'], 1) +plt.plot(combined_data['Durchschnittliche Dauer'], m * combined_data['Durchschnittliche Dauer'] + b, color='red', label=f'Trendlinie (Kor = {correlation:.2f})') + +plt.gca().invert_yaxis() # Y-Achse invertieren, da die Herzfrequenz auf der Y-Achse ist plt.legend() plt.savefig(graphic_corr_path) plt.show() + # Schritt 6: Erstelle eine Grafik pro Kalenderwoche (HR und Schlafdaten) fig, ax1 = plt.subplots(figsize=(30, 8)) # Breitere Darstellung diff --git a/data/final/gramic_sleep_hr_correlation.png b/data/final/gramic_sleep_hr_correlation.png index 5a5d6f9520d0be657a6eb0adc0de0ceffa7f28d2..4157e7fc7332c0e95bf115878818141034657b46 100644 GIT binary patch literal 39782 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 literal 38104 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 From 1507a506ba362c9a31eadc8c553bdbea935dcd3d Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 15:35:22 +0200 Subject: [PATCH 13/15] final branch commit --- code/corelation.py | 6 ++---- data/final/gramic_sleep_hr_correlation.png | Bin 39782 -> 40753 bytes 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/code/corelation.py b/code/corelation.py index 3e2eef0..96d8126 100644 --- a/code/corelation.py +++ b/code/corelation.py @@ -116,7 +116,7 @@ print(f"Die Korrelation zwischen der durchschnittlichen Herzfrequenz und der Sch # plt.savefig(graphic_corr_path) # plt.show() -# Schritt 5: Visualisiere den Zusammenhang zwischen Herzfrequenz und Schlafdauer (invertierte y-Achse) +# Schritt 5: Visualisiere den Zusammenhang zwischen Schlafdauer und Herzfrequenz plt.figure(figsize=(10, 6)) plt.scatter(combined_data['Durchschnittliche Dauer'], combined_data['avg_hr'], color='blue', label='Datenpunkte') plt.title('Zusammenhang zwischen Schlafdauer und Herzfrequenz (Durchschnitt)') @@ -124,16 +124,14 @@ plt.xlabel('Schlafdauer (Stunden)') plt.ylabel('Durchschnittliche Herzfrequenz (bpm)') plt.grid(True) -# Berechne und zeichne die Trendlinie (umgekehrt) +# Berechne und zeichne die Trendlinie m, b = np.polyfit(combined_data['Durchschnittliche Dauer'], combined_data['avg_hr'], 1) plt.plot(combined_data['Durchschnittliche Dauer'], m * combined_data['Durchschnittliche Dauer'] + b, color='red', label=f'Trendlinie (Kor = {correlation:.2f})') -plt.gca().invert_yaxis() # Y-Achse invertieren, da die Herzfrequenz auf der Y-Achse ist plt.legend() plt.savefig(graphic_corr_path) plt.show() - # Schritt 6: Erstelle eine Grafik pro Kalenderwoche (HR und Schlafdaten) fig, ax1 = plt.subplots(figsize=(30, 8)) # Breitere Darstellung diff --git a/data/final/gramic_sleep_hr_correlation.png b/data/final/gramic_sleep_hr_correlation.png index 4157e7fc7332c0e95bf115878818141034657b46..7dc0aa2dc494fdeed252dbbbcbd2584d56d86c29 100644 GIT binary patch literal 40753 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 A)Bpeg literal 39782 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 From ebc0d684e6b8952c1dff479f2a3149fac8b32be2 Mon Sep 17 00:00:00 2001 From: TheOriginalGraLargeShrimpakaReaper Date: Fri, 18 Oct 2024 15:35:55 +0200 Subject: [PATCH 14/15] final branch commit with cleanup --- code/corelation_old.py | 35 ------ code/corelation_old2.py | 50 -------- code/corelation_old3.py | 94 -------------- code/corelation_old4.py | 266 --------------------------------------- code/corelation_old5.py | 144 --------------------- code/crawler.py | 21 ---- code/hr_data_cleaned.csv | 53 -------- 7 files changed, 663 deletions(-) delete mode 100644 code/corelation_old.py delete mode 100644 code/corelation_old2.py delete mode 100644 code/corelation_old3.py delete mode 100644 code/corelation_old4.py delete mode 100644 code/corelation_old5.py delete mode 100644 code/crawler.py delete mode 100644 code/hr_data_cleaned.csv 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 From b71c248e98c31b1476a7a04d617426b4aae10ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20Sch=C3=BCtz?= <78213692+DotNaos@users.noreply.github.com> Date: Sat, 19 Oct 2024 15:32:51 +0000 Subject: [PATCH 15/15] Restructuring of files to comply with master --- .../gra}/gramic_sleep_hr_correlation.png | Bin {data/final => media/gra}/weekly_hr_sleep.png | Bin {code => src/gra}/corelation.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {data/final => media/gra}/gramic_sleep_hr_correlation.png (100%) rename {data/final => media/gra}/weekly_hr_sleep.png (100%) rename {code => src/gra}/corelation.py (100%) diff --git a/data/final/gramic_sleep_hr_correlation.png b/media/gra/gramic_sleep_hr_correlation.png similarity index 100% rename from data/final/gramic_sleep_hr_correlation.png rename to media/gra/gramic_sleep_hr_correlation.png diff --git a/data/final/weekly_hr_sleep.png b/media/gra/weekly_hr_sleep.png similarity index 100% rename from data/final/weekly_hr_sleep.png rename to media/gra/weekly_hr_sleep.png diff --git a/code/corelation.py b/src/gra/corelation.py similarity index 100% rename from code/corelation.py rename to src/gra/corelation.py