主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

删除并可视化数据中的异常值

此示例显示如何使用 Hampel 滤波器检测和删除 ThingSpeak™ 通道数据中的离群值。该滤波器与中位数滤波器密切相关,它有助于在不过度平滑数据的情况下消除信号中的离群值。

读取数据

使用 thingSpeakRead 函数读取存储在通道 22641 中的风速。

data = thingSpeakRead(12397,'NumPoints',80,'Fields',2,'outputFormat','table');

删除异常值

通过应用 Hampel 函数删除原始数据中的离群值。将窗口大小指定为 6,或测量窗口中每个样本两侧约三分钟的数据。此设置允许提供足够的数据来判断每个点是否是离群。由于数据是动态的,您的结果可能会根据当前天气而变化。将标准差数指定为 2。如果数据点与局部中位数的差异超过该数字,则将其替换为局部中位数。

windowSize = 6;
numMedians = 2;
[filteredData,outliers]=hampel(data.WindSpeedmph,windowSize,numMedians);

可视化数据

绘制原始数据和过滤后的数据。显示检测到并删除的离群值。

plot(data.Timestamps,data.WindSpeedmph);
hold
plot(data.Timestamps,filteredData);
plot(data.Timestamps(outliers),data.WindSpeedmph(outliers),'Marker','Square','Linestyle','None','Color','black');
ylabel('Wind Speed (mph)');
legend('Orginal Data', 'Filtered Data','Outliers');
Current plot held

将数据写入 ThingSpeak

使用 thingSpeakWrite 函数将检测到的离群值数量发送到 ThingSpeak 通道。更改 channelIDwriteAPIKey 以将数据发送到您的通道。

channelID=17504;
writeAPIKey='23ZLGOBBU9TWHG2H';
thingSpeakWrite(channelID,sum(outliers),'WriteKey',writeAPIKey);

另请参阅

函数