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

Cách nhập dữ liệu vào R: Hướng dẫn đầy đủ

Tìm hiểu cách nhập CSV, Excel, JSON, cơ sở dữ liệu SQL, XML và nhiều định dạng khác vào R bằng readr, readxl, haven, data.table và các gói phổ biến khác.
· 10 phút đọc

Khám phá cùng AI

Tải dữ liệu vào R đôi khi khá khó chịu. Hầu như mỗi loại tệp bạn muốn đưa vào R lại đòi hỏi một hàm riêng, và ngay cả khi vậy, bạn có thể bị rối bởi các đối số của hàm. Nói ngắn gọn, rất dễ bị nhầm lẫn đôi khi, dù bạn là người mới hay đã có kinh nghiệm với R.

Để đáp ứng nhu cầu đó, chúng tôi đã tạo một hướng dẫn toàn diện nhưng dễ theo dõi về cách nhập dữ liệu vào R, từ các tệp văn bản đơn giản đến các tệp SPSS và SAS nâng cao. Tiếp tục đọc để khám phá cách bạn có thể dễ dàng nhập tệp của mình vào R!

Để tự mình chạy dễ dàng toàn bộ mã ví dụ trong hướng dẫn này, bạn có thể tạo một sổ tay DataLab miễn phí với R được cài đặt sẵn và chứa tất cả mẫu mã. Để thực hành thêm về nhập dữ liệu vào R, hãy xem bài tập thực hành này trên DataCamp.

Bắt đầu nhập dữ liệu vào R

R là một công cụ thống kê linh hoạt. So với phần mềm khác như Microsoft Excel, R cho phép tải dữ liệu nhanh hơn, làm sạch dữ liệu tự động, và phân tích thống kê cũng như dự đoán chuyên sâu. Tất cả được thực hiện bằng cách dùng các gói R mã nguồn mở, và chúng ta sẽ học cách dùng chúng để nhập nhiều kiểu tập dữ liệu khác nhau. 

Chúng ta sẽ dùng DataLab để chạy các ví dụ mã. Môi trường này đi kèm các gói và môi trường R đã cài sẵn. Bạn không phải thiết lập gì và có thể bắt đầu viết mã trong vài giây. Đây là dịch vụ miễn phí và có sẵn nhiều tập dữ liệu. 

Nếu bạn thích làm việc cục bộ, hãy xem hướng dẫn cách cài đặt R trên Windows, Mac và Ubuntu.

Cài đặt các gói cần thiết

Sau khi mở sổ tay DataLab, bạn cần cài một vài gói không quá phổ biến nhưng cần thiết để tải tệp SAS, SPSS, Stata và Matlab. 

Bộ gói Tidyverse bao gồm nhiều gói cho phép bạn đọc tệp phẳng, làm sạch dữ liệu, thao tác và trực quan hóa dữ liệu, v.v.

Chúng ta có thể cài từng gói bằng hàm install.packages(). 

install.packages('tidyverse',dependency=T)

Ta cũng có thể cài nhiều gói cùng lúc bằng cách liệt kê tên gói trong hàm c(). Sau khi cài xong, bạn nạp chúng vào môi trường cục bộ bằng library(). Ở đây, tôi bọc library() trong suppressPackageStartupMessages() để đầu ra ngắn gọn hơn. 

install.packages(c('quantmod','ff','foreign','R.matlab'),dependency=T)
suppressPackageStartupMessages(library(tidyverse))

Bạn có thể thấy tôi đảm bảo cài đặt các phụ thuộc bằng cách dùng tham số dependency=T trong hàm install.packages().

Tóm tắt nhanh

  • Dùng readr::read_csv() cho tệp CSV và readxl::read_excel() cho tệp Excel; cả hai thuộc tidyverse

  • rjson::fromJSON() xử lý JSON, còn RSQLite và DBI kết nối tới cơ sở dữ liệu SQL

  • Gói haven đọc tệp SAS (.sas7bdat), SPSS (.sav) và Stata (.dta)

  • xml2 và rvest phân tích XML và trích xuất bảng HTML từ web

  • Với tệp lớn (trên 1 GB), data.table::fread() là lựa chọn nhanh nhất

