Tôi muốn sử dụng gấu trúc cho tất cả các phân tích của tôi cùng với một chút nhưng sử dụng Rpy2 để vẽ dữ liệu của tôi. Tôi muốn làm tất cả các phân tích bằng cách sử dụng các khung dữ liệu gấu trúc và sau đó sử dụng âm mưu đầy đủ của R thông qua rpy2 để vẽ chúng. py2, và đang sử dụng ipython để vẽ. Cách chính xác để làm điều này là gì?Làm thế nào để sử dụng các khung dữ liệu gấu trúc và các mảng có khối lượng trong Rpy2?
Gần như tất cả các lệnh tôi cố gắng không thành công. Ví dụ:
- Tôi đang cố vẽ đồ thị giữa hai cột của một chú gấu trúc DataFrame
df
. Tôi muốn các nhãn củadf
được sử dụng trong trục x/y giống như sẽ được sử dụng nếu nó là một khung dữ liệu R. Có cách nào để làm việc này không? Khi tôi cố gắng làm điều đó vớir.plot
, tôi nhận được âm mưu này vô nghia:
In: r.plot(df.a, df.b) # df is pandas DataFrame
sản lượng:
Out: rpy2.rinterface.NULL
dẫn đến cốt truyện:
Khi bạn c nhìn thấy, các nhãn rìu bị rối tung lên và nó không đọc nhãn rìu từ DataFrame như nó nên (trục X là cột a
của df
và trục Y là cột b
).
Nếu tôi cố gắng để tạo ra một biểu đồ với
r.hist
, nó không hoạt động ở tất cả, năng suất các lỗi: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
Và kết quả là âm mưu này:
Bất kỳ ý tưởng nào về lỗi có nghĩa là gì? Và một lần nữa ở đây, các trục là tất cả các messed lên và rải rác với dữ liệu vô nghĩa.
EDIT: Lỗi này chỉ xảy ra khi sử dụng ipython. Khi tôi chạy lệnh từ một tập lệnh, nó vẫn tạo ra âm mưu có vấn đề, nhưng ít nhất chạy không có lỗi. Nó phải là một cái gì đó sai trái với các lệnh gọi từ ipython.
Tôi cũng đã cố gắng để chuyển đổi các gấu trúc DataFrame
df
một R DataFrame theo khuyến cáo của poster dưới đây, nhưng điều đó không quá với lỗi này: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
Làm thế nào tôi có thể nhận được những các tính năng vẽ sơ đồ cơ bản để làm việc trên Pandas DataFrame (với nhãn của các ô được đọc từ các nhãn của Pandas DataFrame), và cũng có thể chuyển đổi giữa một Pandas DF thành R DF để làm việc?
EDIT2: Đây là ví dụ hoàn chỉnh về tệp csv "test".txt"(http://pastebin.ca/2311928) và mã của tôi để trả lời @ bình luận dale của:
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)
Cuộc gọi để vẽ cột của 'data.c2' thất bại, mặc dù data.c2 là một cột của một df gấu trúc và do đó cho Tôi sử dụng cuộc gọi activate()
vì vậy tôi nghĩ rằng nó sẽ xử lý cột này như là một mảng numpy và âm mưu nó. Nếu tôi tải lên test.txt
từ R dưới dạng một khung dữ liệu, tôi có thể plot()
nó và vì khung dữ liệu của tôi đã được chuyển đổi từ gấu trúc thành R, có vẻ như nó cũng nên làm việc ở đây.
Khi tôi thử rmagic
trong ipython, nó không kích hoạt cửa sổ âm mưu vì lý do nào đó, mặc dù nó không lỗi. I E. nếu tôi làm:
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)
Không có lỗi, nhưng không có cửa sổ lô. Trong mọi trường hợp, tôi muốn dính vào rpy2 và không dựa vào rmagic
nếu có thể.
Cảm ơn.
bạn có thể xuất csv và nhập lại hoặc sử dụng rpy – locojay
@locojay: Làm thế nào để sử dụng rpy với khung dữ liệu gấu trúc? – user248237dfsf
hãy xem http://rpy.sourceforge.net/rpy/doc/rpy_html/DataFrame-class.html trong đó sử dụng ds python std ... có cách tiếp cận tương tự bằng cách sử dụng gấu trúc df – locojay