exponenta event banner

Отсутствующие данные в MATLAB

Работа с отсутствующими данными является обычной задачей предварительной обработки данных. Хотя иногда отсутствующие значения означают значимое событие в данных, они часто представляют ненадежные или непригодные для использования точки данных. В любом случае MATLAB ® имеет множество возможностей для обработки отсутствующих данных .

Создание и упорядочение отсутствующих данных

Форма, которую в MATLAB принимают отсутствующие значения, зависит от типа данных. Например, числовые типы данных, такие как double использовать NaN (не число) для представления отсутствующих значений.

x = [NaN 1 2 3 4];

Вы также можете использовать missing значение для представления отсутствующих числовых данных или данных других типов, таких как datetime, string, и categorical. MATLAB автоматически преобразует missing значение для собственного типа данных.

xDouble = [missing 1 2 3 4]
xDouble = 1×5

   NaN     1     2     3     4

xDatetime = [missing datetime(2014,1:4,1)]
xDatetime = 1x5 datetime
   NaT           01-Jan-2014   01-Feb-2014   01-Mar-2014   01-Apr-2014

xString = [missing "a" "b" "c" "d"]
xString = 1x5 string
    <missing>    "a"    "b"    "c"    "d"

xCategorical = [missing categorical({'cat1' 'cat2' 'cat3' 'cat4'})]
xCategorical = 1x5 categorical
     <undefined>      cat1      cat2      cat3      cat4 

Набор данных может содержать значения, которые необходимо рассматривать как отсутствующие данные, но не являются стандартными отсутствующими значениями MATLAB в MATLAB, такими как NaN. Вы можете использовать standardizeMissing функция для преобразования этих значений в стандартное отсутствующее значение для этого типа данных. Например, считать 4 отсутствующим double значение в дополнение к NaN.

xStandard = standardizeMissing(xDouble,[4 NaN])
xStandard = 1×5

   NaN     1     2     3   NaN

Предположим, что необходимо сохранить отсутствующие значения как часть набора данных, но отделить их от остальных данных. Несколько функций MATLAB позволяют управлять размещением отсутствующих значений перед дальнейшей обработкой. Например, используйте 'MissingPlacement' опция с sort функция для перемещения NaNs до конца данных.

xSort = sort(xStandard,'MissingPlacement','last')
xSort = 1×5

     1     2     3   NaN   NaN

Поиск, замена и игнорирование отсутствующих данных

Даже если отсутствующие значения в MATLAB явно не создаются, они могут появиться при импорте существующих данных или вычислении с данными. Если вы не знаете об отсутствующих значениях в данных, последующие вычисления или анализ могут ввести в заблуждение.

Например, при неосознанном построении вектора, содержащего NaN значение, значение NaN не появляется, потому что plot функция игнорирует его и выводит на график оставшиеся точки в обычном режиме.

nanData = [1:9 NaN];
plot(1:10,nanData)

Figure contains an axes. The axes contains an object of type line.

Однако при вычислении среднего значения данных результат будет равен NaN. В этом случае более полезно заранее знать, что данные содержат NaN, а затем перед вычислением среднего значения его следует проигнорировать или удалить.

meanData = mean(nanData)
meanData = NaN

Один способ найти NaNs в данных с помощью isnan функция, которая возвращает логический массив, указывающий местоположение любого NaN значение.

TF = isnan(nanData)
TF = 1x10 logical array

   0   0   0   0   0   0   0   0   0   1

Аналогично, ismissing функция возвращает расположение отсутствующих значений в данных для нескольких типов данных.

TFdouble = ismissing(xDouble)
TFdouble = 1x5 logical array

   1   0   0   0   0

TFdatetime = ismissing(xDatetime)
TFdatetime = 1x5 logical array

   1   0   0   0   0

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

xTable = table(xDouble',xDatetime',xString',xCategorical')
xTable=5×4 table
    Var1       Var2          Var3          Var4    
    ____    ___________    _________    ___________

    NaN             NaT    <missing>    <undefined>
      1     01-Jan-2014    "a"          cat1       
      2     01-Feb-2014    "b"          cat2       
      3     01-Mar-2014    "c"          cat3       
      4     01-Apr-2014    "d"          cat4       

TF = ismissing(xTable)
TF = 5x4 logical array

   1   1   1   1
   0   0   0   0
   0   0   0   0
   0   0   0   0
   0   0   0   0

Отсутствующие значения могут представлять непригодные данные для обработки или анализа. Использовать fillmissing для замены отсутствующих значений другим значением или используйте rmmissing для полного удаления отсутствующих значений.

xFill = fillmissing(xStandard,'constant',0)
xFill = 1×5

     0     1     2     3     0

xRemove = rmmissing(xStandard)
xRemove = 1×3

     1     2     3

Многие функции MATLAB позволяют игнорировать отсутствующие значения без необходимости сначала явно находить, заполнять или удалять их. Например, при вычислении суммы вектора, содержащего NaN значения, результат: NaN. Однако можно напрямую игнорировать NaNs в сумме, используя 'omitnan' опция с sum функция.

sumNan = sum(xDouble)
sumNan = NaN
sumOmitnan = sum(xDouble,'omitnan')
sumOmitnan = 10

См. также

| | |

Связанные темы