TS: Verdichtung von Messdaten, "Trendkurve"

problematische Seite

Hello,

ich logge seit Mai 2019 Temperaturdaten mit einem Raspi. Alle fünf Minuten wird ein Datenset erstellt. Zur Zeit wird jeder Fühler noch in einem eigenen Flatfile direkt auf dem Raspi gespeichert.

Neben der Verlagerung der Messdaten per "Post2Host" auf meinen Root-Webserver werden die Daten dort dann auch in einer MySQL/Maria-DB gespeichert. Es ist dann leichter möglich, das Anzeigefenster mit 36 Stunden Breite über die Datenmenge zu verschieben.

Nun möchte ich aber in Zukunft auch mehrere komprimierte Sichten (Eine Woche, ein Monat, ein Quartal, ... ) mit der gleichen Viewportbreite anzeigen können. Wie komprimiere/konsolidiere ich die Daten am besten für die Sicht? Ich möchte dabei Spitzenwerte (plötzliche Extremwerte) nichg verlieren, ohne allerdings die Umgebung dieser Werte zu verzerren. Außerdem kann der Datenbestand Lücken enthalten (Ausfall der Messeinrichtung), die auch erkannt und bei der Anzeige gekennzeichnet werden sollen.

Wie kann ich vorgehen?

Glück Auf
Tom vom Berg

