Chuyển đến nội dung chính

Nhập Dữ Liệu Vào R - Phần Hai

Hướng dẫn nhập dữ liệu vào R. Tập trung vào đọc dữ liệu từ các nguồn như phần mềm thống kê, cơ sở dữ liệu, web scraping và hơn thế nữa.
· 15 phút đọc

Khám phá cùng AI

Trong hướng dẫn tiếp nối của This R Data Import Tutorial Is Everything You Need-Part One, DataCamp tiếp tục đưa ra hướng dẫn toàn diện nhưng dễ theo để nhanh chóng nhập dữ liệu vào R, đi từ các tệp văn bản phẳng đơn giản đến các tệp nâng cao như SPSS và SAS.

Như nhiều độc giả đã tinh ý nhận ra ở bài đầu tiên, một số gói tuyệt vời để nhập dữ liệu vào R vẫn chưa được đề cập, và bài viết cũng chưa phân biệt rõ ràng giữa làm việc với bộ dữ liệu tiêu chuẩn và bộ dữ liệu lớn. Đó là lý do đây sẽ là trọng tâm của bài viết hôm nay.

Tiếp tục đọc để khám phá các cách khác và mới để nhập tệp cụ thể của bạn vào R, và đừng ngần ngại liên hệ nếu bạn có thêm câu hỏi hoặc phát hiện lỗi cần chỉnh sửa.

(Hãy thử khóa học tương tác này: Importing Data in R (Part 1), để làm việc với tệp CSV và Excel trong R.)

Đưa Dữ Liệu Từ Các Nguồn Phổ Biến Vào R

Trước hết, bài viết này sẽ đi sâu vào cách lấy dữ liệu từ các nguồn phổ biến, thường là dữ liệu dạng bảng tính, vào R. Cũng như bài trước, trọng tâm sẽ là đọc dữ liệu vào R khác với Excel hoặc các loại tệp khác.

Tiếp đó, dữ liệu từ các nguồn khác như phần mềm thống kê, cơ sở dữ liệu, web scraping, v.v. sẽ được bàn luận.

Nếu bạn muốn biết thêm về các bước có thể cần thực hiện trước khi nhập dữ liệu, hãy xem bài đầu tiên của chúng tôi, giải thích cách bạn có thể chuẩn bị dữ liệu và không gian làm việc trước khi đưa dữ liệu vào R.

Đọc Tệp Phẳng Vào R với scan()

Ngoài read.table(), đã được nhắc đến trong bài đầu của hướng dẫn nhập dữ liệu R, hàm scan() cũng có thể dùng khi xử lý dữ liệu lưu trong các tệp văn bản phân tách đơn giản. Khác với hàm read.table(), hàm scan() trả về một list hoặc vector, không phải dataframe.

Giả sử bạn có tài liệu .txt sau:

24 1991
21 1993
53 1962

Bạn có thể đọc dữ liệu (bạn có thể tải tại đây) với lệnh sau:

data <- scan("birth.txt")

Lưu ý tệp của bạn cũng có thể là một bộ dữ liệu trực tuyến. Khi đó, bạn chỉ cần truyền URL làm đối số đầu tiên của hàm scan().

Ngoài ra, bạn cũng có thể đọc dữ liệu vào một ma trận:

data <- matrix(scan("birth.txt"),
               nrow=2,
               byrow=TRUE)

Mẹo: nếu muốn làm kỹ, bạn có thể cần chỉ định thêm đối số để ma trận đúng như ý. Truy cập trang này để biết thêm về hàm matrix().

Bạn cũng có thể đọc các cột của tệp đầu vào vào các vector riêng:

data <- scan("age.txt",
             what = list(Age = 0,
                         Birthyear= 0),
             skip=1,
             quiet=TRUE)

Lưu ý cách bạn trước tiên truyền (đường dẫn tới) tệp cùng phần mở rộng làm đối số (tùy bạn đã đặt thư mục làm việc đến thư mục chứa bộ dữ liệu hay chưa), sau đó chỉ định kiểu dữ liệu cần đọc, có bỏ qua dòng đầu của tập dữ liệu hay không, ký tự phân tách trường là gì và có in dòng thông báo số lượng mục đã đọc hay không.

Nếu dữ liệu của bạn có thể chứa các kiểu khác, bạn nên tinh chỉnh hàm scan() một chút, như ví dụ này:

data <- scan("age.csv",
             what = list(Age = 0,
                         Name= "",
                         Birthyear= 0),
             skip=1,
             sep=";",
             quiet=TRUE)

Mẹo: bạn cũng có thể tự làm! Tải tệp văn bản dùng ở trên tại đây.

Và sau đó bạn cũng có thể đọc dữ liệu vào một data frame:

