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

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

Загрузка выборочных данных

Пример загрузки данных из текстового файла, с разделителем запятая, 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    {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 строкой и пятью переменными. '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 заменены '.' и '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    {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

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

Создайте новую таблицу, 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

См. также

| | | | | |

Похожие темы