Extrahieren von Spitzenwerten aus einem DatensatzIch führe derzeit einen Lebensdauertest mit vier Einheiten durch, die regelmäßig auf eine Gaszufuhr reagieren (obwohl die Intervalle zwischen den Gaszufuhren nicht konstant sind!). Ich habe die Daten in das folgende Diagramm eingetragen:

Kennt jemand eine Möglichkeit, wie ich die Spitzenwerte filtern kann, um eine Trendlinie anzuzeigen und mit der weiteren Analyse fortzufahren? Die meisten Datenpunkte nähern sich den Mindestwerten der einzelnen Einheiten, daher erscheint jede Anpassungslinie für den Datensatz ganz unten im Diagramm:

Ich kann das manuell machen, aber da es während des Tests wiederholt werden muss, kann es ziemlich mühsam werden. Vielen Dank im Voraus!
Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungBetreff: Extrahieren von Spitzenwerten aus einem DatensatzWelche Trendlinien möchten Sie erkennen? Offensichtlich haben Sie viel Rauschen in den Daten, aber ich kann möglicherweise einige Bereiche „im Rauschen“ erkennen, die einer Trendlinie ähneln. Wenn Sie nur den Maximalwert (also die oberste Linie) herausziehen möchten, könnten Sie den Maximalwert pro Zeit extrahieren? Eine andere Möglichkeit wäre, sich einen gleitenden Durchschnitt anzusehen ( https://community.jmp.com/t5/Discussions/Moving-Average/td-p/87647 )
Betreff: Extrahieren von Spitzenwerten aus einem DatensatzHallo Ben, die Punkte, die ich suche, sind diejenigen, die sich in der Nähe der Spitze jedes Diagramms befinden. Ich versuche, die maximale Reaktion von jeder Einheit zu ermitteln, wenn das Gas zugeführt wird, damit ich die Verschlechterung im Laufe der Zeit modellieren kann. Im Idealfall sieht das ungefähr so aus:

Das könnte funktionieren! Gibt es eine einfache Möglichkeit , in einer Formelspalte den „Maximalwert pro Zeit“ zu extrahieren?
Betreff: Extrahieren von Spitzenwerten aus einem DatensatzHallo @AvgLlama27 ,
Könnten Sie uns ein Beispiel Ihres Datensatzes zur Ansicht bereitstellen?
Danke,
Ben
Betreff: Extrahieren von Spitzenwerten aus einem DatensatzHallo @Ben_BarrIngh
Ich habe den Datensatz an den Originalbeitrag angehängt.
Danke,
Cameron
Betreff: Extrahieren von Spitzenwerten aus einem DatensatzHallo @AvgLlama27 ,
Ich hatte einige gute Erfolge mit dem beigefügten Skript - ich glaube nicht, dass man das mit einer Formelspalte so einfach erreichen könnte. Das folgende Skript funktioniert folgendermaßen:
1) Nehmen von „Slices“ mit einer festgelegten Breite (Anzahl der Zeilen) pro Seriennummer – im folgenden Beispiel werden 600 Zeilen abgetastet.
2) Finden Sie den Maximalwert für diesen „Schnitt“.
3) Speichern Sie den Maximalwert neben dem ersten und letzten Wert für „verstrichene Zeit“ und „Zeitstempel“ für die erste und letzte Zeile.
Sie müssen die Variable „Fenstergröße“ anpassen und ein wenig herumprobieren, um eine gute Passform zu finden, aber ein schneller Versuch mit 600 Zeilen hat gut funktioniert.
Vor

Nach

Prost,
Ben
// Get the current data table
dt = Current Data Table();
Windowsize = 600; //Set this to the 'width' you want to evaluate
// Initialize an empty table to store the results
dt_summary = New Table( "Summary Table",
New Column( "Serial No", Character ),
New Column( "Batch No", Numeric ),
New Column( "Max Value", Numeric ),
New Column( "Min Elapsed Time", Numeric ),
New Column( "Max Elapsed Time", Numeric ),
New Column( "Start Timestamp", "Numeric", "Nominal", Format("m/d/y h:m:s", 23, 0) ),
New Column( "End Timestamp", "Numeric", "Nominal", Format("m/d/y h:m:s", 23, 0) )
);
// Iterate over unique "Serial No"/identifier column
serials = Associative Array( dt:SerialNo ) << Get Keys();//removes duplicate values
//Run a loop to pull out the max row values for each 'window'
For( i = 1, i <= N Items( serials ), i++,
serial = serials[i];
// Get rows for the current Serial No
rows = dt << Get Rows Where( dt:SerialNo == serial );
// Loop through every [windowsize] rows
For( j = 1, j <= N Items( rows ), j += windowsize,
// Determine the range of rows for the current batch
batch_rows = rows[j :: Min( j + (windowsize-1), N Items( rows ) )];
// Get the max value for this batch
max_val = Max( dt:VOCVoltage[batch_rows] );
// Get the range of 'Elapsed Time'
min_elapsed_time = Min( dt:"Elapsed Time,hours"n[batch_rows] );
max_elapsed_time = Max( dt:"Elapsed Time,hours"n[batch_rows] );
// Get the start and end 'Timestamp'
start_timestamp = dt:Timestamp[batch_rows[1]];
end_timestamp = dt:Timestamp[batch_rows[N Items( batch_rows )]];
// Add a row to the summary table
dt_summary << Add Rows( 1 );
dt_summary:Serial No[N Row( dt_summary )] = serial;
dt_summary:Batch No[N Row( dt_summary )] = Ceiling( j / windowsize );
dt_summary:Max Value[N Row( dt_summary )] = max_val;
dt_summary:Min Elapsed Time[N Row( dt_summary )] = min_elapsed_time;
dt_summary:Max Elapsed Time[N Row( dt_summary )] = max_elapsed_time;
dt_summary:Start Timestamp[N Row( dt_summary )] = start_timestamp ;
dt_summary:End Timestamp[N Row( dt_summary )] = end_timestamp ;
);
);
// Show the summary table
dt_summary << Show Window;
Betreff: Extrahieren von Spitzenwerten aus einem DatensatzDas funktioniert perfekt,
Vielen Dank für Ihre Hilfe @Ben_BarrIngh