我正在使用 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
,这很简单,因为分类值应该是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
就是此类类型之一。