有什么方法可以在Julia DataFrames中快速收集分类特征吗?

时间:2018-07-13 01:26:37

标签: dataframe julia categorical-data

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

我想知道茱莉亚是否有任何方法可以轻松获得分类特征?

对于大型数据集,可能无法手动输入所有内容。

我的解决方法是依靠字符串,并且通常使用低基数,但这并不是万无一失的。

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

cat_cols = []
for col in cols
    if contains(string(typeof(X_train[col])),"String") == true
        push!(cat_cols,col)
    end
end

但是看起来有点丑陋,因为它们是整数,所以我无法捕获标签编码的值。

我也可以尝试依靠较少的唯一性计数,但随后也会采用稀疏功能。

有什么主意吗?谢谢!

1 个答案:

答案 0 :(得分:1)

张实唯所示,如果您要从外部源读取数据,则必须手动进行操作,并且没有解决方法。

但是,如果您正在阅读别人准备的DataFrame,这很简单,因为分类值应该是CategoricalArray类型,因此可以按以下方式进行检查。

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

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

map(col -> isa(df[col], CategoricalArray), 1:size(df,2))

或(在这种情况下,您将得到一个DataFrame

map(col -> isa(col, CategoricalArray), eachcol(df))

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

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

通常在Julia中,尤其是在DataFrames.jl中,可以期望关于对象的重要元数据由其类型给出,因为在Julia中使用用户定义的类型非常有效。 CategoricalArray是此类类型之一。