Main Content

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

테이블에서 정리되지 않은 데이터와 누락된 데이터 정리하기

이 예제에서는 테이블에서 누락된 데이터가 있는 행을 찾고, 정리하고, 삭제하는 방법을 보여줍니다.

샘플 데이터 불러오기

쉼표로 구분된 텍스트 파일 messy.csv에서 샘플 데이터를 불러옵니다. 파일에 다음과 같은 다양한 형태의 누락된 데이터 표시자가 많이 있습니다.

  • 빈 문자형 벡터('')

  • 마침표(.)

  • NA

  • NaN

  • -99

빈 값으로 처리되도록 문자형 벡터를 지정하려면 readtable 함수에 'TreatAsEmpty' 이름-값 쌍의 인수를 사용하십시오. 이 예제를 라이브 스크립트로 실행하는 경우에도 21개의 행을 전부 표시하려면 disp 함수를 사용하십시오.

T = readtable('messy.csv','TreatAsEmpty',{'.','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개 변수를 갖는 테이블입니다. 'TreatAsEmpty'는 파일의 숫자형 열에만 적용되며 '-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의 행이 사전순으로 나열됩니다.

AC가 서로 옆에 오도록 테이블을 재정렬합니다.

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

참고 항목

| | | | | |

관련 항목