装箱逻辑中的Panda.qcut

问题描述

我正在尝试对连续变量进行装箱的不同方法。我使用了两种方法-qcut和entropy_based_binning方法bin_sequence。为了测试,我创建了一个具有100个值的数据。我通过将前50条记录的值= 1,后几条记录的值= 2,几条记录的值5、12以及随后随机数的值设置为歪斜数据。

当我尝试以bin数量= 6运行它时,仅使用qcut方法创建了3个bin。从熊猫文档中,尚不清楚它如何处理偏斜数据。而且,关于基于熵的合并的信息非常有限。如果有人可以分享详细信息,将不胜感激。每种方法的优缺点

年龄 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 1个 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 12 12 12 12 12 12 12 12 12 5 5 5 5 5 5 5 5 20 20 20 20 20 20 20 25 26 27 93 50 54

解决方法

使用pd.qcut(age,q=6,duplicates='drop')时,它将对数组进行排序,并根据位置qcut()上的值创建bin边界。

在您的情况下,其中许多值是相等的。除非您通过调用df1 <- data.frame(a=c(1,2,3,4,5),b = c(1,1,4)) df2 <- data.frame(c=c(1,5,3),d=c(1,3)) df1: a b 1 1 2 1 3 2 4 3 5 4 df2: c d 1 1 1 1 2 2 2 2 3 3 4 4 5 5 5 5 4 4 3 3 明确告诉它“删除”重复值,否则您应该已经得到了警告。

对于基于熵的装箱,您需要一个类标签。您会获得带有基于年龄的边界的垃圾箱,以使每个垃圾箱中的类(理想情况下)尽可能统一。在您的示例中,我们只有年龄,因此不能使用基于熵的合并。

对于您的特定设置,我将使用df1[df1[,1] %in% df2[,1],] #Output a b 1 1 2 1 3 2 4 3 5 4 #Desired output a b 1 1 1 1 2 1 2 1 3 2 4 3 5 4 5 4 4 3 3 2 ,将垃圾箱的数量设置得足够高,告诉它放下重复的垃圾箱,然后查看从其中出来的垃圾箱。一个垃圾箱中将有很多数据(第一个垃圾箱),但这无济于事,因为我们的数据非常不对称。