Có thư viện R cho Python không?

Khi tôi còn là sinh viên đại học, các khóa học về thống kê (Phân tích sống còn, Phân tích đa biến, v.v.) được dạy bằng R. Tuy nhiên, vì tôi muốn học Khoa học dữ liệu, tôi chọn Python vì nó có vẻ “ma quái” đối với tôi

Bằng cách chỉ làm việc với Python, tôi tình cờ phát hiện ra nhu cầu triển khai một số kỹ thuật Thống kê như Thử nghiệm Grubb cho các giá trị ngoại lai, Markov Chain Monte Carlo cho mô phỏng hoặc Mạng Bayesian cho dữ liệu tổng hợp. Do đó, bài viết này nhằm mục đích hướng dẫn giới thiệu để kết hợp R trong quy trình làm việc của bạn với tư cách là Nhà khoa học dữ liệu Python. Trong trường hợp, bạn muốn tích hợp Python vào quy trình làm việc của mình với tư cách là Nhà khoa học dữ liệu R, gói dạng lưới rất hữu ích, hãy xem [1]

rpy2

Chúng tôi chọn khung rpy2, các tùy chọn khác là pyRserve hoặc pypeR, vì nó chạy R nhúng. Nói cách khác, nó cho phép giao tiếp giữa các đối tượng Python và R thông qua rpy2. cướp, sau này chúng ta sẽ xem một ví dụ cụ thể khi chuyển đổi DataFrame của pandas thành R DataFrame. Nếu bạn gặp khó khăn trong bất kỳ bước nào dưới đây, hãy đọc tài liệu chính thức hoặc tài liệu tham khảo

Chúng tôi sẽ đề cập đến ba bước thích hợp để bắt đầu làm việc với R trong Python. Cuối cùng, chúng tôi sẽ thực hiện một ví dụ thực tế và đề cập đến các chức năng khác mà gói rpy2 cho phép bạn xử lý

  1. Cài đặt các gói R
  2. Nhập các gói và chức năng từ R
  3. Chuyển đổi pandas DataFrame thành khung dữ liệu R và ngược lại
  4. Ví dụ thực tế (Chạy mạng Bayesian)

Nhưng trước tiên, chúng ta nên cài đặt gói rpy2

# Jupyter Notebook option
!pip install rpy2
# Terminal option
pip install rpy2

1. Cài đặt các gói R

Trong R, việc cài đặt các gói được thực hiện bằng cách tải xuống từ các máy nhân bản CRAN và sau đó cài đặt chúng cục bộ. Theo cách tương tự với các mô-đun Python, các gói có thể được cài đặt và sau đó được tải

# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))

Bằng cách chọn ind = 1 trong chosseCRANmirror , chúng tôi đảm bảo chuyển hướng tự động đến máy chủ gần vị trí của chúng tôi nhất. Bây giờ, chúng ta sẽ thực hiện bước hai

2. Nhập các gói và chức năng

Ở đây, chúng ta sẽ nhập các thư viện và chức năng cần thiết để thực hiện Mạng Bayesian trong ví dụ thực tế

# Import packages
from rpy2.robjects.packages import importr
base, bnlearn = importr('base'), importr('bnlearn')
# Import Functions
bn_fit, rbn = bnlearn.bn_fit, bnlearn.rbn
hpc, rsmax2, tabu = bnlearn.hpc, bnlearn.rsmax2, bnlearn.tabu

Để nhập bất kỳ chức năng nào, thật tiện lợi khi xem khóa 'rpy2' trong từ điển của mọi gói, ví dụ: để xem các chức năng có sẵn để nhập trên bnlearn, chúng tôi chạy

bnlearn.__dict__['_rpy2r']Output:
...
...
'bn_boot': 'bn.boot',
'bn_cv': 'bn.cv',
'bn_cv_algorithm': 'bn.cv.algorithm',
'bn_cv_structure': 'bn.cv.structure',
'bn_fit': 'bn.fit',
'bn_fit_backend': 'bn.fit.backend',
'bn_fit_backend_continuous': 'bn.fit.backend.continuous',
...
...

Để biết thêm thông tin về cách nhập chức năng, hãy kiểm tra [4] hoặc [5]

3. Chuyển đổi pandas DataFrame thành khung dữ liệu R và ngược lại

Cá nhân tôi nghĩ chức năng này cho phép bạn kết hợp khả năng mở rộng (trăn) với các công cụ thống kê (R). Như một ví dụ cá nhân, trong khi tôi đang sử dụng thư viện python Đa xử lý để thực hiện tính toán song song, tôi cũng muốn thử hàm auto.arima() từ thư viện dự báo R, bên cạnh các hàm của gói Python statsmodels, để dự báo. Vì vậy,

# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
0 là thứ cho phép một người hợp nhất những gì tốt nhất trong hai ngôn ngữ lập trình

# Allow conversion
import rpy2.robjects as ro
from rpy2.objects import pandas2ri
pandas2ri.activate()
# Convert to R dataframe
r_dt = ro.conversion.py2rpy(dt) # dt is a pd.DataFrame object
# Convert back to pandas DataFrame
pd_dt = ro.conversion.rpy2py(r_dt)

Khi kích hoạt chuyển đổi pandas (

# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
1), nhiều chuyển đổi từ R sang pandas sẽ được thực hiện tự động. Tuy nhiên, để chuyển đổi rõ ràng, chúng tôi gọi các hàm
# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
2 hoặc
# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
3

4. Ví dụ thực tế với Mạng Bayesian

Bên cạnh các phương pháp Monte-Carlo, Bayesian Networks là một tùy chọn để mô phỏng dữ liệu. Tuy nhiên, vì ngày nay không có thư viện nào cho tác vụ này trong Python. Vì vậy, tôi chọn gói bnlearn, cho phép tìm hiểu cấu trúc đồ họa của mạng Bayesian và thực hiện suy luận từ chúng

