Отсутствующие данные в 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

См. также

| | |

Похожие темы