标签: imputation

用mean替换缺失值 - Spark Dataframe

我有一个带有一些缺失值的Spark Dataframe.我想通过用该列的平均值替换缺失值来执行简单的估算.我对Spark很新,所以我一直在努力实现这个逻辑.这是我到目前为止所做的事情:

a)要为单个列(比如Col A)执行此操作,这行代码似乎有效:

df.withColumn("new_Col", when($"ColA".isNull, df.select(mean("ColA"))
  .first()(0).asInstanceOf[Double])
  .otherwise($"ColA"))
Run Code Online (Sandbox Code Playgroud)

b)但是,我无法弄清楚,如何对我的数据帧中的所有列执行此操作.我正在尝试Map函数,但我相信它遍历数据帧的每一行

c)SO上有类似的问题 - 这里.虽然我喜欢这个解决方案(使用聚合表和合并),但我非常想知道是否有办法通过遍历每一列来实现这一点(我来自R,所以使用更高阶函数循环遍历每一列lapply对我来说似乎更自然).

谢谢!

scala dataframe apache-spark apache-spark-sql imputation

12
推荐指数
2
解决办法
1万
查看次数

在Python中的一些Dataframe列上使用Imputer

我正在学习如何在Python上使用Imputer.

这是我的代码:

df=pd.DataFrame([["XXL", 8, "black", "class 1", 22],
["L", np.nan, "gray", "class 2", 20],
["XL", 10, "blue", "class 2", 19],
["M", np.nan, "orange", "class 1", 17],
["M", 11, "green", "class 3", np.nan],
["M", 7, "red", "class 1", 22]])

df.columns=["size", "price", "color", "class", "boh"]

from sklearn.preprocessing import Imputer

imp=Imputer(missing_values="NaN", strategy="mean" )
imp.fit(df["price"])

df["price"]=imp.transform(df["price"])
Run Code Online (Sandbox Code Playgroud)

但是,这会引发以下错误:ValueError:值的长度与索引的长度不匹配

我的代码有什么问题???

谢谢你的帮助

python missing-data scikit-learn imputation

9
推荐指数
2
解决办法
1万
查看次数

熊猫:如何用groupby的平均值填充空值?

我有一个数据集将丢失一些看起来像这样的数据:

id    category     value
1     A            NaN
2     B            NaN
3     A            10.5
4     C            NaN
5     A            2.0
6     B            1.0
Run Code Online (Sandbox Code Playgroud)

我需要填写空值来使用模型中的数据.每次类别第一次出现时,它都是NULL.我想要的方法是对类似的情况AB具有多个值的情况用该类别的平均值替换空值.对于C仅出现一次的类别,只需填写其余数据的平均值即可.

我知道我可以简单地执行此操作C以获得所有行的平均值,但我仍然试图为A和B执行分类方法并替换空值.

df['value'] = df['value'].fillna(df['value'].mean()) 
Run Code Online (Sandbox Code Playgroud)

我需要最终的df是这样的

id    category     value
1     A            6.25
2     B            1.0
3     A            10.5
4     C            4.15
5     A            2.0
6     B            1.0
Run Code Online (Sandbox Code Playgroud)

python missing-data pandas imputation

9
推荐指数
2
解决办法
5925
查看次数

在 R 中使用多重插补时,从 svyglm 结果获取 p 值

我想svyglm在使用多重插补时从模型的结果中获取 p 值。下面是一个可重现的示例。

创建数据集

library(tibble)
library(survey)
library(mitools)

# Data set 1
# Note that I am excluding the "income" variable from the "df"s and creating  
# it separately so that it varies between the data sets. This simulates the 
# variation with multiple imputation. Since I am using the same seed
# (i.e., 123), all the other variables will be the same, the only one that 
# will vary will be "income."

set.seed(123)

