我使用patsy来准备用于回归的分类数据,并希望从列名映射到DesignMatrix中的索引。我尝试使用column_name_indexes对象的DesignInfo属性,但是列名已经被修改以反映编码。
使用来自文档的数据的示例
>>> from patsy import demo_data, dmatrix
>>> data = demo_data("a", nlevels=3)
>>> data
{'a': ['a1', 'a2', 'a3', 'a1', 'a2', 'a3']}
>>> x = dmatrix("a", data)
>>> x
DesignMatrix with shape (6, 3)
Intercept a[T.a2] a[T.a3]
1 0 0
1 1 0
1 0 1
1 0 0
1 1 0
1 0 1
Terms:
'Intercept' (column 0)
'a' (columns 1:3)
>>> x.design_info.column_name_indexes
OrderedDict([('Intercept', 0), ('a[T.a2]', 1), ('a[T.a3]', 2)])我希望能够访问例如'a2'的列索引,方法是:
x.design_info.column_name_indexes['a2']当然,这会返回KeyError: 'a2'。因此,我必须自己构造修改后的键,以获得所需的列索引1。
x.design_info.column_name_indexes['a[T.a2]']是否有一种方法可以通过引用未修改的特性/列名(即'a2' )来访问列索引,而不是必须构造已修改的键,即'a[T.a2]'
发布于 2017-10-22 03:28:49
一般来说,在a2和设计矩阵列之间没有一对一的映射.您正在讨论的专栏已经比这更复杂了--这是a2和a1值之间的处理对比--而且事情可能比这更复杂(例如,考虑Helmert或多项式编码)。
如果您知道要查找与变量a2的a关联的治疗对比,则可以使用
def column_for_treatment(design_info, factor, value):
column_name = "{}[T.{}]".format(factor, value)
return design_info.column_name_indexes[colum_name]
column_for_treatment(x.design_info, "a", "a2")这看起来有点傻,但它应该有效,我不知道有什么更好的考虑上面提到的一般问题。
https://stackoverflow.com/questions/46845480
复制相似问题