messenger_logo
Liên hệ qua Messenger
SciEco

[BLOG 004] Làm sạch dữ liệu với thư viện tidyr

KH
Khanh Hoang
Ngày viết: 21/09/2023

1. Giới thiệu gói tidyr

tidyr là một thư viện quan trọng trong Tidyverse, được tạo ra để làm cho dữ liệu dễ dàng để làm sạch và biến đổi. Nó cung cấp các công cụ mạnh mẽ để tổ chức và biến đổi dữ liệu thành dạng phù hợp với phân tích dữ liệu

1# Load thư viện tidyr
2library(tidyr)
3
4# Tạo dữ liệu mẫu
5data <- data.frame(
6  Student = c("Alice", "Bob", "Charlie"),
7  Math = c(90, 88, 76),
8  Science = c(85, 92, 78),
9  English = c(88, 84, 80)
10)

2. Lệnh gather

Lệnh gather trong tidyr được sử dụng để biến đổi dữ liệu từ dạng rộng (wide) thành dạng dài (long). Nó cho phép bạn chuyển các cột thành các hàng, tổ chức dữ liệu theo cách linh hoạt hơn để tiện cho việc phân tích, đặc biệt đối với đầu vào của các mô hình hồi quy, thường sẽ yêu cầu dữ liệu ở dạng dài (long).

1# 1. Sử dụng gather để biến đổi dữ liệu từ dạng (wide) thành dạng dài (long)
2gathered_data <- gather(data, Subject, Score, -Student)
3
4# Kết quả sau khi sử dụng gather:
5#   Student Subject  Score
6# 1   Alice    Math     90
7# 2     Bob    Math     88
8# 3 Charlie    Math     76
9# 4   Alice Science     85
10# 5     Bob Science     92
11# 6 Charlie Science     78
12# 7   Alice English     88
13# 8     Bob English     84
14# 9 Charlie English     80

3. Lệnh spread

Ngược lại với gather, lệnh spread cho phép bạn biến đổi dữ liệu từ dạng dài thành dạng rộng. Nó giúp bạn tạo ra các bảng dữ liệu có dạng phù hợp với việc trực quan hóa hoặc tính toán dễ dàng hơn.

1# 2. Sử dụng spread để biến đổi dữ liệu từ dạng dài thành dạng rộng
2spread_data <- spread(gathered_data, Subject, Score)
3
4# Kết quả sau khi sử dụng spread:
5#   Student English Math Science
6# 1   Alice      88   90      85
7# 2     Bob      84   88      92
8# 3 Charlie      80   76      78

4. Lệnh separate

Khi bạn có một cột chứa thông tin kết hợp (ví dụ: ngày và thời gian trong một cột), lệnh separate giúp bạn tách chúng thành nhiều cột riêng biệt. Điều này làm cho việc xử lý và phân tích dữ liệu dễ dàng hơn.

1# 3. Sử dụng separate để tách cột Student thành First Name và Last Name
2separated_data <- separate(data, Student, into = c("First Name", "Last Name"), sep = " ")
3
4# Kết quả sau khi sử dụng separate:
5#   First Name Last Name Math Science English
6# 1      Alice    Johnson   90      85      88
7# 2        Bob      Smith   88      92      84
8# 3    Charlie    Jackson   76      78      80

5. Lệnh unite

Ngược lại với separate, lệnh unite cho phép bạn kết hợp nhiều cột thành một cột duy nhất. Điều này hữu ích khi bạn muốn tạo ra một cột mới có dạng tổng hợp từ các thông tin chi tiết.

Như vậy, tidyr là một thư viện mạnh mẽ và linh hoạt cho việc làm sạch và biến đổi dữ liệu trong R. Bằng cách sử dụng các lệnh như gather, spread, separate, và unite, bạn có thể dễ dàng tùy chỉnh dữ liệu của mình để phù hợp với nhu cầu phân tích và trực quan hóa dữ liệu của bạn.

