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

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

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

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

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

  • период (.)

  • Нет данных

  • NaN

  • -99

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

T = readtable('messy.csv','TreatAsEmpty',{'.','NA'})
T=21×5 table
      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
      ⋮

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});
T(any(TF,2),:)
ans=5×5 table
      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)
T=21×5 table
      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
      ⋮

standardizeMissing заменяет три экземпляра -99 с NaN.

Составьте новую таблицу, T2, и замените отсутствующие значения на значения из предыдущих строк таблицы. fillmissing обеспечивает много способов заполнить отсутствующие значения.

T2 = fillmissing(T,'previous')
T2=21×5 table
      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
      ⋮

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

Составьте новую таблицу, T3, который содержит только строки от T без отсутствующих значений.

T3 = rmmissing(T)
T3=16×5 table
      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'})
T3=21×5 table
      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
      ⋮

В C строки сгруппированы сначала 'yes', сопровождаемым 'no'. Затем в A, строки перечислены в алфавитном порядке.

Переупорядочьте таблицу так, чтобы A и C были друг рядом с другом.

T3 = T3(:,{'A','C','B','D','E'})
T3=21×5 table
      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
      ⋮

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

| | | | | |

Похожие темы

Была ли эта тема полезной?