data <- data.frame(scan("age.csv",
                        what = list(Age = 0,
                                    Name = "",
                                    Birthyear= 0),
                        skip=1,
                        sep=";",
                        quiet=TRUE)

Mẹo: nhiều đối số mà hàm scan() chấp nhận giống với những gì bạn có thể dùng với hàm read.table(). Vì vậy luôn hữu ích khi xem tài liệu! Vào đây nếu bạn muốn đọc về các đối số của scan().

Nhớ rằng bạn có thể lấy thư mục làm việc hiện tại và đặt nó với các lệnh sau, tương ứng:

getwd()
setwd("<path to your folder>")

Đưa Dữ Liệu Cột Cố Định Vào R với read.fwf()

Để đọc một bảng “dữ liệu định dạng độ rộng cố định” vào data frame trong R, bạn có thể dùng hàm read.fwf() từ gói utils.

Bạn dùng hàm này khi tệp dữ liệu có các cột chứa khoảng trắng, hoặc các cột không có khoảng trắng để tách.

   Phys / 00 / 1:    M  abadda
   Math / 00 / 2:    F  bcdccb
   Lang / 00 / 3:    F  abcdab
   Chem / 00 / 4:    M  cdabaa

Ở đây, bạn biết rằng, ví dụ, giá trị môn học luôn nằm ở 7 ký tự đầu mỗi dòng và giá trị giới tính luôn ở vị trí 22, và điểm bắt đầu từ ký tự 25 đến 30.

Nếu muốn thử tải dữ liệu này vào R, bạn có thể dễ dàng tải tệp văn bản tại đây.

Bạn sẽ cần chạy lệnh sau để đưa dữ liệu trên vào R đúng cách:

read.fwf("scores.txt",
         widths= c(7,-14,1,-2,1,1,1,1,1,1),
         col.names=c("subject","sex","s1","s2","s3","s4","s5","s6"),
         strip.white=TRUE)

Lưu ý đối số widths đưa ra độ rộng của các trường cố định. Trong trường hợp này, bảy ký tự đầu trong tệp dành cho tên môn; Sau đó, bạn không muốn đọc 14 ký tự tiếp theo: bạn truyền -14. Tiếp nữa, bạn cần một ký tự để biểu diễn giới tính, nhưng không muốn hai ký tự theo sau, nên bạn truyền -2. Tất cả các ký tự tiếp theo cần được đọc vào các cột riêng biệt, nên bạn tách chúng bằng cách truyền 1,1,1,1,1,1 vào đối số. Tất nhiên, các giá trị này có thể và sẽ khác, tùy vào cột bạn muốn nhập.

Có một số đối số bổ sung bạn có thể truyền cho hàm read.fwf(). Nhấp vào đây để đọc thêm.

Lưu ý nếu bạn muốn tải một tệp bằng đặc tả định dạng kiểu Fortran, bạn có thể dùng hàm read.fortran():

data <- tempfile()
cat(file = data, "345678", "654321", sep = "\n")
read.fortran(data, c("F2.1","F2.0","I2"))

Như bạn thấy từ ví dụ nhỏ trên, bạn dùng các đặc tả định dạng kiểu Fortran làm đối số thứ hai cho hàm read.fortran(). Các đối số có thể truyền có dạng: “rFl.d”, “rDl.d”, “rXl”, “rAl” hoặc “rIl”, trong đó “l” là số cột, “d” là số chữ số thập phân, và “r” là số lần lặp. Trong trường hợp này, bạn thấy 2.1, 2.0 và 2 được liệt kê bằng hàm c(), nghĩa là bạn có ba cột với hai hàng. Ở cột đầu, có giá trị với một chữ số thập phân, cột thứ hai và thứ ba chứa giá trị không có chữ số thập phân.

Về kiểu giá trị mà các cột chứa, bạn có thể có:

  • “F” và “D” cho định dạng số;
  • “A” nếu bạn có giá trị ký tự;
  • “I” cho giá trị số nguyên;
  • Và “X” để chỉ các cột có thể bỏ qua.

Trong trường hợp này, cột thứ nhất và thứ hai sẽ chứa định dạng số, trong khi cột thứ ba chứa giá trị số nguyên.

Lưu ý mã lặp “r” và mã chữ số thập phân “d” luôn là tùy chọn. Mã độ dài “l” là bắt buộc ngoại trừ định dạng “X” khi có “r”.

Đưa (Google) Spreadsheets vào R

Bảng tính có thể được nhập vào R theo nhiều cách, như bạn có thể đã đọc trong hướng dẫn của chúng tôi về đọc và nhập tệp Excel vào R hoặc bài This R Data Import Tutorial Is Everything You Need đầu tiên. Phần này sẽ mở rộng và đi xa hơn nữa, bao gồm cả Google spreadsheets và tệp DIF!

Cuộn tiếp để tìm hiểu thêm cách nhập bảng tính của bạn vào R.

Nhập Bảng tính Excel vào R

Ngoài gói xlsx, bạn còn có một số lựa chọn khác để đọc bảng tính vào R:

1. Đọc Bảng tính Excel vào R Từ Clipboard

Nếu bạn đang mở một bảng tính, bạn có thể sao chép nội dung vào clipboard và nhanh chóng nhập vào R. Để làm việc này, bạn có thể dùng hàm readClipboard() hoặc read.table():

readClipboard() #Only on Windows
read.table(file="clipboard")`

Như bạn sẽ thấy nếu thử, cách đầu hoạt động tốt với dữ liệu vector, nhưng khá phức tạp nếu bạn có dữ liệu dạng bảng trong clipboard. Nếu muốn biết thêm về read.table(), bạn chắc chắn nên xem phần đầu của hướng dẫn nhập dữ liệu R hoặc hướng dẫn về đọc và nhập tệp Excel vào R.

2. Đọc Bảng tính Excel vào R Qua Gói RODBC

Cách thứ hai để đưa bảng tính Excel vào R là thông qua gói RODBC:

  • Một cách đầu để dùng gói này như sau:
library(RODBC)
connection <- odbcConnect("<DSN>")

Lưu ý đối số bạn truyền cho odbcConnect() thực chất là một DSN. Để có hướng dẫn đầy đủ về cách thiết lập DSN, cách thiết lập kết nối, v.v., hãy đến trang này với hướng dẫn chi tiết nhưng dễ tiếp cận!

  • Sau khi thiết lập kết nối, bạn cũng có thể dùng hàm sqlQuery() để lấy dữ liệu từ bảng tính .xls:
query <- "<SQL Query>"
data <- sqlQuery(connection,
                 query)
str(data)

Mẹo lớn: vào trang này để xem hướng dẫn chi tiết nhưng dễ tiếp cận!

Cuối phiên R, đừng quên đóng các kết nối:

odbcCloseAll()

Mẹo: Nếu muốn biết thêm về nhập bảng tính hoặc tệp Excel vào R, hãy xem hướng dẫn đầu tiên của chúng tôi về nhập dữ liệu vào R hoặc cân nhắc đọc hướng dẫn về đọc và nhập tệp Excel vào R, trong đó đề cập đến các gói readxl và XLConnect, cùng những gói khác.

Nhập Google Spreadsheets vào R

Gói googlesheets với hàm gs_read() cho phép bạn đọc Google spreadsheets vào R.

Bắt đầu bằng cách chạy dòng lệnh sau:

gs_ls()

Để trình duyệt khởi động và hoàn tất xác thực. Sau đó, nếu muốn đọc dữ liệu hoặc chỉnh sửa, bạn phải đăng ký nó. Bạn có thể làm bằng cách chỉ định bảng tính theo tiêu đề hoặc theo key:

data <- gs_title("<your spreadsheet>")
data <- gs_key()

Tiếp theo, bạn có thể đọc dữ liệu:

gs_read(data)

Đây chỉ là tổng quan ngắn về những gì bạn làm với gói googlesheets. Hãy đọc chi tiết tại đây, và nhớ xem thêm trang này.

Đọc Tệp Data Interchange Format (DIF) vào R

Dùng hàm read.DIF() để đưa tệp DIF của bạn vào R:

data <- read.DIF("<your spreadsheet>",
                 header=FALSE,
                 as.is = !stringsAsFactors)

Lưu ý bạn có thể chỉ định bảng tính có header hay không và bạn có muốn nhập dữ liệu “nguyên trạng” hay không, tức là có chuyển các biến ký tự thành factor hay không. Ở đây, bạn không muốn điều này nên đã đưa vào !stringsAsFactors.

Để biết thêm về hàm này hoặc các đối số của nó, truy cập trang này.

Đưa Tệp Excel vào R

Ngoài bảng tính, bạn cũng có thể quan tâm đến việc đưa các tệp Excel thực sự của mình vào R. Đừng tìm đâu xa, hãy tiếp tục đọc để biết cách làm!

Lưu ý bài viết này chỉ mở rộng những gì đã mô tả trong hướng dẫn về đọc và nhập tệp Excel vào R và bài This R Data Import Tutorial Is Everything You Need đầu tiên!

Nhập Tệp Excel vào R Với readxl

Dù gói này vẫn đang được phát triển tích cực, rất đáng để thử vì nó cung cấp cách khá dễ để đọc tệp Excel:

library(readxl)
read_excel("<path to file")

Nhớ rằng bạn có thể chỉ gõ tên tệp cùng phần mở rộng nếu thư mục chứa tệp nằm trong thư mục làm việc. Lấy và đặt thư mục làm việc qua các dòng sau:

getwd()
setwd("<Path to your folder>")

Lưu ý bạn có thể chỉ định sheet cần đọc, tên và kiểu cột, giá trị thiếu và số hàng cần bỏ qua trước khi đọc dữ liệu với các đối số sheet, col_names, col_types, na và skip, tương ứng. Đọc thêm tại đây.

Đọc Tệp Excel vào R Với openxlsx

Gói openxlsx cũng cung cấp cách đơn giản để đọc tệp Excel .xlsx vào R:

library(openxlsx)
read.xlsx("<path to your file>")

Nếu bạn muốn biết chi tiết hơn về gói này hoặc các đối số có thể truyền cho hàm read.xlsx(), chắc chắn hãy nhấp vào đây.

Mẹo: Nếu muốn biết thêm về nhập tệp Excel vào R, hãy xem hướng dẫn đầu của chúng tôi về “nhập dữ liệu vào R” hoặc cân nhắc đọc hướng dẫn chi tiết về đọc và nhập tệp Excel vào R, cũng đề cập đến gói XLConnect, trong số các gói khác.

Đưa OpenDocument Spreadsheets vào R

Dùng hàm read.ods() từ gói readODS để đọc OpenDocument spreadsheets vào R và đưa vào data frame:

library(readODS)
read.ods("<path to your file>",
         sheet = 1,
         formulaAsFormula = FALSE)

Lưu ý ngoài tệp bạn muốn đưa vào R, bạn có thể chỉ định sheet mong muốn và có thể hiển thị công thức dưới dạng công thức (ví dụ, “SUM(B1:B3)”) hoặc giá trị kết quả.

Nhập Tệp JavaScript Object Notation (JSON) vào R

Trong bài đầu về nhập dữ liệu vào R, gói rjson đã được nhắc đến để đưa tệp JSON vào R.

Tuy nhiên, còn có các gói khác bạn có thể dùng để nhập JSON vào R. Tiếp tục đọc để biết thêm!

Nhập Tệp JSON vào R với Gói jsonlite

Mới đây nằm trong top 25 gói R được tải nhiều nhất với 66952 lượt, gói jsonlite chắc chắn là một trong các gói ưa thích của người dùng R.

Bạn nhập tệp JSON với hàm fromJSON():

library(jsonlite)
data <- fromJSON("<Path to your JSON file>")

Để bắt đầu nhanh có giải thích rõ với gói jsonlite, xem tại đây.

Nhập Tệp JSON vào R với gói RJSONIO

Gói thứ ba, nổi tiếng để đưa JSON vào R là RJSONIO. Cũng như các gói jsonlite và jsonlite, bạn dùng hàm fromJSON():

library(RJSONIO)
data <- fromJSON("<Path to your JSON file")

Gói JSON Tốt Nhất?

Đã có nhiều bàn luận đáng kể về chủ đề này. Nếu muốn biết thêm, bạn nên xem các trang và bài viết sau:

  • trang này chủ yếu minh họa qua ví dụ mã để giúp bạn hiểu hơn về hành vi và hiệu năng của các gói JSON trong R.
  • Nhất định đọc bài blog này, cố gắng tìm ra gói nào xử lý JSON tốt nhất trong R.

Đưa Dữ Liệu Từ Phần Mềm Thống Kê vào R

Nếu dữ liệu của bạn không thực sự giống bảng tính và không phải tệp Excel hay JSON, có thể nó được tạo bởi một trong nhiều phần mềm thống kê.

Phần này sẽ cung cấp thêm cách đọc tệp SPSS, Stata hoặc SAS, đồng thời tổng quan việc nhập tệp đến từ S-plus và Epi Info. Chắc chắn hãy quay lại bài đầu của chúng tôi hoặc các liên kết bên dưới nếu bạn muốn biết thêm thông tin!

Nhập Tệp SPSS vào R

Thay vì dùng gói foreign, bạn cũng có thể dùng gói haven để đưa tệp SPSS vào R.

Nhớ đảm bảo cài đặt và kích hoạt trong không gian làm việc trước khi bắt đầu!

Gói haven cung cấp hàm read_spss() để đọc tệp SPSS vào R:

library(haven)
data <- read_spss("<path to your SPSS file>")

Nhập Tệp Stata vào R

Tương tự gói foreign, gói haven cũng cung cấp hàm để đọc tệp Stata vào R, là read_dta():

data <- read_dta("<path to your STATA file>")

Nhớ luôn cài gói nếu cần và kích hoạt trong không gian làm việc. Ví dụ, bạn có thể cài và kích hoạt gói haven với các lệnh sau:

install.packages("haven")
library(haven)

Nhập Tệp SAS vào R

Vì gói sas7bdat đã được trích dẫn ở bài trước, hướng dẫn tiếp nối này sẽ tập trung vào các cách khác để đọc tệp SAS:

1. Cách Nhập Tệp SAS XPORT vào R Với gói foreign

Gói foreign với hàm read.xport() cũng cho phép đưa tệp SAS XPORT vào R:

library(foreign)
data <- read.xport("<path to your SAS file>")

2. Cách Nhập Tệp SAS XPORT vào R Với Gói SASxport

Gói sasXPORT cũng cho phép đọc tệp SAS XPORT với hàm read.xport():

library(SASxport)
data <- read.xport("<path to your SAS file>")

3. Cách Nhập Tệp SAS vào R Với Gói haven

Cũng như các gói foreign và sas7bdat, gói haven cũng cho phép đọc tệp b7dat vào R với hàm read_sas():

library(haven)
data <- read_sas("<path to your SAS file>")

Đưa Tệp S-plus Vào R

Với các bộ dữ liệu S-plus cũ, cụ thể được tạo trên Windows phiên bản 3.x, 4.x hoặc 2000 hoặc Unix phiên bản 3.x với số nguyên 4 byte, bạn có thể dùng hàm read.S() từ gói foreign:

library(foreign)
data <- read.S("<Path to your file>")

Đọc Tệp Epi Info Vào R

Như bạn có thể đã đọc trong hướng dẫn trước hoặc trong bài này, gói foreign cung cấp nhiều hàm để đọc tệp cụ thể vào R, và Epi Info là một trong số đó. Bạn chỉ cần dùng hàm read.epiinfo() để đưa dữ liệu vào R:

library(foreign)
data <- read.epiinfo("<Path to your file>")

Để biết thêm về Epi Info, nhấp tại đây.

Đưa Dữ Liệu Từ Các Nguồn Khác Vào R

Bên cạnh các nguồn phổ biến và phần mềm thống kê, còn rất nhiều nguồn khác mà từ đó bạn có dữ liệu muốn đọc vào R.

Một vài được liệt kê dưới đây. Tiếp tục đọc!

Nhập Tệp MATLAB vào R

Bạn có thể dùng gói R.matlab với hàm readMat() để nhập tệp MATLAB vào R.

Bạn có thể truyền một chuỗi ký tự làm đối số đầu cho hàm này hoặc truyền một vector thô. Ở trường hợp đầu, đầu vào được hiểu là tên tệp, còn ở trường hợp sau, nó được xem là một kết nối nhị phân thô:

library(R.matlab)
data <- readMat("<Path to your file>")

Hàm readMat() sẽ trả về một cấu trúc list có tên chứa tất cả biến từ tệp MAT mà bạn đã nhập.

Đọc Tệp Octave vào R

Gói foreign lại xuất hiện! Dùng hàm read.octave() để nhập dữ liệu văn bản Octave vào R:

library(foreign)
data <- read.octave("<Path to your file>")

Đưa Dữ Liệu FitbitScraper vào R

Bạn có thể dùng gói fitbitScraper để lấy dữ liệu từ fitbit.

(Đối với những ai chưa quen: công ty cung cấp các sản phẩm như vòng theo dõi hoạt động và các thiết bị công nghệ khác đo dữ liệu cá nhân như số bước đi hoặc chất lượng giấc ngủ.)

Vào đây để xem hướng dẫn ngắn và thực tế về cách dùng gói fitbitScraper.

Nhập Dữ Liệu Quantmod vào R

Bạn có thể dùng gói này để trích xuất dữ liệu tài chính từ nguồn Internet với R. Hàm bạn dùng để lấy dữ liệu vào R là getSymbols(), như ví dụ sau:

library(quantmod)
data <- getSymbols("YHOO", src="google")

Lưu ý trước tiên bạn chỉ định một vector ký tự với tên mỗi mã cần tải. Trong trường hợp này là "YHOO". Sau đó, bạn định nghĩa phương thức nguồn. Các phương thức hiện có là yahoo, google, MySQL, FRED, csv, RData và oanda.

Tiếp theo, bạn chỉ định tham số tra cứu và lưu cho các phiên làm việc sau:

setSymbolLookup(YHOO='google',GOOG='yahoo')
saveSymbolLookup(file="mysymbols.rda")

Các phiên mới sau đó gọi

loadSymbolLookup(file="mysymbols.rda")
getSymbols(c("YHOO","GOOG"))

Nếu muốn thêm thông tin về các ứng dụng tài chính định lượng trong R, nhấp tại đây hoặc đến trang này để xem hướng dẫn chi tiết cho người mới bắt đầu làm việc với quantmod.

Đưa Tệp ARFF vào R

Dữ liệu từ tệp Attribute-Relation File Format (ARFF) của Weka có thể được đọc với hàm read.arff():

library(foreign)
data <- read.arff("<Path to your file>")

Để biết thêm về hàm này, vào trang này.

Lưu ý gói RWeka cũng cung cấp cùng hàm để nhập tệp ARFF. Xem tại đây nếu bạn muốn biết thêm!

Nhập Dữ Liệu Từ Cơ Sở Dữ Liệu vào R

Ngoài MonetDB.R, rmongodb và RMySQL, đã đề cập trong bài trước, bạn còn có các gói khác để kết nối với cơ sở dữ liệu trong R.

bạn còn có mongolite, RMongo, RODBC, ROracle, RPostgreSQL, RSQLite, RJDBC.

Để xem hướng dẫn về các gói này, hãy xem danh sách sau:

Lưu ý còn có gói giao diện cơ sở dữ liệu DBI cho phép giao tiếp giữa R và hệ quản trị cơ sở dữ liệu quan hệ. Để biết thêm, nhấp tại đây.

Một số giải thích về cách làm việc với gói này có thể tìm thấy tại đây.

Đưa Tệp Nhị Phân vào R

Tệp dữ liệu nhị phân chứa thông tin lưu theo nhóm các chữ số nhị phân. Mỗi chữ số nhị phân là 0 hoặc 1. Tám chữ số nhị phân nhóm lại tạo thành một byte. Bạn có thể đọc dữ liệu nhị phân với hàm readBin():

connection <- file("<path to your file>", "rb") #You open the connection as "reading binary"(rb)
data <- readBin(connection,
                what="numeric") #Mode of the vector to be read

Để xem ví dụ chi tiết hơn, vào trang này. Để biết thêm về hàm readBin(), nhấp tại đây.

Đọc Các Định Dạng Dữ Liệu Nhị Phân vào R

Các gói hdf5, h5r, rhdf5, RNetCDF, ncdf và ncdf4 cung cấp giao diện tới tệp dữ liệu HDF5 của NASA và netCDF của UCAR.

Đối với những bạn quan tâm hướng dẫn làm việc với tệp HDF5 hoặc netCDF trong R, hãy xem các tài nguyên sau:

  • Bạn có thể tìm thấy hướng dẫn tuyệt vời về làm việc với tệp HDF trong R, cũng dùng gói pathfinder tại đây;
  • Một hướng dẫn dễ tiếp cận cho người mới bắt đầu về netCDF trong R có thể tìm thấy trên trang này.

Đưa Tệp DBF vào R

DBF hay DataBase File là định dạng nền tảng của dBase. Bạn có thể đọc tệp DBF với gói foreign, cung cấp hàm read.dbf():

library(foreign)
data <- read.dbf("<Path to your file>")

Lưu ý nếu bạn dùng Windows, bạn cũng có thể dùng gói RODBC với hàm odbcConnectDbase() để đọc tệp DBF qua trình điều khiển dBase ODBC của Microsoft.

Nhập Bảng Chéo Phẳng vào R

Gói foreign cho phép đọc nhiều định dạng tệp; Bảng chéo “phẳng” cũng không ngoại lệ. Bạn có thể dùng hàm read.ftable() để thực hiện việc này:

library(foreign)
data <- read.ftable("<Path to your file>")

Nhớ rằng bảng chéo “phẳng” rất giống với bảng chéo “thông thường”: chúng chứa số đếm của từng tổ hợp mức của các biến (yếu tố) liên quan. Tuy nhiên, thông tin này được sắp xếp lại thành ma trận mà các hàng và cột tương ứng với các tổ hợp duy nhất của mức biến hàng và biến cột. Vì vậy, bảng chéo “phẳng” thường được ưa dùng để biểu diễn các bảng chéo nhiều chiều.

Đọc Tệp Hệ Thống Thông Tin Địa Lý (GIS) vào R

Bạn có thể dùng các gói rgdal và raster, trong số các gói khác, để đưa tệp GIS vào R.

Nếu bạn chưa chắc cách bắt đầu dùng gói rgdal, hãy xem bài blog hay này, giới thiệu bạn làm việc với dữ liệu không gian địa lý trong R.

Bạn cũng có thể xem hướng dẫn này, làm việc với cả rgdal và raster.

Nhập Bảng Thông Tin Phân Loại Tích Hợp (ITIS) vào R

Bạn có thể nhập các bảng ITIS với hàm read.table():

data <- read.table("<Path to your file>")

Để biết thêm về ITIS, nhấp tại đây.

Nhập Bộ Dữ Liệu Lớn vào R

Nhập bộ dữ liệu lớn thường gây nhiều bàn luận trong cộng đồng R. Ngoài các gói kết nối cơ sở dữ liệu, còn có một số gói khác nổi bật khi làm việc với big data.

Nhập Bộ Dữ Liệu Lớn vào R với Gói data.table

Được mô tả là “fast and friendly file finagler”, gói data.table phổ biến cực kỳ hữu ích và dễ dùng. Hàm fread() của nó dùng để nhập dữ liệu từ các tệp phân tách thông thường trực tiếp vào R, không rườm rà.

Lưu ý “thông thường” ở đây nghĩa là mỗi hàng dữ liệu cần có cùng số cột. Ví dụ:

  V1 V2 V3
1  1  6  a
2  2  7  b
3  3  8  c
4  4  9  d
5  5 10  e

Một trong những điểm tuyệt vời của hàm này là mọi điều khiển, thể hiện qua các đối số như sep, colClasses và nrows đều được tự động phát hiện. Ngoài ra, các kiểu bit64::integer64 cũng được phát hiện và đọc trực tiếp mà không cần đọc dưới dạng ký tự rồi mới chuyển đổi.

Nhớ rằng các kiểu bit64::integer64 là số nguyên 64 bit: các số này được lưu trong máy tính với độ dài 64 bit. Mặc định, chúng chỉ là 32 bit. Vì bit64::integer64 được phát hiện, hệ thống biết đó là số và không đọc dưới dạng ký tự rồi mới chuyển sang số nguyên.

Ví dụ về hàm fread():

library(data.table)
data <- fread("http://assets.datacamp.com/blog_assets/chol.txt")
data
##      AGE HEIGHT WEIGHT CHOL  SMOKE BLOOD  MORT
##   1:  20    176     77  195 nonsmo     b alive
##   2:  53    167     56  250 sigare     o  dead
##   3:  44    170     80  304 sigare     a  dead
##   4:  37    173     89  178 nonsmo     o alive
##   5:  26    170     71  206 sigare     o alive
##  ---
## 196:  35    174     57  222   pipe     a alive
## 197:  38    172     91  227 nonsmo     b alive
## 198:  26    170     60  167 sigare     a alive
## 199:  39    165     74  259 sigare     o alive
## 200:  49    178     81  275   pipe     b alive

Lưu ý rằng đọc dữ liệu với hàm fread() trả về một data table:

str(data)
## Classes 'data.table' and 'data.frame':   200 obs. of  7 variables:
##  $ AGE   : int  20 53 44 37 26 41 39 28 33 39 ...
##  $ HEIGHT: int  176 167 170 173 170 165 174 171 180 166 ...
##  $ WEIGHT: int  77 56 80 89 71 62 75 68 100 74 ...
##  $ CHOL  : int  195 250 304 178 206 284 232 152 209 150 ...
##  $ SMOKE : chr  "nonsmo" "sigare" "sigare" "nonsmo" ...
##  $ BLOOD : chr  "b" "o" "a" "o" ...
##  $ MORT  : chr  "alive" "dead" "dead" "alive" ...
##  - attr(*, ".internal.selfref")=<externalptr>

Điều này khác với read.table(), vốn tạo một data frame từ dữ liệu của bạn.

Bạn có thể tìm thêm về sự khác nhau giữa data frame và data table được giải thích tại đây. Tóm lại, điều quan trọng nhất là mọi data.table cũng là data.frame: data.table cũng là data.frame. Một data.table có thể được truyền đến bất kỳ gói nào chỉ chấp nhận data.frame và gói đó có thể dùng cú pháp [.data.frame trên data.table. Đọc thêm về data.table tại đây.

library(data.table)
data <- fread("http://assets.datacamp.com/blog_assets/chol.txt",
              sep=auto,
              nrows = -1,
              na.strings = c("NA","N/A",""),
              stringsAsFactors=FALSE
              )

Lưu ý đầu vào cũng có thể là tệp bạn muốn đọc, không nhất thiết phải là URL. Cũng lưu ý nhiều đối số giống với những gì bạn dùng trong read.table(), chẳng hạn.

Mẹo: muốn biết thêm về data.table? Có thể khóa học Data Analysis In R, The data.table Way sẽ quan tâm bạn! Với sự hướng dẫn của Matt Dowle và Arun Srinivasan, bạn sẽ nhanh chóng từ người mới thành chuyên gia data.table.

Đưa Bộ Dữ Liệu Lớn vào R với Gói ff

Gói ff cho phép “lưu trữ dữ liệu lớn tiết kiệm bộ nhớ trên đĩa và các hàm truy cập nhanh”. Đây là một trong các giải pháp thường xuất hiện khi bạn xem các thảo luận liên quan đến đọc dữ liệu lớn dưới dạng data frame, như tại đây.

Nếu bạn muốn nhập các tệp phẳng phân tách vào data frame ff, bạn có thể dùng các hàm read.table.ffdf(), read.csv.ffdf(), read.csv2.ffdf(), read.delim.ffdf() hoặc read.delim2.ffdf(), tương tự như hàm read.table() và các biến thể hay wrapper tiện dụng, được mô tả trong một bài trước:

bigdata <- read.table.ffdf(file="<Path to file>",
                           nrows=n)

Lưu ý đối số đầu tiên của bạn có thể là NULL (như trường hợp này) hoặc có thể chỉ định một đối tượng ffdf tùy chọn để nối thêm các bản ghi được đọc. Nếu muốn biết thêm, vui lòng vào đây. Sau đó, bạn đặt tên tệp để đọc dữ liệu bằng đối số file. Bạn cũng có thể chỉ định số hàng tối đa cần đọc với nrows (giống như với read.table()!).

Bạn cũng có thể đi xa hơn và chỉ định mã hóa tệp, các levels hoặc tên của một hàm được gọi để đọc từng khối:

library(ff)
bigdata <- read.table.ffdf(file="<Path to file>",
                           nrows=n,
                           fileEncoding="",
                           levels=NULL,
                           FUN="read.table")

Mẹo nhiều đối số khác bạn có thể thêm vào các hàm read.table.ffdf(), read.csv.ffdf(), read.csv2.ffdf(), read.delim.ffdf() hoặc read.delim2.ffdf() có thể tìm tại đây.

Nhập Bộ Dữ Liệu Lớn vào R với bigmemory

Một gói khác thường xuất hiện trong kết quả tìm kiếm cho các truy vấn liên quan đến bộ dữ liệu lớn trong R là gói bigmemory. Gói này cho phép bạn “quản lý ma trận khổng lồ với bộ nhớ dùng chung và tệp ánh xạ bộ nhớ”.

Lưu ý bạn không thể dùng gói này trên Windows: không có binary cho Windows.

library(bigmemory)
bigdata <- read.big.matrix(filename="<File name>",
                           sep="",
                           header=TRUE,
                           skip=2)

Như thường lệ, bạn đầu tiên đưa tên tệp vào hàm, rồi bắt đầu chỉ định các yếu tố khác, như ký tự phân tách, header hoặc số dòng bỏ qua trước khi đọc tệp với các đối số sep, header và skip tương ứng.

Lưu ý đây chỉ là một vài ví dụ! Bạn có thể truyền nhiều đối số hơn cho hàm read.big.matrix()! Hãy đọc tài liệu nếu muốn biết thêm.

Đọc Bộ Dữ Liệu Lớn vào R với Gói sqldf

Gói sqldf cũng là một trong những gói bạn có thể cân nhắc khi làm với bộ dữ liệu lớn. Gói này cho phép bạn “thực hiện các lệnh chọn SQL trên R”, và đặc biệt hàm read.csv.sql() rất hữu ích nếu bạn muốn đọc một tệp vào R, lọc bằng câu lệnh SQL. Khi đó, chỉ một phần dữ liệu được R xử lý:

library(sqldf)
bigdata <- read.csv.sql(file="<Path to your file>",
                        sql="select * from file where ...",
                        colClasses=c("character",
                                     rep("numeric",10)))

Lưu ý ví dụ trên rất giống với các hàm khác cho phép bạn nhập bộ dữ liệu lớn vào R, ngoại trừ việc đối số thứ hai truyền cho hàm read.csv.sql() là một câu lệnh SQL. Các bảng bạn tham chiếu trong truy vấn SQL nằm trong tệp mà bạn đề cập ở đối số file của read.csv.sql().

Mẹo: để biết thêm cách làm việc với sqldf, bạn có thể đến đây để xem video hướng dẫn hoặc đây để xem tổng quan bằng văn bản về các cơ bản.

Nhập Bộ Dữ Liệu Lớn vào R với Hàm read.table()

Bạn có thể dùng hàm “chuẩn” read.table() để nhập dữ liệu, nhưng có thể sẽ mất thời gian hơn so với các gói được thiết kế đặc biệt để làm việc tốt hơn với dữ liệu lớn. Để xem cách hàm read.table() hoạt động, hãy quay lại bài đầu của chúng tôi.

Để làm hàm này nhanh hơn một chút, bạn có thể tự tinh chỉnh để tối ưu hàm read.table(). Việc tinh chỉnh thực chất chỉ gồm thêm đối số vào hàm read.table() thông thường, như sau:

df <- read.table("<Path to your file>",
                 header = FALSE,
                 sep="",
                 quote = "",
                 na.strings = "EMPTY",
                 colClasses = c("character", "numeric", "factor"),
                 strip.white = TRUE,
                 comment.char="",
                 stringsAsFactors = FALSE,
                 nrows = n
                 )

Lưu ý rằng

  • trước tiên bạn truyền (đường dẫn tới) tệp, tùy vào việc bạn đã đặt thư mục làm việc đến thư mục chứa tệp hay chưa.
  • Sau đó, bạn dùng đối số header để chỉ tệp có chứa tên biến ở dòng đầu hay không. Ví dụ trên là không.
  • Ký tự phân tách trường được đặt là / với đối số sep; Điều này nghĩa là các giá trị trên mỗi dòng của tệp được phân tách bởi ký tự này.
  • Tiếp theo, bạn cũng có thể chọn bật/tắt trích dẫn. Ở đây, vì quote="", bạn tắt trích dẫn.
  • Bạn cũng định nghĩa rằng chuỗi “EMPTY” trong tập dữ liệu sẽ được hiểu là giá trị NA.
  • Tiếp đến, bạn định nghĩa lớp của các cột: ở đây, bạn chỉ định cột đầu là ký tự, cột thứ hai là số và cột cuối là factor.
  • Với strip.white bạn cho phép loại bỏ khoảng trắng đầu/cuối từ các trường ký tự không trích dẫn; Điều này chỉ áp dụng khi bạn dùng đối số sep!
  • Khi comment.char đặt là "", bạn tắt diễn giải chú thích.
  • Bạn không muốn ký tự bị chuyển thành factor! Đó là lý do bạn cũng đã định nghĩa colClasses. Bạn xác nhận điều này bằng cách đặt stringsAsFactors là FALSE.
    Mẹo: đối số này, cùng với colClasses và comment.char, có lẽ là một trong những đối số quan trọng hơn nếu bạn muốn nhập dữ liệu trơn tru!
  • Cuối cùng, bạn đặt số hàng tối đa cần đọc.

Mẹo: nếu bạn muốn có thêm thông tin về tất cả đối số có thể truyền cho hàm read.table(), bạn nên cân nhắc đọc bài của chúng tôi về đọc tệp Excel vào R.

Đưa Bộ Dữ Liệu Lớn vào R với Gói readr

Một trong những gói nhanh hơn bạn có thể dùng để nhập bộ dữ liệu lớn vào R là gói readr, cho phép bạn đọc dữ liệu văn bản dạng bảng, tương tự read.table. Tuy nhiên, gói readr cung cấp “một số hàm thay thế mang lại chức năng bổ sung và nhanh hơn nhiều” (xem tại đây).

df <- read_table("<Path to your file>",
                 col_names=TRUE)

Lưu ý gói readr cũng cung cấp các hàm read_csv(), read_csv2(), read_delim(), read_fwf(), read_tsv() và nhiều hàm khác chạy nhanh hơn các bản gốc! Chi tiết có thể tìm tại đây.

Mẹo: thêm thông tin về gói này có thể tìm trên trang GitHub này.

Một Vài Ghi Chú Về Xử Lý Big Data trong R

Để có thêm mẹo xử lý big data trong R, bạn nên xem thảo luận StackOverflow này, bàn về các gói nhưng cũng có mẹo như lưu dữ liệu ở định dạng nhị phân và dùng saveRDS/readRDS hoặc gói rhdf5 cho định dạng HDF5.

Lưu ý định dạng cuối này đã được đề cập ở trên và còn nhiều gói khác tồn tại ngoài những gói đã nêu. Ví dụ, các gói dùng để kết nối cơ sở dữ liệu như RODBC và MonetDB.R cũng có thể dễ dàng dùng để xử lý bộ dữ liệu lớn và gói dplyr cũng chứng tỏ giá trị khi bạn muốn làm việc trực tiếp với dữ liệu lưu trong nhiều loại cơ sở dữ liệu.

Mẹo: quan tâm đến thao tác dữ liệu trong R? Vậy khóa học tương tác về dplyr của chúng tôi có thể phù hợp với bạn! Với sự hướng dẫn của Garrett Grolemund, bạn sẽ học cách thực hiện các tác vụ thao tác dữ liệu nâng cao bằng dplyr.

Nhớ xem thêm bài viết thú vị này, kiểm thử hiệu năng tải của một số gói liệt kê ở trên!

Đưa Dữ Liệu Vào R với Gói rio

“Con dao đa năng cho Nhập/Xuất dữ liệu” này giúp việc nhập và xuất dữ liệu vào R dễ dàng hơn! Bạn có thể nhập hoặc xuất dữ liệu từ hầu như mọi định dạng tệp: khi cài đặt gói rio, bạn gom nhiều gói đọc dữ liệu riêng lẻ vào một. Khi đó, nếu muốn nhập hoặc xuất dữ liệu, bạn chỉ cần nhớ hai hàm: import() và export(): rio sẽ dựa vào các gói đọc dữ liệu riêng lẻ để suy ra cấu trúc dữ liệu từ phần mở rộng tệp, đọc nguyên gốc các nguồn dữ liệu trên web và đặt các mặc định hợp lý cho việc nhập và xuất.

Tóm lại, rio hỗ trợ một tập rộng các loại tệp thường dùng cho nhập và xuất.

Nhập tệp của bạn với rio theo cách sau:

library(rio)
data <- import("<Path to your file>")

Nếu bạn muốn xem chính xác các định dạng tệp được rio hỗ trợ, hãy truy cập trang này.

Lời Kết

Nếu bạn quan tâm học thêm về làm việc với big data trong R, nhớ xem các khóa học How To Work With Quandl in R và “Big Data Analysis With Revolution R Enterprise” tại DataCamp!

Chủ đề

Liên quan