統計パッケージRに、Pythonからアクセスするのに、rpyというモジュールがあるのを前に紹介しましたが、今回、Rに主成分分析をやらせて見ました。Rには、主成分分析をしてくれる関数が確か2つくらいありますが、今回はprcompを使っています。引数は、dataframeですが、2次元配列でもなんとかしてくれるのではないかと思い、強引にやってみるも・・・
>>> from rpy import *
>>> l = [[4,1],[5,2],[6,3]]
>>> r.prcomp(l)
Traceback (most recent call last):
File "<pyshell#13>", line 1, in -toplevel-
r.prcomp(l)
RException: 以下にエラーcolMeans(x, n, prod(dn), na.rm) :
'x' は数値でなければなりません
と怒られてしまいました。
rpyのマニュアルを見ると、ダウンロードしたrpyの中のexample/usefulフォルダに、dataframe.pyがあると書いてありますが、1.0-RC1を使っているから、見当たりません。仕方ないので、rpy-0.99.2.zipを持ってきて、中から、erobj.pyとdataframe.pyをC:\Python24\Lib\site-packagesに放り込みました。
あとは、マニュアル通りにやればよく、
>>> from dataframe import *
>>> class_table['data.frame'] = DataFrame
>>> set_default_mode(CLASS_CONVERSION)
>>> e = r.as_data_frame({'foo': [4,5,6], 'bar': [1,2,3]})
>>> e
Traceback (most recent call last):
File "<pyshell#8>", line 1, in -toplevel-
e
File "C:\Python24\lib\site-packages\dataframe.py", line 15, in __getattr__
return self.__dict__[attr]
KeyError: '__repr__'
>>> print e
foo bar
1 4 1
2 5 2
3 6 3
>>> r.prcomp(e)
{'x': [[-1.4142135623730951, 2.2204460492503131e-016], [0.0, 0.0], [1.4142135623730951, -2.2204460492503131e-016]], 'rotation': [[0.70710678118654768, 0.70710678118654746], [0.70710678118654746, -0.70710678118654768]], 'scale': False, 'sdev': [1.4142135623730947, 8.001412032943024e-017], 'center': {'foo': 5.0, 'bar': 2.0}}
>>> r.prcomp(e).get('x')
[[-1.4142135623730951, 2.2204460492503131e-016], [0.0, 0.0], [1.4142135623730951, -2.2204460492503131e-016]]
と、まあ、動いているように見えますが、Pythonでdataframe.__repr__を呼べないのが少し気になります。ま、いっか。
スポンサーサイト