Очистка грязных и пропущенных данных в таблицах

Этот пример показывает, как найти, убрать, и удалить строки таблицы с недостающими данными.

Загрузка демонстрационных данных

Пример загрузки данных из текстового файла, с разделителем запятая, messy.csv. Файл содержит много различных индикаторов недостающих данных:

  • Пустой символьный вектор ('')

  • период (.)

  • NA

  • NaN

  • -99

Чтобы задать векторы символов, чтобы обработать как пустые значения, используйте аргумент пары "имя-значение" 'TreatAsEmpty' с функцией readtable. (Используйте функцию disp, чтобы отобразить всю 21 строку, запуская этот пример как live скрипт.)

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    ''        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 строкой и пятью переменными. '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    ''       563    563
    'wba3'    NaN    'yes'    NaN     14
    'poj2'    -99    'yes'    -99    -99
    'gry5'    NaN    'yes'    NaN     21

readtable заменил '.' и 'NA' с NaN в числовых переменных, B, D и E.

Замена индикаторов отсутствующего значения

Уберите данные так, чтобы отсутствующие значения, обозначенные кодом -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    ''        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

Удаление строк с отсутствующими значениями

Составьте новую таблицу, T3, который содержит только строки от T без отсутствующих значений. 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 строк и пять переменных.

Организация данных

Сортировка строк 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

Смотрите также

| | | | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте