# 1. Daten laden (Erwartet 3 Spalten: Datum;Zeit;Wert)
raw_data <- read.csv2("Blatt 3-Tabelle 1.csv", 
                      header = FALSE, 
                      sep = ";", 
                      stringsAsFactors = FALSE)

# 2. Spaltennamen explizit zuweisen
# Wir nehmen die ersten 3 Spalten an
colnames(raw_data)[1:3] <- c("Datum", "Zeit", "mg_dL")

# 3. Datentransformation (ETL)
bz_clean <- raw_data %>%
  # Zeit-Format vereinheitlichen (Punkt zu Doppelpunkt korrigieren)
  mutate(Zeit = str_replace_all(as.character(Zeit), "\\.", ":")) %>%
  # Kombinierten Zeitstempel erstellen
  mutate(Timestamp = dmy_hm(paste(Datum, Zeit))) %>%
  # Numerische Konvertierung (Komma zu Punkt)
  mutate(mg_dL = as.numeric(str_replace(as.character(mg_dL), ",", "."))) %>%
  # Validierung
  filter(!is.na(Timestamp), !is.na(mg_dL)) %>%
  arrange(Timestamp)

# Kurze Vorschau der bereinigten Daten
head(bz_clean)
##      Datum  Zeit  mg_dL           Timestamp
## 1 1.1.2026 00:00 108.90 2026-01-01 00:00:00
## 2 1.1.2026 01:00  79.92 2026-01-01 01:00:00
## 3 1.1.2026 02:00 122.40 2026-01-01 02:00:00
## 4 1.1.2026 03:00  82.62 2026-01-01 03:00:00
## 5 1.1.2026 04:00  80.10 2026-01-01 04:00:00
## 6 1.1.2026 05:00  92.16 2026-01-01 05:00:00
ggplot(bz_clean, aes(x = Timestamp, y = mg_dL)) +
  # Zielbereich (80-140 mg/dL)
  annotate("rect", xmin = min(bz_clean$Timestamp), xmax = max(bz_clean$Timestamp), 
           ymin = 80, ymax = 140, alpha = 0.1, fill = "green") +
  # Linien und Punkte
  geom_line(color = "steelblue", size = 0.7) +
  geom_point(color = "darkblue", size = 1.5, alpha = 0.6) +
  # Glättungslinie zur Trend-Erkennung (optional)
  geom_smooth(method = "loess", color = "red", linetype = "dotted", se = FALSE, size = 0.5) +
  theme_minimal() +
  labs(title = "Blutzuckerverlauf (mg/dL)",
       subtitle = "Rote gepunktete Linie zeigt den geglätteten Trend",
       x = "Zeit",
       y = "Blutzucker [mg/dL]") +
  scale_x_datetime(date_labels = "%d.%m. %H:%M", date_breaks = "12 hours") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Statistische Zusammenfassung der mg/dL Werte
summary(bz_clean$mg_dL)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0    91.8   109.1   108.0   124.3   180.0
# Berechnung der Standardabweichung als Maß für die Variabilität
cat("Standardabweichung:", sd(bz_clean$mg_dL, na.rm = TRUE))
## Standardabweichung: 37.39987