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