R - Cơ sở dữ liệu

Dữ liệu là hệ thống cơ sở dữ liệu quan hệ được lưu trữ ở định dạng chuẩn hóa. Vì vậy, để thực hiện tính toán thống kê, chúng ta sẽ cần các truy vấn Sql rất nâng cao và phức tạp. Nhưng R có thể kết nối dễ dàng với nhiều cơ sở dữ liệu quan hệ như MySql, Oracle, máy chủ Sql, v.v. và lấy các bản ghi từ chúng dưới dạng khung dữ liệu. Khi dữ liệu có sẵn trong môi trường R, nó sẽ trở thành tập dữ liệu R bình thường và có thể được thao tác hoặc phân tích bằng cách sử dụng tất cả các gói và chức năng mạnh mẽ.

Trong hướng dẫn này, chúng tôi sẽ sử dụng MySql làm cơ sở dữ liệu tham chiếu của chúng tôi để kết nối với R.

Gói RMySQL

R có một gói tích hợp có tên "RMySQL" cung cấp kết nối gốc giữa với cơ sở dữ liệu MySql. Bạn có thể cài đặt gói này trong môi trường R bằng lệnh sau.

install.packages("RMySQL")

Kết nối R với MySql

Khi gói được cài đặt, chúng tôi tạo một đối tượng kết nối trong R để kết nối với cơ sở dữ liệu. Nó lấy tên người dùng, mật khẩu, tên cơ sở dữ liệu và tên máy chủ làm đầu vào.

# Create a connection Object to MySQL database.
# We will connect to the sampel database named "sakila" that comes with MySql installation.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila',
   host = 'localhost')

# List the tables available in this database.
 dbListTables(mysqlconnection)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau:

[1] "actor"                      "actor_info"                
 [3] "address"                    "category"                  
 [5] "city"                       "country"                   
 [7] "customer"                   "customer_list"             
 [9] "film"                       "film_actor"                
[11] "film_category"              "film_list"                 
[13] "film_text"                  "inventory"                 
[15] "language"                   "nicer_but_slower_film_list"
[17] "payment"                    "rental"                    
[19] "sales_by_film_category"     "sales_by_store"            
[21] "staff"                      "staff_list"                
[23] "store"

Truy vấn các bảng

Chúng ta có thể truy vấn các bảng cơ sở dữ liệu trong MySql bằng cách sử dụng hàm dbSendQuery(). Truy vấn được thực thi trong MySql và tập kết quả được trả về bằng cách sử dụng Rfetch()chức năng. Cuối cùng nó được lưu trữ dưới dạng khung dữ liệu trong R.

# Query the "actor" tables to get all the rows.
result = dbSendQuery(mysqlconnection, "select * from actor")

# Store the result in a R data frame object. n = 5 is used to fetch first 5 rows.
data.frame = fetch(result, n = 5)
print(data.fame)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau:

actor_id   first_name    last_name         last_update
1        1         PENELOPE      GUINESS           2006-02-15 04:34:33
2        2         NICK          WAHLBERG          2006-02-15 04:34:33
3        3         ED            CHASE             2006-02-15 04:34:33
4        4         JENNIFER      DAVIS             2006-02-15 04:34:33
5        5         JOHNNY        LOLLOBRIGIDA      2006-02-15 04:34:33

Truy vấn với mệnh đề bộ lọc

Chúng tôi có thể chuyển bất kỳ truy vấn chọn hợp lệ nào để lấy kết quả.

result = dbSendQuery(mysqlconnection, "select * from actor where last_name = 'TORN'")

# Fetch all the records(with n = -1) and store it as a data frame.
data.frame = fetch(result, n = -1)
print(data)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau:

actor_id    first_name     last_name         last_update
1        18         DAN            TORN              2006-02-15 04:34:33
2        94         KENNETH        TORN              2006-02-15 04:34:33
3       102         WALTER         TORN              2006-02-15 04:34:33

Cập nhật hàng trong bảng

Chúng ta có thể cập nhật các hàng trong bảng Mysql bằng cách chuyển truy vấn cập nhật đến hàm dbSendQuery ().

dbSendQuery(mysqlconnection, "update mtcars set disp = 168.5 where hp = 110")

Sau khi thực hiện đoạn mã trên, chúng ta có thể thấy bảng được cập nhật trong MySql Environment.

Chèn dữ liệu vào bảng

dbSendQuery(mysqlconnection,
   "insert into mtcars(row_names, mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb)
   values('New Mazda RX4 Wag', 21, 6, 168.5, 110, 3.9, 2.875, 17.02, 0, 1, 4, 4)"
)

Sau khi thực hiện đoạn mã trên, chúng ta có thể thấy hàng được chèn vào bảng trong Môi trường MySql.

Tạo bảng trong MySql

Chúng ta có thể tạo bảng trong MySql bằng cách sử dụng hàm dbWriteTable(). Nó ghi đè bảng nếu nó đã tồn tại và lấy một khung dữ liệu làm đầu vào.

# Create the connection object to the database where we want to create the table.
mysqlconnection = dbConnect(MySQL(), user = 'root', password = '', dbname = 'sakila', 
   host = 'localhost')

# Use the R data frame "mtcars" to create the table in MySql.
# All the rows of mtcars are taken inot MySql.
dbWriteTable(mysqlconnection, "mtcars", mtcars[, ], overwrite = TRUE)

Sau khi thực hiện đoạn mã trên, chúng ta có thể thấy bảng được tạo trong Môi trường MySql.

Bỏ bảng trong MySql

Chúng ta có thể thả các bảng trong cơ sở dữ liệu MySql truyền câu lệnh drop table vào dbSendQuery () giống như cách chúng ta sử dụng nó để truy vấn dữ liệu từ các bảng.

dbSendQuery(mysqlconnection, 'drop table if exists mtcars')

Sau khi thực hiện đoạn mã trên, chúng ta có thể thấy bảng bị xóa trong Môi trường MySql.