Dataframe 有没有办法在Julia数据帧中快速收集分类特征?

Dataframe 有没有办法在Julia数据帧中快速收集分类特征?,dataframe,julia,categorical-data,Dataframe,Julia,Categorical Data,我将Julia 0.6.3与Dataframes.jl一起使用 我想知道是否有任何方法可以在Julia中轻松获得分类特征 对于大型数据集,手工输入所有内容是不可能的 我的解决方法是依赖字符串和通常较低的基数,但它不是傻瓜 到目前为止,我的解决方法是: cat_cols = [] for col in cols if contains(string(typeof(X_train[col])),"String") == true push!(cat_cols,col)

我将Julia 0.6.3与Dataframes.jl一起使用

我想知道是否有任何方法可以在Julia中轻松获得分类特征

对于大型数据集,手工输入所有内容是不可能的

我的解决方法是依赖字符串和通常较低的基数,但它不是傻瓜

到目前为止,我的解决方法是:

cat_cols = []
for col in cols
    if contains(string(typeof(X_train[col])),"String") == true
        push!(cat_cols,col)
    end
end
但它看起来有点难看,我没有捕捉到标签编码的值,因为它们是整数

我也可以尝试依赖低的唯一计数,但稀疏特征也会被采用

有什么想法吗?谢谢

如图所示,如果从外部源读取数据,则必须手动执行,并且没有解决方法

但是,如果您正在阅读其他人正确准备的
数据帧
,这很简单,因为分类值应为
CategoricalArray
类型,因此您可以按如下方式检查它

假设
df
是您的数据帧,则您可以执行以下任一操作:

isa.(collect(eachcol(df)), CategoricalArray)

或者(在这种情况下,您将得到一个
数据帧

另外,
CategoricalArray
允许您区分序数和标称分类值。提取此信息的方法之一可以是:

map(col -> isa(df[col], CategoricalArray) ?
           (isordered(df[col]) ? :ordered : :categorical) :
           :other, 1:size(df,2))

一般来说,在Julia中,尤其是在DataFrames.jl中,可以预期关于对象的重要元数据是由其类型提供的,因为在Julia中使用用户定义的类型是有效的<代码>分类数组就是这样一种类型。

特征是否分类取决于其含义,而不是样本中唯一值的数量或我认为选择的表示形式。我认为唯一正确的方法是阅读您的数据文档并找出它们的物理含义。我理解您的意思,我也同意您的看法,但对于匿名数据或大量功能,根本不可能通读所有内容或在每一步都具有可解释性。
map(col -> isa(col, CategoricalArray), eachcol(df))
map(col -> isa(df[col], CategoricalArray) ?
           (isordered(df[col]) ? :ordered : :categorical) :
           :other, 1:size(df,2))