Работа с недостающими данными является общей задачей в предварительной обработке данных. Несмотря на то, что иногда отсутствующие значения показывают значимое событие в данных, они часто представляют ненадежные или неприменимые точки данных. В любом случае 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
функционируйте, чтобы переместить 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