edit corelation.py and add hr_data_cleaned.csv
This commit is contained in:
		
							parent
							
								
									6804054cc6
								
							
						
					
					
						commit
						104b1dc6c6
					
				@ -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()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								code/corelation_old2.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								code/corelation_old2.py
									
									
									
									
									
										Normal file
									
								
							@ -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}")
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user