이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

MATLAB에서 누락된 데이터

누락된 데이터를 처리하는 것은 데이터 전처리에서 흔히 하는 작업입니다. 누락값은 데이터의 유의미한 이벤트를 의미하는 경우도 있지만 신뢰할 수 없거나 사용할 수 없는 데이터 점을 나타내는 경우도 많습니다. 어느 경우이든 MATLAB®은 누락된 데이터를 처리할 수 있는 여러 옵션을 제공합니다.

누락된 데이터를 생성하고 구성하기

MATLAB에서 누락값의 형식은 데이터형에 따라 다릅니다. 예를 들어, double과 같은 숫자 데이터형은 NaN(숫자가 아님)을 사용하여 누락값을 표현합니다.

x = [NaN 1 2 3 4];

missing을 사용하여 숫자 데이터형뿐만 아니라 datetime형, string형, categorical형 등의 누락값을 표현할 수도 있습니다. 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 값이 포함되어 있는 벡터를 모르고 플로팅할 경우 NaN이 나타나지 않는데, 그 이유는 plot 함수는 NaN 값을 무시하고 나머지 점을 평소와 같이 플로팅하기 때문입니다.

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

그러나 데이터의 평균을 계산하면 결과는 NaN입니다. 이런 경우, 데이터에 NaN이 포함되어 있음을 미리 알고 NaN 값을 무시하도록 처리하거나 제거한 후 평균을 계산하는 것이 좋습니다.

meanData = mean(nanData)
meanData = NaN

데이터에서 NaN을 찾는 한 가지 방법은 isnan 함수를 사용하는 것입니다. 이 함수는 모든 NaN 값의 위치를 나타내는 논리형 배열을 반환합니다.

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

다양한 데이터형의 변수로 구성된 테이블이나 타임테이블을 사용한다고 가정해 보겠습니다. ismissing을 한 번 호출하면, 유형에 관계없이 모든 누락값을 찾을 수 있습니다.

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

참고 항목

| | |

관련 항목