Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

ライブ エディター タスクを使用した乱雑なデータのクリーニングと極値の検索

一連のライブ エディター タスクを使用し、ステップごとにデータを可視化することで、対話的にデータを前処理することができます。この例では、局所的最小値と最大値を特定するために、5 つのタスクを使用して欠損値と外れ値をもつノイズの多いデータをクリーニングします。ライブ エディター タスクの詳細については、ライブ スクリプトへの対話型タスクの追加を参照してください。

最初に、4 つの NaN 値と 5 つの外れ値を含む乱雑なデータのベクトルを作成し、プロットします。

x = 1:100;
data = cos(2*pi*0.05*x+2*pi*rand) + 0.5*randn(1,100);
data(20:20:80) = NaN;
data(10:20:90) = [-50 40 30 -45 35];

乱雑なデータをプロットするには、[プロットの作成] タスクを開きます。まず、コード ブロックにキーワード plot を入力し、Create Plot がメニューに表示されたらクリックします。プロット タイプと入力データを選択し、データをプロットします。

このタスクにより生成されるコードを確認するには、タスク パラメーター エリアの下部にある をクリックしてタスクの表示を展開します。

Live Task
% Create plot of x and data
h = plot(x,data,"DisplayName","data");

% Add xlabel, ylabel, title, and legend
xlabel("x")
ylabel("data")
title("x vs. data")
legend

欠損データの埋め込み

データの NaN 値を置き換えて結果を可視化するために、[欠損データの削除] タスクを開きます。まず、コード ブロックにキーワード missing を入力し、Clean Missing Data がメニューに表示されたらクリックします。入力データとクリーニング メソッドを選択して、埋められたデータを自動的にプロットします。

このタスクにより生成されるコードを確認するには、タスク パラメーター エリアの下部にある をクリックしてタスクの表示を展開します。

Live Task
% Fill missing data
[cleanedData,missingIndices] = fillmissing(data,"linear");

% Display results
clf
plot(cleanedData,"Color",[0 114 189]/255,"LineWidth",1.5,...
    "DisplayName","Cleaned data")
hold on

% Plot filled missing entries
plot(find(missingIndices),cleanedData(missingIndices),".","MarkerSize",12,...
    "Color",[217 83 25]/255,"DisplayName","Filled missing entries")
title("Number of filled missing entries: " + nnz(missingIndices))

hold off
legend

clear missingIndices

外れ値の埋め込み

ここで、[外れ値データの削除] タスクを使用することで、前のタスクでクリーニングされたデータから外れ値を削除することができます。新しいコード ブロックにキーワード outliers を入力し、Clean Outlier Data をクリックしてタスクを開きます。cleanedData を入力データとして選択します。外れ値のクリーニングと検出用のメソッドをカスタマイズし、しきい値を調整して外れ値の検出数を増減できます。

このタスクにより生成されるコードを確認するには、タスク パラメーター エリアの下部にある をクリックしてタスクの表示を展開します。

Live Task
% Fill outliers
[cleanedData2,outlierIndices,thresholdLow,thresholdHigh] = ...
    filloutliers(cleanedData,"linear");

% Display results
clf
plot(cleanedData,"Color",[77 190 238]/255,"DisplayName","Input data")
hold on
plot(cleanedData2,"Color",[0 114 189]/255,"LineWidth",1.5,...
    "DisplayName","Cleaned data")

% Plot outliers
plot(find(outlierIndices),cleanedData(outlierIndices),"x",...
    "Color",[64 64 64]/255,"DisplayName","Outliers")
title("Number of outliers cleaned: " + nnz(outlierIndices))

% Plot filled outliers
plot(find(outlierIndices),cleanedData2(outlierIndices),".","MarkerSize",12,...
    "Color",[217 83 25]/255,"DisplayName","Filled outliers")

% Plot outlier thresholds
plot([xlim missing xlim],[thresholdLow*[1 1] NaN thresholdHigh*[1 1]],...
    "Color",[145 145 145]/255,"DisplayName","Outlier thresholds")

hold off
legend

clear outlierIndices thresholdLow thresholdHigh

データの平滑化

次に、[データの平滑化] タスクを使用することで、前のタスクのクリーニング済みデータを平滑化します。キーワード smooth を入力して、タスクが表示されたらクリックします。前のタスクの出力である cleanedData2 を、入力データとして選択します。平滑化法を選択し、平滑化の度合いに応じて平滑化係数を調整します。

このタスクにより生成されるコードを確認するには、タスク パラメーター エリアの下部にある をクリックしてタスクの表示を展開します。

Live Task
% Smooth input data
smoothedData = smoothdata(cleanedData2,"gaussian","SmoothingFactor",0.4);

% Display results
clf
plot(cleanedData2,"Color",[77 190 238]/255,"DisplayName","Input data")
hold on
plot(smoothedData,"Color",[0 114 189]/255,"LineWidth",1.5,...
    "DisplayName","Smoothed data")
hold off
legend

極値の検索

最後に、キーワード extrema の入力を開始し、Find Local Extrema をクリックします。smoothedData を入力データとして使用し、極値のタイプを変更して、クリーニングされ平滑化されたデータの局所的最大値と局所的最小値の両方を見つけます。局所的極値のパラメーターを調整して、見つける最大値と最小値の数を増減できます。

このタスクにより生成されるコードを確認するには、タスク パラメーター エリアの下部にある をクリックしてタスクの表示を展開します。

Live Task
% Find local maxima and minima
maxIndices = islocalmax(smoothedData);
minIndices = islocalmin(smoothedData);

% Display results
clf
plot(smoothedData,"Color",[77 190 238]/255,"DisplayName","Input data")
hold on

% Plot local maxima
plot(find(maxIndices),smoothedData(maxIndices),"^","Color",[217 83 25]/255,...
    "MarkerFaceColor",[217 83 25]/255,"DisplayName","Local maxima")

% Plot local minima
plot(find(minIndices),smoothedData(minIndices),"v","Color",[237 177 32]/255,...
    "MarkerFaceColor",[237 177 32]/255,"DisplayName","Local minima")
title("Number of extrema: " + (nnz(maxIndices)+nnz(minIndices)))
hold off
legend

参考

ライブ エディター タスク

関数

関連するトピック