Nhập dữ liệu vào R từ các kiểu dữ liệu thường dùng

Hướng dẫn này bao quát các tệp dữ liệu thường dùng như CSV, TXT, Excel, JSON, cơ sở dữ liệu và XML/HTML trong R. Tôi cũng đề cập các định dạng ít phổ biến hơn như SAS, SPSS, Stata, Matlab và tệp nhị phân, cùng cách trích xuất bảng HTML và dữ liệu XML từ web.  

Tham chiếu nhanh: hàm nhập theo loại tệp

Loại tệpGóiHàmKết quả
CSVreadrread_csv()tibble
CSVbase Rread.csv()data.frame
CSV (lớn)data.tablefread()data.table
TXTbase Rread.delim()data.frame
Excelreadxlread_excel()tibble
JSONrjsonfromJSON()list
SQLDBI + RSQLitedbGetQuery()data.frame
XMLxml2read_xml()xml_document
Bảng HTMLrvesthtml_table()tibble
SAShavenread_sas()tibble
SPSShavenread_sav()tibble
Statahavenread_dta()tibble
MatlabR.matlabreadMat()list
Parquetarrowread_parquet()tibble
Nhị phânbase RreadBin()vector

Nhập dữ liệu vào R từ tệp CSV và TXT

Hãy bắt đầu với hai định dạng dữ liệu phổ biến nhất, CSV và TXT.

Nhập tệp CSV trong R

Ở phần này, chúng ta sẽ đọc dữ liệu trong R bằng cách tải tệp CSV từ Hotel Booking Demand. Tập dữ liệu này gồm dữ liệu đặt phòng từ một khách sạn thành phố và một khu nghỉ dưỡng. Để nhập tệp CSV, chúng ta sẽ dùng hàm read_csv() của gói readr. Tương tự Pandas, bạn cần cung cấp vị trí tệp để xử lý và tải nó thành một dataframe. 

Bạn cũng có thể dùng các hàm read.csv() hoặc read.delim() từ gói utils để tải tệp CSV. 

data1 <- read_csv('data/hotel_bookings_clean.csv',show_col_types = FALSE)
head(data1, 5)

image23.png

Tương tự read_csv(), bạn cũng có thể dùng hàm read.table() để tải tệp. Hãy chắc chắn thêm dấu phân tách như dấu phẩy và header = 1. Khi đó, hàng đầu sẽ là tên cột thay vì V1, V2, ...

data2 <- read.table('data/hotel_bookings_clean.csv', sep=",", header = 1)
head(data2, 5)

image23.png

Nhập tệp TXT trong R

Ở phần này, chúng ta sẽ dùng tập dữ liệu Drake Lyrics để tải tệp văn bản. Tệp gồm lời bài hát của ca sĩ Drake. Ta có thể dùng hàm readLines() để tải tệp đơn giản, nhưng cần thêm bước để chuyển nó thành một dataframe. 

Import TXT File in R

Hình: Tác giả | Tệp văn bản

Chúng ta sẽ dùng hàm thay thế của read.table, là read.delim(), để tải tệp văn bản thành một dataframe R. Các hàm thay thế khác của read.table là read.csv, read.csv2 và read.delim2.

Lưu ý: mặc định, nó phân tách theo Tab (sep = "\t")

Tệp văn bản gồm lời bài hát và không có hàng tiêu đề. Để hiển thị toàn bộ lời trong một hàng, chúng ta cần đặt header = F. 

Bạn cũng có thể dùng các tham số khác để tùy biến dataframe, ví dụ tham số fill, đặt các trường trống được thêm vào những hàng có độ dài không đều.

Đọc tài liệu để biết mọi tham số trong các hàm thay thế của read.table.  

data3 <- read.delim('data/drake_lyrics.txt',header = F)
head(data3, 5)

