Main Content

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

風速データから異常値を削除する

この例では、パブリックチャネルからデータを読み取り、データを変更し、選択した要素を表示する方法を示します。この例では、 MATLAB AnalysisアプリとMATLAB Visualizationsアプリによって提供されるコード テンプレートの 1 つを変更します。この例では、マサチューセッツ州ナティックにある Arduino® ベースの気象観測所から気象データを収集するThingSpeak channel 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チャネルを作成するには、«チャネル» タブに移動し、« マイチャネル» を選択します。「新しいチャネル」をクリックします。対応するチェックボックスを選択し、次のチャネル設定値を入力します。

  • «名前 —» Cleaned Wind Speed Measurements

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

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

2) [MATLABコード] フィールドで、プライベートチャネルに書き込むための変数を設定します。writeChannelIDおよびwriteAPIKeyに指定された値を実際の値に置き換えます。チャネル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 つの方法は、移動平均を計算することです。このアプローチでは、ローカル データ ポイントのグループの平均が、データ セット全体のスライディング ウィンドウで計算されます。MATLAB movmean関数を 5 分のスライディング ウィンドウで使用して、風速データを平滑化します。このセクションはコード テンプレートには含まれていません。thingSpeakRead.を呼び出した後、コードにこれを含めることができます。

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

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

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

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

参考

関数

関連する例

詳細