1# 4. Sử dụng unite để kết hợp cột First Name và Last Name thành cột Full Name
2united_data <- unite(separated_data, "Full Name", "First Name", "Last Name", sep = " ")
3
4# Kết quả sau khi sử dụng unite:
5#         Full Name Math Science English
6# 1   Alice Johnson   90      85      88
7# 2       Bob Smith   88      92      84
8# 3 Charlie Jackson   76      78      80

Bài viết khác
Chuẩn hóa dữ liệu thường được xem là một bước tiền xử lý nhỏ lẻ, một thao tác kỹ thuật áp dụng nhanh cho xong trước khi bắt tay vào xây dựng mô hình. Tuy nhiên, trên thực tế, chuẩn hóa không chỉ là một chi tiết kỹ thuật mà là một quyết định mô hình hóa mang tính chiến lược. Khi cùng một tập dữ liệu được xử lý bằng các phương pháp khác nhau, hành vi của mô hình sẽ thay đổi đáng kể. Khoảng cách, độ tương đồng, các thành phần phạt và đường dẫn tối ưu hóa đều bị ảnh hưởng trực tiếp. Quan trọng hơn, chuẩn hóa không phải lúc nào cũng mang lại lợi ích. Nếu áp dụng sai ngữ cảnh, nó có thể làm giảm hiệu suất của mô hình hoặc tệ hơn là gây ra hiện tượng rò rỉ dữ liệu, làm ô nhiễm toàn bộ quá trình đánh giá. Một ví dụ điển hình là việc tính toán các tham số chuẩn hóa như giá trị trung bình hay độ lệch chuẩn trên toàn bộ tập dữ liệu trước khi chia thành tập huấn luyện và tập kiểm tra. Quá trình này vô tình mang thông tin của tập kiểm tra trộn lẫn vào quá trình huấn luyện, tạo ra những kết quả đánh giá ảo tưởng. Vấn đề cốt lõi không nằm ở bản thân phương pháp, mà ở việc bạn áp dụng nó khi nào và như thế nào. Bài viết này sẽ coi chuẩn hóa là một phần không thể tách rời của chiến lược mô hình hóa. Chúng ta sẽ cùng nhau giải quyết từng bước các vấn đề nền tảng: tại sao cần chuẩn hóa, khi nào nên áp dụng, thời điểm thực hiện trước hay sau khi chia tập dữ liệu và cách xử lý với từng loại biến số khác nhau. Phân biệt thuật ngữ chuẩn hóa và tiêu chuẩn hóa
Trong quá trình phân tích dữ liệu, chúng ta thường phải tạo ra rất nhiều bảng kết quả hồi quy với cùng một định dạng và nhãn dán lặp đi lặp lại. Thay vì phải định dạng lại từ đầu cho mỗi bảng báo cáo, Stata cung cấp một giải pháp hiệu quả giúp bạn lưu lại toàn bộ cấu trúc trình bày để tái sử dụng về sau. Bài viết này sẽ hướng dẫn cách lưu các thiết lập định dạng bảng và áp dụng chúng cho những dự án phân tích dữ liệu trong tương lai. Tạo bảng kết quả cơ bản Chúng ta sẽ bắt đầu bằng việc mở tập dữ liệu thông qua lệnh webuse nhanes2l. Sau đó, chúng ta dùng lệnh table để tạo một bảng cơ bản cho mô hình hồi quy logistic với biến phụ thuộc nhị phân là highbp. Bảng này sẽ bao gồm tỷ số chênh, sai số chuẩn, thống kê z, p-value và khoảng tin cậy. Lưu ý rằng ký hiệu biến phân loại của Stata được sử dụng để đưa vào hiệu ứng chính của biến liên tục age, hiệu ứng chính của các biến phân loại sex và diabetes, cùng với sự tương tác giữa age và sex.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội