Main Content

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

Ausreißer aus Windgeschwindigkeitsdaten entfernen

Dieses Beispiel zeigt, wie man Daten aus einem öffentlichen Kanal liest, die Daten ändert und ausgewählte Elemente anzeigt. Im Beispiel ändern Sie eine der Codevorlagen, die von den Apps MATLAB Analysis und MATLAB Visualizations bereitgestellt werden. Das Beispiel verwendet Daten von ThingSpeak channel 12397, das Wetterdaten von einer Arduino®-basierten Wetterstation in Natick, MA, sammelt.

Erstellen Sie ein MATLAB Analyseskript aus Vorlagencode

Um Ausreißer in den Windgeschwindigkeitsdaten der Natick-Wetterstation zu erkennen und zu entfernen, können Sie mithilfe einer Codevorlage ein MATLAB® Skript schreiben.

Gehen Sie in ThingSpeak zur Registerkarte „Apps“ und wählen Sie „MATLAB Analyse“. Klicken Sie auf „Neu“, wählen Sie „Ausreißer aus Windgeschwindigkeitsdaten entfernen“ und klicken Sie auf „Erstellen“.

Analysieren Sie Ihre Daten

Das Feld „MATLAB Code“ ist vorab mit Code ausgefüllt, um Ausreißer aus den Windgeschwindigkeitsdaten der letzten sechs Stunden zu erkennen und zu entfernen.

1) Legen Sie die Variablen für die Kommunikation mit ThingSpeak fest. readChannelID ist die Kanal-ID für den öffentlichen Kanal, der Daten von der Wetterstation sammelt. windSpeedFieldID ist das Feld im Kanal, das Windgeschwindigkeitswerte enthält. Weisen Sie readAPIkey nur dann einen Wert zu, wenn Sie Daten von einem privaten Kanal lesen. Die Wetterstation ist öffentlich, daher legen Sie für dieses Beispiel nicht readAPIkey fest.

readChannelID = 12397;
windSpeedFieldID = 2;
readAPIKey = '';

2) Lesen Sie Windgeschwindigkeitswerte und Zeitstempel der letzten sechs Stunden mit der Funktion thingSpeakRead .

[windSpeed,timeStamp] = thingSpeakRead(readChannelID,'fields',windSpeedFieldID,'NumMinutes',360,'ReadKey',readAPIKey);

3) Suchen Sie mit der MATLAB isoutlier- Funktion nach Ausreißern in den Windgeschwindigkeitsdaten. Mit den Standardeinstellungen berechnet diese Funktion, ob ein Wert mehr als drei skalierte mittlere absolute Abweichungen vom Median des Eingabedatensatzes entfernt ist. Sie können die Eingabeargumente anpassen, um Ihre Ausreißerergebnisse anzupassen. Identifizieren Sie die Indizes von Ausreißer-Datenpunkten und die Indizes von sauberen Datenpunkten. Verwenden Sie diese Indizes, um Datenpunkte und Zeitstempel auszuwählen, die Ausreißerdaten und sauberen Daten entsprechen.

outlierDataIndex = isoutlier(windSpeed);
cleanDataIndex = ~outlierDataIndex;

outlierData = windSpeed(outlierDataIndex);
cleanData = windSpeed(cleanDataIndex);

outlierTimeStamps = timeStamp(outlierDataIndex);
cleanTimeStamps = timeStamp(cleanDataIndex);

4) Erstellen Sie Zeitpläne mit Ausreißerdaten und bereinigten Daten und zeigen Sie das Ergebnis der Ausreißerdatenpunkte an.

outlierDataTable = timetable(outlierTimeStamps,outlierData);
cleanDataTable = timetable(cleanTimeStamps,cleanData);

display(outlierDataTable,'Outlier data');
  3×1 timetable

     outlierTimeStamps      outlierData
    ____________________    ___________

    03-Jun-2019 10:20:54         17    
    03-Jun-2019 13:26:14       16.6    
    03-Jun-2019 13:39:33       16.8    

