如何确定列是定量数据还是分类数据?

muy*_*ueh 5 r machine-learning

如果我有一个包含许多列的文件,那么数据都是数字,我怎么知道特定的列是分类数据还是定量数据?是否有针对此类问题的研究领域?如果不是,可以使用哪些启发式方法来确定?

我能想到的一些启发式方法:

可能是分类数据

  • 汇总唯一值(如果<)some_threshold,则更有可能获得分类数据。
  • 如果数据高度集中(标准差低)
  • 如果唯一值是高度顺序的,并且从1开始
  • 如果列中的所有值都具有固定长度(可以是ID /日期)
  • 如果本福德定律的 p值很小
  • 如果在卡方检验中对结果列的p值非常小

可能是定量数据

  • 如果该列具有浮点数
  • 如果该列具有稀疏值
  • 如果列的值为负

其他

  • 也许定量数据更可能接近/接近定量数据(反之亦然)

我正在使用R,但是问题不必特定于R。

Mar*_*ler 2

这假设有人正确编码了数据。

也许您认为数据没有正确编码或标记,所有数据都是以数字形式输入的,其中一些确实是分类的。在这种情况下,我不知道如何才能确定地判断。分类数据可以有小数位并且可以为负数。

在这种情况下我会问自己的问题是我处理数据的方式有什么不同?

如果您对第二种情况感兴趣,也许您应该在 Stack Exchange 上提出您的问题。

my.data <- read.table(text = '
    aa     bb      cc     dd
    10    100    1000      1
    20    200    2000      2
    30    300    3000      3
    40    400    4000      4
    50    500    5000      5
    60    600    6000      6
', header = TRUE, colClasses = c('numeric', 'character', 'numeric', 'character'))

my.data

# one way
str(my.data)

'data.frame':   6 obs. of  4 variables:
 $ aa: num  10 20 30 40 50 60
 $ bb: chr  "100" "200" "300" "400" ...
 $ cc: num  1000 2000 3000 4000 5000 6000
 $ dd: chr  "1" "2" "3" "4" ...
Run Code Online (Sandbox Code Playgroud)

记录信息的方法如下:

my.class <- rep('empty', ncol(my.data))

for(i in 1:ncol(my.data)) {
    my.class[i] <- class(my.data[,i])
}

> my.class
[1] "numeric"   "character" "numeric"   "character"
Run Code Online (Sandbox Code Playgroud)

编辑

class这是一种不使用 来记录每列的方法for-loop

my.class <- sapply(my.data, class)
Run Code Online (Sandbox Code Playgroud)