📜  处理 Julia 中的缺失数据

📅  最后修改于: 2021-11-25 04:38:18             🧑  作者: Mango

如今,大数据常见问题之一是分析该数据中的缺失值。缺失值会导致一些重大的预测错误,这对任何商业观点都是不利的。因此,当我们遇到任何缺失数据时,我们必须应用不同的技术来处理数据集中的缺失值。

丢失的对象

Julia缺少的对象是最强大、最快速的用户定义类型,它比大多数内置类型(如 NA、NaN 等)要好得多。它还支持许多自定义类型以利用更多优势。

为了在缺失值的一些预定义类型和一些自定义类型之间提供一致性,Julia 引入了新的缺失对象,一个没有字段的对象,它是 Missing 单例类型的唯一实例。值可以是 T 类型或缺失类型。它可以声明为Union{Missing, T}

# missing object cast as Int
[1, missing]
  
# missing object cast as Char
['1', missing]
  
# missing object cast as Float64
[1.0, missing]

输出:

Julia 的新缺失框架更加通用和高效。它确保了安全性和保障,永远不应该忽略缺失值,也不应该用任何非缺失值替换。使用此缺失对象执行的任何数学运算都不会影响数据操作的结果。如果数据集中有任何缺失值,那么我们也可以毫无问题地执行一些任务。

# Adding something with missing value
1 + missing
  
# Subtract something with missing value
1 - missing
  
# Multiply something with missing value
2 * missing
  
# Round-off missing value
round(missing)
  
# Taking cosine of missing value
cos(missing)

输出:

正如您所看到的,通过使用缺失的框架,我们发现对缺失对象的任何操作都不会影响结果,而如果我们对 NA 或 NAN 值做同样的事情,它可能会返回错误或某些类型的异常。

为了摆脱这些丢失的对象,我们可以使用一个名为skipmissing()方法的便利函数。这可以帮助我们使用数据帧或数组中的其他值。

# Sum the values of array ignoring missing
sum(skipmissing([1, missing, 5]))
  
# Mean of values of array ignoring missing
mean(skipmissing([4, missing, 3]))

输出:

处理缺失数据的方法

处理缺失值的方法有很多,下面给出了其中的一些:

从数据框中删除缺失值

在这个方法中,我们可以看到,通过使用dropmissing()方法,我们能够删除数据框中有缺失值的行。丢弃缺失值适用于那些大到足以遗漏一些不会影响预测的数据的数据集,而不适用于可能导致模型欠拟合的小数据集。

# Install DataFrames and Missings
using Pkg
Pkg.add('DataFrames')
Pkg.add('Missings')
  
# Defining DataFrame having missing values
df = DataFrame(i = 1:6,
               x = [5, missing, 4, missing, 2, 1],
               y = ["a", missing, missing, "c", "d", "e"])
                 
# Droping missing data values
gfg = dropmissing(df)
  
print(gfg)

输出:

跳过数据框中的缺失值

在这个方法中我们可以看到,通过使用skipmissing()方法,我们可以跳过缺失值。删除缺失值是一个更好的选择,至少我们可以在该行中使用其他值,这些值可以作为制作模型的有用数据。

# Install DataFrames and Missings
using Pkg
Pkg.add('DataFrames')
Pkg.add('Missings')
  
# Defining DataFrame having missing values
df = DataFrame(i = 1:6,
               x = [5, missing, 4, missing, 2, 1],
               y = ["a", missing, missing, "c", "d", "e"])
                 
# Skipping missing data values
gfg = skipmissing(df[2])
  
print(maximum(df[2]))
print(maximum(gfg))

输出: