Python
formula
patsy

patsyを使ってPythonでもformulaを使う

Rの場合

Rにはformulaオブジェクトというものがあり、特徴ベクトルの変換(dummy coding, 交互作用項の追加など)において非常に便利である。

# データフレームの生成
> df <- data.frame(x=c('a', 'b', 'c'), y=c(1, 2, 3))
> df
  x y
1 a 1
2 b 2
3 c 3
# model.matrixを使うとカテゴリ変数はdummy codingされる
> m <- model.matrix(as.formula(~0+x+y), data=df)
> m
  xa xb xc y
1  1  0  0 1
2  0  1  0 2
3  0  0  1 3
attr(,"assign")
[1] 1 1 1 2
attr(,"contrasts")
attr(,"contrasts")$x
[1] "contr.treatment"

# 交互作用項も追加できる
> m <- model.matrix(as.formula(~0+x+y+x*y), data=df)
> m
  xa xb xc y xb:y xc:y
1  1  0  0 1    0    0
2  0  1  0 2    2    0
3  0  0  1 3    0    3
attr(,"assign")
[1] 1 1 1 2 3 3
attr(,"contrasts")
attr(,"contrasts")$x
[1] "contr.treatment"

Pythonの場合

Pythonでもpatsyというライブラリを使うことでformulaを使用できる。

statsmodels内で使用されているのでstatsmodelsをpip installすると自動的に入る。

$ pip install statsmodels

もちろんpatsy単体でpip installしてもよい。

$ pip install patsy
>>> from patsy import dmatrix
>>> import pandas as pd
>>> df = pd.DataFrame({'x': ['a','b','c'],'y':[1,2,3]})
>>> df
   x  y
0  a  1
1  b  2
2  c  3
# カテゴリ変数はdummy codingされる
>>> m = dmatrix('~0+x+y', data=df)
>>> m
DesignMatrix with shape (3, 4)
x[a]  x[b]  x[c]  y
   1     0     0  1
   0     1     0  2
   0     0     1  3
Terms:
'x' (columns 0:3), 'y' (column 3)
# 交互作用項も追加できる
>>> m = dmatrix('~0+x+y+x*y', data=df)
>>> m
DesignMatrix with shape (3, 6)
x[a]  x[b]  x[c]  y  x[T.b]:y  x[T.c]:y
   1     0     0  1         0         0
   0     1     0  2         2         0
   0     0     1  3         0         3
Terms:
'x' (columns 0:3), 'y' (column 3), 'x:y' (columns 4:6)

参考

http://joemphilips.com/post/R_model_matrix/