Table 2.png

Nhập dữ liệu từ Excel vào R

Ở phần này, chúng ta sẽ dùng tập dữ liệu Tesla Deaths từ Kaggle để nhập từ Excel vào R. Tập dữ liệu nói về các vụ tai nạn xe Tesla thương tâm dẫn đến tử vong của tài xế, người ngồi trên xe, người đi xe đạp hoặc người đi bộ. 

Tập dữ liệu chứa một tệp CSV, và chúng ta sẽ dùng MS Excel để chuyển nó thành tệp Excel như minh họa bên dưới. 

Import Excel data into R

Hình: Tác giả

Chúng ta sẽ dùng hàm read_excel() của gói readxl để đọc một sheet từ tệp Excel. Gói này đi kèm tidyverse, nhưng không phải phần lõi, nên ta cần nạp gói trước khi dùng hàm. 

Hàm yêu cầu vị trí dữ liệu và số thứ tự sheet. Ta cũng có thể điều chỉnh dataframe bằng cách đọc mô tả các tham số khác trong tài liệu của read_excel.

library(readxl)
data4 <- read_excel("data/Tesla Deaths.xlsx", sheet = 1)
head(data4, 5)

Table 3.png

Nhập dữ liệu từ tệp JSON

Ở phần này, chúng ta sẽ tải JSON vào R bằng một tệp từ tập dữ liệu Drake Lyrics. Nó chứa lời bài hát, tiêu đề bài, tên album, URL và lượt xem của các bài hát Drake. 

Import JSON into R

Hình: Tác giả

Để tải tệp JSON, chúng ta sẽ nạp gói rjson và dùng fromJSON() để phân tích tệp JSON. 

library(rjson)
JsonData <- fromJSON(file = 'data/drake_data.json')
print(JsonData[1])

Đầu ra:

[[1]]
[[1]]$album
[1] "Certified Lover Boy"

[[1]]$lyrics_title
[1] "Certified Lover Boy* Lyrics"

[[1]]$lyrics_url
[1] "https://genius.com/Drake-certified-lover-boy-lyrics"

[[1]]$lyrics
[1] "Lyrics from CLB Merch\n\n[Verse]\nPut my feelings on ice\nAlways been a gem\nCertified lover boy, somehow still heartless\nHeart is only gettin' colder"

[[1]]$track_views
[1] "8.7K"

Để chuyển dữ liệu JSON thành một dataframe R, chúng ta sẽ dùng hàm base R as.data.frame(). 

data5 = as.data.frame(JsonData[1])
data5

Table 4.png

Nhập dữ liệu từ cơ sở dữ liệu bằng SQL trong R

Ở phần này, chúng ta sẽ dùng tập dữ liệu Mental Health in the Tech Industry từ Kaggle để tải cơ sở dữ liệu SQLite bằng R. Để trích xuất dữ liệu từ cơ sở dữ liệu bằng truy vấn SQL, ta sẽ dùng gói DBI và hàm SQLite để tạo kết nối. Bạn cũng có thể dùng cú pháp tương tự để tải dữ liệu từ các máy chủ SQL khác.  

Chúng ta sẽ nạp gói RSQLite và tải cơ sở dữ liệu bằng hàm dbConnect. 

Lưu ý: Bạn có thể dùng dbConnect để tải dữ liệu từ MySQL, PostgreSQL và các máy chủ SQL phổ biến khác.

Sau khi tải cơ sở dữ liệu, chúng ta sẽ hiển thị tên các bảng.

library(RSQLite)

conn <- dbConnect(RSQLite::SQLite(), "data/mental_health.sqlite")
dbListTables(conn) # 'Answer''Question''Survey'

Để chạy một truy vấn và hiển thị kết quả, chúng ta sẽ dùng hàm dbGetQuery(). Chỉ cần thêm đối tượng kết nối SQLite và câu lệnh SQL dạng chuỗi.  

dbGetQuery(conn, "SELECT * FROM Survey")

Table 5.png

