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
Trong bối cảnh các tổ chức chính phủ và tổ chức phi lợi nhuận ngày càng cần công cụ trực quan hóa dữ liệu minh bạch, mở và bền vững, việc lựa chọn công cụ phù hợp không chỉ ảnh hưởng đến chất lượng báo cáo mà còn quyết định tính khả thi trong dài hạn. D3po và Tabler – hai dự án mã nguồn mở được phát triển bởi pacha.dev – chính là giải pháp lý tưởng cho những ai cần biểu đồ tương tác mà không lo rủi ro pháp lý từ giấy phép GPL. D3po là một gói R thay thế miễn phí cho Highcharter, với thiết kế hướng đến sự đơn giản và hiệu suất cao. Thay vì bao gồm hàng trăm tùy chọn phức tạp, D3po tập trung vào các tính năng cốt lõi: biểu đồ dạng cây (treemap), biểu đồ đường, biểu đồ cột – tất cả đều được xây dựng trên nền tảng JavaScript mạnh mẽ nhưng không yêu cầu giấy phép trả phí cho mục đích tổ chức. Điều này đặc biệt quan trọng khi các cơ quan nhà nước hoặc NGO phải tuân thủ nghiêm ngặt về nguồn gốc phần mềm. Một trong những câu hỏi thường gặp sau khi giới thiệu D3po là: Liệu có thể tạo biểu đồ treemap lồng ghép (nested treemap) không? Câu trả lời là có. Trong gói demo được cung cấp, người dùng có thể khám phá cách xây dựng cấu trúc phân cấp rõ ràng, từ cấp quốc gia đến tỉnh thành, thể hiện dữ liệu phân bổ ngân sách hoặc dân số theo từng tầng. Sự linh hoạt này giúp người dùng truyền tải thông tin phức tạp một cách trực quan mà không cần đến các công cụ thương mại đắt đỏ.
Khi phân tích dữ liệu không gian, một câu hỏi thường gặp là: làm thế nào để đo lường và trực quan hóa tác động của một thay đổi tại một vị trí lan tỏa đến các vùng lân cận? Bài viết này trình bày quy trình xây dựng mô hình tự hồi quy không gian (SAR), giải thích cơ chế sinh ra hiệu ứng lan truyền, và hướng dẫn chi tiết cách tạo một ảnh động (animated GIF) minh họa quá trình này bằng Stata. Kết quả cuối cùng là một biểu đồ động cho thấy tác động của việc tăng tỷ lệ thất nghiệp tại Dallas lan rộng ra các hạt lân cận ở Texas. Mô hình tự hồi quy không gian (SAR) Giả sử chúng ta muốn nghiên cứu tỷ lệ giết người (hrate) ở các hạt Texas như một hàm của tỷ lệ thất nghiệp (unemployment). Mô hình hồi quy tuyến tính chuẩn chỉ xem xét mối quan hệ trong cùng một đơn vị quan sát: hrateᵢ = β₀ + β₁ unemploymentᵢ + εᵢ
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