【问题标题】:How to determine column to be Quantitative or Categorical data?如何确定列是定量数据还是分类数据?
【发布时间】:2014-03-15 13:48:07
【问题描述】:

如果我有一个包含很多列的文件,数据都是数字,我如何知道特定列是分类数据还是定量数据?这类问题有研究领域吗?如果不是,有哪些启发式方法可以用来确定?

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

可能是分类数据

  • 对唯一值做个汇总,如果是some_threshold,则更有可能是分类数据。
  • 如果数据高度集中(低标准)
  • 如果唯一值是高度连续的,并且从 1 开始
  • 如果列中的所有值都具有固定长度(可能是 ID/日期)
  • 如果它在Benford's Law 处的 p 值非常小
  • 如果它在结果列的卡方检验中的 p 值非常小

可能是定量数据

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

其他

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

我正在使用 R,但问题不需要特定于 R。

【问题讨论】:

  • 对所有列使用unique。如果只有几个“级别”,它可能是一个分类变量。要立即执行此操作,请使用 apply(cars,2,unique)
  • 是的,这是我的第一件商品。我的问题是:你如何定义“很少”,它应该基于数据集的相对数量(例如n的0.1%),还是应该像一个绝对数量(
  • 不知道数据很难说...

标签: r machine-learning


【解决方案1】:

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

也许您是在暗示数据没有正确编码或标记,它们都是以数字形式输入的,其中一些确实是分类的。在那种情况下,我不知道如何确定。分类数据可以有小数位,也可以是负数。

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

如果您对第二种情况感兴趣,也许您应该在 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" ...

这是一种记录信息的方法:

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"

编辑

这是一种无需使用for-loop 即可为每一列记录class 的方法:

my.class <- sapply(my.data, class)

【讨论】:

  • 是的,假设数据编码正确;是的,可以使用浮点/负值对分类数据进行编码,但是,如果分类数据已转换为数字,是否有一些模式需要发现?
  • 我不知道有哪一种可以确定使用,建议您在 Stack Exchange 询问。那是一个统计网站。
  • 你的意思是stats交换;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2010-12-10
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
相关资源
最近更新 更多