Array Vergleich 2 Werte ? Aufstieg oder ein Abstieg Trend ?

Hi ich habe Array, das sieht so aus:

Array
(
    [0] => Array
        (
            [TimeStamp] => 1518874082
            [Value] => 782,9
        )

    [1] => Array
        (
            [TimeStamp] => 1518873781
            [Value] => 783
        )

    [2] => Array
        (
            [TimeStamp] => 1518873722
            [Value] => 784
        )

    [3] => Array
        (
            [TimeStamp] => 1518873482
            [Value] => 783,85
        )

    [4] => Array
        (
            [TimeStamp] => 1518873242
            [Value] => 783,5
        )

    [5] => Array
        (
            [TimeStamp] => 1518872342
            [Value] => 783,85
        )

    [6] => Array
        (
            [TimeStamp] => 1518871921
            [Value] => 784
        )

    [7] => Array
        (
            [TimeStamp] => 1518871082
            [Value] => 782,5
        )

    [8] => Array
        (
            [TimeStamp] => 1518870721
            [Value] => 784
        )

    [9] => Array
        (
            [TimeStamp] => 1518870242
            [Value] => 780
        )

    [10] => Array
        (
            [TimeStamp] => 1518870122
            [Value] => 784
        )

    [11] => Array
        (
            [TimeStamp] => 1518870062
            [Value] => 780
        )

    [12] => Array
        (
            [TimeStamp] => 1518870001
            [Value] => 779
        )

    [13] => Array
        (
            [TimeStamp] => 1518869703
            [Value] => 778
        )

    [14] => Array
        (
            [TimeStamp] => 1518869101
            [Value] => 776
        )

    [15] => Array
        (
            [TimeStamp] => 1518869041
            [Value] => 774,93
        )

    [16] => Array
        (
            [TimeStamp] => 1518868141
            [Value] => 773,5
        )

    [17] => Array
        (
            [TimeStamp] => 1518868081
            [Value] => 773
        )

    [18] => Array
        (
            [TimeStamp] => 1518867722
            [Value] => 773,5
        )

    [19] => Array
        (
            [TimeStamp] => 1518867422
            [Value] => 774,93
        )

    [20] => Array
        (
            [TimeStamp] => 1518867241
            [Value] => 774
        )

    [21] => Array
        (
            [TimeStamp] => 1518865923
            [Value] => 771
        )

    [22] => Array
        (
            [TimeStamp] => 1518865743
            [Value] => 772
        )

    [23] => Array
        (
            [TimeStamp] => 1518865562
            [Value] => 773,5
        )

    [24] => Array
        (
            [TimeStamp] => 1518865502
            [Value] => 774
        )

    [25] => Array
        (
            [TimeStamp] => 1518865321
            [Value] => 772
        )

    [26] => Array
        (
            [TimeStamp] => 1518865266
            [Value] => 774
        )

)

Wie komme ich es hin, das ich den TimeStamp und das Value vergleiche, das ich erkennen kann, ob es ein Aufstieg oder ein Abstieg Trend ist ?

Hallo,

ich habe keine schnelle php-Lösung. Mit excel könnte es so aussehen:


Bin gespannt auf die php-Ergebnisse.

Grüße, Gerhard

Also ich will keine Grafik daraus machen, ich will nur erkennen können ob der Trend eher nach unten geht oder nach oben…

ich denke, Einfache lineare Regression ist das richtige Stichwort. Dort finden sich auch Formeln…

Danke habe diese Funktion gefunden:

function linear_regression( $x, $y ) {
 
    $n     = count($x);     // number of items in the array
    $x_sum = array_sum($x); // sum of all X values
    $y_sum = array_sum($y); // sum of all Y values
 
    $xx_sum = 0;
    $xy_sum = 0;
 
    for($i = 0; $i < $n; $i++) {
        $xy_sum += ( $x[$i]*$y[$i] );
        $xx_sum += ( $x[$i]*$x[$i] );
    }
 
    // Slope
    $slope = ( ( $n * $xy_sum ) - ( $x_sum * $y_sum ) ) / ( ( $n * $xx_sum ) - ( $x_sum * $x_sum ) );
 
    // calculate intercept
    $intercept = ( $y_sum - ( $slope * $x_sum ) ) / $n;
 
    return array( 
        'slope'     => $slope,
        'intercept' => $intercept,
    );
}

Ich bekomme diese Werte dann :

array(2) {
  ["slope"]=>
  float(1927338,4266435)
  ["intercept"]=>
  float(202858,35895615)
}

Was sagen aber diese 2 Werte aus ?

… das da etwas nicht stimmt:) Meine Vermutung, da ich die Formel so nicht kenne. Für dich wäre slope (Steigung) relevant. Wenn Slope > 0, dann ‚Aufstieg‘, sonst ‚Abstieg‘.

Aber vielleicht stimmt das Ergebnis ja sogar, da es sich in deinem Beispiel ja wohl um einen ‚Aufstieg‘ handelt. Könntest du ja gegentesten: wenn du zwei gleiche Werte nimmst, dann müsste Slope 0 sein.

Alternativ nimm einfach die Formel unter ‚einführendes Beispiel‘ aus dem Wiki Beitrag, die mit b1 = … beginnt.

Wenn b1 positiv ist, dann handelt es sich um einen ‚Aufstieg‘, sonst um einen ‚Abstieg‘.

So etwa:

$LogDatenAR=AC_GetLoggedValues($ac_id, $vid, mktime(0, 0, 0, 2, 5, 2018), mktime(23, 59, 59, 2, 5, 2018), 0);
#print_r($LogDatenAR);

$id_ld = (count($LogDatenAR)-1); 
$current_ld = $LogDatenAR[0]["Value"]; 
$last_ld = $LogDatenAR[$id_ld]["Value"]; 
$ld_tendenz = round($current_ld - $last_ld,1); 

Bei negativen Trend ist es im minus Bereich und wenn der Trend positiv ist, dann im Positiven Bereich.

Auch ein interessanter Ansatz, aber in deinem Beispiel vergleichst du nur den ersten mit dem letzten Wert aus einer großen Anzahl. Das ergibt keine Tendenz.
Aber vielleicht klappt es, wenn du den letzten Parameter (‚Limit‘) auf 2 setzt und damit genau zwei Werte bekommst. Vielleicht macht dann IPS die Berechnung für dich.

Meno :frowning:

Ich brauche eine fertige Funktion :frowning: Alles andere ist nur raten ;-(

Das war Unsinn. Mit Limit = 2 bekommst du genau die letzten beiden Einträge …

Was liefert denn deine Formel bei zwei gleichen Werten? Wo hast du die Formel her?