Den tägliche Verbrauch an Gas und Strom visualisieren

In dem vorherigen Blog hatten wir Daten gesammelt, die in jedem Haushalt, der über einen Gas- und Stromanschluss verfügt, vorhanden sind: Datum, Uhrzeit, Stand Gaszähler, Stand Stromzähler. Der dazugehörige Zettel hängt bei uns am Kühlschrank und wer auch immer daran denkt und Zeit hat, fügt eine neue Zeile ein.

Nun sollen diese Zahlenkolonnen umgerechnet werden in den täglichen Verbrauch und der soll wiederum verglichen werden mit dem langjährigen Verbrauchsmittel, den uns die Energieversorger mit der Abrechnung zur Verfügung stellen.

Die Datenerfassung soll zumutbar bleiben

Dabei ergibt sich nun folgendes Problem: eigentlich sollte man täglich immer zur gleichen Uhrzeit ablesen, um so aus den Unterschieden der Zählerstände den jeweiligen Verbrauch ermitteln zu können. Das ist jedoch einer, zumindest unserer, Familie, nicht zumutbar.

Ein Algorithmus muss her

Dafür definieren wir eine Funktion die erlaubt, die Daten über eine gewisse Anzahl von Tagen, zum Beispiel über eine Woche also sieben Tage, zu glätten. Für eine Zeitspanne von einer Woche und den heutigen 13. November um 18:30 würde diese Funktion also alle Werte auswählen, die nach dem 6. November, ebenfalls um 18:30, erhoben wurden. Mithilfe dieser Daten führen wir eine Regressionsanalyse durch.

In R ist diese Funktion schnell erstellt. Andere mögen sie eleganter und ohne Schleife erstellen. Hinter den #-Zeichen füge ich Kommentare ein:

Verbrauch <- function(tab, days) {
  
  #tab[1, ]: Datum und Uhrzeit
  #tab[2, ]: Werte
  
  res <- tab
  res$Per24h <- NA
  res$R2 <- NA
  res$N <- NA
  
  for (i in 3:nrow(res)) {
    
    von <- tab[i, 1]$DatumUhrzeit - days*24*3600
    subset <- tab[1:i, ] %>% filter(DatumUhrzeit > von)
    colnames(subset)[2] <- "Werte"
    
    # Wir fangen noch einen Fehler ab:
    if(nrow(subset) > 2) {
      model <- lm(Werte ~ DatumUhrzeit, data = subset)
      res$Per24h[i] <- summary(model)$coefficients[2,1]*24*3600
      res$R2[i] <- summary(model)$r.squared
      res$N[i] <- nrow(subset)
    }
    
  }
  
  return(res)
  
  #res[1, ]: Datum und Uhrzeit
  #res[2, ]: Werte
  #res[3, ]: Verbrauch je 24h
  #res[4, ]: Regressionskoeffizient R^2
  #res[5, ]. Für die jeweilige Regression verwendete Anzahl von Werten
  
}

Dank dieser Funktion lässt sich das über eine Woche gemittelte Ergebnis für den Gasverbrauch wie folgt aus den Rohdaten der Tabelle t ermitteln:

days <- 7
tab <- t %>% select(DatumUhrzeit, StromverbrauchkWh)
res <- Verbrauch(tab, days)

So ergibt sich folgende Übersicht:

Wir sehen also, dass für den berechneten (über sieben Tage gemittelten) Durchschnittsverbrauch je 24 Stunden (oben) jeweils zumindest vier Datenpunkte zur Verfügung gestanden sind (unten). Bis auf den Anfang unserer Datenerhebung haben wir auch eine Güte R^2 der Regressionsanalyse von über 90% (Mitte). Diese Übersicht erzeugen wir ab jetzt zur Datenkontrolle. Solange dort keine Auffälligkeiten entstehen, werden die folgenden Graphiken im Familienrat betrachtet:

Bis ca. zum 20 Oktober sind die Gaswerte nicht zuverlässig (geringe Güte R^2). Wir haben da die Heizung auf Herbstbetrieb um- und dann für einige Tage bei schönem Wetter vollständig ausgestellt.

Wir können ab jetzt – fleißige Datenerhebung und -übertragung in ein Excelblatt vorausgesetzt – „per Knopfdruck“ (in R) unseren Verbrauch visualisieren. Unser derzeitige Schluss lautet: gar nicht so schlecht! Wir verbrauchen jeweils ca. 7 kWh Strom und Gas pro Tag.