Этот пример показывает, как найти, убрать, и удалить строки таблицы с недостающими данными.
Пример загрузки данных из текстового файла, с разделителем запятая, 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
fillmissing
| ismissing
| readtable
| rmmissing
| sortrows
| standardizeMissing
| summary