Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Eliminar valores atípicos de los datos de velocidad del viento

Este ejemplo muestra cómo leer datos de un canal público, modificar los datos y mostrar elementos seleccionados. En el ejemplo, modifica una de las plantillas de código proporcionadas por las aplicaciones MATLAB Analysis y MATLAB Visualizations. El ejemplo utiliza datos de ThingSpeak channel 12397, que recopila datos meteorológicos de una estación meteorológica basada en Arduino® en Natick, MA.

Crear un script de análisis MATLAB a partir de código de plantilla

Para detectar y eliminar valores atípicos en los datos de velocidad del viento de la estación meteorológica Natick, puede escribir un script MATLAB® utilizando una plantilla de código.

Vaya a la pestaña Aplicaciones en ThingSpeak y seleccione Análisis MATLAB. Haga clic en Nuevo, seleccione Eliminar valores atípicos de los datos de velocidad del viento y haga clic en Crear.

Analiza tus datos

El campo Código MATLAB está rellenado previamente con código para detectar y eliminar valores atípicos de los datos de velocidad del viento durante las últimas seis horas.

1) Establecer las variables para comunicarse con ThingSpeak. readChannelID es el ID del canal público que recopila datos de la estación meteorológica. windSpeedFieldID es el campo en el canal que contiene valores de velocidad del viento. Asigne un valor a readAPIkey solo si está leyendo datos de un canal privado. La estación meteorológica es pública, por lo que para este ejemplo no configure readAPIkey.

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

2) Lea los valores de velocidad del viento y las marcas de tiempo de las últimas seis horas usando la función thingSpeakRead .

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

3) Verifique si hay valores atípicos en los datos de velocidad del viento usando la función MATLAB isoutlier . Con la configuración predeterminada, esta función calcula si un valor está a más de tres desviaciones absolutas de la mediana escalada de la mediana del conjunto de datos de entrada. Puede ajustar los argumentos de entrada para personalizar los resultados atípicos. Identifique los índices de puntos de datos atípicos y los índices de puntos de datos limpios. Utilice estos índices para seleccionar puntos de datos y marcas de tiempo correspondientes a datos atípicos y datos limpios.

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

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

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

4) Cree cronogramas con datos atípicos y datos limpios, y muestre el resultado de los puntos de datos atípicos.

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    

Ejecute su código haciendo clic en Guardar y ejecutar. El campo Salida muestra sus resultados.

Escribir datos en un canal

1) Guarde los resultados de sus datos limpios escribiéndolos en un canal privado. Para crear un canal de ThingSpeak, vaya a la pestaña Canales y seleccione Mis canales. Haga clic en Nuevo canal. Seleccione la casilla de verificación correspondiente e ingrese estos valores de configuración de canal:

  • Nombre — Cleaned Wind Speed Measurements

  • Campo 1 — Wind speed (mph)

Haga clic en Guardar canal.

2) En el campo Código MATLAB, configure las variables para escribir en su canal privado. Reemplace los valores dados para writeChannelID y writeAPIKey con sus valores. Puede encontrar el ID del canal y la clave API en el panel Información del canal en el lado derecho de la página.

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

3) Escribe las lecturas de velocidad del viento limpio con sus respectivas marcas de tiempo en tu canal.

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

4) Ejecute su código haciendo clic en Guardar y ejecutar. El gráfico de su canal ThingSpeak se completa con datos de series temporales de velocidad del viento sin los valores atípicos calculados. Puede acceder a su canal haciendo clic en el enlace del canal en el panel Información del canal en el lado derecho de la página.

Para descargar sus datos en formato CSV, haga clic en el botón Exportar datos o en la pestaña Importar/Exportar datos. Para borrar todos los datos guardados en su canal, haga clic en la pestaña Configuración del canal.

Calcular la media móvil

Puede agregar código a la plantilla para analizar más a fondo los datos de velocidad del viento. Además de eliminar los valores atípicos, otro método para suavizar un conjunto de datos es calcular la media móvil. En este enfoque, la media de un grupo de puntos de datos locales se calcula mediante una ventana deslizante a lo largo de todo el conjunto de datos. Utilice la función MATLAB movmean con una ventana deslizante de cinco minutos para suavizar los datos de velocidad del viento. Esta sección no está incluida en la plantilla de código. Puedes incluirlo en tu código después de llamar a thingSpeakRead.

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

Para guardar sus nuevos datos, escríbalos en su canal ThingSpeak. Comente la función thingSpeakWrite existente y guarde los nuevos datos de series temporales suavizados en su canal.

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

Para actualizar sus resultados, haga clic en Guardar y ejecutar nuevamente.

Consulte también

Funciones

Ejemplos relacionados

Más acerca de