ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

MATLAB 内の欠損データ

欠損データの処理は、データ前処理で一般的に行われるタスクです。欠損値はデータ内の意味のあるイベントを表していることもありますが、多くの場合、信頼できないか、使用できないデータ点を表しています。いずれにしても、MATLAB® には欠損データを処理するための多くのオプションがあります。

欠損データの作成と整理

MATLAB での欠損値の形式は、データ型によって異なります。たとえば、double などの数値データ型では NaN (数値ではない) を使用して欠損値が表されます。

x = [NaN 1 2 3 4];

missing 値を使用して、欠損している数値データまたは他の型 (datetimestringcategorical など) のデータを表すこともできます。MATLAB は、missing 値をそのデータのネイティブな型に自動的に変換します。

xDouble = [missing 1 2 3 4]
xDouble = 1×5

   NaN     1     2     3     4

xDatetime = [missing datetime(2014,1:4,1)]
xDatetime = 1x5 datetime array
Columns 1 through 3

   NaT                    01-Jan-2014 00:00:00   01-Feb-2014 00:00:00

Columns 4 through 5

   01-Mar-2014 00:00:00   01-Apr-2014 00:00:00

xString = [missing "a" "b" "c" "d"]
xString = 1x5 string array
    <missing>    "a"    "b"    "c"    "d"

xCategorical = [missing categorical({'cat1' 'cat2' 'cat3' 'cat4'})]
xCategorical = 1x5 categorical array
     <undefined>      cat1      cat2      cat3      cat4 

欠損データとして扱いたい値がデータセットに含まれるが、その値が MATLAB の標準の MATLAB 欠損値 (NaN など) ではない場合があります。関数 standardizeMissing を使用すると、それらの値をそのデータ型の標準の欠損値に変換できます。たとえば、NaN の他に 4 を double の欠損値として扱います。

xStandard = standardizeMissing(xDouble,[4 NaN])
xStandard = 1×5

   NaN     1     2     3   NaN

欠損値をデータセットの一部として維持するが、残りのデータからそれらを分離するとします。いくつかの MATLAB 関数を使用して、その後の処理を行う前に欠損値の配置を制御できます。たとえば、関数 sort'MissingPlacement' オプションを使用して、NaN をデータの末尾に移動します。

xSort = sort(xStandard,'MissingPlacement','last')
xSort = 1×5

     1     2     3   NaN   NaN

欠損データの検索、置換、および無視

MATLAB で欠損値が明示的に作成されていなくても、既存のデータのインポート、またはデータの計算によって発生することがあります。データ内の欠損値を認識していないと、後続の計算または解析で誤りを招く可能性があります。

たとえば、NaN 値を含むベクトルを知らずにプロットすると、関数 plot はその値を無視して残りの点を通常どおりにプロットするため、NaN は表示されません。

nanData = [1:9 NaN];
plot(1:10,nanData)

ただし、そのデータの平均を計算すると、結果は NaN となります。この場合、データに NaN が含まれていることを事前に認識し、平均を計算する前にそれを無視または削除することを選択するほうが賢明です。

meanData = mean(nanData)
meanData = NaN

データ内の NaN を見つける 1 つの方法は、関数 isnan を使用することです。この関数は、NaN 値の場所を示す logical 配列を返します。

TF = isnan(nanData)
TF = 1x10 logical array

   0   0   0   0   0   0   0   0   0   1

同様に、関数 ismissing は複数のデータ型について、データの欠損値の場所を返します。

TFdouble = ismissing(xDouble)
TFdouble = 1x5 logical array

   1   0   0   0   0

TFdatetime = ismissing(xDatetime)
TFdatetime = 1x5 logical array

   1   0   0   0   0

複数のデータ型の変数で構成された table または timetable を処理するとします。データ型に関係なく、ismissing を 1 回呼び出すことによって、すべての欠損値を見つけることができます。

xTable = table(xDouble',xDatetime',xString',xCategorical')
xTable=5×4 table
    Var1            Var2              Var3          Var4    
    ____    ____________________    _________    ___________

    NaN                      NaT    <missing>    <undefined>
      1     01-Jan-2014 00:00:00    "a"          cat1       
      2     01-Feb-2014 00:00:00    "b"          cat2       
      3     01-Mar-2014 00:00:00    "c"          cat3       
      4     01-Apr-2014 00:00:00    "d"          cat4       

TF = ismissing(xTable)
TF = 5x4 logical array

   1   1   1   1
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0

欠損値は、処理または解析に使用できないデータを表していることがあります。fillmissing を使用して欠損値を別の値に置き換えるか、rmmissing を使用して欠損値をすべて削除します。

xFill = fillmissing(xStandard,'constant',0)
xFill = 1×5

     0     1     2     3     0

xRemove = rmmissing(xStandard)
xRemove = 1×3

     1     2     3

多くの MATLAB 関数では、あらかじめ明示的に特定、埋め込み、または削除することなく、欠損値を無視できます。たとえば、NaN 値を含むベクトルの合計を計算した場合、結果は NaN です。ただし、関数 sum'omitnan' オプションを使用すると、合計で NaN を直接無視できます。

sumNan = sum(xDouble)
sumNan = NaN
sumOmitnan = sum(xDouble,'omitnan')
sumOmitnan = 10

参考

| | |

関連するトピック