我正在将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
但是看起来有点丑陋,因为它们是整数,所以我无法捕获标签编码的值。
我也可以尝试依靠较少的唯一性计数,但随后也会采用稀疏功能。
有什么主意吗?谢谢!
答案 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
是此类类型之一。