Trong thời đại số hóa ngày nay, phân tích dữ liệu đóng vai trò không thể thiếu và trở thành một yếu tố quyết định trong quá trình ra quyết định và định hướng chiến lược. Tuy nhiên, việc làm việc với dữ liệu đôi khi gặp phải nhiều khó khăn và thách thức, từ việc nhập liệu không chính xác, dữ liệu không đầy đủ, đến quá trình xử lý dữ liệu phức tạp và đồng nhất.
Trong bối cảnh đó, package Tibble trong ngôn ngữ lập trình R đã nhanh chóng trở thành một công cụ phổ biến và hữu ích trong việc quản lý và xử lý dữ liệu. Tibble cung cấp một cách tiếp cận hiện đại và linh hoạt hơn để làm việc với dữ liệu, mang lại những lợi ích đáng kể cho những người làm việc trong lĩnh vực phân tích dữ liệu. Trong phần giới thiệu này, em sẽ tìm hiểu về package Tibble, mục tiêu nghiên cứu của bài tiểu luận, và phạm vi nghiên cứu.
Trong thời đại số hóa và phát triển mạnh mẽ của dữ liệu, việc quản lý và xử lý dữ liệu đã trở thành một thách thức không nhỏ đối với các nhà nghiên cứu, chuyên gia phân tích dữ liệu và những người làm việc trong lĩnh vực tài chính, kinh doanh, y tế và nhiều lĩnh vực khác. Với số lượng dữ liệu ngày càng tăng, việc xử lý và khai thác tri thức từ dữ liệu trở thành một yêu cầu cấp bách để đưa ra quyết định thông minh và phát triển bền vững.
Em lựa chọn đề tài nghiên cứu về package Tibble trong ngôn ngữ lập trình R. Tibble là một công cụ mạnh mẽ và linh hoạt giúp người dùng quản lý và xử lý dữ liệu một cách hiệu quả. Đây là một bước tiến quan trọng trong việc cải thiện quy trình làm việc với dữ liệu và nâng cao hiệu suất phân tích dữ liệu.
Lý do em quyết định nghiên cứu về package Tibble :
Với nghiên cứu về package Tibble, em hy vọng đóng góp vào quy trình làm việc với dữ liệu và nâng cao hiệu suất phân tích dữ liệu. Điều này sẽ mang lại giá trị và tiềm năng cho các lĩnh vực như nghiên cứu khoa học và quản lý kinh doanh.
Mục tiêu của nghiên cứu này là khám phá và hiểu rõ hơn về package Tibble trong R và khả năng của nó trong việc quản lý và xử lý dữ liệu.
Cụ thể, em đề ra các mục tiêu sau :
Phạm vi nghiên cứu của bài tiểu luận về package Tibble trong phân tích dữ liệu sẽ tập trung vào các khía cạnh sau:
Với phạm vi nghiên cứu như trên, bài tiểu luận sẽ giúp định rõ tiềm năng và ứng dụng của package Tibble trong phân tích dữ liệu. Nó sẽ cung cấp kiến thức cần thiết để hiểu và sử dụng Tibble một cách hiệu quả trong quá trình xử lý, truy vấn và biểu đồ hóa dữ liệu.
Package Tibble trong ngôn ngữ lập trình R là một công cụ phân tích dữ liệu linh hoạt và tiện ích hơn so với data frame thông thường. Tibble giữ nguyên các đặc điểm cơ bản của data frame, nhưng cải thiện chúng bằng cách thêm tính năng mạnh mẽ. Nó giúp xử lý dữ liệu thiếu và metadata dễ dàng hơn, tương thích với các gói phân tích dữ liệu khác trong R. Tibble cung cấp một cú pháp đơn giản và tránh các lỗi phổ biến khi làm việc với data frame.
Trong bài tiểu luận này, em sẽ tìm hiểu các tính năng chính của Tibble như cấu trúc dữ liệu linh hoạt, xử lý dữ liệu thiếu và metadata, tích hợp với các gói phân tích dữ liệu khác. Ngoài ra,chúng ta sẽ khám phá ứng dụng Tibble trong xử lý, truy vấn và biến đổi dữ liệu, tạo biểu đồ. Đánh giá ưu điểm, hạn chế và tiềm năng của Tibble cùng đề xuất hướng phát triển và nghiên cứu tiếp theo cho Tibble.
Tibble đem lại nhiều lợi ích và tiềm năng quan trọng trong phân tích dữ liệu:
Tóm lại, Tibble mang lại lợi ích và tiềm năng quan trọng trong phân tích dữ liệu nhờ vào cấu trúc linh hoạt, khả năng xử lý dữ liệu thiếu và thông tin metadata, khả năng tích hợp mượt mà với các gói phân tích khác, cùng khả năng xử lý dữ liệu nhanh chóng và linh hoạt.
Tibble cung cấp một cấu trúc dữ liệu linh hoạt và tiện ích, cho phép lưu trữ và làm việc với dữ liệu theo dạng bảng, với các cột và hàng có tên. Dưới đây là một số tính năng chính của cấu trúc dữ liệu tibble:
Ví dụ:
library(tibble)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Tạo một tibble với thông tin về sinh viên
sinhvien <- tibble(id = c(1, 2, 3, 4, 5, 6),ten = c("Linh", "Lan", "Long", "Phụng", "Quy", "Nguyên"),tuoi = c(20, 19, 21, 20, 22, 18),major = c("Tài chính", "Marketing", "Kế toán", "Ngôn ngữ Anh", "Quản trị kinh doanh", "Toán tài chính"),gpa = c(3.5, 3.2, 3.8, 3.6, 3.4, 3.2))
# Truy cập và thao tác dữ liệu dễ dàng
tensinhvien <- sinhvien$ten
sinhvien_b <- sinhvien %>%filter(tuoi >= 19) %>% select(ten, major)
# Tính toán các thống kê tổng hợp
tinhtoan_gpa <- mean(sinhvien$gpa)
# Thêm cột mới vào tibble
themcot <- sinhvien %>%mutate(grade = ifelse(gpa >= 3.5, "A","B"))
Xem kết quả
print(tensinhvien)
## [1] "Linh" "Lan" "Long" "Phụng" "Quy" "Nguyên"
print(sinhvien_b)
## # A tibble: 5 × 2
## ten major
## <chr> <chr>
## 1 Linh Tài chính
## 2 Lan Marketing
## 3 Long Kế toán
## 4 Phụng Ngôn ngữ Anh
## 5 Quy Quản trị kinh doanh
print(tinhtoan_gpa)
## [1] 3.45
print(themcot)
## # A tibble: 6 × 6
## id ten tuoi major gpa grade
## <dbl> <chr> <dbl> <chr> <dbl> <chr>
## 1 1 Linh 20 Tài chính 3.5 A
## 2 2 Lan 19 Marketing 3.2 B
## 3 3 Long 21 Kế toán 3.8 A
## 4 4 Phụng 20 Ngôn ngữ Anh 3.6 A
## 5 5 Quy 22 Quản trị kinh doanh 3.4 B
## 6 6 Nguyên 18 Toán tài chính 3.2 B
Tibble cung cấp tính năng xử lý dữ liệu thiếu và xử lý metadata để làm việc với dữ liệu một cách linh hoạt và hiệu quả. Dưới đây là một số tính năng chính trong mục này:
Ví dụ:
library(tibble)
# Tạo một tibble với thông tin về sinh viên
sinhvien <- tibble(ten = c("Hải", "Long", NA, "Phụng", "Vân"),
tuoi = c(21, 22, 20, NA,19),nganh = c("Tài chính", NA, "Kế toán", "Quản trị kinh doanh","Marketing"))
# Hiển thị tibble
sinhvien
## # A tibble: 5 × 3
## ten tuoi nganh
## <chr> <dbl> <chr>
## 1 Hải 21 Tài chính
## 2 Long 22 <NA>
## 3 <NA> 20 Kế toán
## 4 Phụng NA Quản trị kinh doanh
## 5 Vân 19 Marketing
Xuất hiện các thông tin bị thiếu ký hiệu NA,ta xử lý các thông tin bị thiếu này bằng lệnh na.omit()
# Loại bỏ các hàng chứa giá trị thiếu
xulydulieu <- na.omit(sinhvien)
# Hiển thị tibble đã được xử lý
xulydulieu
## # A tibble: 2 × 3
## ten tuoi nganh
## <chr> <dbl> <chr>
## 1 Hải 21 Tài chính
## 2 Vân 19 Marketing
Xử lý metadata: Tibble cho phép lưu trữ thông tin metadata cùng với dữ liệu. Thông tin metadata không thể hiện trực tiếp nghĩa của dữ liệu, mà thường là các thông tin bổ sung về các thuộc tính, nguồn gốc, hoặc ngữ cảnh của dữ liệu. Điều này giúp làm cho dữ liệu trở nên dễ hiểu hơn và tạo điều kiện thuận lợi cho việc xử lý và phân tích dữ liệu sau này.
Ví dụ: ta có thể thêm nhãn và chú thích cho các cột trong tibble để giải thích ý nghĩa của chúng. Tuy nhiên, thông tin metadata không ảnh hưởng trực tiếp đến việc thực hiện các phép biến đổi dữ liệu như lọc, sắp xếp, hay tổng hợp. Thay vào đó, chúng giúp ta có cái nhìn tổng quan hơn về dữ liệu và đảm bảo rằng chúng ta hiểu rõ hơn về ngữ cảnh và ý nghĩa của dữ liệu trong quá trình làm việc với nó.
library(tibble)
library(dplyr)
# Tạo một tibble với thông tin về sản phẩm
sanpham <- tibble(id = c(1, 2, 3),tensanpham = c("Áo", "Quần", "Giày"),
gia_ban = c(29.99, 49.99, 79.99)) %>% mutate(mieu_ta = "Thông tin về các sản phẩm",
label_id = "Mã sản phẩm",
label_name = "Tên sản phẩm",
label_price = "Giá sản phẩm")
# Hiển thị tibble
sanpham
## # A tibble: 3 × 7
## id tensanpham gia_ban mieu_ta label_id label_name label_price
## <dbl> <chr> <dbl> <chr> <chr> <chr> <chr>
## 1 1 Áo 30.0 Thông tin về các sản… Mã sản … Tên sản p… Giá sản ph…
## 2 2 Quần 50.0 Thông tin về các sản… Mã sản … Tên sản p… Giá sản ph…
## 3 3 Giày 80.0 Thông tin về các sản… Mã sản … Tên sản p… Giá sản ph…
Tibble tương thích và tích hợp tốt với các gói phân tích dữ liệu khác trong R, giúp chúng ta thực hiện các phân tích và xử lý dữ liệu một cách linh hoạt và hiệu quả. Dưới đây là một số ví dụ về việc tích hợp tibble với các gói phân tích dữ liệu phổ biến:
Ví dụ:
library(tibble)
library(dplyr)
# Tạo một tibble với thông tin về sản phẩm và số lượng bán hàng
sanpham <- tibble(
id = c(1, 2, 3, 4, 5),
ten = c("Áo", "Quần", "Giày", "Áo", "Quần"),
gia = c(29.99, 49.99, 79.99, 29.99, 49.99),
soluong = c(10, 5, 3, 8, 6))
# Tính tổng doanh thu theo sản phẩm
doanhthu <- sanpham %>%
group_by(ten) %>%
summarise(tongdoanhthu = sum(gia * soluong))
# Hiển thị kết quả
doanhthu
## # A tibble: 3 × 2
## ten tongdoanhthu
## <chr> <dbl>
## 1 Giày 240.
## 2 Quần 550.
## 3 Áo 540.
Trong phần này, chúng ta sẽ tìm hiểu về cách tạo tibble bằng cách sử dụng các hàm như as_tibble(), tibble(), và tribble(). Chúng ta sẽ giới thiệu cách tạo tibble từ các đối tượng có sẵn như data.frame, list, matrix hoặc table, và cung cấp các ví dụ cụ thể để minh họa quá trình chuyển đổi dữ liệu.
Giới thiệu về các hàm tạo tibble
Ví dụ : Sử dụng as_tibble() để đọc dữ liệu từ file .xlsx và chuyển đổi thành tibble:
library(tibble)
library(readxl)
# Đọc dữ liệu từ file .xlsx (ví dụ: "s&p500_data.xlsx")
data_df <- read_xlsx("D:/nnlt/stock.xlsx")
# Chuyển đổi thành tibble
data_tibble <- as_tibble(data_df)
# Hiển thị tibble
print(data_tibble)
## # A tibble: 19 × 4
## date close volume Name
## <dttm> <dbl> <dbl> <chr>
## 1 2013-02-08 00:00:00 14.8 8407500 AAL
## 2 2013-02-11 00:00:00 14.5 8882000 AAL
## 3 2013-02-12 00:00:00 14.3 8126000 AAL
## 4 2013-02-13 00:00:00 14.7 10259500 AAL
## 5 2013-02-14 00:00:00 14.0 31879900 AAL
## 6 2013-02-15 00:00:00 14.5 15628000 AAL
## 7 2013-02-19 00:00:00 14.3 11354400 AAL
## 8 2013-02-20 00:00:00 13.3 14725200 AAL
## 9 2013-02-21 00:00:00 13.4 11922100 AAL
## 10 2013-02-22 00:00:00 13.6 6071400 AAL
## 11 2013-02-25 00:00:00 13.0 7186400 AAL
## 12 2013-02-26 00:00:00 13.3 9419000 AAL
## 13 2013-02-27 00:00:00 13.4 7390500 AAL
## 14 2013-02-28 00:00:00 13.4 6143600 AAL
## 15 2013-03-01 00:00:00 13.6 7376800 AAL
## 16 2013-03-04 00:00:00 13.9 8174800 AAL
## 17 2013-03-05 00:00:00 14.0 7676100 AAL
## 18 2013-03-06 00:00:00 14.6 13243200 AAL
## 19 2013-03-07 00:00:00 14.8 9125300 AAL
Ví dụ : Sử dụng tibble() để tạo tibble từ các vector cột riêng lẻ
# Đọc dữ liệu từ file .xlsx (ví dụ: "stock.xlsx")
data_df <- read_xlsx("D:/nnlt/stock.xlsx")
# Tạo tibble từ các vector cột riêng lẻ
date <- data_df$date
close <- data_df$close
volume <- data_df$volume
stock_a <- tibble(Date = date, Close = close, Volume = volume)
# Hiển thị tibble
print(stock_a)
## # A tibble: 19 × 3
## Date Close Volume
## <dttm> <dbl> <dbl>
## 1 2013-02-08 00:00:00 14.8 8407500
## 2 2013-02-11 00:00:00 14.5 8882000
## 3 2013-02-12 00:00:00 14.3 8126000
## 4 2013-02-13 00:00:00 14.7 10259500
## 5 2013-02-14 00:00:00 14.0 31879900
## 6 2013-02-15 00:00:00 14.5 15628000
## 7 2013-02-19 00:00:00 14.3 11354400
## 8 2013-02-20 00:00:00 13.3 14725200
## 9 2013-02-21 00:00:00 13.4 11922100
## 10 2013-02-22 00:00:00 13.6 6071400
## 11 2013-02-25 00:00:00 13.0 7186400
## 12 2013-02-26 00:00:00 13.3 9419000
## 13 2013-02-27 00:00:00 13.4 7390500
## 14 2013-02-28 00:00:00 13.4 6143600
## 15 2013-03-01 00:00:00 13.6 7376800
## 16 2013-03-04 00:00:00 13.9 8174800
## 17 2013-03-05 00:00:00 14.0 7676100
## 18 2013-03-06 00:00:00 14.6 13243200
## 19 2013-03-07 00:00:00 14.8 9125300
Ví dụ: Sử dụng tribble() để tạo tibble từ các giá trị dưới dạng hàng
Giả sử ta có bảng dữ liệu sau:
\[ \begin{array}{|l|l|l|l|} \hline \text { Tên } & \text { Kinh tế lượng } & \text { Mô phỏng ngẫu nhiên } & \text { Toán kinh tế } \\ \hline Ánh Linh & 8.5 & 8.75 & 7.5 \\ \hline Hải Phụng & 9.0 & 7.5 & 8.5 \\ \hline Thanh Huệ & 7.75 & 7.5& 7.0\\ \hline Duy Quang & 8.0 &7.5 & 7.0 \\ \hline \end{array} \] Bây giờ, hãy sử dụng hàm tribble() để tạo tibble từ dữ liệu này:
library(tibble)
# Sử dụng hàm tribble() để tạo tibble từ dữ liệu
data_tibble <- tribble(
~Ten, ~Kinh_te_luong, ~Mo_phong_nn, ~Toan_kinh_te,
"Ánh Linh", 8.5, 8.75, 7.5,
"Hải Phụng", 9.0, 7.5, 8.5,
"Thanh Huệ", 7.75, 7.5, 7.0,
"Duy Quang", 8.0, 7.5, 7.0)
# Hiển thị tibble
print(data_tibble)
## # A tibble: 4 × 4
## Ten Kinh_te_luong Mo_phong_nn Toan_kinh_te
## <chr> <dbl> <dbl> <dbl>
## 1 Ánh Linh 8.5 8.75 7.5
## 2 Hải Phụng 9 7.5 8.5
## 3 Thanh Huệ 7.75 7.5 7
## 4 Duy Quang 8 7.5 7
Hàm tribble() thường được sử dụng để nhanh chóng tạo tibble từ các dòng dữ liệu nhỏ và đơn giản mà không cần phải tạo một file dữ liệu riêng biệt. Điều này hữu ích khi chúng ta muốn kiểm tra nhanh các hàm và xử lý dữ liệu nhỏ mà không cần tạo một file dữ liệu lưu trữ.
Tuy nhiên, trong thực tế, khi ta có dữ liệu lớn và phức tạp hơn, thì việc nhập dữ liệu trực tiếp vào mã R như vậy sẽ không hiệu quả và không khả thi. Trong trường hợp này, chúng ta sẽ đọc dữ liệu từ các file lưu trữ dữ liệu (ví dụ: CSV, Excel, SQL, v.v.) bằng các hàm đọc dữ liệu như read.csv(), read_excel(), readr::read_delim(), readr::read_tsv()….
Trong mục này, chúng ta sẽ tìm hiểu cách sử dụng các hàm add_column() và add_row() để thêm cột và hàng vào một tibble, cũng như hướng dẫn về việc sử dụng enframe() để chuyển đổi các vector thành data.frame và ngược lại. Sau đó, chúng ta sẽ cung cấp các ví dụ minh họa về các thao tác chọn lọc dữ liệu trên tibble bằng cách sử dụng các hàm tương ứng.
Sử dụng add_column() để thêm cột vào tibble: Hàm add_column() cho phép bạn thêm một cột mới vào tibble bằng cách chỉ định tên cột và giá trị của cột mới.
# Thêm cột "Trung bình" vào tibble
trungbinh <- add_column(data_tibble, trung_binh = (data_tibble$Kinh_te_luong + data_tibble$Mo_phong_nn + data_tibble$Toan_kinh_te) / 3)
# Hiển thị tibble sau khi thêm cột
print(trungbinh)
## # A tibble: 4 × 5
## Ten Kinh_te_luong Mo_phong_nn Toan_kinh_te trung_binh
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Ánh Linh 8.5 8.75 7.5 8.25
## 2 Hải Phụng 9 7.5 8.5 8.33
## 3 Thanh Huệ 7.75 7.5 7 7.42
## 4 Duy Quang 8 7.5 7 7.5
Tiếp theo, chúng ta sẽ sử dụng hàm add_row() để thêm một hàng mới vào tibble với thông tin của một người mới.
# Tạo dòng mới với tên cột là các symbol
new_row <- list(Ten = "Hoàng Nguyên", Kinh_te_luong = 8.25, Mo_phong_nn = 8.0, Toan_kinh_te = 7.75)
# Thêm dòng mới vào tibble bằng hàm add_row()
new_rows <- add_row(data_tibble, !!!new_row)
# Hiển thị tibble sau khi thêm dòng mới
print(new_rows)
## # A tibble: 5 × 4
## Ten Kinh_te_luong Mo_phong_nn Toan_kinh_te
## <chr> <dbl> <dbl> <dbl>
## 1 Ánh Linh 8.5 8.75 7.5
## 2 Hải Phụng 9 7.5 8.5
## 3 Thanh Huệ 7.75 7.5 7
## 4 Duy Quang 8 7.5 7
## 5 Hoàng Nguyên 8.25 8 7.75
Sử dụng enframe() để chuyển đổi vector thành data frame: Hàm enframe() cho phép ta chuyển đổi một vector thành một data frame có hai cột: cột tên và cột giá trị.
Ví dụ: từ file stock.xlsx,ta sẽ sử dụng hàm enframe() để chuyển đổi cột “close” thành một data frame có hai cột: cột “name” và cột “value”.
# Chuyển đổi cột "close" thành data frame
close_df <- enframe(stock_a$Close)
# Hiển thị data frame mới
print(close_df)
## # A tibble: 19 × 2
## name value
## <int> <dbl>
## 1 1 14.8
## 2 2 14.5
## 3 3 14.3
## 4 4 14.7
## 5 5 14.0
## 6 6 14.5
## 7 7 14.3
## 8 8 13.3
## 9 9 13.4
## 10 10 13.6
## 11 11 13.0
## 12 12 13.3
## 13 13 13.4
## 14 14 13.4
## 15 15 13.6
## 16 16 13.9
## 17 17 14.0
## 18 18 14.6
## 19 19 14.8
Tiếp theo, chúng ta sẽ thực hiện ví dụ về chuyển đổi data frame thành vector sử dụng hàm deframe()
# Chuyển đổi data frame thành vector
close_vector <- deframe(close_df)
# Hiển thị vector mới
print(close_vector)
## 1 2 3 4 5 6 7 8 9 10 11 12 13
## 14.75 14.46 14.27 14.66 13.99 14.50 14.26 13.33 13.37 13.57 13.02 13.26 13.41
## 14 15 16 17 18 19
## 13.43 13.61 13.90 14.05 14.57 14.82
Hàm new_tibble() trong gói tibble được sử dụng để tạo hoặc xác thực một lớp con của tibble. Đây là hàm hữu ích đặc biệt cho các tác giả gói dự án thực hiện lớp con của tibble, chẳng hạn như sf hay tsibble.
Ví dụ :
# Sử dụng hàm new_tibble() để tạo tibble mới từ tibble hiện có
new_data_tibble <- new_tibble(data_tibble)
# Sử dụng hàm validate_tibble() để kiểm tra tính hợp lệ của tibble
validate_tibble(new_data_tibble)
## # A tibble: 4 × 4
## Ten Kinh_te_luong Mo_phong_nn Toan_kinh_te
## <chr> <dbl> <dbl> <dbl>
## 1 Ánh Linh 8.5 8.75 7.5
## 2 Hải Phụng 9 7.5 8.5
## 3 Thanh Huệ 7.75 7.5 7
## 4 Duy Quang 8 7.5 7
Ví dụ:
# Tạo ma trận điểm của sinh viên
diem_matrix <- frame_matrix(
~Ten, ~Toan, ~Van, ~Anh,
"Ánh Linh", 8.5, 8.75, 7.5,
"Hải Phụng", 9.0, 7.5, 8.5,
"Thanh Huệ", 7.75, 7.5, 7.0,
"Duy Quang", 8.0, 7.5, 7.0)
# Hiển thị ma trận điểm
print(diem_matrix)
## Ten Toan Van Anh
## [1,] "Ánh Linh" "8.5" "8.75" "7.5"
## [2,] "Hải Phụng" "9" "7.5" "8.5"
## [3,] "Thanh Huệ" "7.75" "7.5" "7"
## [4,] "Duy Quang" "8" "7.5" "7"
Hàm enframe() trong gói tibble được sử dụng để chuyển đổi vector thành data frame và ngược lại. Hàm này hỗ trợ việc làm việc với các cấu trúc dữ liệu vector và data frame một cách thuận tiện và linh hoạt.
Khi chuyển đổi vector thành data frame, hàm enframe() sẽ tạo ra một data frame với hai cột, một cột để lưu trữ tên của các phần tử trong vector và một cột để lưu trữ giá trị tương ứng của chúng.
Khi chuyển đổi data frame thành vector, hàm enframe() sẽ lấy giá trị trong một cột của data frame và trả về một vector chứa các giá trị đó.
Ví dụ về chuyển đổi vector thành data frame:
# Vector dữ liệu
vec <- c(10, 20, 30, 40, 50)
# Chuyển đổi vector thành data frame
df <- enframe(vec)
# Hiển thị data frame
print(df)
## # A tibble: 5 × 2
## name value
## <int> <dbl>
## 1 1 10
## 2 2 20
## 3 3 30
## 4 4 40
## 5 5 50
Ví dụ về chuyển đổi data frame thành vector:
# Data frame dữ liệu
df <- data.frame(name = c("A", "B", "C"), value = c(10, 20, 30))
# Chuyển đổi data frame thành vector
vec <- enframe(df$value)
# Hiển thị vector
print(vec)
## # A tibble: 3 × 2
## name value
## <int> <dbl>
## 1 1 10
## 2 2 20
## 3 3 30
Hàm rownames trong gói tibble cung cấp các công cụ để làm việc với tên các hàng trong data frame (rownames).Tuy nhiên, khi thực hiện phép lọc dữ liệu bằng toán tử [ , tên hàng sẽ bị loại bỏ. Nếu chúng ta cố gắng gán tên hàng khác NULL cho một tibble, một cảnh báo sẽ xuất hiện. Thông thường, nên tránh sử dụng tên hàng, vì nó chỉ là một cột ký tự với ý nghĩa khác biệt so với các cột khác.
Có một số hàm hữu ích trong gói tibble để làm việc với tên hàng:
Lưu ý: Một số hàm đã bị loại bỏ ra khỏi gói Tibble mới nhất
Ví dụ:
# Khởi tạo tibble
data_g <- tibble::tribble(
~Ten, ~Toan, ~Van, ~Anh,
"Hải Phụng", 9.0, 7.5, 8.5,
"Thanh Huệ", 7.75, 7.5, 7.0,
"Duy Quang", 8.0, 7.5, 7.0)
# Kiểm tra xem tibble có tên hàng hay không
has_row_names <- !is.null(rownames(data_g))
# Chuyển đổi tên hàng thành một cột mới có tên là "ID"
data_tibble_with_id <- tibble::rownames_to_column(data_g, var = "ID")
# Loại bỏ tên hàng khỏi tibble
data_tibble_without_rownames <- tibble::remove_rownames(data_g)
# Chuyển cột "ID" về tên hàng
data_tibble_with_rownames <- tibble::column_to_rownames(data_tibble_with_id, var = "ID")
# Hiển thị kết quả
print("Kiểm tra xem tibble có tên hàng hay không:")
## [1] "Kiểm tra xem tibble có tên hàng hay không:"
print(has_row_names)
## [1] TRUE
print("Chuyển đổi tên hàng thành cột mới:")
## [1] "Chuyển đổi tên hàng thành cột mới:"
print(data_tibble_with_id)
## # A tibble: 3 × 5
## ID Ten Toan Van Anh
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 1 Hải Phụng 9 7.5 8.5
## 2 2 Thanh Huệ 7.75 7.5 7
## 3 3 Duy Quang 8 7.5 7
print("Loại bỏ tên hàng khỏi tibble:")
## [1] "Loại bỏ tên hàng khỏi tibble:"
print(data_tibble_without_rownames)
## # A tibble: 3 × 4
## Ten Toan Van Anh
## <chr> <dbl> <dbl> <dbl>
## 1 Hải Phụng 9 7.5 8.5
## 2 Thanh Huệ 7.75 7.5 7
## 3 Duy Quang 8 7.5 7
print("Chuyển cột ID về tên hàng:")
## [1] "Chuyển cột ID về tên hàng:"
print(data_tibble_with_rownames)
## Ten Toan Van Anh
## 1 Hải Phụng 9.00 7.5 8.5
## 2 Thanh Huệ 7.75 7.5 7.0
## 3 Duy Quang 8.00 7.5 7.0
Trong phần này, chúng ta sẽ giới thiệu cách sử dụng gói “tidyr” cùng với gói “tibble” để xử lý dữ liệu. Gói “tidyr” cung cấp các hàm như gather(), spread(), separate(), unite(), pivot_longer() và pivot_wider() giúp chuyển đổi dữ liệu giữa các định dạng rộng (wide) và dài (long), tách các cột thành nhiều cột mới và kết hợp nhiều cột thành một cột.
Ví dụ:
library(tibble)
library(tidyr)
# Dữ liệu ban đầu (dạng wide)
data_wide <- tibble(
"Họ tên" = c("Hải Phụng", "Ánh Linh", "Hoàng Nguyên", "Thanh Huệ", "Duy Quang"),
"Kinh tế lượng" = c(8.5, 9.0, 7.5, 8.25, 8.76),
"Xác xuất thống kê" = c(7.0, 8.0, 7.5, 8.25, 7.5),
"Toán cao cấp" = c(8.0, 7.5, 8.25, 8.5, 8.25))
# Chuyển đổi dữ liệu từ wide sang long bằng gather()
data_long <- data_wide %>%
gather(key = "Môn học", value = "Điểm", "Kinh tế lượng", "Xác xuất thống kê", "Toán cao cấp")
# Hiển thị dữ liệu sau khi chuyển đổi
print(data_long)
## # A tibble: 15 × 3
## `Họ tên` `Môn học` Điểm
## <chr> <chr> <dbl>
## 1 Hải Phụng Kinh tế lượng 8.5
## 2 Ánh Linh Kinh tế lượng 9
## 3 Hoàng Nguyên Kinh tế lượng 7.5
## 4 Thanh Huệ Kinh tế lượng 8.25
## 5 Duy Quang Kinh tế lượng 8.76
## 6 Hải Phụng Xác xuất thống kê 7
## 7 Ánh Linh Xác xuất thống kê 8
## 8 Hoàng Nguyên Xác xuất thống kê 7.5
## 9 Thanh Huệ Xác xuất thống kê 8.25
## 10 Duy Quang Xác xuất thống kê 7.5
## 11 Hải Phụng Toán cao cấp 8
## 12 Ánh Linh Toán cao cấp 7.5
## 13 Hoàng Nguyên Toán cao cấp 8.25
## 14 Thanh Huệ Toán cao cấp 8.5
## 15 Duy Quang Toán cao cấp 8.25
Gói “lubridate” cung cấp các hàm mạnh mẽ để làm việc với ngày tháng trong R. Khi kết hợp gói “lubridate” với gói “tibble”, chúng ta có thể xử lý dữ liệu ngày tháng một cách dễ dàng và hiệu quả.
Ví dụ:
# Gọi thư viện lubridate
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
# Tạo tibble từ dữ liệu với cột Ngay_sinh dưới dạng character
data_tibble <- tibble(
Ten = c("Ánh Linh", "Hải Phụng", "Thanh Huệ", "Duy Quang"),
Ngay_sinh = c("1997-03-15", "2004-09-21", "1999-07-04", "1996-11-30"))
# Sử dụng gói lubridate để tạo cột ngày tháng mới
data_tibble <- data_tibble %>%
mutate(Ngay_sinh = lubridate::ymd(Ngay_sinh))
# Hiển thị tibble sau khi thêm cột ngày tháng
print(data_tibble)
## # A tibble: 4 × 2
## Ten Ngay_sinh
## <chr> <date>
## 1 Ánh Linh 1997-03-15
## 2 Hải Phụng 2004-09-21
## 3 Thanh Huệ 1999-07-04
## 4 Duy Quang 1996-11-30
Trong phần này, chúng ta sẽ kết hợp sử dụng gói “dplyr” và gói “ggplot2” để tổng hợp và biểu diễn dữ liệu từ tibble.
Ví dụ:
Trong ví dụ này, chúng ta sẽ sử dụng gói “tibble” kết hợp với gói “dplyr” để thực hiện một số phép biến đổi đơn giản trên tập dữ liệu và hiển thị kết quả bằng ggplot2.
Trước hết ta cần cài đăt các gói cần thiết cho việc xử lý dữ liệu.
# Gọi các thư viện cần thiết
library(tibble)
library(dplyr)
library(ggplot2)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
# Tạo tibble từ dữ liệu
data_m <- tibble(
Ten = c("Ánh Linh", "Hải Phụng", "Thanh Huệ", "Duy Quang"),
MPNN = c(8.5, 9.0, 7.75, 8.0),
Toan_kt = c(8.75, 7.5, 7.5, 7.5),
Kinhteluong = c(7.5, 8.5, 7.0, 7.0))
# Lọc ra các sinh viên có điểm Mô phỏng ngẫu nhiên lớn hơn 8.0
filtered_data <- filter(data_m, MPNN > 8.0)
# Sắp xếp các học sinh theo điểm Toán kinh tế giảm dần
sorted_data <- arrange(data_m, desc(Toan_kt))
# Gom nhóm dữ liệu theo điểm Kinh tế lượng và tính tổng điểm của mỗi nhóm
grouped_data <- data_m %>%
group_by(Kinhteluong) %>%
summarize(Total_Diem = sum(MPNN + Toan_kt + Kinhteluong))
Trực quan hóa dữ liệu bằng ggplot2
Biểu đồ cột thể hiện điểm Mô phỏng ngẫu nhiên của các học sinh
ggplot(data_m, aes(x = Ten, y = MPNN)) +
geom_bar(stat = "identity", fill = "pink") +
labs(title = "Điểm Mô phỏng ngẫu nhiên của sinh viên",
x = "Sinh viên",
y = "Điểm Mô phỏng ngẫu nhiên")
Biểu đồ 2D điểm của các môn Mô phỏng ngẫu nhiên, Toán kinh tế và Kinh tế lượng của sinh viên
ggplot(data_m, aes(x = Ten)) +
geom_point(aes(y = MPNN, color = "Mô phỏng ngẫu nhiên")) +
geom_point(aes(y = Toan_kt, color = "Toán kinh tế")) +
geom_point(aes(y = Kinhteluong, color = "Kinh tế lượng")) +
labs(title = "Điểm Mô phỏng ngẫu nhiên, Toán kinh tế và Kinh tế lượng của sinh viên",
x = "sinh viên",
y = "Điểm") +
scale_color_manual(values = c("Mô phỏng ngẫu nhiên" = "blue", "Toán kinh tế" = "red", "Kinh tế lượng" = "green"),
labels = c("Mô phỏng ngẫu nhiên", "Toán kinh tế", "Kinh tế lượng"))
Biểu đồ 3D điểm của các môn Mô phỏng ngẫu nhiên, Toán kinh tế và Kinh tế lượng của sinh viên
plot_ly(data_m, x = ~MPNN, y = ~Toan_kt, z = ~Kinhteluong,
color = ~Ten, colors = c("blue", "red", "green", "orange"),
text = ~Ten, type = "scatter3d", mode = "markers",
marker = list(size = 10, opacity = 0.8)) %>%
layout(scene = list(xaxis = list(title = "Điểm Mô phỏng ngẫu nhiên"),
yaxis = list(title = "Điểm Toán kinh tế"),
zaxis = list(title = "Điểm Kinh tế lượng")))
Biểu đồ cột thể hiện tổng điểm của các nhóm dựa trên điểm Kinh tế lượng
ggplot(grouped_data, aes(x = Kinhteluong, y = Total_Diem)) +
geom_bar(stat = "identity", fill = "salmon") +
labs(title = "Tổng điểm theo điểm Kinh tế lượng",
x = "Điểm Kinh tế lượng",
y = "Tổng điểm")
Gói “stringr” cung cấp các hàm hỗ trợ xử lý và biến đổi chuỗi trong R. Khi kết hợp gói “stringr” với gói “tibble”, chúng ta có thể thực hiện các phép biến đổi chuỗi một cách dễ dàng.
Ví dụ:
# Tạo tibble từ dữ liệu với cột Ten dưới dạng character
data_tibble <- tibble(
Ten = c("Ánh Linh", "Hải Phụng", "Thanh Huệ", "Duy Quang"))
# Sử dụng gói stringr để thay đổi tên sinh viên thành in hoa
data_tibble <- data_tibble %>%
mutate(Ten = stringr::str_to_upper(Ten))
# Hiển thị tibble sau khi thay đổi tên
print(data_tibble)
## # A tibble: 4 × 1
## Ten
## <chr>
## 1 ÁNH LINH
## 2 HẢI PHỤNG
## 3 THANH HUỆ
## 4 DUY QUANG
Trong phần này, chúng ta sẽ tìm hiểu cách xử lý dữ liệu thiếu và lỗi trong tibble. Chúng ta sẽ sử dụng các hàm như na.omit(), complete(), fill(), drop_na() để xử lý các giá trị thiếu và lỗi trong dữ liệu.
Ví dụ:
# Tạo tibble từ dữ liệu với một số giá trị thiếu
data_tibble <- tibble(
Ten = c("Ánh Linh", NA, "Thanh Huệ", "Duy Quang"),
Diem = c(NA, 9.0, 7.5, 8.0)
)
# Sử dụng na.omit() để loại bỏ các hàng có giá trị thiếu
data_tibble <- na.omit(data_tibble)
# Sử dụng complete() và fill() để điền giá trị thiếu
data_tibble <- data_tibble %>%
complete(Ten, fill = list(Diem = 0))
# Sử dụng drop_na() để loại bỏ các hàng có giá trị thiếu
data_tibble <- drop_na(data_tibble)
# Hiển thị tibble sau khi xử lý dữ liệu thiếu
print(data_tibble)
## # A tibble: 2 × 2
## Ten Diem
## <chr> <dbl>
## 1 Duy Quang 8
## 2 Thanh Huệ 7.5
Trong phần này, chúng ta sẽ tìm hiểu cách định dạng dữ liệu trong tibble. Điều này bao gồm định dạng kiểu dữ liệu của các cột và định dạng hiển thị của các giá trị.
Ví dụ:
# Tạo tibble từ dữ liệu với cột điểm dưới dạng numeric
data_tibble <- tibble(
Ten = c("Ánh Linh", "Hải Phụng", "Thanh Huệ", "Duy Quang"),
Diem = c(8.5, 9.0, 7.75, 8.0))
# Định dạng kiểu dữ liệu của cột Diem thành số thập phân có hai chữ số sau dấu phẩy
data_tibble$Diem <- round(data_tibble$Diem, 2)
# Hiển thị tibble sau khi định dạng dữ liệu
print(data_tibble)
## # A tibble: 4 × 2
## Ten Diem
## <chr> <dbl>
## 1 Ánh Linh 8.5
## 2 Hải Phụng 9
## 3 Thanh Huệ 7.75
## 4 Duy Quang 8
Trong quá trình nghiên cứu và thực hiện đề tài này, em đã khám phá sâu hơn về package Tibble và hứng thú hơn với sự tiện ích mà nó mang lại trong việc xử lý và quản lý dữ liệu. Tibble không chỉ là một phiên bản cải tiến của data.frame, mà còn là một công cụ linh hoạt và hiệu quả hơn trong việc làm việc với dữ liệu trong môi trường R.
Những ưu điểm đáng chú ý của Tibble đã thể hiện rõ ràng qua việc giúp tiết kiệm bộ nhớ, tăng tốc độ xử lý dữ liệu và tránh được những lỗi thường gặp khi sử dụng data.frame. Sự linh hoạt và khả năng chuyển đổi linh hoạt giữa data.frame và Tibble đã giúp em dễ dàng tích hợp Tibble vào các dự án phân tích dữ liệu hiện có.
Thành công của Tibble cũng nằm ở khả năng hỗ trợ tốt từ cộng đồng và sự liên tục cải tiến, giúp bảo đảm tính ổn định và phù hợp với nhu cầu của người dùng. Việc tích hợp các tính năng tiện ích như việc xử lý dữ liệu thô, phân tích dữ liệu mà không cần chuyển đổi về dạng data.frame đã thúc đẩy quá trình làm việc của em một cách hiệu quả và hiệu nghiệm.
Tuy đề tài này chỉ tập trung vào package Tibble, nhưng từ những kiến thức và kinh nghiệm thu thập được, em có cái nhìn tổng quan hơn về quy trình xử lý dữ liệu trong R. Package Tibble đã mở ra cánh cửa mới cho em và chắc chắn sẽ tiếp tục được áp dụng trong những dự án tương lai.
Cuối cùng, việc thực hiện đề tài này đã giúp em nâng cao kỹ năng phân tích dữ liệu và làm việc hiệu quả với R. Em rất hài lòng với kết quả đạt được và hy vọng rằng bài viết này sẽ hỗ trợ và khơi gợi sự quan tâm của những người quan tâm đến việc xử lý dữ liệu trong môi trường R.
https://www.rdocumentation.org/packages/tibble/versions/3.2.1