Работа с отсутствующими данными является распространенной задачей предварительной обработки данных. Хотя иногда отсутствующие значения означают значимое событие в данных, они часто представляют ненадежные или непригодные точки данных. В любом случае у 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
функция для перемещения 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 "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
. Однако можно непосредственно игнорировать NaN
s в сумме при помощи 'omitnan'
опция со sum
функция.
sumNan = sum(xDouble)
sumNan = NaN
sumOmitnan = sum(xDouble,'omitnan')
sumOmitnan = 10
fillmissing
| ismissing
| missing
| standardizeMissing