이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
테이블에서 정리되지 않은 데이터와 누락된 데이터 정리하기
이 예제에서는 테이블에서 누락된 데이터가 있는 행을 찾고, 정리하고, 삭제하는 방법을 보여줍니다.
샘플 데이터 불러오기
쉼표로 구분된 텍스트 파일 messy.csv
에서 샘플 데이터를 불러옵니다. 파일에 다음과 같은 다양한 형태의 누락된 데이터 표시자가 많이 있습니다.
빈 문자형 벡터('')
마침표(.)
NA
NaN
-99
빈 값으로 처리되도록 문자형 벡터를 지정하려면 readtable
함수에 'TreatAsMissing'
이름-값 쌍의 인수를 사용하십시오. 이 예제를 라이브 스크립트로 실행하는 경우에도 21개의 행을 전부 표시하려면 disp
함수를 사용하십시오.
T = readtable('messy.csv','TreatAsMissing',{'.','NA'}); disp(T)
A B C D E ________ ____ __________ ____ ____ {'afe1'} 3 {'yes' } 3 3 {'egh3'} NaN {'no' } 7 7 {'wth4'} 3 {'yes' } 3 3 {'atn2'} 23 {'no' } 23 23 {'arg1'} 5 {'yes' } 5 5 {'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 {0x0 char} 563 563 {'pnj5'} 463 {'no' } 463 463 {'wnn3'} 6 {'no' } 6 6 {'oks9'} 23 {'yes' } 23 23 {'wba3'} NaN {'yes' } NaN 14 {'pkn4'} 2 {'no' } 2 2 {'adw3'} 22 {'no' } 22 22 {'poj2'} -99 {'yes' } -99 -99 {'bas8'} 23 {'no' } 23 23 {'gry5'} NaN {'yes' } NaN 21
T
는 21개 행과 5개 변수를 갖는 테이블입니다. 'TreatAsMissing'
은 파일의 숫자형 열에만 적용되며 '-99'
와 같이 텍스트로 지정된 숫자형 값은 처리할 수 없습니다.
테이블 요약
summary
함수를 사용하여 테이블 요약을 생성함으로써 각 변수에 대한 데이터형, 설명, 단위 및 기타 기술 통계량을 확인합니다.
summary(T)
Variables: A: 21x1 cell array of character vectors B: 21x1 double Values: Min -99 Median 14 Max 563 NumMissing 3 C: 21x1 cell array of character vectors D: 21x1 double Values: Min -99 Median 7 Max 563 NumMissing 2 E: 21x1 double Values: Min -99 Median 14 Max 563
파일에서 데이터를 가져올 때 readtable
은 기본적으로 숫자형이 아닌 요소를 갖는 변수를 문자형 벡터로 구성된 셀형 배열로 읽습니다.
누락된 값을 가지는 행 찾기
테이블 T
에서 누락된 값을 하나 이상 가지는 행의 서브셋을 표시합니다.
TF = ismissing(T,{'' '.' 'NA' NaN -99}); rowsWithMissing = T(any(TF,2),:); disp(rowsWithMissing)
A B C D E ________ ___ __________ ___ ___ {'egh3'} NaN {'no' } 7 7 {'abk6'} 563 {0x0 char} 563 563 {'wba3'} NaN {'yes' } NaN 14 {'poj2'} -99 {'yes' } -99 -99 {'gry5'} NaN {'yes' } NaN 21
readtable
이 숫자형 변수 B
, D
, E
에서 '.'
및 'NA'
를 NaN
으로 바꿨습니다.
누락값 표시자 바꾸기
코드 -99
로 표시되는 누락된 값이 MATLAB® 표준 숫자형 누락값 표시자인 NaN
을 갖도록 데이터를 정리합니다.
T = standardizeMissing(T,-99); disp(T)
A B C D E ________ ____ __________ ____ ____ {'afe1'} 3 {'yes' } 3 3 {'egh3'} NaN {'no' } 7 7 {'wth4'} 3 {'yes' } 3 3 {'atn2'} 23 {'no' } 23 23 {'arg1'} 5 {'yes' } 5 5 {'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 {0x0 char} 563 563 {'pnj5'} 463 {'no' } 463 463 {'wnn3'} 6 {'no' } 6 6 {'oks9'} 23 {'yes' } 23 23 {'wba3'} NaN {'yes' } NaN 14 {'pkn4'} 2 {'no' } 2 2 {'adw3'} 22 {'no' } 22 22 {'poj2'} NaN {'yes' } NaN NaN {'bas8'} 23 {'no' } 23 23 {'gry5'} NaN {'yes' } NaN 21
standardizeMissing
은 세 군데에 있는 -99
를 모두 NaN
으로 바꿉니다.
새 테이블 T2
를 생성하고, 누락된 값을 테이블의 이전 행에 있는 값으로 바꿉니다. fillmissing
은 누락된 값을 채울 수 있는 다양한 방법을 제공합니다.
T2 = fillmissing(T,'previous');
disp(T2)
A B C D E ________ ____ _______ ____ ____ {'afe1'} 3 {'yes'} 3 3 {'egh3'} 3 {'no' } 7 7 {'wth4'} 3 {'yes'} 3 3 {'atn2'} 23 {'no' } 23 23 {'arg1'} 5 {'yes'} 5 5 {'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 {'yes'} 563 563 {'pnj5'} 463 {'no' } 463 463 {'wnn3'} 6 {'no' } 6 6 {'oks9'} 23 {'yes'} 23 23 {'wba3'} 23 {'yes'} 23 14 {'pkn4'} 2 {'no' } 2 2 {'adw3'} 22 {'no' } 22 22 {'poj2'} 22 {'yes'} 22 22 {'bas8'} 23 {'no' } 23 23 {'gry5'} 23 {'yes'} 23 21
누락된 값을 가지는 행 제거하기
누락된 값 없이 T
의 행만 포함하는 새 테이블 T3
을 생성합니다. T3
에는 행이 16개만 있습니다.
T3 = rmmissing(T); disp(T3)
A B C D E ________ ____ _______ ____ ____ {'afe1'} 3 {'yes'} 3 3 {'wth4'} 3 {'yes'} 3 3 {'atn2'} 23 {'no' } 23 23 {'arg1'} 5 {'yes'} 5 5 {'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 {'pnj5'} 463 {'no' } 463 463 {'wnn3'} 6 {'no' } 6 6 {'oks9'} 23 {'yes'} 23 23 {'pkn4'} 2 {'no' } 2 2 {'adw3'} 22 {'no' } 22 22 {'bas8'} 23 {'no' } 23 23
T3
에는 16개 행과 5개 변수가 있습니다.
데이터를 재구성하기
T3
의 행을 C
를 기준으로 내림차순으로 정렬한 후 A
를 기준으로 오름차순으로 정렬합니다.
T3 = sortrows(T2,{'C','A'},{'descend','ascend'}); disp(T3)
A B C D E ________ ____ _______ ____ ____ {'abk6'} 563 {'yes'} 563 563 {'afe1'} 3 {'yes'} 3 3 {'arg1'} 5 {'yes'} 5 5 {'gry5'} 23 {'yes'} 23 21 {'jre3'} 34.6 {'yes'} 34.6 34.6 {'oii4'} 5 {'yes'} 5 5 {'oks9'} 23 {'yes'} 23 23 {'poj2'} 22 {'yes'} 22 22 {'wba3'} 23 {'yes'} 23 14 {'wen9'} 234 {'yes'} 234 234 {'wnk3'} 245 {'yes'} 245 245 {'wth4'} 3 {'yes'} 3 3 {'adw3'} 22 {'no' } 22 22 {'atn2'} 23 {'no' } 23 23 {'bas8'} 23 {'no' } 23 23 {'dbo8'} 5 {'no' } 5 5 {'egh3'} 3 {'no' } 7 7 {'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
가 서로 옆에 오도록 테이블을 재정렬합니다.
T3 = T3(:,{'A','C','B','D','E'}); disp(T3)
A C B D E ________ _______ ____ ____ ____ {'abk6'} {'yes'} 563 563 563 {'afe1'} {'yes'} 3 3 3 {'arg1'} {'yes'} 5 5 5 {'gry5'} {'yes'} 23 23 21 {'jre3'} {'yes'} 34.6 34.6 34.6 {'oii4'} {'yes'} 5 5 5 {'oks9'} {'yes'} 23 23 23 {'poj2'} {'yes'} 22 22 22 {'wba3'} {'yes'} 23 23 14 {'wen9'} {'yes'} 234 234 234 {'wnk3'} {'yes'} 245 245 245 {'wth4'} {'yes'} 3 3 3 {'adw3'} {'no' } 22 22 22 {'atn2'} {'no' } 23 23 23 {'bas8'} {'no' } 23 23 23 {'dbo8'} {'no' } 5 5 5 {'egh3'} {'no' } 3 7 7 {'pkn4'} {'no' } 2 2 2 {'ple2'} {'no' } 2 2 2 {'pnj5'} {'no' } 463 463 463 {'wnn3'} {'no' } 6 6 6
참고 항목
readtable
| summary
| ismissing
| sortrows
| standardizeMissing
| rmmissing
| fillmissing