Trong ví dụ bên dưới, chúng tôi đang sử dụng thuật toán kết hợp (

# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
4) để tìm hiểu cấu trúc của mạng vì nó cho phép chúng tôi sử dụng bất kỳ sự kết hợp nào giữa các thuật toán dựa trên ràng buộc và dựa trên điểm số. Tuy nhiên, tùy thuộc vào bản chất của vấn đề mà bạn nên chọn heuristic phù hợp, để biết danh sách đầy đủ các thuật toán có sẵn, xem [7]. Sau khi mạng được học, chúng tôi mô phỏng n mẫu ngẫu nhiên từ mạng bayesian bằng hàm
# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
5. Cuối cùng, chúng tôi thực hiện cấu trúc thử ngoại trừ để xử lý một loại lỗi cụ thể

r_imputados = robjects.conversion.py2rpy(imputados)                

try:
# Learn structure of Network
structure = rsmax2(data, restrict = 'hpc', maximize = 'tabu')

fitted = bn_fit(structure, data = data, method = "mle")

# Generate n number of observations
r_sim = rbn(fitted, n = 10)

except rpy2.rinterface_lib.embedded.RRuntimeError:
print("Error while running R methods")

RunTimeError xảy ra khi chúng ta không muốn chức năng bị lỗi hoặc làm điều gì đó không mong muốn. Trong trường hợp này, chúng tôi phát hiện lỗi này vì đó là một cách để thông báo cho người dùng khi có sự cố xảy ra rằng đó không phải là một loại lỗi khác (đối với các trường hợp ngoại lệ hoàn chỉnh, hãy xem [9]). Như minh họa, mình bị lỗi không tìm thấy lai

# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
6. máy tính. lọc trong khi chạy hàm
# Choosing a CRAN Mirror
import rpy2.robjects.packages as rpackages
utils = rpackages.importr('utils')
utils.chooseCRANmirror(ind=1)
# Installing required packages
from rpy2.robjects.vectors import StrVector
packages = ('bnlearn',...,'other desired packages')
utils.install_packages(StrVector(packages))
4

Các chức năng khác

Bạn có thể làm được nhiều điều hơn nữa với giao diện cấp thấp và giao diện cấp cao rpy2. Chẳng hạn, bạn có thể gọi các hàm python bằng R, hãy xem cách tìm giá trị nhỏ nhất của Hàm Colville bốn chiều thông qua Phương thức liên hợp-Gradient

from rpy2.robjects.vectors import FloatVector
from rpy2.robjects.packages import importr
import rpy2.rinterface as ri
stats = importr('stats')

# Colville f: R^4 ---> R
def Colville(x):
x1, x2, x3, x4 = x[0], x[1], x[2], x[3]

return 100*(x1**2-x2)**2 + (x1-1)**2+(x3-1)**2 + 90*(x3**2-x4)**2 + 10.1*((x2-1)**2 + (x4-1)**2) + 19.8*(x2-1)*(x4-1)

# Expose function to R
Colville = ri.rternalize(Colville)

# Initial point
init_point = FloatVector((3, 3, 3, 3))

# Optimization Function
res = stats.optim(init_point, Colville, method = c("CG"))

Người giới thiệu

[1] Matt Brown. “Chạy mã Python từ R bằng cách sử dụng gói dạng lưới”. R-quán rượu. URL. https. //rstudio-pub-static. s3. amazonaws. com/407460_396f867ce3494d479fd700960879e22c. html

[2] Ajay Ohri. “Sử dụng Python và R cùng nhau. 3 cách tiếp cận chính”. KDnuggets. URL. https. //www. kdnuggets. com/2015/12/using-python-r-together. html

[3] Tài liệu chính thức của Rpy2. URL. https. //rpy2. github. io/doc/mới nhất/html/chỉ mục. html

[4]

[5] https. // stackoverflow. com/câu hỏi/49776568/calling-functions-from-within-r-packages-in-python-using-importr

[6] https. // stackoverflow. com/câu hỏi/47306899/how-do-i-catch-an-rpy2-rinterface-rruntimeerror-in-python

[7] Tài liệu chính thức của Bnlearn. http. //www. bnlearn. com/tài liệu/người/cấu trúc. học tập. html

[8] Daniel Oehm. “Ví dụ về mạng Bayesian với Gói bnlearn”. URL. http. // độ dốc giảm dần. com/bayesian-network-example-with-the-bnlearn-package/

Làm cách nào để nhập thư viện R bằng Python?

Gọi Thư viện R từ Python .
Nhập thư viện. Trước tiên, bạn nên cài đặt thư viện R tương ứng trong máy tính của mình cũng như chính R, nếu bạn chưa có. .
Chuyển đổi dữ liệu sang định dạng R. Tra cứu chữ ký của chức năng bạn muốn gọi và quyết định cách bạn sẽ chuyển đổi dữ liệu. .
Gọi các hàm R. .
Lấy dữ liệu ra khỏi R

R và Python có thể hoạt động cùng nhau không?

RStudio IDE có thể. Kết hợp R và Python trong một tập lệnh duy nhất . Nguồn và sử dụng các hàm Python trong R. Chỉnh sửa và chạy tập lệnh Python hoặc R.

Làm cách nào để chuyển đổi mã R trong Python?

Chuyển tập lệnh R sang Python .
nhập bản in sys (sys. .
3. 10. 5 (thẻ/v3. 10. 5. f377153, ngày 6 tháng 6 năm 2022, 16. 14. 13) [MSC v. 1929 64bit (AMD64)]
[t cho t trong văn bản nếu "antlr" trong t]