Dùng SQL trong R cho bạn quyền kiểm soát tốt hơn việc nạp dữ liệu và phân tích.  

(data6 = dbGetQuery(conn, "SELECT * FROM Question  LIMIT 3"))

Table 6.png

Tìm hiểu thêm về chạy truy vấn SQL trong R bằng cách theo dõi hướng dẫn Cách thực thi truy vấn SQL trong Python và R. Bạn sẽ học cách tải cơ sở dữ liệu và dùng SQL với dplyr và ggplot. 

Nhập dữ liệu từ tệp XML và HTML

Tiếp theo, hãy xem cách nhập dữ liệu từ hai ngôn ngữ đánh dấu phổ biến: XML và HTML.

Nhập XML vào R

Ở phần này, chúng ta sẽ tải dữ liệu XML plant_catalog từ w3schools bằng gói xml2. 

Lưu ý: Bạn cũng có thể dùng hàm xmlTreeParse() của gói XML để tải dữ liệu.  

Tương tự hàm read_csv(), chúng ta có thể tải dữ liệu XML bằng cách cung cấp URL tới trang XML. Nó sẽ tải trang và phân tích dữ liệu XML.

library(xml2)

plant_xml <- read_xml('https://www.w3schools.com/xml/plant_catalog.xml')
plant_xml_parse <- xmlParse(plant_xml)

Sau đó, bạn có thể chuyển dữ liệu XML thành một dataframe R bằng hàm xmlToDataFrame(). 

1. Trích xuất tập nút từ dữ liệu XML. 

  • Đối số đầu tiên là doc, đối tượng thuộc lớp XMLInternalDocument. 

  • Đối số thứ hai là path, chuỗi biểu thức XPath cần đánh giá.

2. Thêm plant_node vào hàm xmlToDataFrame() và hiển thị 5 hàng đầu của dataframe R. 

plant_nodes= getNodeSet(plant_xml_parse, "//PLANT")

data9 <- xmlToDataFrame(nodes=plant_nodes)
head(data9,5)

Table 7.png

Nhập bảng HTML vào R

Phần này khá thú vị khi chúng ta sẽ trích xuất dữ liệu từ trang Wikipedia của đội tuyển bóng đá quốc gia Argentina để lấy bảng HTML và chuyển nó thành dataframe chỉ với vài dòng mã. 

World Cup Data.png

Hình từ Wikipedia

Để tải một bảng HTML, chúng ta sẽ dùng các gói XML và RCurl. Ta cung cấp URL Wikipedia cho hàm getURL() rồi đưa đối tượng đó vào hàm readHTMLTable() như bên dưới. 

Hàm sẽ trích xuất tất cả bảng HTML trên trang web, và chúng ta chỉ việc lần lượt xem để chọn bảng mình muốn. 

library(XML)
library(RCurl)

url <- getURL("https://en.wikipedia.org/wiki/Brazil_national_football_team")
tables <- readHTMLTable(url)
data7 <- tables[31]

data7$`NULL`

Table 8.png

Ngoài ra, bạn có thể dùng gói rvest để đọc HTML bằng URL, trích xuất tất cả bảng và hiển thị dưới dạng dataframe. 

  • read_html(URL) để trích xuất dữ liệu HTML từ trang web.

  • html_nodes(file, "table") để trích xuất các bảng từ dữ liệu HTML.

  • html_table(tables[25]) để chuyển bảng HTML thành dataframe. 

library(rvest)

url <- "https://en.wikipedia.org/wiki/Argentina_national_football_team"
file <- read_html(url)
tables <- html_nodes(file, "table")
data8 <- html_table(tables[25])

View(data8)

Table 9.png

Nếu bạn gặp vấn đề khi theo dõi hướng dẫn, bạn luôn có thể xem sổ tay DataLab với toàn bộ mã của hướng dẫn này. Chỉ cần tạo bản sao và bắt đầu luyện tập. 

Nhập dữ liệu vào R từ các kiểu dữ liệu khác

