NEWS
10 Werte, sortieren und nur die mittleren 6 nehmen
-
Hallo zusammen,
ich stehe gerade vor einem Problem wo ich nicht weiß wie ich es lösen soll/kann... vielleicht könnt Ihr mir da weiterhelfen?
Ich bekomme jede Minute einen Wert, diesen Wert möchte ich speichern und der Größe nach sortieren und dann die 2 höchsten in der Tabelle und die 2 niedrigensten löschen bzw. nur die 6 Mittleren Werte verwenden und daraus einen Durchschnitt machen.
Wie kann ich das am besten anstellen?
Viele Grüß m.
-
@michl75 such mal nach
-
@guergen nach ?
-
@michl75 gleitender-durchschnitt-mit-blockly
Ich wollte nen Link reinpacken, aber das ist "forbidden " bei mir
-
@guergen danke... ich suche...
@guergen said in 10 Werte, sortieren und nur die mittleren 6 nehmen:
Ich wollte nen Link reinpacken, aber das ist "forbidden " bei mir
schon ok

-
@michl75 Nimm den Median Wert - der nimmt aus einer Reihe von Werten immer den mittleren und nimmt nicht den Durchschnitt, sodass Ausreiser nach oben oder unten automatisch nicht berücksichtigt werden. Bei einer gerade Anzahl an Werten wird der Mittelwert der beiden mittleren Werte genommen, bei ungeraden Anzahl an Werten, der der wirklich in der MItte ist.
Hier gabs auch mal ein Script - ich hab es selbst nicht ausprobiert - da ich mit NR arbeite, aber das kann man sicher auch dann ggf. auf Deine Bedürfnisse anpassen kann. Die aggregator Node benutzt zum Beispiel diese Statistic Libary - mit der man den Median (s. API) leicht ermitteln kann, in dem man ihm ein Array von Datenpunkten übergibt.
-
@guergen offtopic --- versuchst du es mit dem handy? Hab da auch immer vorbidden

-
@michl75
wie liegen die daten vor?
wenn in javascript als array dann[5,3,8,1,4,9,0,2,6,7].sort((a,b)=>a-b).slice(2,8).reduce((c,el)=>c+el)/6
Ausgangsarray
[5,3,8,1,4,9,0,2,6,7]Ergebnis nach Sort
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]Ergebnis nach slice (einen Teil aus einem Array extrahieren
[2, 3, 4, 5, 6, 7]Ergebnis nach reduce (summieren des array)
27Ergebnis nach teilen / 6
4.5 -
@michl75
wenn du nur den Median haben willst nimm:
(unter Mathematik!)ansonsten gibt es unter Listen die Möglichkeit die Liste numerisch zu sortieren, vorne und hinten zu beschneiden, und unter Matthe dann wieder den Mittelwert Block

-
@homoran eben gerade erst deinen Beitrag gesehen ... dass muss ich mir sofort anschauen...
hier mein erster Versucht, ich hab sowas noch nie gemacht... also Top-Einsteiger-Variante...


Funktionieren tut das natürlich nicht wirklich ... eigentlich gar nicht da ich kein Ergebnis bekomme, da ich es nicht hinbekomme mit der Liste erzeugen und ergänzen... Katastrophen-Ausführung ist das mein Versuch...
Na ich esse erstmal was und dann schau ich mir deine Infos genauer an...
vielen Dank aber schon mal
-
@oliverio ja noch gar nicht irgendwie... ich habe mir einen Datenpunkt angelegt als Array und dann habe ich einen Datenpunkt aus MQTT der alle x Sekunden einen Wert bringt. Diesen MQTT Wert versucht ich gerade in einen "Array" zu bringen ... aber mit Blockly
Korrektur, da ich es mit Datenpunkt Array gar nicht hinbekommen habe, habe ich es erst mal mit einem String versucht (zusammengesetzt eben)
-
@michl75 sagte in 10 Werte, sortieren und nur die mittleren 6 nehmen:
Na ich esse erstmal was und dann schau ich mir deine Infos genauer an...
ich denke da wären immer nur 10 Werte drin?
Jetzt wird es komplexer.Entweder die Liste auf 10 Werte begrenzen, oder die Länge der Liste auslesen und dann mehr (????) Datenpunkte oben und unten (Ausreißer??) entfernen
-
@homoran said in 10 Werte, sortieren und nur die mittleren 6 nehmen:
ich denke da wären immer nur 10 Werte drin?
ja war mein Ziel... aber die muss ich ja erst aus dem MQTT Datenpunkt sammeln... und da fängts schon an das ich's nicht hinbekommen
@homoran said in 10 Werte, sortieren und nur die mittleren 6 nehmen:
Entweder die Liste auf 10 Werte begrenzen, oder die Länge der Liste auslesen und dann mehr (????) Datenpunkte oben und unten (Ausreißer??) entfernen
Ausreißer entfernen ... darum wollte ich eben 10 mal sammeln, dann sortieren... die ersten beiden weg und die letzten beiden auch --- Rest dann 6 Stück und damit den Durchschnitt machen
-
@michl75 auf die Schnelle mit der heißen Nadel:

ist es das was ihr suchet?
Hab hier mal 20 als Listenlänge vorgegeben und der Wert wird auch erst berechnet wenn 21 Mwssungen vorliegen
-
erzähle mal doch was so dein gesamtziel ist. bisher hast du nur einen kleinen ausschnitt erzählt. evtl bist du ja schon vom ansatz falsch unterwegs und es gibt einen einfacheren weg.
was für daten möchtest du den sammeln?
warum willst du die obersten und untersten abschneiden/webschmeißen?
und aus dem Rest den durchschnitt berechnen.
Wenn wir den Gesamtkontext wissen kann man besser helfen.
du hast halt eine detailfrage gestellt und hast eine detailantwort erhalten.
aus deinen weiteren posts entnehme ich aber, das das gesamtkonstrukt noch nicht klar ist. -
@oliverio soweit ich das aus anderen Threads zusammenreime hat er eine (gewöhnungsbedürftige) pH-Elektrode im Teich und möchte diese Kurve glätten.
@oliverio sagte in 10 Werte, sortieren und nur die mittleren 6 nehmen:
warum willst du die obersten und untersten abschneiden/webschmeißen?
Ausreißerbereinigung
-
tsts,
selbst wenn ich es weiß lass ich solche sachen meinen kunden beantworten (@michl75
)
das schafft dann ein gemeinsames verständnis und commitment
aber dann kann er es ja kurz bestätigen das das so ist.
ich merk mir nicht immer die namen zu den threads wer da so fragen stellt -
@oliverio na dann bin ich mal raus
-
halt halt, wenn er blockly will, bin ich raus

-
@michl75 sagte: 10 mal sammeln, dann sortieren... die ersten beiden weg und die letzten beiden auch --- Rest dann 6 Stück und damit den Durchschnitt machen
Vorschlag:

Nimmt immer die 10 letzten Werte (gleitend), sortiert diese und lässt die Ausreißer weg.