Entfernen von Ausreißern aus Windgeschwindigkeitsdaten
Dieses Beispiel zeigt, wie Daten aus einem öffentlichen Kanal gelesen, die Daten geändert und ausgewählte Elemente angezeigt werden. Im Beispiel ändern Sie eine der Codevorlagen, die von den Apps MATLAB Analysis und MATLAB Visualizations bereitgestellt werden. Das Beispiel verwendet Daten von ThingSpeak Kanal 12397, der Wetterdaten von einer Arduino®-basierten Wetterstation in Natick, MA sammelt.
Erstellen Sie ein MATLAB-Analyseskript aus Vorlagencode
Um Ausreißer in den Windgeschwindigkeitsdaten der Wetterstation Natick 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 Analysis. Klicken Sie auf Neu, wählen Sie Ausreißer aus Windgeschwindigkeitsdaten entfernen und klicken Sie auf Erstellen.

Analysieren Sie Ihre Daten
Das Feld MATLABCode ist mit Code vorbelegt, 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 die Windgeschwindigkeitswerte enthält. Weisen Sie readAPIkey nur dann einen Wert zu, wenn Sie Daten aus einem privaten Kanal lesen. Die Wetterstation ist öffentlich. Legen Sie für dieses Beispiel daher readAPIkey nicht 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 Funktion MATLAB isoutlier nach Ausreißern in den Windgeschwindigkeitsdaten. Mit den Standardeinstellungen berechnet diese Funktion, ob ein Wert mehr als drei skalierte Median-Absolutabweichungen vom Median des Eingabedatensatzes entfernt ist. Sie können die Eingabeargumente anpassen, um Ihre Ausreißerergebnisse individuell anzupassen. Identifizieren Sie die Indizes der Ausreißerdatenpunkte und die Indizes der sauberen Datenpunkte. 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 Fahrplä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. Das Feld Ausgabe zeigt Ihre Ergebnisse an.

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 MeasurementsFeld 1 —
Wind speed (mph)

Klicken Sie auf Kanal speichern.
2) Legen Sie im Feld MATLABCode die Variablen für das Schreiben in Ihren privaten Kanal fest. Ersetzen Sie die angegebenen Werte für writeChannelID und writeAPIKey durch Ihre Werte. Sie finden die Kanal-ID und den API-Schlüssel 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 sauberen Windgeschwindigkeitsmesswerte 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 ist mit Zeitreihendaten für die Windgeschwindigkeit ohne die berechneten Ausreißer gefüllt. Sie können auf Ihren Kanal zugreifen, indem Sie im Bereich Kanalinformationen auf der rechten Seite der Seite 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 gespeicherten Daten in Ihrem Kanal zu löschen, klicken Sie auf die Registerkarte Kanaleinstellungen.
Berechnen des gleitenden Mittelwerts
Sie können der Vorlage Code hinzufügen, um die Windgeschwindigkeitsdaten weiter zu analysieren. Neben dem Entfernen von Ausreißern besteht eine weitere Methode zum Glätten eines Datensatzes darin, den gleitenden Mittelwert zu berechnen. Bei diesem Ansatz wird der Mittelwert einer Gruppe lokaler Datenpunkte über ein gleitendes Fenster im gesamten Datensatz berechnet. Verwenden Sie die Funktion MATLAB movmean 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
thingSpeakRead|thingSpeakWrite|isoutlier(MATLAB) |movmean(MATLAB)