Các kiểu dữ liệu khác ít phổ biến hơn nhưng thiết yếu là từ phần mềm thống kê, Matlab và dữ liệu nhị phân. 

Nhập dữ liệu từ tệp SAS

Ở phần này, chúng ta sẽ dùng gói haven để nhập tệp SAS. Bạn có thể tải dữ liệu từ blog GeeksforGeeks. Gói haven cho phép bạn tải tệp SAS, SPSS và Stata vào R với rất ít mã. 

Cung cấp đường dẫn tệp cho hàm read_sas() để tải tệp .sas7bdat thành dataframe. Đọc tài liệu của hàm để tìm hiểu thêm.

library(haven)
 
data10 <- read_sas('data/lond_small.sas7bdat')

# display data
head(data10,5)

Table 10.png

Nhập dữ liệu từ tệp SPSS

Như đã biết, chúng ta cũng có thể dùng gói haven để tải tệp SPSS vào R. Bạn có thể tải dữ liệu từ blog GeeksforGeeks và dùng hàm read_sav() để tải tệp sav của SPSS. 

Hàm yêu cầu đường dẫn tệp dạng chuỗi và bạn có thể điều chỉnh dataframe bằng các đối số bổ sung như encoding, col_select và compress.

library(haven)
 
data11 <- read_sav("data/airline_passengers.sav")                       
head(data11,5)

Table 11.png

Bạn cũng có thể dùng gói foreign để tải tệp .sav thành dataframe bằng hàm read.spss(). Hàm chỉ cần hai đối số file và to.data.frame. Tìm hiểu thêm về các đối số khác trong tài liệu của hàm. 

Lưu ý: gói foreign cũng cho phép bạn tải các định dạng Minitab, S, SAS, SPSS, Stata, Systat, Weka và Octave.  

library("foreign")
 
data12 <- read.spss("data/airline_passengers.sav", to.data.frame = TRUE)
head(data12,5)

Table 12.png

Nhập tệp Stata vào R

Ở phần này, chúng ta sẽ dùng gói foreign để tải tệp Stata từ ucla.edu. 

Hàm read.dta đọc tệp nhị phân Stata từ phiên bản 5 đến 12 và chuyển chúng thành một dataframe R.

Lưu ý: Với tệp Stata từ phiên bản 13 trở đi, hãy dùng haven::read_dta(). Gói haven hỗ trợ mọi phiên bản Stata và trả về tibble.

library("foreign")

data13 <- read.dta("data/friendly.dta")
head(data13,5)

Table 13.png

Nhập tệp Matlab vào R

MATLAB khá nổi tiếng trong sinh viên và giới nghiên cứu. Gói R.matlab cho phép chúng ta tải tệp .mat để có thể phân tích dữ liệu và chạy mô phỏng trong R. 

Tải tệp MATLAB từ Kaggle để tự thử.

library(R.matlab)

data14 <- readMat("data/cross_dsads.mat")
head(data14$data.dsads)

Table 14.png

Nhập tệp nhị phân vào R

Ở phần này, trước tiên chúng ta sẽ tạo một tệp nhị phân rồi đọc tệp bằng hàm readBin().

Lưu ý: ví dụ mã là phiên bản đã chỉnh sửa từ bài Working with Binary Files in R Programming.

Trước tiên, cần tạo một dataframe với bốn cột và bốn hàng.

df = data.frame(
  "ID" = c(1, 2, 3, 4),
  "Name" = c("Abid", "Matt", "Sara", "Dean"),
  "Age" = c(34, 25, 27, 50),
  "Pin" = c(234512, 765345, 345678, 098567)
)

Sau đó, tạo một đối tượng kết nối bằng hàm file(). 

con = file("data/binary_data.dat", "wb")

Ghi tên cột vào tệp bằng hàm writeBin().

writeBin(colnames(df), con)

Ghi giá trị của từng cột vào tệp.

writeBin(c(df$ID, df$Name, df$Age, df$Pin), con)

Đóng kết nối sau khi ghi dữ liệu vào tệp.