df1 <- tibble(id      = seq(1, …
Run Code Online (Sandbox Code Playgroud)

r survey imputation

9
推荐指数
1
解决办法
1181
查看次数

R:用向量中的项替换NA

我试图用我的数据中的一些缺失值替换来自类似组的平均值.

我的数据如下:

   X   Y
1  x   y
2  x   y
3  NA  y
4  x   y
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

  X   Y
1  x   y
2  x   y
3  y   y
4  x   y
Run Code Online (Sandbox Code Playgroud)

我写了这个,它有效

for(i in 1:nrow(data.frame){
   if( is.na(data.frame$X[i]) == TRUE){
       data.frame$X[i] <- data.frame$Y[i]
   }
  }
Run Code Online (Sandbox Code Playgroud)

但是我的data.frame几乎有五十万行,而for/if语句非常慢.我想要的是类似的东西

is.na(data.frame$X) <- data.frame$Y
Run Code Online (Sandbox Code Playgroud)

但这会导致不匹配的大小错误.似乎应该有一个命令来执行此操作,但我无法在SO或R帮助列表中找到它.有任何想法吗?

replace r missing-data imputation

8
推荐指数
2
解决办法
1万
查看次数

R中缺失和审查数据的多重插补

我有一个同时包含随机缺失(MAR)和审查数据的数据集。这些变量是相关的,因此我尝试有条件地估算缺失的数据,以便可以估计相关的多元正态分布的分布参数。我想使用Gibbs MCMC,但是很难执行该程序。我的数据框有5个变量(表示为x1:x5),1099个样本,其中包含MAR,检查值和观察值的某种组合。到目前为止,这是我尝试过的:

# packages
library(msm, tmvtnorm, MCMCpack)

# priors 
theta0<-c(rep(0, 5))
Sigma0<-S0<-diag(5)  
nu0<-4 

# initialize parameters
theta<-c(rep(0, 5))
Tau<-diag(5) 

# initialize output matrix
n_samples <- 1000
mu_MCMC <- matrix(0, nrow = n_samples, ncol = 5)
mu_MCMC[1,] <- theta
cov_MCMC <- matrix(0, nrow = n_samples, ncol = 25)
cov_MCMC[1,] <- c(diag(5))

# detection limits
det_lim <- matrix(c(-1.7, 0, 0, 0, 0), nrow = 1, ncol = 5)

# function to detect NaN (i.e., below detection data)
is.nan.data.frame <- function(x)
    do.call(cbind, lapply(x, …
Run Code Online (Sandbox Code Playgroud)

r missing-data imputation

8
推荐指数
1
解决办法
706
查看次数

使用statsmodels.imputation.mice

我正在探索statsmodels.imputation.mice包用于输入缺失值.但是,除了http://www.statsmodels.org之外,我还没有看到它的任何使用示例.从我收集的内容中,可以创建一个mouse.MICEData实例并将其与mice.MICE().fit()结合使用.来自http://www.statsmodels.org/dev/generated/statsmodels.imputation.mice.MICE.html的示例

>>> imp = mice.MICEData(data)
>>> fml = 'y ~ x1 + x2 + x3 + x4'
>>> mice = mice.MICE(fml, sm.OLS, imp)
>>> results = mice.fit(10, 10)
>>> print(results.summary())
Run Code Online (Sandbox Code Playgroud)

但是,MiceData实例中的估算值并不固定.我的意思是,如果

imp = mice.MICEData(data)
Run Code Online (Sandbox Code Playgroud)

每次通话

imp.update('x1') 
Run Code Online (Sandbox Code Playgroud)

(假设数据有一列'x1')使用"预测均值匹配"为缺失值绘制一个新样本.如果我将MICEDdata与MICE.fit()一起使用,这一切都很好.但是,假设我想使用此程序包将值重写一次,然后使用另一个程序包中的预测程序(例如来自sklearn)来拟合数据.我想知道,什么是合理的方法.我可以多次运行更新并对每个缺失值进行平均预测.或者,我可以创建具有不同插补值的多个数据集并适合每个集合.但是,如果我的数据集很大,那么它可能会非常昂贵.

statsmodels imputation

8
推荐指数
0
解决办法
1068
查看次数

按组用均值插补缺失数据

我有三个层次分类变量(AB,和C)。

我还有一个连续变量,上面有一些缺失值。

我想NA用其组的平均值替换这些值。A也就是说, group 中缺失的观察值必须替换为 group 的平均值A

我知道我可以计算每个组的平均值并替换缺失值,但我确信还有另一种方法可以通过循环更有效地做到这一点。

A <- subset(data, group == "A")
mean(A$variable, rm.na = TRUE)
A$variable[which(is.na(A$variable))] <- mean(A$variable, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

现在,我知道我可以对 group Band做同样的事情C,但也许for循环(with ifand else)可能会起作用?

loops r missing-data imputation

8
推荐指数
1
解决办法
3966
查看次数

如何仅使用 SimpleImputer 或等效工具转换某些列

我正在使用 scikit 库迈出第一步,发现自己需要回填数据框中的某些列。

我已经仔细阅读了文档,但我仍然不知道如何实现这一点。

为了使这更具体,假设我有:

A = [[7,2,3],[4,np.nan,6],[10,5,np.nan]]
Run Code Online (Sandbox Code Playgroud)

我想用平均值而不是第三列填充第二列。如何使用 SimpleImputer(或其他辅助类)执行此操作?

由此演变而来,自然的后续问题是:如何用平均值填充第二列,用常数填充最后一列(显然,仅适用于没有值的单元格)?

python pandas scikit-learn data-science imputation

8
推荐指数
2
解决办法
6067
查看次数

使用库 mouse() 中的估算数据集来拟合 R 中的多级模型

我是 R 包装新手mice。但我正在尝试从中估算 5 个数据集popmis,然后为每个数据集拟合一个模型,最后在它们之间拟合一个lmer()模型。with()pool()

我认为pool()中的函数mice()不适用于lmer()来自lme4包的调用,对吧?

如果是这种情况,有没有办法编写一个定制的函数,其作用类似于pool()我下面的案例?

library(mice)
library(lme4)

imp <- mice(popmis, m = 5) # `popmis` is a dataset from `mice`

fit <- with(imp, lme4::lmer(popular ~ sex + (1|school))) # works fine.

pool(fit) # BUT this one fails, should I loop here?
Run Code Online (Sandbox Code Playgroud)

r lme4 missing-data r-mice imputation

8
推荐指数
1
解决办法
2873
查看次数