Thư viện R Python

Bài đăng này ban đầu xuất hiện trên blog Yhat. Yhat là một công ty có trụ sở tại Brooklyn với mục tiêu là làm cho khoa học dữ liệu có thể áp dụng được cho các nhà phát triển, nhà khoa học dữ liệu và cả doanh nghiệp. Yhat cung cấp một nền tảng phần mềm để triển khai và quản lý các thuật toán dự đoán dưới dạng API REST, đồng thời loại bỏ các trở ngại kỹ thuật nhức nhối liên quan đến môi trường sản xuất như thử nghiệm, tạo phiên bản, mở rộng quy mô và bảo mật

Tại sao chuyển đổi?

 
Một trong những phần yêu thích của tôi về học máy trong Python là nó có lợi khi quan sát cộng đồng R và sau đó mô phỏng những phần tốt nhất của nó. Tôi rất tin tưởng rằng một ngôn ngữ chỉ hữu ích khi các thư viện của nó. Vì vậy, trong bài đăng này, tôi sẽ điểm qua một số gói quan trọng mà tôi sử dụng hầu như mỗi khi tôi làm việc với R và [các] đối tác của chúng trong Python

glm, knn, RandomForest, e1071 -> scikit-learning

 
Một điều vừa may vừa rủi trong R là các thuật toán học máy thường được phân đoạn theo gói. Có nghĩa là thay vì có một [hoặc một bộ] thư viện ML mà mỗi thư viện triển khai một số thuật toán chung, mỗi thuật toán sẽ có gói riêng. Thật tuyệt vì bạn có thể tìm thấy các triển khai thuật toán rất bí truyền, tiên tiến, nhưng nó có thể gây khó khăn cho việc sử dụng hàng ngày khi bạn có thể chuyển đổi giữa các thuật toán. Nỗi đau này là thứ mà Python's scikit-learn giải quyết rất tốt. scikit-learn cung cấp một bộ thuật toán ML chung trong cùng một API. Nó làm cho việc chuyển đổi giữa LogisticRegression và GradientBoostingMachines trở nên dễ dàng

định hình lại/định hình lại2, plyr/dplyr -> gấu trúc

 
Đây thực sự là chủ đề của một trong những bài viết đầu tiên của chúng tôi. pandas đã lấy những phần hay nhất của việc trộn dữ liệu trong R và biến nó thành một gói Python. Điều này bao gồm việc triển khai khung dữ liệu của chính nó cùng với các cách để sửa đổi và cơ cấu lại nó. Về cơ bản, nó lấy những phần hay nhất của reshape/_______19_______ và plyr/dplyr và đã Python hóa nó

ggplot2 -> ggplot + seaborn + hiệu ứng bokeh

 
Một điều mà R vẫn làm tốt hơn Python là vẽ đồ thị. Nương tay, R tốt hơn về mọi mặt. Mặc dù vậy, âm mưu Python đã trưởng thành mặc dù đó là một cộng đồng bị rạn nứt. Nếu bạn thích cú pháp kiểu ggplot, thì không cần tìm đâu xa hơn chính ggplot của Yhat. Nếu bạn đang theo đuổi những âm mưu siêu thống kê và kỹ thuật thì hãy tiếp cận với seaborn. Và nếu bạn đang tìm kiếm một số lô tương tác đẹp mắt, siêu bóng bẩy thì hãy thử bokeh

chuỗi -> không có gì

 
Thao tác chuỗi trong "cơ sở R" gần như không trực quan vì nó ngớ ngẩn. Bất cứ khi nào tôi làm việc với các chuỗi trong R, tôi sẽ làm 2 việc [theo thứ tự]

  • gật đầu cảm ơn New Zealand vì đã sản xuất Hadley Wickham
  • nhập khẩu scikit-learn0

Rất có nghĩa vụ, New Zealand

scikit-learn0 là một phao cứu sinh tuyệt đối. Nó được viết tốt, hoạt động hiệu quả [ít nhất là tôi nghĩ vậy] và dễ cài đặt [đừng bỏ qua mục cuối cùng này. nếu mọi người không thể cài đặt phần mềm của bạn, thì chẳng ích gì khi tạo ra nó]

Được rồi, vậy là xong scikit-learn0 độc thoại đánh giá cao. Vì vậy, tin tốt cho bạn là Python rất tuyệt vời để thao tác với chuỗi, bạn không thực sự cần một thư viện chuỗi. Nó có một thư viện biểu thức chính quy tích hợp tuyệt vời, scikit-learn3 và một siêu thư viện chuỗi tích hợp có tên thích hợp là scikit-learn4. Thật may mắn cho bạn, Python đi kèm với tất cả các loại pin liên quan đến chuỗi

RStudio -> Rodeo

 
Đối với nhiều người dùng, scikit-learn5 đồng nghĩa với R. Và tại sao không? . Về mặt lịch sử, không có nhiều tùy chọn có thể so sánh được với Python. Tất nhiên đây không còn là trường hợp. Chúng tôi đã phát hành phiên bản đầu tiên của Rodeo chỉ hơn một năm trước và phát hành phiên bản 2. 0 cho Windows, OSX và Linux khoảng một tháng trước

"Kể từ khi chúng tôi sử dụng RStudio, chúng tôi đã tìm kiếm một IDE giống như vậy cho Python. Chúng tôi đã xem qua các IDE như Sublime Text và Spyder, không cái nào phù hợp với sở thích của chúng tôi. Chúng tôi đã tìm kiếm và tìm thấy Rodeo và không thể hài lòng hơn với IDE. " -Stephen Hsu, Đại học California, Berkeley

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/

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

Gói dạng lưới cung cấp giao diện R cho các mô-đun, lớp và hàm Python . Ví dụ: mã này nhập mô-đun Python os và gọi một số chức năng bên trong nó. library[reticulate] os

Làm cách nào để cài đặt thư viện Python trong R?

Cài đặt và định cấu hình Python với RStudio .
Bước 1] Cài đặt phiên bản cơ sở của Python. .
Bước 2] Tạo môi trường Python trong dự án của bạn. .
Bước 3] Kích hoạt môi trường Python của bạn. .
Bước 4] Cài đặt các gói Python trong môi trường của bạn. .
Bước 5] Cài đặt và định cấu hình mạng lưới để sử dụng phiên bản Python của bạn

Bạn có thể chạy R bằng Python không?

Nhờ gói rpy2, Pythonistas có thể tận dụng công việc tuyệt vời đã được thực hiện bởi cộng đồng R. rpy2 cung cấp một giao diện cho phép bạn chạy R trong các quy trình Python . Người dùng có thể di chuyển giữa các ngôn ngữ và sử dụng tốt nhất cả hai ngôn ngữ lập trình.

Hàm R trong Python là gì?

r-functions là một thư viện nhỏ cho phép người dùng gọi các hàm R từ bên trong Python . Mỗi chức năng chạy trong một quy trình con R tạm thời sẽ thoát sau khi hoàn thành. Một phiên bản không đồng bộ được cung cấp để thực thi đồng thời.

Chủ Đề