Main Content

MATLAB에서 누락된 데이터

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

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

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

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
   NaT           01-Jan-2014   01-Feb-2014   01-Mar-2014   01-Apr-2014

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

xCategorical = [missing categorical({'cat1' 'cat2' 'cat3' 'cat4'})]
xCategorical = 1x5 categorical
     <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)

Figure contains an axes object. The axes object contains an object of type line.

그러나 데이터의 평균을 계산하면 결과는 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    "a"          cat1       
      2     01-Feb-2014    "b"          cat2       
      3     01-Mar-2014    "c"          cat3       
      4     01-Apr-2014    "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

참고 항목

| | |

관련 항목