Dataframe 有没有办法在Julia数据帧中快速收集分类特征?
我将Julia 0.6.3与Dataframes.jl一起使用 我想知道是否有任何方法可以在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)
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))