close(con)

Để đọc tệp nhị phân, chúng ta phải tạo một kết nối đến tệp và dùng hàm readBin() để hiển thị dữ liệu dưới dạng số nguyên. 

Các đối số dùng trong hàm:

  • conn: một đối tượng kết nối.

  • what: một đối tượng có mode sẽ xác định kiểu vector cần đọc.

  • n: Số bản ghi cần đọc.

con = file("data/binary_data.dat", "rb")
data15_1 = readBin(con, integer(), n = 25)

print(data15_1)

Đầu ra:

[1] 1308640329    6647137    6645569    7235920    3276849    3407923
[7] 1684628033 1952533760 1632829556 1140875634    7233893  838874163
[13]  926023733    3159296  892613426  922759729  875771190  875757621
[19]  943142453  892877056

Bạn cũng có thể chuyển dữ liệu từ nhị phân sang chuỗi bằng cách thay integer() bằng character() trong đối số what. 

Đọc tài liệu hàm readBin() để biết thêm.

con = file("data/binary_data.dat", "rb")
data15_2 = readBin(con, character(), n = 25)

print(data15_2)

Đầu ra:

[1] "ID"     "Name"   "Age"    "Pin"    "1"      "2"      "3"      "4"    
[9] "Abid"   "Matt"   "Sara"   "Dean"   "34"     "25"     "27"     "50"   
[17] "234512" "765345" "345678" "98567" 

Tìm hiểu cách nhập tệp phẳng, phần mềm thống kê, cơ sở dữ liệu, hoặc dữ liệu trực tiếp từ web bằng khóa học Intermediate Importing Data in R của chúng tôi.

Nhập dữ liệu vào R bằng QuantMod

Quantmod là một khung mô hình tài chính và giao dịch cho R. Chúng ta sẽ dùng nó để tải về và nạp dữ liệu giao dịch mới nhất dưới dạng dataframe. 

Chúng ta sẽ dùng hàm getSymbols() của quantmod để tải dữ liệu lịch sử cổ phiếu Google bằng cách cung cấp ngày “from” và “to” cũng như “frequency”. Tìm hiểu thêm về gói quantmod bằng cách đọc tài liệu.

library(quantmod)

getSymbols("GOOGL",
          from = "2022/12/1",
          to = "2023/1/15",
          periodicity = "daily")
# 'GOOGL'

Dữ liệu được nạp vào đối tượng GOOGL, và chúng ta có thể xem 5 hàng đầu bằng hàm head(). 

head(GOOGL,5)

Đầu ra:

GOOGL.Open GOOGL.High GOOGL.Low GOOGL.Close GOOGL.Volume
2022-12-01     101.02     102.25    100.25      100.99     28687100
2022-12-02      99.05     100.77     98.90      100.44     21480700
2022-12-05      99.40     101.38     99.00       99.48     24405100
2022-12-06      99.30      99.78     96.42       96.98     24910700
2022-12-07      96.41      96.88     94.72       94.94     31045400
          GOOGL.Adjusted
2022-12-01         100.99
2022-12-02         100.44
2022-12-05          99.48
2022-12-06          96.98
2022-12-07          94.94

Nhập tập dữ liệu lớn vào R

Nhập tệp lớn khá khó. Bạn cần đảm bảo hàm được tối ưu cho lưu trữ tiết kiệm bộ nhớ và truy cập nhanh. 

Ở phần này, chúng ta sẽ xem các hàm phổ biến dùng để tải tệp CSV lớn hơn 1 GB. Chúng ta dùng tập dữ liệu US Accidents (2016 - 2021) từ Kaggle, có kích thước khoảng 1,15GB và 2.845.342 bản ghi. 

US Accidents.jpg

Nhập tập dữ liệu lớn vào R bằng read.table()