Führen Sie Ihren Code aus, indem Sie auf „Speichern und ausführen“ klicken. Im Feld Ausgabe werden Ihre Ergebnisse angezeigt.

Daten in einen Kanal schreiben

1) Speichern Sie Ihre sauberen Datenergebnisse, indem Sie sie in einen privaten Kanal schreiben. Um einen ThingSpeak Kanal zu erstellen, gehen Sie zur Registerkarte „Kanäle“ und wählen Sie „Meine Kanäle“. Klicken Sie auf „Neuer Kanal“. Aktivieren Sie das entsprechende Kontrollkästchen und geben Sie die folgenden Kanaleinstellungswerte ein:

  • „Name –“ Cleaned Wind Speed Measurements

  • „Feld 1 –“ Wind speed (mph)

Klicken Sie auf „Kanal speichern“.

2) Legen Sie im Feld „MATLAB Code“ die Variablen zum Schreiben in Ihren privaten Kanal fest. Ersetzen Sie die angegebenen Werte für writeChannelID und writeAPIKey durch Ihre Werte. Die Kanal-ID und den API-Schlüssel finden Sie im Bereich „Kanalinformationen“ auf der rechten Seite der Seite.

% Replace with the ID of the channel to write data to.
writeChannelID = 17504;
% Enter the write API key between the ''.
writeAPIKey = '23ZLGOBBU9TWHG2H';

3) Schreiben Sie die Messwerte der sauberen Windgeschwindigkeit mit ihren jeweiligen Zeitstempeln in Ihren Kanal.

thingSpeakWrite(writeChannelID,cleanData,'timestamp',cleanTimeStamps,'Writekey',writeAPIKey);

4) Führen Sie Ihren Code aus, indem Sie auf „Speichern und ausführen“ klicken. Das Diagramm in Ihrem ThingSpeak Kanal wird mit Zeitreihendaten für die Windgeschwindigkeit ohne die berechneten Ausreißer gefüllt. Sie können auf Ihren Kanal zugreifen, indem Sie rechts auf der Seite im Bereich „Kanalinformationen“ auf den Kanallink klicken.

Um Ihre Daten im CSV-Format herunterzuladen, klicken Sie auf die Schaltfläche „Datenexport“ oder die Registerkarte „Datenimport/-export“. Um alle in Ihrem Kanal gespeicherten Daten zu löschen, klicken Sie auf die Registerkarte „Kanaleinstellungen“.

Berechnen Sie den gleitenden Mittelwert

Sie können der Vorlage Code hinzufügen, um die Windgeschwindigkeitsdaten weiter zu analysieren. Neben der Entfernung von Ausreißern besteht eine weitere Methode zur Glättung eines Datensatzes in der Berechnung des gleitenden Mittelwerts. Bei diesem Ansatz wird der Mittelwert einer Gruppe lokaler Datenpunkte über ein gleitendes Fenster über den gesamten Datensatz berechnet. Verwenden Sie die MATLAB movmean- Funktion mit einem gleitenden Fenster von fünf Minuten, um Ihre Windgeschwindigkeitsdaten zu glätten. Dieser Abschnitt ist nicht in der Codevorlage enthalten. Sie können es in Ihren Code einbinden, nachdem Sie thingSpeakRead. aufgerufen haben

smoothData = movmean(windSpeed,minutes(5),'SamplePoints',timeStamp);

Um Ihre neuen Daten zu speichern, schreiben Sie sie in Ihren ThingSpeak Kanal. Kommentieren Sie die vorhandene Funktion thingSpeakWrite aus und speichern Sie die neuen geglätteten Zeitreihendaten in Ihrem Kanal.

thingSpeakWrite(writeChannelID,smoothData,'timestamp',timeStamp,'Writekey',writeAPIKey);

Um Ihre Ergebnisse zu aktualisieren, klicken Sie erneut auf „Speichern und ausführen“.

Siehe auch

Funktionen

Verwandte Beispiele

Mehr über