处理缺失数据是数据预处理中的一项常见任务。虽然有时丢失的值表示数据中有意义的事件,但它们通常表示不可靠或不可用的数据点。在这两种情况下,MATLAB®有许多处理丢失数据的选项。
缺失值在MATLAB中采用的形式取决于数据类型。例如,数字数据类型,例如双
使用南
(不是数字)来表示缺失的值。
x = [NaN 1 2 3 4];
你也可以用the失踪
值表示缺少的数字数据或其他类型的数据,例如datetime
,字符串
,分类
.MATLAB自动转换失踪
值设置为数据的本机类型。
xDouble =[缺1 2 3 4]
xDouble =1×5NaN 1 2 3 4
xDatetime = [missing datetime(2014,1:4,1)]
xDatetime =1 x5 datetimeNaT 01- 1- 2014 01- 2 -2014 01- 3 -2014 01- 4 -2014
xString =[失踪“一个”“b”“c”“d”]
xString =1 x5字符串<缺少> "a" "b" "c" "d"
xCategorical =[缺少categorical({“cat1”“cat2”“cat3”“cat4”}))
xCategorical =1 x5分类cat1 cat2 cat3 cat4
数据集可能包含您希望作为缺失数据处理的值,但不是标准MATLAB中的MATLAB缺失值,例如南
.你可以使用standardizeMissing
函数将这些值转换为该数据类型的标准缺失值。例如,将4视为丢失双
附加价值南
.
xStandard =标准化发射(xDouble,[4 NaN])
xStandard =1×5NaN 1 2 3
假设您希望将丢失的值保留为数据集的一部分,但要将它们与其他数据隔离。一些MATLAB函数使您能够在进一步处理之前控制缺失值的位置。例如,使用the“MissingPlacement”
选择与排序
函数将南
S到最后的数据。
xSort =排序(xStandard,“MissingPlacement”,“最后一次”)
xSort =1×51 2 3南南
即使您没有在MATLAB中显式地创建缺失值,它们也可以在导入现有数据或使用数据进行计算时出现。如果您没有意识到数据中缺少值,则后续的计算或分析可能会产生误导。
例如,如果你不知道画一个包含a的向量南
值时,南
没有出现,因为情节
函数忽略它,并正常绘制其余的点。
nanData = [1:9 NaN];nanData情节(1:10)
但是,如果计算数据的平均值,结果是南
.在这种情况下,提前知道数据包含南
,然后在计算平均值之前选择忽略或删除它。
meanData =意味着(nanData)
meanData =南
有一种方法南
数据中的S是通过使用isnan
函数,该函数返回一个逻辑数组,该逻辑数组指示任意南
价值。
TF = isnan (nanData)
TF =1 x10逻辑阵列0 0 0 0 0 0 0 1
类似地,ismissing
函数返回多个数据类型中缺失值的位置。
TFdouble = ismissing (xDouble)
TFdouble =1 x5逻辑阵列1 0 0 0
TFdatetime = ismissing (xDatetime)
TFdatetime =1 x5逻辑阵列1 0 0 0
假设您正在处理一个由具有多种数据类型的变量组成的表或时间表。调用一次就可以找到所有缺失的值ismissing
,不管他们是什么类型的。
xTable =表(xDouble”、xDatetime”xString ', xCategorical ')
xTable =5×4表Var1 Var2 Var3 Var4 ____ ___________ _________ ___________ 南NaT失踪> < <定义> 1 01 - 1月- 2014”“cat1 2 01 - 2014年2月,“b”cat2 3 01 - 3月- 2014“c”cat3 4 01 - 4月- 2014 cat4“d”
TF = ismissing (xTable)
TF =5 x4逻辑阵列1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
缺失值可能代表无法处理或分析的数据。使用fillmissing
用另一个值替换丢失的值或使用rmmissing
完全删除丢失的值。
xFill = fillmissing (xStandard,“不变”, 0)
xFill =1×51 .单词brace联想记忆
xRemove = rmmissing (xStandard)
xRemove =1×31 2 3
许多MATLAB函数使您能够忽略丢失的值,而不必首先显式地定位、填充或删除它们。例如,如果你计算一个包含南
值,结果是南
.但是,你可以直接忽略南
在和中加入S“omitnan”
选择与总和
函数。
sumNan =总和(xDouble)
sumNan =南
sumOmitnan =总和(xDouble,“omitnan”)
sumOmitnan = 10
ismissing
|fillmissing
|standardizeMissing
|失踪