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

问题描述 投票:0回答:1

我正在使用 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

但这看起来有点难看,而且我没有捕获标签编码值,因为它们是整数。

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

有什么想法吗?

dataframe julia categorical-data
1个回答
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
就是此类类型之一。

© www.soinside.com 2019 - 2024. All rights reserved.