Chúng ta có thể tải trực tiếp tệp zip vào hàm utils read.table() bằng cách dùng hàm unz. Như vậy bạn không cần giải nén rồi mới tải tệp CSV. 

  1. Cung cấp cho unz đường dẫn tệp zip và tên tệp CSV bên trong zip.

  2. Sau đó, đưa đối tượng unz vào hàm read.table().

  3. Để tải nhanh hơn, chúng ta sẽ giới hạn nrows ở mức 10.000.

  4. Mặc định, nó phân tách theo khoảng trắng, nên hãy cung cấp đối số sep là dấu phẩy. 

file <- unz("data/US Accidents.zip", "US_Accidents_Dec21_updated.csv")

(data16 <- read.table(file, header=T, sep=",",nrow=10000))

Import a large dataset into R using read.table()

Nhập tập dữ liệu lớn vào R bằng read.csv()

Tương tự read.table(), chúng ta có thể dùng hàm read_csv() của readr để tải tệp CSV. Thay vì nrow, chúng ta sẽ dùng n_max để đọc số bản ghi giới hạn.  

Trong trường hợp này, chúng ta không giới hạn dữ liệu và để hàm tải toàn bộ dữ liệu. 

Lưu ý: tải toàn bộ dữ liệu mất gần một phút. Bạn có thể thay đổi số luồng để giảm thời gian tải. Đọc thêm trong tài liệu của hàm.

(data17 <- read_csv('data/US_Accidents_Dec21_updated.csv'))

Import a large dataset into R using read.csv()

Nhập tập dữ liệu lớn bằng gói ff

Chúng ta cũng có thể dùng gói ff để tối ưu thời gian tải và lưu trữ. Hàm read.table.ffdf() tải dữ liệu theo từng khối, giúp giảm thời gian tải.

Trước tiên, chúng ta sẽ giải nén tệp rồi đọc dữ liệu bằng hàm read.table.ffdf(). 

unzip('data/US Accidents.zip',exdir='data')

library(ff)

data18 <- read.table.ffdf(file="data/US_Accidents_Dec21_updated.csv",
                          nrows=10000,
                          header = TRUE,
                          sep = ',')
data18[1:5,1:25]

Table 17.png

Cuối cùng, chúng ta sẽ xem hàm thường dùng nhất fread() từ gói data.table để đọc 10.000 hàng đầu. Hàm có thể tự động nhận dạng định dạng tệp, nhưng trong một số trường hợp hiếm, bạn cần cung cấp đối số sep.

Để đi sâu hơn vào cú pháp và thao tác data.table, hãy xem Hướng dẫn data.table R của chúng tôi.

library(data.table)

(data19 <- fread("data/US_Accidents_Dec21_updated.csv",
              sep=',',
              nrows = 10000,
              na.strings = c("NA","N/A",""),
              stringsAsFactors=FALSE
              ))

image22.png

Nhập tệp Parquet với Arrow

Parquet là định dạng lưu trữ dạng cột ngày càng được dùng cho các tập dữ liệu phân tích lớn. Gói arrow đọc tệp Parquet vào R với hiệu năng cao và dùng ít bộ nhớ.

library(arrow)

parquet_data <- read_parquet("data/example.parquet")
head(parquet_data, 5)

Arrow cũng hỗ trợ đọc từ S3 và Google Cloud Storage. Với tập dữ liệu quá lớn để vừa bộ nhớ, hãy dùng open_dataset() để xử lý tệp theo từng khối mà không cần tải tất cả vào một lần.

Tham chiếu tập dữ liệu

Nếu bạn muốn tự thử các ví dụ mã, đây là danh sách toàn bộ tập dữ liệu dùng trong hướng dẫn.

  1. CSV: Hotel Booking Demand
  2. TXT: Drake Lyrics
  3. Excel: Tesla Deaths
  4. JSON: Drake Lyrics
  5. SQL DB: Mental Health in the Tech Industry
  6. XML: w3schools
  7. HTML: Argentina national football team
  8. SAS: SAS Files - GeeksforGeeks
  9. SPSS: SPSS Files - GeeksforGeeks
  10. Stata: Applied Regression Analysis by Fox Data Files
  11. Matlab: Cross-position activity recognition | Kaggle
  12. Tập dữ liệu lớn: US Accidents (2016 - 2021)

