メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

風速データから外れ値を除去する

この例では、パブリックチャネルからデータを読み取り、データを変更し、選択した要素を表示する方法を示します。この例では、MATLAB Analysis アプリと MATLAB Visualizations アプリによって提供されるコード テンプレートの 1 つを変更します。この例では、マサチューセッツ州ネイティックにある Arduino® ベースの気象観測所から気象データを収集する ThingSpeak チャネル12397 のデータを使用します。

テンプレートコードから MATLAB Analysis スクリプトを作成する

Natick 気象観測所からの風速データの外れ値を検出して削除するには、コード テンプレートを使用して MATLAB ® スクリプトを作成します。

ThingSpeak の Apps タブに移動し、MATLAB Analysis を選択します。新規をクリックし、風速データから外れ値を削除を選択して、作成をクリックします。

データを解析する

MATLAB コード フィールドには、過去 6 時間の風速データから外れ値を検出して削除するためのコードが事前に入力されています。

1) ThingSpeak と通信するための変数を設定します。readChannelID は、気象ステーションからデータを収集するパブリックチャネルのチャネルID です。windSpeedFieldID は、風速値が含まれるチャネル内のフィールドです。プライベートチャネルからデータを読み取る場合にのみ、readAPIkey に値を割り当てます。気象ステーションは公開されているため、この例では readAPIkey を設定しないでください。

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

2) thingSpeakRead 関数を使用して、過去 6 時間の風速値とタイムスタンプを読み取ります。

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

3) MATLAB isoutlier 関数を使用して、風速データの外れ値を確認します。デフォルト設定では、この関数は値が入力データ セットの中央値から 3 倍のスケール中央値絶対偏差を超えて離れているかどうかを計算します。入力引数を調整して、外れ値の結果をカスタマイズできます。外れ値データ ポイントのインデックスとクリーン データ ポイントのインデックスを識別します。これらのインデックスを使用して、外れ値データとクリーン データに対応するデータ ポイントとタイムスタンプを選択します。

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

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

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

4) 外れ値データとクリーン データを使用して timetable を作成し、外れ値データ ポイントの結果を表示します。

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    

[保存して実行] をクリックしてコードを実行します。出力 フィールドに結果が表示されます。

チャネルにデータを書き込む

1) クリーンなデータの結果をプライベートチャネルに書き込んで保存します。ThingSpeakチャネルを作成するには、Channels タブに移動し、My Channels を選択します。新しいチャネルをクリックします。対応するチェックボックスを選択し、次のチャネル設定値を入力します。

  • 名前 — Cleaned Wind Speed Measurements

  • フィールド 1 — Wind speed (mph)

チャネルを保存をクリックします。

2) MATLAB Code フィールドで、プライベートチャネルに書き込むための変数を設定します。writeChannelIDwriteAPIKey の指定された値を自分の値に置き換えます。チャネルID と API キーは、ページの右側にある チャネル情報 パネルで確認できます。

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

3) クリーンな風速の測定値をそれぞれのタイムスタンプとともに自分のチャネルに書き込みます。

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

4) [保存して実行] をクリックしてコードを実行します。ThingSpeakチャネルのチャートには、計算された外れ値を除いた風速の時系列データが入力されます。ページの右側にある チャネル情報 パネルのチャネルリンクをクリックすると、チャネルにアクセスできます。

データを CSV 形式でダウンロードするには、データのエクスポート ボタンまたは データのインポート/エクスポート タブをクリックします。チャネルに保存されているすべてのデータを消去するには、チャネル設定タブをクリックします。

移動平均を計算する

テンプレートにコードを追加して、風速データをさらに解析できます。外れ値を除去することに加え、データセットを平滑化するもう 1 つの方法は、移動平均を計算することです。このアプローチでは、データ セット全体にわたるスライディング ウィンドウ上でローカル データ ポイントのグループの平均が計算されます。風速データを平滑化するには、5 分間のスライディング ウィンドウを持つ MATLAB movmean 関数を使用します。このセクションはコード テンプレートには含まれません。thingSpeakRead.を呼び出した後にコードに含めることができます

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

新しいデータを保存するには、それを ThingSpeakチャネルに書き込みます。既存の thingSpeakWrite 関数をコメント アウトし、新しい平滑化された時系列データをチャネルに保存します。

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

結果を更新するには、もう一度 [保存して実行] をクリックします。

参考

関数

トピック