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

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

Создание и организация недостающих данных

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

x = [NaN 1 2 3 4];

Можно также использовать missing значение, чтобы представлять недостающие числовые данные или данные других типов, таких как datetimeСтрока, и 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 object. The axes object 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

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

| | |

Похожие темы