--
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.
  1. problematische Seite

    Ich möchte dabei Spitzenwerte (plötzliche Extremwerte) nichg verlieren, ohne allerdings die Umgebung dieser Werte zu verzerren.

    Naja.

    https://en.wikipedia.org/wiki/Candlestick_chart

    Musst es ja nicht übertreiben, aber Du könntest Deine Daten z.B. auf Tageshöchst-, Mittel- und Niedrigstwert verdichten.

  2. problematische Seite

    Hallo Tom,

    ich logge seit Mai 2019 Temperaturdaten mit einem Raspi.

    derzeit bin ich dabei, etwas Ähnliches zu realisieren. Das Herz meiner künftigen Wetterstation ist auch ein Raspi; ich will aber nicht nur Temperaturen erfassen, sondern auch Luftdruck, Luftfeuchte, Regenmenge und Wind.
    Im Moment habe ich noch die Minimalfassung, der einzige Sensor ist ein BME280, der Luftdruck, Luftfeuchte und Temperatur in der Wohnung misst und I²C spricht. Ein zweiter BME280 wird das Außenwetter erfassen.

    Alle fünf Minuten wird ein Datenset erstellt.

    Okay, ich habe mich für ein 10min-Grobraster entschieden (ist aber noch konfigurierbar). Nur die Wind-Daten werde ich wohl in kürzeren Intervallen erfassen (z.B. 10s) und im 10min-Datensatz mit repräsentativen Werten abbilden, voraussichtlich Mittelwert und Maximum (Bö). Speichern möchte ich direkt in eine mySQL-Datenbank, die ohnehin auf meinem Home-Server läuft (das ist aber noch lange nicht realisiert).

    Nun möchte ich aber in Zukunft auch mehrere komprimierte Sichten (Eine Woche, ein Monat, ein Quartal, ... ) mit der gleichen Viewportbreite anzeigen können. Wie komprimiere/konsolidiere ich die Daten am besten für die Sicht?

    Diese Aufgabenstellung kommt auf mich auch noch zu. Ich denke mir das so: Wenn die gemessenen Werte (graphisch oder tabellarisch) in einem komprimierten Format angezeigt werden sollen, z.B. nur 1 Datensatz je Stunde für eine Monats-Ansicht oder 1 Datensatz je Tag für eine Jahres-Ansicht, dann werden aus jeder Messreihe drei: Mittelwert, Minimum und Maximum im Intervall.

    Ich möchte dabei Spitzenwerte (plötzliche Extremwerte) nichg verlieren, ohne allerdings die Umgebung dieser Werte zu verzerren.

    Das wäre mit der Min/Max-Lösung gewährleistet.

    Außerdem kann der Datenbestand Lücken enthalten (Ausfall der Messeinrichtung), die auch erkannt und bei der Anzeige gekennzeichnet werden sollen.

    Das ist IMO ein bisschen kniffliger. Du könntest für die Messzyklen, in denen kein gültiger Messwert verfügbar ist, einen eindeutigen Fehlerwert speichern (z.B. eine Temperatur von -300°C). Diesen Wert könntest du bei der Auswertung entsprechend als Sonderfall abfragen und visualisieren.

    Schönes Wochenende,
     Martin

    --
    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
  3. problematische Seite

    Tach!

    Wie kann ich vorgehen?

    Munin. Damit kann man nicht nur das System überwachen, auch eigene Sensoren kann man schreiben. Ist aber für Langzeit-Daten weniger geeignet, da es nur 1.5 Jahre die Daten vorhält. Vielleicht hilft auch das von Munin verwendete RRDTool weiter.

    dedlfix.

  4. problematische Seite

    Nun möchte ich aber in Zukunft auch mehrere komprimierte Sichten (Eine Woche, ein Monat, ein Quartal, ... ) mit der gleichen Viewportbreite anzeigen können.

    Dafür nimmst Du die dementsprechenden Funktionen die eine DB dafür bereitstellt. Voraussetzung dafür ist, daß Deine Zeitangaben so gespeichert sind daß das DBMS mit dem Datum rechnen kann. Welche Datentypen dafür in Frage kommen kannst Du im Handbuch zu Deinem RDBMS nachlesen.

    MFG

    1. problematische Seite

      Hello,

      Nun möchte ich aber in Zukunft auch mehrere komprimierte Sichten (Eine Woche, ein Monat, ein Quartal, ... ) mit der gleichen Viewportbreite anzeigen können.

      Dafür nimmst Du die dementsprechenden Funktionen die eine DB dafür bereitstellt. Voraussetzung dafür ist, daß Deine Zeitangaben so gespeichert sind daß das DBMS mit dem Datum rechnen kann. Welche Datentypen dafür in Frage kommen kannst Du im Handbuch zu Deinem RDBMS nachlesen.

      Und welche sind das, bzw. wie muss man sie kombinieren, um einen Trend auszurechnen?

      • avg
      • min
      • max

      ?

      Wie machen das denn die Wetterfrösche?

      Ich möchte keinen Streubereich anzeigen, sondern eine eindeutige Linie.

      Glück Auf
      Tom vom Berg

      --
      Es gibt nichts Gutes, außer man tut es!
      Das Leben selbst ist der Sinn.
  5. problematische Seite

    Hallo Tom,

    zur Darstellungen hast du ja schon Antworten bekommen. Ich würde hier drei Kurven zeigen mit Min-, Max- und Mittelwerten.

    Zu den Aussetzern:

    Hier unterscheide ich zwischen Werten, die sich nur langsam ändern, bei dir Temperatur und Luftdruck, und Werten, die sich schnell ändern und auch „Peaks“ zeigen, wie z.B. Niederschlag und Windgeschwindigkeit. Schnell/langsam bezieht sich dabei auf die Messgeschwindigkeit.

    Bei sich schnell ändernden Werten würde ich die Aussetzer einfach weg lassen und die Kurven an der Stelle unterbrechen.

    Bei sich langsam ändernden Werten prüfe ich, wie lange der Ausfall gedauert hat. Wenn sinnvoll möglich, berechne ich die fehlenden Werte durch lineare Interpolation. Ein Ausfall der Temperatur- oder Luftdruckmessung von ca. einer Stunde dürfte mMn durch Interpolation aufgefüllt werden können, ohne die Messdaten zu verfälschen. Aber du hast ja schon Daten und kannst so prüfen, wie große Lücken noch so geschlossen werden können.

    Du hast auch noch nach Vorhersagen gefragt, und wie das die Wetterfrösche machen. Die habem als Datenbasis die Werte von „tausenden“ Messtationen und berechnen daraus mit ausgeklügelten Algorithmen, wie das Wetter wohl werden könnte. Dazu benötigen Sie extrem leistungsstarke Rechner, um das Wetter schneller zu berechnen, als es kommt.

    Gruß
    Jürgen

    PS Wir haben im WIKI einen Artikel zum Thema Plotten mit SVG oder Canvas.

    1. problematische Seite

      Hallo Jürgen,

      zur Darstellungen hast du ja schon Antworten bekommen. Ich würde hier drei Kurven zeigen mit Min-, Max- und Mittelwerten.

      das war ja auch schon mein Vorschlag.

      Zu den Aussetzern:

      Hier unterscheide ich zwischen Werten, die sich nur langsam ändern, bei dir Temperatur und Luftdruck, und Werten, die sich schnell ändern und auch „Peaks“ zeigen, wie z.B. Niederschlag und Windgeschwindigkeit. Schnell/langsam bezieht sich dabei auf die Messgeschwindigkeit.

      Richtig, die "typischen" Wetterdaten wie Luftdruck, Temperatur und Luftfeuchte ändern sich in der Regel nur langsam. Aber ein Temperaturanstieg von 15° innerhalb einer Stunde ist durchaus drin, z.B. an einem klaren Sommermorgen. Auch ein Luftdruckabfall um 20mbar in einer Stunde ist bei einer ankommenden Sturmfront nicht auszuschließen. Schnell bzw. langsam ist also relativ.

      Beim Niederschlag habe ich mich zunächst gewundert, warum du den auch zu den "schnellen" Messgrößen zählst. Niederschläge von mehr als 5mm/h sind zumindest hier in der Region eine Seltenheit. Aber ich gebe zu, ein plötzlicher, heftiger Wolkenbruch kann da schon ordentlich reinhauen.

      Bei sich schnell ändernden Werten würde ich die Aussetzer einfach weg lassen und die Kurven an der Stelle unterbrechen.

      Ja. Und im Fall von tabellarischer Darstellung die entsprechenden Felder auch leer lassen (oder mit "fehlt" markieren).

      Bei sich langsam ändernden Werten prüfe ich, wie lange der Ausfall gedauert hat. Wenn sinnvoll möglich, berechne ich die fehlenden Werte durch lineare Interpolation. Ein Ausfall der Temperatur- oder Luftdruckmessung von ca. einer Stunde dürfte mMn durch Interpolation aufgefüllt werden können, ohne die Messdaten zu verfälschen. Aber du hast ja schon Daten und kannst so prüfen, wie große Lücken noch so geschlossen werden können.

      Bei graphischer Darstellung ergibt sich die Interpolation von selbst, wenn man stur die Messpunkte verbindet. Länger andauernde Ausfälle fallen dann dadurch auf, dass die natürlichen Kleinsignal-Schwankungen fehlen.

      Du hast auch noch nach Vorhersagen gefragt, und wie das die Wetterfrösche machen. Die habem als Datenbasis die Werte von „tausenden“ Messtationen und berechnen daraus mit ausgeklügelten Algorithmen, wie das Wetter wohl werden könnte. Dazu benötigen Sie extrem leistungsstarke Rechner, um das Wetter schneller zu berechnen, als es kommt.

      Ich habe Tom eher so verstanden, dass er eine Trendlinie für einzelne Größen berechnen will, etwa: Wie hat sich der Luftdruck in den letzten 12 Stunden verändert, wenn man die kleinen Schwankungen mal ignoriert? Oder: Wie hat sich die Tages-Höchsttemperatur in den letzten 30 Tagen entwickelt?
      Da geht man doch AFAIR von einer Geraden y = ax + b aus und bestimmt die Koeffizienten a und b so, dass die Summe der Abweichungen zwischen der Geraden und den tatsächlichen Messwerten minimal wird. Das ist 'ne ziemliche Rechnerei ...

      Dass eine ausgewachsene Wettervorhersage die Möglichkeiten eines Amateurs um mehrere Größenordnungen übersteigt, dürfte klar sein.

      Schönen Sonntag noch,
       Martin

      --
      Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
      1. problematische Seite

        Hallo Martin,

        zur Darstellungen hast du ja schon Antworten bekommen. Ich würde hier drei Kurven zeigen mit Min-, Max- und Mittelwerten.

        das war ja auch schon mein Vorschlag.

        den ich noch mal bekräftigen wollte.

        Richtig, die "typischen" Wetterdaten wie Luftdruck, Temperatur und Luftfeuchte ändern sich in der Regel nur langsam. Aber ein Temperaturanstieg von 15° innerhalb einer Stunde ist durchaus drin, z.B. an einem klaren Sommermorgen. Auch ein Luftdruckabfall um 20mbar in einer Stunde ist bei einer ankommenden Sturmfront nicht auszuschließen. Schnell bzw. langsam ist also relativ.

        aber solche Veränderungen verlaufen monoton und können durch Interpolation genähert werden. Einen Anstieg um 15° und direkt danach einen Abfall um 15° habe ich nicht in Erinnerung. Und bei so seltenen Fällen muss man entscheiden, was bei einem Sensorausfall schlechter ist: keine Daten oder ganz selten zu grob genäherte Daten.

        Gruß
        Jürgen

        1. problematische Seite

          Hello,

          ich werde also erstmal die "igendwie Mittelwertkurven" erzeugen und zwar nach folgendem Algorithmus:

          1. Intervallbreite bestimmen, für das der Mittelwert gebildet werden soll (z.B. 288 Mw = 1 Tag, 168 Std. = 1 Woche, ...).
          2. prüfen, ob alle Messwerte vorhanden sind, sonst Sonderbehandlung
          3. Mittelwert bilden
          4. Halbe Intervallbreite weiter schreiten
          5. Schritte 1 - 4 wiederholen.

          Dto. mit den relativen Höchsttemperaturen im Intervall.
          Dto. mit den relativen Tiefsttemperaturen im Intervall.

          Das ist sicherlich keine Aufgabe für die Datenbank!?
          Mir fallen jedenfalls keine Funktionen ein, die das leisten könnten (Grenzkurven-/Hüllkurvenbestimmung).

          Wie man das nun exakt mathemathisch machen würde, interessiert mich trotzdem noch.

          Glück Auf
          Tom vom Berg

          --
          Es gibt nichts Gutes, außer man tut es!
          Das Leben selbst ist der Sinn.
          1. problematische Seite

            Hallo TS,

            Wie man das nun exakt mathemathisch machen würde, interessiert mich trotzdem noch.

            Spline-Interpolation?

            Bis demnächst
            Matthias

            --
            Du kannst das Projekt SELFHTML unterstützen,
            indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
            1. problematische Seite

              Hello,

              Hallo TS,

              Wie man das nun exakt mathemathisch machen würde, interessiert mich trotzdem noch.

              Spline-Interpolation?

              Danke. Liest sich passend.
              Überschreitet aber wohl meine Fähigkeiten :-O

              Kann SVG das vielleicht sogar schon von alleine für die Darstellung?

              Glück Auf
              Tom vom Berg

              --
              Es gibt nichts Gutes, außer man tut es!
              Das Leben selbst ist der Sinn.
              1. problematische Seite

                Hallo TS,

                Spline-Interpolation?

                Danke. Liest sich passend.
                Überschreitet aber wohl meine Fähigkeiten :-O

                Es ist ja nicht so, dass es nicht schon was fertiges gibt:

                Bis demnächst
                Matthias

                --
                Du kannst das Projekt SELFHTML unterstützen,
                indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.