0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Bảng Tần Số cho Biến Phân Loại trong R - Hướng Dẫn 2025

Đăng vào 5 tháng trước

• 7 phút đọc

Giới thiệu

Biến phân loại xuất hiện khắp nơi trong các bộ dữ liệu thực tế: giới tính, loại sản phẩm, loại người dùng, trạng thái rời bỏ, hoặc cấp độ hội viên. Biết được bao nhiêu mục thuộc về mỗi loại thường là một trong những điều đầu tiên mà nhà phân tích thực hiện. Bảng tần số cơ bản là rất đơn giản — nhưng việc biến nó thành một khung dữ liệu mạnh mẽ, có thể tái sử dụng, với việc xử lý sạch sẽ các trường hợp đặc biệt, quy mô lớn và tích hợp vào bảng điều khiển hoặc quy trình máy học, cần một chút suy nghĩ hơn vào năm 2025.

Bài viết này sẽ hướng dẫn bạn cách xây dựng bảng tần số một cách sạch sẽ trong R, xử lý nhiều biến phân loại, giải quyết các cấp độ thiếu hoặc hiếm, quy mô với dữ liệu lớn, và chuẩn bị cho việc tái sử dụng trong báo cáo hoặc mô hình hóa.

Tại sao Bảng Tần Số Vẫn Quan Trọng Trong Phân Tích của Bạn

  • Thông tin cơ bản: Trước khi mô hình hóa, bạn cần hiểu sự phân phối của các loại (thưa thớt, mất cân bằng, các cấp độ hiếm).
  • Kỹ thuật tính năng: Tần số có thể trở thành các tính năng hoặc giúp hướng dẫn việc nhóm các cấp độ hiếm thành “Khác”.
  • Bảng điều khiển & báo cáo: Người xem mong đợi các bảng và số liệu gọn gàng, lý tưởng là được sắp xếp, gán nhãn và sẵn sàng hiển thị.
  • Quy mô & khả năng tái sử dụng: Bạn muốn mã chạy nhanh và đáng tin cậy với các bộ dữ liệu lớn, có thể tái sử dụng qua các môi trường và theo thời gian.

Những Điều Mới Năm 2025: Công Cụ & Quy Tắc Cải Tiến

  • Kết hợp Tidyverse / data.table: Các nhà phân tích thường kết hợp các công cụ tidy với mã hiệu suất cao cho dữ liệu lớn.
  • Xử lý các loại hiếm: Tự động nhóm các cấp độ có tần số thấp thành “Khác” để tránh lộn xộn hoặc quá khớp.
  • Đối phó với giá trị thiếu một cách minh bạch: Các giá trị thiếu được đếm hoặc lọc rõ ràng, không bị loại bỏ lặng lẽ.
  • Tăng tốc độ & bộ nhớ: Sử dụng các gói được tối ưu hóa cho các khung dữ liệu lớn, đếm theo luồng hoặc theo từng phần.
  • Chức năng tái sử dụng & mã mô-đun: Tạo các wrapper cho bảng tần số để các bảng điều khiển, quy trình mô hình và tập lệnh sử dụng một triển khai tiêu chuẩn.

Quy Trình Xây Dựng Bảng Tần Số Sạch Trong R

Dưới đây là quy trình làm việc với các yếu tố hiện đại.

Bước 1: Chuẩn Bị Dữ Liệu Của Bạn

  • Đảm bảo biến phân loại là một yếu tố (hoặc có thể chuyển đổi). Nếu nó là một chuỗi / ký tự, thường tốt để chuyển đổi thành yếu tố hoặc định nghĩa các cấp độ.
  • Quyết định cách xử lý các giá trị thiếu: giữ chúng như một cấp độ (ví dụ: “Thiếu” hoặc NA) hoặc loại bỏ tùy thuộc vào ngữ cảnh.
  • Quyết định xem các cấp độ hiếm có nên được nhóm lại hay không.
r Copy
library(dplyr)

df <- read.csv("your_data.csv")

# Ví dụ: làm sạch biến loại

df <- df %>%  
mutate(cat_var = as.character(cat_var),  
cat_var = if_else(is.na(cat_var), "Thiếu", cat_var),  
cat_var = factor(cat_var))

Bước 2: Tần Số Cơ Bản Với table() hoặc count()

Con đường đơn giản nhất:

r Copy
 tab <- table(df$cat_var)  
 tab_df <- as.data.frame(tab)  
 names(tab_df) <- c("loại", "số lượng")

Hoặc sử dụng phong cách tidy:

r Copy
freq_tbl <- df %>%  
count(cat_var, name = "số lượng")

Điều này sẽ cho bạn một khung dữ liệu ngay lập tức.

Bước 3: Sắp Xếp, Phần Trăm và Các Cấp Độ Hiếm

Bạn sẽ thường muốn các số đếm được sắp xếp theo thứ tự giảm dần, cộng với việc hiển thị tỷ lệ phần trăm, và kết hợp các loại hiếm.

r Copy
 total <- nrow(df)  
 freq_tbl2 <- df %>%  
count(cat_var, name = "số lượng") %>%  
arrange(desc(số lượng)) %>%  
mutate(  
prop = số lượng / total,  
is_rare = số lượng < 0.01 * total,  
category2 = if_else(is_rare, "Khác", as.character(cat_var))  
) %>%  
group_by(category2) %>%  
summarise(  
số lượng = sum(số lượng),  
prop = sum(prop)  
) %>%  
arrange(desc(số lượng))

