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

   NaT                    01-Jan-2014 00:00:00   01-Feb-2014 00:00:00

Columns 4 through 5

   01-Mar-2014 00:00:00   01-Apr-2014 00:00:00

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

xCategorical = [missing categorical({'cat1' 'cat2' 'cat3' 'cat4'})]
xCategorical = 1x5 categorical array
     <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, чтобы переместить NaN s в конец данных.

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)

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

meanData = mean(nanData)
meanData = NaN

Один способ найти NaN s в данных при помощи функции 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 00:00:00    "a"          cat1       
      2     01-Feb-2014 00:00:00    "b"          cat2       
      3     01-Mar-2014 00:00:00    "c"          cat3       
      4     01-Apr-2014 00:00:00    "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. Однако можно непосредственно проигнорировать NaN s в сумме при помощи опции 'omitnan' с функцией sum.

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

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

| | |

Похожие темы