테이블에서 정리되지 않은 데이터와 누락된 데이터 정리하기
이 예제에서는 정리되지 않은 데이터 값과 누락된 데이터 값이 있는 테이블을 어떻게 정리하고 재구성하는지 보여줍니다. 먼저, 가져오기 툴을 사용하거나 summary
및 ismissing
함수와 같은 함수를 사용하여 누락된 데이터를 식별할 수 있습니다. standardizeMissing
, fillmissing
또는 rmmissing
함수를 사용하여 누락값을 표준화하거나 채우거나 제거할 수 있습니다. 그런 다음 테이블을 재구성하여 테이블을 추가적으로 정리할 수 있습니다. sortrows
및 movevars
함수와 같은 함수를 사용하여 테이블의 행과 변수의 순서를 바꿀 수 있습니다.
파일의 데이터 검토하기
가져오기 툴을 사용하여 쉼표로 구분된 값(CSV) 샘플 파일 messy.csv
의 데이터를 검토합니다. 이 툴을 사용하면 데이터를 미리 보고 데이터를 어떻게 가져올지 지정할 수 있습니다. 가져오기 툴에서 messy.csv
를 검토하려면 MATLAB®에서 이 예제를 연 후 홈 탭으로 이동하여 변수 섹션에서 데이터 가져오기를 클릭하고 파일 선택 대화 상자를 사용하여 messy.csv
를 엽니다.
가져오기 툴은 messy.csv
에 텍스트 및 숫자형 값이 있는 5개 열이 있음을 보여줍니다.
파일에 다음과 같은 다양한 형태의 누락된 데이터 표시자가 많이 있습니다.
빈 텍스트
마침표(.)
NA
NaN
-99
가져오기 툴은 숫자형 열의 NaN
이나 텍스트 열의 빈 텍스트와 같은 일부 누락된 데이터 표시자를 자동으로 인식합니다(시각적으로 강조 표시하지는 않음).
이 툴은 열 B
에 있는 빈 텍스트, 마침표, NA
와 같은 다른 표시자를 강조 표시합니다. 이러한 값은 표준 누락값이 아닙니다. 그러나 숫자형 열에 숫자형이 아닌 값이 들어 있으면 이러한 값은 누락값을 나타내는 것일 수 있습니다. 데이터를 가져올 때 이러한 값도 누락값으로 처리되도록 지정할 수 있습니다.
숫자형 데이터가 양수 값으로 구성된 경우, 단일 음수 값(예: -99
)을 누락된 데이터에 대한 플래그로 사용할 수도 있습니다. 특정 숫자(예: -99
)가 테이블에서 누락된 데이터를 나타낸다면, 테이블을 정리할 때 이 숫자가 누락값임을 지정해야 합니다.
데이터를 테이블로 가져오기
가져오기 툴에서 데이터를 MATLAB 작업 공간으로 가져올 수 있습니다. readtable
함수를 사용하여 파일에서 데이터를 읽어 들여 테이블로 가져올 수도 있습니다.
readtable
함수를 사용하여 messy.csv
의 데이터를 가져옵니다. 텍스트 데이터를 string형 배열인 테이블 변수로 읽어오려면 TextType
이름-값 인수를 사용합니다. 숫자형 열에서 지정된 숫자형이 아닌 값을 누락값으로 처리하려면 TreatAsMissing
이름-값 인수를 사용합니다. 텍스트 데이터가 있는 열 A
와 C
의 경우 readtable
은 빈 텍스트를 <missing>
으로 표시되는, 누락값인 string형으로 가져옵니다. 숫자형 데이터가 있는 열 B
, D
, E
의 경우 readtable
은 빈 텍스트를 NaN
값으로 가져옵니다. 또한 TreatAsMissing
을 사용하여 .
및 NA
를 지정했다면 이들도 NaN
값으로 가져옵니다. 그러나 값 -99
는 숫자형이므로 변경되지 않은 상태로 유지됩니다.
messyTable = readtable("messy.csv","TextType","string","TreatAsMissing",[".","NA"])
messyTable=21×5 table
A B C D E
______ ____ _________ ____ ____
"afe1" NaN "yes" 3 3
"egh3" NaN "no" 7 7
"wth4" -99 "yes" -99 -99
"atn2" 23.7 <missing> NaN 23.7
"arg1" NaN "yes" 5 NaN
"jre3" 34.6 "yes" 34.6 34.6
"wen9" 234 "yes" 234 234
"ple2" 2 "no" 2 2
"dbo8" 5 "no" 5 5
"oii4" 5 "yes" 5 5
"wnk3" 245 "yes" 245 245
"abk6" 563 "no" 563 563
"pnj5" 463 "no" 463 463
"wnn3" 6 "no" 6 6
"oks9" 23 "yes" 23 23
"wba3" 14 "yes" 14 14
⋮
테이블 요약 보기
테이블의 요약을 보려면 summary
함수를 사용합니다. 요약에 각 테이블 변수에 대한 데이터형 및 기타 기술 통계량이 표시됩니다. 예를 들어, summary
는 messyTable
의 각 숫자형 변수에서 누락값의 개수를 보여줍니다.
summary(messyTable)
Variables: A: 21x1 string B: 21x1 double Values: Min -99 Median 22.5 Max 563 NumMissing 3 C: 21x1 string D: 21x1 double Values: Min -99 Median 14 Max 563 NumMissing 2 E: 21x1 double Values: Min -99 Median 21.5 Max 563 NumMissing 1
누락값을 가지는 행 찾기
messyTable
에서 누락값이 최소한 하나 있는 행을 찾으려면 ismissing
함수를 사용합니다. 데이터에 비표준 누락값(예: -99
)이 있는 경우 표준 누락값과 함께 지정할 수 있습니다.
ismissing
의 출력값은 messyTable
에서 누락값을 갖는 요소를 식별하는 논리형 배열입니다.
missingElements = ismissing(messyTable,{string(missing),NaN,-99})
missingElements = 21x5 logical array
0 1 0 0 0
0 1 0 0 0
0 1 0 1 1
0 0 1 1 0
0 1 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
⋮
누락값이 있는 행을 식별하는 논리형 벡터를 만들려면 any
함수를 사용합니다.
rowsWithMissingValues = any(missingElements,2)
rowsWithMissingValues = 21x1 logical array
1
1
1
1
1
0
0
0
0
0
⋮
테이블의 요소를 참조하여 누락값이 있는 행만 반환하려면 논리형 벡터 rowsWithMissingValues
를 사용합니다.
missingValuesTable = messyTable(rowsWithMissingValues,:)
missingValuesTable=6×5 table
A B C D E
______ ____ _________ ___ ____
"afe1" NaN "yes" 3 3
"egh3" NaN "no" 7 7
"wth4" -99 "yes" -99 -99
"atn2" 23.7 <missing> NaN 23.7
"arg1" NaN "yes" 5 NaN
"gry5" 21 "yes" NaN 21
누락값 채우기
테이블의 누락값을 정리하는 한 가지 전략은 누락값을 더욱 유의미한 값으로 바꾸는 것입니다. 표준 누락값을 삽입하여 비표준 누락값을 대체할 수 있습니다. 그런 다음 누락값을 조정된 값으로 채울 수 있습니다. 예를 들어, 누락값을 최근접이웃이나 테이블 변수의 평균값으로 채울 수 있습니다.
이 예제에서 -99
는 누락값을 나타내는 비표준 값입니다. -99
인 요소를 표준 누락값으로 바꾸려면 standardizeMissing
함수를 사용합니다. 단정밀도 및 배정밀도 부동소수점 숫자형 배열에서는 NaN
이 표준 누락값입니다.
messyTable = standardizeMissing(messyTable,-99)
messyTable=21×5 table
A B C D E
______ ____ _________ ____ ____
"afe1" NaN "yes" 3 3
"egh3" NaN "no" 7 7
"wth4" NaN "yes" NaN NaN
"atn2" 23.7 <missing> NaN 23.7
"arg1" NaN "yes" 5 NaN
"jre3" 34.6 "yes" 34.6 34.6
"wen9" 234 "yes" 234 234
"ple2" 2 "no" 2 2
"dbo8" 5 "no" 5 5
"oii4" 5 "yes" 5 5
"wnk3" 245 "yes" 245 245
"abk6" 563 "no" 563 563
"pnj5" 463 "no" 463 463
"wnn3" 6 "no" 6 6
"oks9" 23 "yes" 23 23
"wba3" 14 "yes" 14 14
⋮
누락값을 채우려면 fillmissing
함수를 사용합니다. 이 함수는 누락값을 채우는 여러 방법을 제공합니다. 예를 들어, 누락값이 아닌 최근접이웃으로 누락값을 채웁니다.
filledTable = fillmissing(messyTable,"nearest")
filledTable=21×5 table
A B C D E
______ ____ _____ ____ ____
"afe1" 23.7 "yes" 3 3
"egh3" 23.7 "no" 7 7
"wth4" 23.7 "yes" 7 23.7
"atn2" 23.7 "yes" 5 23.7
"arg1" 34.6 "yes" 5 34.6
"jre3" 34.6 "yes" 34.6 34.6
"wen9" 234 "yes" 234 234
"ple2" 2 "no" 2 2
"dbo8" 5 "no" 5 5
"oii4" 5 "yes" 5 5
"wnk3" 245 "yes" 245 245
"abk6" 563 "no" 563 563
"pnj5" 463 "no" 463 463
"wnn3" 6 "no" 6 6
"oks9" 23 "yes" 23 23
"wba3" 14 "yes" 14 14
⋮
누락값을 가지는 행 제거하기
테이블의 누락값을 정리하는 또 다른 전략은 누락값이 있는 행을 제거하는 것입니다.
누락값이 있는 행을 제거하려면 rmmissing
함수를 사용합니다.
remainingTable = rmmissing(messyTable)
remainingTable=15×5 table
A B C D E
______ ____ _____ ____ ____
"jre3" 34.6 "yes" 34.6 34.6
"wen9" 234 "yes" 234 234
"ple2" 2 "no" 2 2
"dbo8" 5 "no" 5 5
"oii4" 5 "yes" 5 5
"wnk3" 245 "yes" 245 245
"abk6" 563 "no" 563 563
"pnj5" 463 "no" 463 463
"wnn3" 6 "no" 6 6
"oks9" 23 "yes" 23 23
"wba3" 14 "yes" 14 14
"pkn4" 2 "no" 2 2
"adw3" 22 "no" 22 22
"poj2" 34.6 "yes" 34.6 34.6
"bas8" 23 "no" 23 23
테이블 행과 변수를 정렬하고 순서를 바꾸기
테이블의 누락값을 정리한 후에는 테이블을 다른 방법으로 구성할 수 있습니다. 예를 들어, 하나 이상의 변수 값을 기준으로 테이블의 행을 정렬할 수 있습니다.
첫 번째 변수 A
의 값을 기준으로 행을 정렬합니다.
sortedTable = sortrows(remainingTable)
sortedTable=15×5 table
A B C D E
______ ____ _____ ____ ____
"abk6" 563 "no" 563 563
"adw3" 22 "no" 22 22
"bas8" 23 "no" 23 23
"dbo8" 5 "no" 5 5
"jre3" 34.6 "yes" 34.6 34.6
"oii4" 5 "yes" 5 5
"oks9" 23 "yes" 23 23
"pkn4" 2 "no" 2 2
"ple2" 2 "no" 2 2
"pnj5" 463 "no" 463 463
"poj2" 34.6 "yes" 34.6 34.6
"wba3" 14 "yes" 14 14
"wen9" 234 "yes" 234 234
"wnk3" 245 "yes" 245 245
"wnn3" 6 "no" 6 6
행을 C
를 기준으로 내림차순으로 정렬한 후 A
를 기준으로 오름차순으로 정렬합니다.
sortedBy2Vars = sortrows(remainingTable,["C","A"],["descend","ascend"])
sortedBy2Vars=15×5 table
A B C D E
______ ____ _____ ____ ____
"jre3" 34.6 "yes" 34.6 34.6
"oii4" 5 "yes" 5 5
"oks9" 23 "yes" 23 23
"poj2" 34.6 "yes" 34.6 34.6
"wba3" 14 "yes" 14 14
"wen9" 234 "yes" 234 234
"wnk3" 245 "yes" 245 245
"abk6" 563 "no" 563 563
"adw3" 22 "no" 22 22
"bas8" 23 "no" 23 23
"dbo8" 5 "no" 5 5
"pkn4" 2 "no" 2 2
"ple2" 2 "no" 2 2
"pnj5" 463 "no" 463 463
"wnn3" 6 "no" 6 6
C
를 기준으로 정렬하면 행을 먼저 "yes"
로 그룹화하고 그다음 "no"
로 그룹화합니다. 그런 다음 A
를 기준으로 정렬하면 행이 사전순으로 나열됩니다.
A
와 C
가 서로 옆에 오도록 테이블을 재정렬하려면 movevars
함수를 사용합니다.
sortedRowsAndMovedVars = movevars(sortedBy2Vars,"C","After","A")
sortedRowsAndMovedVars=15×5 table
A C B D E
______ _____ ____ ____ ____
"jre3" "yes" 34.6 34.6 34.6
"oii4" "yes" 5 5 5
"oks9" "yes" 23 23 23
"poj2" "yes" 34.6 34.6 34.6
"wba3" "yes" 14 14 14
"wen9" "yes" 234 234 234
"wnk3" "yes" 245 245 245
"abk6" "no" 563 563 563
"adw3" "no" 22 22 22
"bas8" "no" 23 23 23
"dbo8" "no" 5 5 5
"pkn4" "no" 2 2 2
"ple2" "no" 2 2 2
"pnj5" "no" 463 463 463
"wnn3" "no" 6 6 6
인덱싱을 사용하여 테이블 변수를 재정렬할 수도 있습니다. 괄호와 출력 테이블에 있는 변수의 순서를 지정하는 변수 인덱스를 사용합니다.
sortedRowsAndMovedVars = sortedBy2Vars(:,["A","C","B","D","E"])
sortedRowsAndMovedVars=15×5 table
A C B D E
______ _____ ____ ____ ____
"jre3" "yes" 34.6 34.6 34.6
"oii4" "yes" 5 5 5
"oks9" "yes" 23 23 23
"poj2" "yes" 34.6 34.6 34.6
"wba3" "yes" 14 14 14
"wen9" "yes" 234 234 234
"wnk3" "yes" 245 245 245
"abk6" "no" 563 563 563
"adw3" "no" 22 22 22
"bas8" "no" 23 23 23
"dbo8" "no" 5 5 5
"pkn4" "no" 2 2 2
"ple2" "no" 2 2 2
"pnj5" "no" 463 463 463
"wnn3" "no" 6 6 6
참고 항목
table
| ismissing
| standardizeMissing
| fillmissing
| rmmissing
| sortrows
| movevars
| Import Tool
| readtable
| summary