我有一个像 DF
现在我想用 15 替换 Col B = NA,因为这是缺失值。C 列第一个 NA 为 14,第二个 NA 为 15。D 列第一个 NA 为 13,第二个 NA 为 14,第三个 NA 为 15。因此数字遵循从上到下或从下到上的顺序。
可重现的样本数据
structure(list(`Col A` = c(11, 12, 13, 14, 15), `Col B` = c(NA,
11, 12, 13, 14), `Col C` = c(NA, NA, 11, 12, 13), `Col D` = c(NA,
NA, NA, 11, 12)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud) 给定Spark数据帧,我想基于该列的非缺失值和非未知值计算列平均值.然后我想采取这个意思并用它来替换列的缺失和未知值.
例如,假设我正在使用:
然后我可以计算出这个均值,如下所示.
calc_mean = df.where((col("unknown_age") == 0) & (col("missing_age") == 0))
.agg(avg(col("age")))
Run Code Online (Sandbox Code Playgroud)
或者通过SQL和Windows函数,
mean_compute = hiveContext.sql("select avg(age) over() as mean from df
where missing_age = 0 and unknown_age = 0")
Run Code Online (Sandbox Code Playgroud)
我不希望使用SQL/Windows的功能,如果我能帮助它.我的挑战是采用这种方法并使用非SQL方法替换未知/缺失值.
我已经尝试过使用when(),where(),replace(),withColumn,UDF和组合......无论我做什么,我都会得到错误或结果不是我所期望的.这是我尝试过的很多东西之一的例子.
imputed = df.when((col("unknown_age") == 1) | (col("missing_age") == 1),
calc_mean).otherwise("age")
Run Code Online (Sandbox Code Playgroud)
我已经搜索过网络,但没有找到类似的插补类型问题,所以任何帮助都非常感谢.这可能是我错过的非常简单的事情.
附注 - 我正在尝试将此代码应用于Spark Dataframe中列名中没有unknown_或missing_的所有列.我可以将Spark相关代码包装在Python'for循环'中并循环遍历所有适用的列来执行此操作吗?
更新:
还想出了如何遍历列...这是一个例子.
for x in df.columns:
if 'unknown_' not in x and 'missing_' not in x:
avg_compute = df.where(df['missing_' + x] != 1).agg(avg(x)).first()[0]
df = df.withColumn(x …Run Code Online (Sandbox Code Playgroud) 我试图在Python中计算缺失值,并且sklearn似乎没有超出平均值(均值,中位数或模式)插补的方法.橙色插补模型似乎提供了一个可行的选择.然而,似乎Orange.data.Table没有认识到np.nan或以某种方式归因于失败.
import Orange
import numpy as np
tmp = np.array([[1, 2, np.nan, 5, 8, np.nan], [40, 4, 8, 1, 0.2, 9]])
data = Orange.data.Table(tmp)
imputer = Orange.feature.imputation.ModelConstructor()
imputer.learner_continuous = Orange.classification.tree.TreeLearner(min_subset=20)
imputer = imputer(data )
impdata = imputer(data)
for i in range(0, len(tmp)):
print impdata[i]
Run Code Online (Sandbox Code Playgroud)
输出是
[1.000, 2.000, 1.#QO, 5.000, 8.000, 1.#QO]
[40.000, 4.000, 8.000, 1.000, 0.200, 9.000]
Run Code Online (Sandbox Code Playgroud)
知道我错过了什么吗?谢谢!
我有一个数据集,我想建立一个模型,最好是caret包.我的数据实际上是一个时间序列,但问题不是特定于时间序列,而是我CreateTimeSlices为数据分区工作.
我的数据有一定数量的缺失值NA,我将它们分别caret编码为代码.我还记录了他们的位置:
# a logical vector same size as the data, which obs were imputed NA
imputed=c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE)
imputed[imputed] <- NA; print(imputed)
#### [1] FALSE FALSE FALSE NA FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
我知道Caret train函数中有一个选项可以排除NA或用不同的技术对它们进行估算.那不是我想要的.我需要在已经估算的数据集上构建模型,但我想从错误指标(RMSE,MAE,...)的计算中排除推算点.
我不知道如何在插入符号中这样做.在我的第一个脚本中,我尝试手动完成整个交叉验证,然后我有一个自定义的错误度量:
actual = c(5, 4, 3, 6, 7, 5)
predicted = c(4, 4, 3.5, 7, 6.8, 4)
Metrics::rmse(actual, predicted) # with all the points
#### [1] 0.7404953 …Run Code Online (Sandbox Code Playgroud) 我有一个大的数值数据集(约700行,350,000列,作为R中的data.table读入)包含一些NA,我想尽快用列表示替换.我发现之前的帖子用NA代替NA,但是当我修改解决方案而不是输入列意味着时,我得到j,列号.似乎我必须遗漏一些明显的东西...关于如何计算列的任何建议意味着使用这种方法?
#original code
f_dowle3 = function(DT) {
for(j in seq_len(ncol((DT)))
set(DT,which(is.na(DT[[j]])),j,0)
}
#modified code
impute = function(DT) {
for(j in 2:ncol(DT))
set(DT,which(is.na(DT[[j]])),j,mean(DT[,j],na.rm = TRUE))
}
test_impute = fread("test_impute.csv")
test_impute
ID snp1 snp2 snp3 snp4
1: 1 2 1 1 0
2: 2 2 2 0 0
3: 3 2 NA 0 NA
4: 4 2 1 2 0
5: 5 2 NA 2 0
6: 6 2 1 1 0
7: 7 1 1 NA 0
8: 8 NA …Run Code Online (Sandbox Code Playgroud) 我有一个时间序列数据集,其中有一些缺失值。我想估算缺失值,但我不确定哪种方法最合适,例如包中的线性、样条或 stine imputeTS。
为了完整起见,我想测试一下我的数据是否是 MCAR、MAR、NMAR。我有一个合理的想法,它是 MCAR,但我有兴趣进行测试。
str(wideRawDF)
'data.frame': 1343 obs. of 13 variables:
$ Period.Start.Time: POSIXct, format: "2017-01-20 16:30:00" "2017-01-20 16:45:00" "2017-01-20 17:00:00" "2017-01-20 17:15:00" ...
$ DO0182U09A3 : num -102 -101 -101 -101 -101 ...
$ DO0182U09B3 : num -103.4 -102.8 -103.3 -95.9 -103 ...
$ DO0182U09C3 : num -103.9 -104.2 -103.9 -99.2 -104.1 ...
$ DO0182U21A1 : num -105 -105 -105 -104 -102 ...
$ DO0182U21A2 : num -105 -104 -105 -105 -105 ...
$ DO0182U21A3 : …Run Code Online (Sandbox Code Playgroud) 我想估算一个特征的平均值,但仅根据另一列中具有相同类别/标称值的其他示例计算平均值,我想知道使用 scikit-learn 的 Imputer 类是否可以实现这一点?这样只会更容易添加到管道中。
例如:
使用来自 kaggle 的泰坦尼克号数据集:来源
我将如何去计算每个的fare平均值pclass。其背后的想法是,不同阶层的人票价之间会有很大差异。
更新:在与一些人讨论后,我应该使用的短语是“估算班级内的平均值”。
我已经研究了下面Vivek的评论,当我有时间做我想做的事情时,我将构造一个通用管道函数:)我很清楚如何做到这一点,并将在完成后作为答案发布。
classification machine-learning mean scikit-learn imputation
在使用“ missforest”包在R中执行数据插补时,需要帮助来解决以下错误。
> imputed<- missForest(dummy, maxiter = 10, ntree = 100, variablewise = TRUE,
+ decreasing = TRUE, verbose = TRUE,
+ mtry = floor(sqrt(ncol(dummy))), replace = TRUE)
Error in sample.int(length(x), size, replace, prob) :
invalid first argument
Run Code Online (Sandbox Code Playgroud) 将鼠标(链式方程的多重方程)包更新到版本 >3 后,我的代码停止工作。我希望从乘法插补数据集的线性回归中检索估计的方差-协方差矩阵。在 2.46.0 版本中,可以使用pool函数轻松访问该数量(小鼠将其称为t ) 。在 mouse >3.0 版本中,池函数不再返回完整的方差-协方差矩阵,它仅返回方差-协方差矩阵的对角元素。
这是一个工作示例:
首先创建一些包含缺失值的数据集:
set.seed(243)
iris$Sepal.Length[sample(length(iris$Sepal.Length), size = 5)] <- NA
iris$Sepal.Width[sample(length(iris$Sepal.Width), size = 5)] <- NA
iris$Petal.Length[sample(length(iris$Petal.Length), size = 5)] <- NA
iris$Species[sample(length(iris$Species), size = 5)] <- NA
Run Code Online (Sandbox Code Playgroud)
第二次乘法估算缺失数据
iris.mi <- mice(iris, 5)
Run Code Online (Sandbox Code Playgroud)
第三,对每个乘法插补数据集执行线性回归,将结果存储在 mira 对象中
mira.out <- with(iris.mi, lm(Sepal.Width ~ Sepal.Length + Petal.Length + Petal.Width + Species))
Run Code Online (Sandbox Code Playgroud)
第四,使用鲁宾规则汇集这些分析的结果。这是通过小鼠中的池函数实现的。
pool.out <- pool(analyses)
Run Code Online (Sandbox Code Playgroud)
在 mouse 包的 2.46.0 版本中,可以通过输入来检索完整的方差协方差矩阵t
pool.out$t
Run Code Online (Sandbox Code Playgroud)
在 mouse 包的较新版本 (>3.0) 中, pool.out$t 对象不存在。我们所能做的就是通过输入来检索差异
pool.out$pooled
Run Code Online (Sandbox Code Playgroud)
并选择标记为t …
我正在研究如何使用多重插补结果。以下是我的理解,如有错误请指出。
假设您有一个包含缺失值的数据集,并且您想要进行回归分析。您可以对 m = 5 次执行多重插补,并且对于每个插补数据集(现在有 5 个插补数据集)运行回归分析,然后通过 Rubin 规则(或使用 R)“汇集”这些 m = 5 模型的系数估计值包“池”)。
我的问题是,在小鼠中你有一个函数complete(),并且手册说你可以使用 提取完整的数据集complete(object)。
但是如果我使用 mouse m = 5 次,那么使用是否仍然有意义complete()?complete()我会得到哪些插补结果?
另外,如果我只使用 m = 1 的小鼠,这有意义吗?谢谢。
imputation ×10
r ×7
missing-data ×2
python ×2
r-mice ×2
scikit-learn ×2
aggregation ×1
data.table ×1
dataframe ×1
imputets ×1
large-data ×1
mean ×1
na ×1
orange ×1
pyspark ×1
python-2.7 ×1
r-caret ×1
replace ×1
statistics ×1
updates ×1