Tại đây bạn sẽ kết thúc với các loại có đủ dữ liệu, cộng với một “Khác” để bắt các cấp độ nhỏ.

Bước 4: Nhiều Biến Phân Loại / Bảng N-way

Nếu bạn muốn tần số của các tổ hợp (các loại chéo), hoặc nhiều hơn một biến phân loại:

r Copy
freq_multi <- df %>%  
count(cat_var1, cat_var2, name = "số lượng") %>%  
arrange(desc(số lượng))

Hoặc xây dựng bảng contingency:

r Copy
ctab <- xtabs(~ cat_var1 + cat_var2, data = df)  
ctab_df <- as.data.frame(ctab)  
names(ctab_df) <- c("cat1", "cat2", "số lượng")

Bước 5: Cân Nhắc Về Hiệu Suất Đối Với Dữ Liệu Lớn Hơn

Khi bộ dữ liệu của bạn có hàng triệu dòng:

Sử dụng data.table để đếm nhanh:

r Copy
library(data.table)

dt <- as.data.table(df)  
freq_dt <- dt[, .(số lượng = .N), by = cat_var]  
setorder(freq_dt, -số lượng)
  • Đối với các quy trình theo luồng hoặc theo từng phần: đọc từng phần, tổng hợp các tần số riêng lẻ, gộp lại.
  • Tránh các cấp độ yếu tố không cần thiết để hạn chế bộ nhớ.
  • Cân nhắc lưu trữ kết quả để tái sử dụng, ví dụ như trong một bảng cơ sở dữ liệu hoặc dưới dạng tệp RDS đã được tuần tự hóa.

Bước 6: Đóng Gói Thành Một Hàm Để Tái Sử Dụng

Xây dựng một hàm tái sử dụng để bạn và nhóm của bạn luôn có được đầu ra nhất quán.

r Copy
get_freq_table <- function(data, var, threshold = 0.01, drop_na = FALSE) {  
df2 <- data %>%  
mutate(var = as.character(.data[[var]]),  
var = if_else(is.na(var), "Thiếu", var))

if (!drop_na) {  
df2 <- df2  
} else {  
df2 <- df2 %>% filter(!is.na(var))  
}

total <- nrow(df2)

freq_tbl <- df2 %>%  
count(var, name = "số lượng") %>%  
mutate(prop = số lượng / total,  
is_rare = số lượng < threshold * total,  
category_clean = if_else(is_rare, "Khác", var)) %>%  
group_by(category_clean) %>%  
summarise(  
số lượng = sum(số lượng),  
prop = sum(prop)  
) %>%  
arrange(desc(số lượng))

return(freq_tbl)  
}

Bạn có thể áp dụng hàm này trong các pipelines, bảng điều khiển, hoặc chuẩn bị mô hình hóa.

Quản Trị, Đạo Đức & Mẹo Trực Quan Hóa

  • Gán nhãn rõ ràng: Khi bạn xuất "loại" và "Khác", hãy đảm bảo các chú thích hoặc tiêu đề bảng giải thích những gì "Khác" bao gồm.
  • Theo dõi phiên bản mã và định nghĩa: Nếu bạn thay đổi ngưỡng (cho độ hiếm), các cấp độ yếu tố, hoặc cách xử lý NA, hãy phiên bản hóa hàm của bạn hoặc ghi lại sự thay đổi.
  • Kiểm tra công bằng: Đảm bảo rằng các cấp độ hiếm không che giấu các nhóm phụ quan trọng. Hãy cẩn thận khi "Khác" che giấu các lớp thiểu số.
  • Trực quan hóa: Sử dụng biểu đồ cột hoặc bảng được sắp xếp; hãy xem xét việc đặt các loại phổ biến nhất trước.

Tóm Tắt Nội Dung

Xây dựng một bảng tần số trong R hiện đại bắt đầu với việc làm sạch và chuẩn bị biến phân loại của bạn (xử lý thiếu, chuyển đổi thành yếu tố, quyết định ngưỡng cấp độ hiếm), sau đó tạo ra một bảng cơ bản hoặc sử dụng count() cho cú pháp gọn gàng. Từ đó, bạn sẽ thường sắp xếp theo thứ tự giảm dần, tính toán tỷ lệ phần trăm, và nhóm các loại có tần số thấp thành “Khác”. Nếu bạn có nhiều biến phân loại, hãy tạo bảng chéo hoặc sử dụng xtabs để khám phá tần số chung. Đối với các bộ dữ liệu lớn, hãy sử dụng data.table, quy trình theo luồng hoặc tổng hợp theo từng phần, và tránh việc tạo ra các cấp độ yếu tố quá lớn. Đóng gói điều này thành một hàm tái sử dụng đảm bảo tính nhất quán trong các phân tích, bảng điều khiển và quy trình mô hình hóa.

Suy Nghĩ Cuối Cùng

Bảng tần số có vẻ đơn giản — nhưng trong công việc dữ liệu thực tế, các chi tiết rất quan trọng. Dù bạn đang chuẩn bị dữ liệu cho các bảng điều khiển, cân bằng các tính năng cho một mô hình, khám phá phân phối dữ liệu, hay báo cáo cho các bên liên quan, các bảng tần số được xây dựng tốt sẽ tiết kiệm thời gian, tránh bất ngờ, và làm cho công việc của bạn đáng tin cậy hơn. Vào năm 2025, thực hành tốt nhất kết hợp tốc độ, sự rõ ràng và tính linh hoạt.

Bài viết này được đăng lần đầu trên Perceptive Analytics.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào