Hướng dẫn dùng r tableby python

Một câu hỏi thường hay đặt ra bởi nhiều nhà khoa học dữ liệu, đặc biệt là những người mới trong lĩnh vực này đó là: Python hay R tốt hơn cho khoa học dữ liệu? Thực ra còn nhiều ngôn ngữ khác cho khoa học dữ liệu như là: Java, C, Scala, Matlab, Julia,…nhưng Python và R đang dẫn đầu trong phần lớn thế giới khoa học dữ liệu.

R vốn được thiết kế bởi các nhà thống kê và đã trở thành lựa chọn hàng đầu cho những ai bước vào lĩnh vực khoa học dữ liệu. Một trong những thế mạnh chính của R là số lượng khổng lồ các packages chuyên dụng và cộng đồng support vô cùng lớn. Tuy nhiên, độ phổ biến của nó gần đây đã giảm đi một chút.

Trong khi đó, Python là ngôn ngữ đa mục đích có thể sử dụng trong nhiều lĩnh vực khác nhau từ lập trình ứng dụng web đến viết game. Có thể thấy là hiện nay Python đang thách thức ngôi vị lâu đầu của R như là một ngôn ngữ chung cho các nhà khoa học dữ liệu.

Tuy nhiên các doanh nghiệp sẽ không ưu tiên ngôn ngữ nào khi xem xét các kỹ năng của một nhà khoa học dữ liệu, vì vậy các bạn phải biết cách linh hoạt trong việc sử dụng các ngôn ngữ này làm công cụ cho khoa học dữ liệu làm sao hiệu quả nhất.

Cả R và Python đều có sử dụng để giải quyết các bài toán tương tự nhau trong khoa học dữ liệu. Cả hai đều có những packages hoặc libraries để giải quyết những vấn đề trong phân tích dữ liệu như tiền xủ lý, ứng dụng machine learning cho dữ liệu. Cả hai đều là lựa chọn tốt cho nghiên cứu khả lặp - một kỹ năng đòi hỏi trong rất nhiều lĩnh vực khác nhau. Tuy nhiên hai ngôn ngữ này lại có những tính năng tuyệt vời và điểm mạnh riêng vì vậy chúng ta nên kết hợp chúng để tận dụng những lợi thế của nhau, chỗ nào tiện và mạnh cái gì thì dùng cái đó. Hình dưới đây mô tả tóm tắt những điểm nổi trội của hai ngôn ngữ này:

Hướng dẫn dùng r tableby python

Ở post này tôi sẽ giới thiệu với các bạn cách kết hợp hai ngôn ngữ này trong môi trường R bằng cách sử dụng package reticulate.

Trước hết để tiến hành làm việc với Python và R chúng ta cần cài đặt chúng:

  • Python: Nếu bạn muốn đơn giản hóa việc tạo môi trường khi thực hiện các dự án bằng Python, đặc biệt liên quan đến các lĩnh vực khoa học dữ liệu, AI, Data, … Anaconda sẽ là lựa chọn bạn nên cân nhắc. Bạn có thể tải và cài Anaconda tại đây
  • R: Để làm việc với R các bạn cần tải R và Rstudio. Tải và cài phiên bản R mới nhất tại đây. Tải và cài đặt RStudion tại đây

Để kết hợp R và Python trong môi trường R chúng ta cần cài R package reticulate bằng câu lệnh sau:

install.packages("reticulate")

Tuy nhiên cách cài đặt như các bạn vừa thực hiện ở trên là không khuyến khích. Nguyên nhân là một số gói của R để sử dụng được còn phụ thuộc vào một hoặc một số gói khác. Do vậy an toàn nhất là cài đặt với lựa chọn dependencies = TRUE với hàm ý rằng chúng ta sẽ cài đặt luôn tất cả các gói phụ thuộc:

install.packages("reticulate", dependencies = TRUE)

Package reticulate gồm các công cụ hỗ trợ tương tác giữa R và Python. Cụ thể package này giải quyết được những việc sau:

  • Gọi Python từ R bằng những phương pháp khác nhau: từ R Markdown, từ mã nguồn Python, import các Python modules, và sử dụng tương tác trực tiếp trên R session.
  • Chuyển đổi các đối tượng R và Python với nhau (ví dụ giữa các data frames R và Pandas, giữa các R matrices và NumPy arrays)
  • Liên kết linh hoạt giữa các phiên bản Python khác nhau bao gồm cả virtual environments và Conda environments.

Kêt hợp R và Python

Để có thể dùng Python trong môi trường R chúng ta cần nạp thư thư viện reticulate theo câu lệnh sau:

library(reticulate)

Để kiểm tra môi trường Python có trong máy, các bạn dùng câu lệnh sau:

conda_list()
##    name                                               python
## 1 r-env C:\\Users\\svcuo\\Anaconda3\\envs\\r-env\\python.exe

Dùng hàm use_python() cho phép bạn chỉ định rõ phiên bản Python cần thiết:

use_python("C:/Users/svcuo/Anaconda3/python.exe")

Sử dụng hàm use_virtualenv() và use_condaenv() cho phép bạn chỉ định phiên bản Python của bạn làm việc trong môi trường virtual hay là Conda:

use_virtualenv("myenv")
py_config()
## python:         C:/Users/svcuo/Anaconda3/python.exe
## libpython:      C:/Users/svcuo/Anaconda3/python36.dll
## pythonhome:     C:/Users/svcuo/Anaconda3
## version:        3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 14:00:49) [MSC v.1915 64 bit (AMD64)]
## Architecture:   64bit
## numpy:          C:/Users/svcuo/Anaconda3/Lib/site-packages/numpy
## numpy_version:  1.16.5
## 
## python versions found: 
##  C:/Users/svcuo/Anaconda3/python.exe
##  C:/Users/svcuo/AppData/Local/Programs/Python/Python38-32/python.exe
##  C:/Users/svcuo/Anaconda3/envs/r-env/python.exe

Ta có thể cài đặt bất kỳ python library nào trong R bằng cách dùng hàm py_install() như sau:

py_install("pandas")

Các cách sử dụng kết hợp Python và R trong môi trường R

1. Import các python modules

Sử dụng hàm import() cho phép bạn có thể gọi mọi python library và sử dụng trong R:

os <- import("os")
os$listdir(".")
 [1] ".RData"       ".Rhistory"    ".Rproj.user"  "assets"       "config"      
 [6] "config.toml"  "content"      "index.Rmd"    "myblog.Rproj" "public"      
[11] "resources"    "static"       "themes"     

2. Sourcing Python scripts

Bạn có thể nạp bất kỳ một Python scripts nào vào R sử dụng hàm source_python(). Ví dụ bạn có một Python script tên là flights.py có dạng:

import pandas as pd

def read_flights(file):
  flights = pd.read_csv(file)
  flights = flights[flights['dest'] == "ORD"]
  flights = flights[['carrier', 'dep_delay', 'arr_delay']]
  flights = flights.dropna()
  return flights

Và các bạn có thể nạp và thực thi nó trên R như sau:

source_python("RPython/flights.py")
flights <- read_flights("flights.csv")

library(ggplot2)
ggplot(flights, aes(carrier, arr_delay)) + geom_point() + geom_jitter()

3. Python REPL

Hàm repl_python() cho phép các bạn có thể làm việc trực tiếp với Python trên R session. Các đối tượng được tạo ra từ Python REPL có thể được truy cập từ R bằng cách sử dụng py$object. Ví dụ:

Hướng dẫn dùng r tableby python

Dùng lệnh exit để thoát python REPL

Chú ý: Trong Python code có thể sử dụng mọi đối tượng được tạo ra từ R bằng các sử dụng đối tượng r.object (ví dụ r.flights).

4. Sử dụng python trong R markdown

Package reticulate hỗ trợ Python engine cho R Markdown với những thuộc tính sau:

  • Chạy Python code chunks tích hợp trong R session( cho phép trao đổi các đối tượng với nhau)
  • Hiển thị Python output, bao gồm cả output từ matplotlib
  • Truy cập tới các đối tượng được tạo ra từ Python chunks và ngược lại từ R chunks (sử dụng py$object và r.object)

Chúng ta hãy cùng xem ví dụ kết hợp R và Python đơn giản sau:

Nạp dữ liệu vào Python:

# Python
import pandas as pd
dataset_url = 'https://raw.githubusercontent.com/svcuong/Datasets/master/pima-indians-diabetes.data.csv'

names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv(dataset_url, names = names)
print(data.head())
##    preg  plas  pres  skin  test  mass   pedi  age  class
## 0     6   148    72    35     0  33.6  0.627   50      1
## 1     1    85    66    29     0  26.6  0.351   31      0
## 2     8   183    64     0     0  23.3  0.672   32      1
## 3     1    89    66    23    94  28.1  0.167   21      0
## 4     0   137    40    35   168  43.1  2.288   33      1

Sau đó chuyển dữ liệu và thao tác với dữ liệu bằng R:

# R
table(py$data$preg)
## 
##   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  17 
## 111 135 103  75  68  57  50  45  38  28  24  11   9  10   2   1   1

Thực hiện data visualization trong R vơi base function boxplot():

# R
x <- py$data[,1:8]
y <- py$data[,9]

# Boxplot for first 4 attribute
names = c('preg', 'plas', 'pres', 'skin')
par(mfrow=c(1,4))
for(i in 1:4) {
boxplot(x[,i], main=names[i])
}

Hướng dẫn dùng r tableby python

Thực hiện data visualization trong R với ggplot2:

# R
library(ggplot2)
py$data$class <- factor(py$data$class)
ggplot(data = py$data,aes(x = preg)) +
  geom_histogram(binwidth = 0.5,aes(fill = class),position = "dodge") +
  ggtitle("Pregnancies Data Distribution") + ylab("class Counts") +
  theme_gray() +
  theme_update(plot.title = element_text(hjust = 0.5))

Hướng dẫn dùng r tableby python


Tham khảo:

R Interface to Python