numpy と一緒にすべての分析に pandas を使用したいのですが、データのプロットには Rpy2 を使用します。pandas データフレームを使用してすべての分析を行い、rpy2 を介して R の完全なプロットを使用してこれらをプロットしたいと考えています。py2 で、ipython を使用してプロットしています。これを行う正しい方法は何ですか?
私が試みるほとんどすべてのコマンドは失敗します。例えば:
- pandas DataFrame の 2 つの列の間の散布図をプロットしようとしています
df
。df
Rデータフレームの場合と同じように、x/y軸でラベルを使用したいと思います。これを行う方法はありますか?でやろうとするとr.plot
、この意味不明なプロットが表示されます。
In: r.plot(df.a, df.b) # df is pandas DataFrame
収量:
Out: rpy2.rinterface.NULL
プロットの結果:
ご覧のとおり、軸ラベルが台無しになっており、DataFrame から軸ラベルを適切に読み取っていません (X 軸は columna
でdf
、Y 軸は columnb
です)。
でヒストグラムを作成しようとすると
r.hist
、まったく機能せず、エラーが発生します。In: r.hist(df.a) Out: ... vectors.pyc in <genexpr>((x,)) 293 if l < 7: 294 s = '[' + \ --> 295 ', '.join((p_str(x, max_width = math.floor(52 / l)) for x in self[ : 8])) +\ 296 ']' 297 else: vectors.pyc in p_str(x, max_width) 287 res = x 288 else: --> 289 res = "%s..." % (str(x[ : (max_width - 3)])) 290 return res 291 TypeError: slice indices must be integers or None or have an __index__ method
そして、このプロットの結果:
エラーの意味はわかりますか?ここでも、軸はすべてめちゃくちゃで、意味不明なデータが散らばっています。
編集: このエラーは、ipython を使用している場合にのみ発生します。スクリプトからコマンドを実行すると、問題のあるプロットが生成されますが、少なくともエラーなしで実行されます。これらのコマンドを ipython から呼び出すのは何か問題があるに違いありません。
また、以下のポスターで推奨されているように、pandas DataFrame を R DataFrame に変換しようとしまし
df
たが、それもこのエラーで失敗します。com.convert_to_r_dataframe(mydf) # mydf is a pandas DataFrame ----> 1 com.convert_to_r_dataframe(mydf) in convert_to_r_dataframe(df, strings_as_factors) 275 # FIXME: This doesn't handle MultiIndex 276 --> 277 for column in df: 278 value = df[column] 279 value_type = value.dtype.type TypeError: iteration over non-sequence
これらの基本的なプロット機能を Pandas DataFrame (Pandas DataFrame のラベルから読み取ったプロットのラベルを使用) で動作させ、Pandas DF から R DF への変換を動作させるにはどうすればよいですか?
EDIT2:これはcsvファイル「test.txt」(http://pastebin.ca/2311928)の完全な例と@daleのコメントに答える私のコードです:
import rpy2
from rpy2.robjects import r
import rpy2.robjects.numpy2ri
import pandas.rpy.common as com
from rpy2.robjects.packages import importr
from rpy2.robjects.lib import grid
from rpy2.robjects.lib import ggplot2
rpy2.robjects.numpy2ri.activate()
from numpy import *
import scipy
# load up pandas df
import pandas
data = pandas.read_table("./test.txt")
# plotting a column fails
print "data.c2: ", data.c2
r.plot(data.c2)
# Conversion and then plotting also fails
r_df = com.convert_to_r_dataframe(data)
r.plot(r_df)
data.c2 は pandas df の列であるため、すべての意図と目的のために numpy 配列にする必要がありますが、「data.c2」の列をプロットする呼び出しは失敗します。私はactivate()
呼び出しを使用するので、この列をnumpy配列として処理してプロットすると思いました。
R データフレームへの変換後にデータフレームをプロットする 2 番目の呼び出しdata
も失敗します。何故ですか?test.txt
Rからデータフレームとしてロードすると、それがplot()
可能になり、データフレームがパンダからRに変換されたので、ここでも機能するはずです。
ipythonで試してみるとrmagic
、エラーにはなりませんが、何らかの理由でプロットウィンドウが起動しません。つまり、もしそうなら:
In [12]: X = np.array([0,1,2,3,4])
In [13]: Y = np.array([3,5,4,6,7])
In [14]: import rpy2
In [15]: from rpy2.robjects import r
In [16]: import rpy2.robjects.numpy2ri
In [17]: import pandas.rpy.common as com
In [18]: from rpy2.robjects.packages import importr
In [19]: from rpy2.robjects.lib import grid
In [20]: from rpy2.robjects.lib import ggplot2
In [21]: rpy2.robjects.numpy2ri.activate()
In [22]: from numpy import *
In [23]: import scipy
In [24]: r.assign("x", X)
Out[24]:
<Array - Python:0x592ad88 / R:0x6110850>
[ 0, 1, 2, 3, 4]
In [25]: r.assign("y", Y)
<Array - Python:0x592f5f0 / R:0x61109b8>
[ 3, 5, 4, 6, 7]
In [27]: %R plot(x,y)
エラーはありませんが、プロット ウィンドウもありません。rmagic
いずれにせよ、できればrpy2に頼らず、そのまま使い続けたいと思っています。
ありがとう。