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)
그러나 데이터의 평균을 계산하면 결과는 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
참고 항목
ismissing
| fillmissing
| standardizeMissing
| missing