patsy 中未修改的列名索引
Unmodified column name index in patsy
我正在使用 patsy 为回归准备分类数据,并希望将列名映射到它在 DesignMatrix
中的索引。我尝试使用 DesignInfo
对象的 column_name_indexes
属性,但列名已被修改以反映编码。
示例使用来自 docs 的数据:
>>> 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']
但当然 returns KeyError: 'a2'
。所以我必须自己构造修改后的键以获得所需的列索引 1
:
x.design_info.column_name_indexes['a[T.a2]']
有没有一种方法可以通过引用未修改的 feature/column 名称(即 'a2'
而不必构造修改后的键(即 'a[T.a2]'
)来访问列索引?
一般来说,a2
等分类值与设计矩阵列之间没有一对一的映射关系。您正在谈论的专栏已经比这更复杂了——它是 a2
和 a1
值之间的处理对比——而且事情可以任意地比这更复杂(例如考虑 Helmert 或多项式编码)。
如果您知道要查找与变量 a
的 a2
关联的治疗对比,那么您可以使用
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")
看起来有点傻,但应该可以,考虑到上面提到的一般问题,我不确定什么会更好。
我正在使用 patsy 为回归准备分类数据,并希望将列名映射到它在 DesignMatrix
中的索引。我尝试使用 DesignInfo
对象的 column_name_indexes
属性,但列名已被修改以反映编码。
示例使用来自 docs 的数据:
>>> 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']
但当然 returns KeyError: 'a2'
。所以我必须自己构造修改后的键以获得所需的列索引 1
:
x.design_info.column_name_indexes['a[T.a2]']
有没有一种方法可以通过引用未修改的 feature/column 名称(即 'a2'
而不必构造修改后的键(即 'a[T.a2]'
)来访问列索引?
一般来说,a2
等分类值与设计矩阵列之间没有一对一的映射关系。您正在谈论的专栏已经比这更复杂了——它是 a2
和 a1
值之间的处理对比——而且事情可以任意地比这更复杂(例如考虑 Helmert 或多项式编码)。
如果您知道要查找与变量 a
的 a2
关联的治疗对比,那么您可以使用
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")
看起来有点傻,但应该可以,考虑到上面提到的一般问题,我不确定什么会更好。