Kết luận

R xử lý nhiều định dạng dữ liệu ngay từ đầu, từ CSV và Excel đến cơ sở dữ liệu SQL và tệp phần mềm thống kê. Sau khi dữ liệu được nạp, bạn có thể chuyển sang làm sạch với khóa học Cleaning Data in R, rồi tới phân tích khám phá và trực quan hóa.

Trong hướng dẫn này, chúng ta đã học cách tải mọi loại tập dữ liệu bằng các gói R phổ biến để có khả năng lưu trữ và hiệu năng tốt hơn. Nếu bạn muốn bắt đầu sự nghiệp khoa học dữ liệu với R, hãy xem lộ trình nghề nghiệp Data Scientist with R. Lộ trình gồm 24 khóa học tương tác dạy bạn mọi thứ về lập trình R, phân tích thống kê, xử lý dữ liệu và phân tích dự đoán. Bạn cũng có thể tham gia kỳ thi chứng nhận sau khi hoàn thành lộ trình. 

Ngoài ra, hãy xem sổ tay Import Data Into R trên DataLab, đi kèm mã nguồn, đầu ra và kho dữ liệu. Bạn có thể tạo bản sao và tự học.

Câu hỏi thường gặp khi nhập dữ liệu vào R

FAQ: Sự khác nhau giữa read.csv() và read_csv() trong R là gì?

Sự khác nhau chính giữa read.csv() và read_csv() trong R là:

  1. Nguồn gốc:
    • read.csv() là hàm của base R.
    • read_csv() thuộc gói readr trong tidyverse.
  2. Hiệu năng:
    • read.csv() chậm hơn và kém tối ưu cho tập dữ liệu lớn.
    • read_csv() nhanh hơn và được thiết kế để đọc dữ liệu hiệu quả.
  3. Kết quả:
    • read.csv() trả về data frame của base R.
    • read_csv() trả về tibble, tích hợp tốt hơn với quy trình tidyverse

Cũng có một số khác biệt nhỏ nhưng quan trọng về xử lý chuỗi, báo lỗi và hỗ trợ dấu phân tách.

 

Làm sao nhập tệp Google Sheets vào R?

Dùng gói googlesheets4. Với sheet công khai, gọi gs4_deauth() trước để bỏ qua xác thực, sau đó dùng read_sheet() với URL Google Sheet hoặc ID sheet. Với sheet riêng tư, gs4_auth() sẽ nhắc bạn đăng nhập tài khoản Google. Cài gói bằng install.packages("googlesheets4").

Cách nhanh nhất để đọc một tệp CSV lớn trong R là gì?

data.table::fread() là lựa chọn nhanh nhất cho tệp CSV lớn trong R. Nó tự động nhận diện dấu phân tách cột, xử lý header và sử dụng đọc đa luồng. Với tệp trên 1 GB, fread() có thể nhanh hơn nhiều lần so với read.csv() hoặc read_csv(). Nếu tệp của bạn ở định dạng Parquet, arrow::read_parquet() còn nhanh hơn cho dữ liệu dạng cột.

Làm sao nhập dữ liệu từ REST API vào R?

Dùng gói httr2 để gửi yêu cầu HTTP và jsonlite::fromJSON() để phân tích phản hồi JSON. Quy trình điển hình như: resp <- request("https://api.example.com/data") |> req_perform(), sau đó data <- resp |> resp_body_json(). Với API cũ hơn, gói httr hoạt động tương tự với GET() và content().

Tôi có thể nhập tệp Parquet vào R không?

Có. Cài gói arrow bằng install.packages("arrow") và dùng arrow::read_parquet("file.parquet") để tải tệp Parquet. Arrow cũng hỗ trợ đọc từ lưu trữ đám mây (S3, GCS) và có thể xử lý tập dữ liệu lớn hơn bộ nhớ bằng open_dataset().

Chủ đề

Liên quan