Tính thống nhất

Làm sạch dữ liệu trong R

Maggie Matsui

Content Developer @ DataCamp

Tính thống nhất

  • Đơn vị hoặc định dạng khác nhau
    • Nhiệt độ: °C vs. °F
    • Khối lượng: kg vs. g vs. lb
    • Tiền tệ: USD $ vs. GBP £ vs. JPY ¥
    • Ngày: DD-MM-YYYY vs. MM-DD-YYYY vs. YYYY-MM-DD
Làm sạch dữ liệu trong R

Vấn đề thống nhất đến từ đâu?

Bên trái: ba cơ sở dữ liệu với mũi tên trỏ vào một bảng dữ liệu, biểu thị nhiều nguồn dữ liệu. Bên phải: ô nhập văn bản tự do với con trỏ và máy tính có bàn phím, biểu thị lỗi nhập liệu.

Làm sạch dữ liệu trong R

Tìm vấn đề thống nhất

head(nyc_temps)
         date temp
1  2019-04-01  4.2
2  2019-04-02  7.5
3  2019-04-03 12.2
4  2019-04-04 11.1
5  2019-04-05 41.5
6  2019-04-06 11.9
Làm sạch dữ liệu trong R

Tìm vấn đề thống nhất

library(ggplot2)
ggplot(nyc_temps, aes(x = date, y = temp)) +
  geom_point()

Biểu đồ do mã tạo. Có ba nhiệt độ cao hơn hẳn phần còn lại.

Làm sạch dữ liệu trong R

Xử lý thế nào?

  • Không có một cách tốt nhất. Phụ thuộc vào tập dữ liệu!
  • Tìm hiểu nguồn gốc dữ liệu

Biểu đồ do mã tạo. Có ba nhiệt độ cao hơn hẳn phần còn lại.

  • Dữ liệu ngày 7, 16 và 23/4 từ nguồn ngoài đo bằng °F
Làm sạch dữ liệu trong R

Chuyển đổi đơn vị

$$\text{C} = (\text{F} - 32) \times \frac{5}{9}$$

ifelse(condition, value_if_true, value_if_false)

nyc_temps %>%
  mutate(temp_c = ifelse(temp > 50, (temp - 32) * 5 / 9, temp))
         date temp   temp_c
1  2019-04-01  4.2  4.20000
...
7  2019-04-07 58.5 14.72222
...
Làm sạch dữ liệu trong R

Chuyển đổi đơn vị

nyc_temps %>%
  mutate(temp_c = ifelse(temp > 50, (temp - 32) * 5 / 9, temp)) %>%
  ggplot(aes(x = date, y = temp_c)) +
    geom_point()

Biểu đồ do mã tạo, lần này không còn ngoại lệ rõ rệt vì đã được chuyển đổi.

Làm sạch dữ liệu trong R

Thống nhất định dạng ngày

nyc_temps
             date temp_c
1      2019-11-23   5.12
2        01/15/19  -0.67
3  April 24, 2019  17.46
4        08/30/19  26.46
5 October 3, 2019  14.63
6      2019-03-17   3.47

 

Chuỗi ngày Định dạng Date
"2019-11-23" "%Y-%m-%d"
"01/15/19" "%m/%d/%y"
"April 24, 2019" "%B %d, %Y"

 

?strptime trong R console

Làm sạch dữ liệu trong R

Phân tích nhiều định dạng

library(lubridate)
parse_date_time(nyc_temps$date,
                orders = c("%Y-%m-%d", "%m/%d/%y", "%B %d, %Y"))
"2019-11-23 UTC" "2019-01-15 UTC" "2019-04-24 UTC" "2019-08-30 UTC"
"2019-10-03 UTC" "2019-03-17 UTC"
parse_date_time("Monday, January 3",
                orders = c("%Y-%m-%d", "%m/%d/%y", "%B %d, %Y"))
NA
Làm sạch dữ liệu trong R

Ngày mơ hồ

02/04/2019 là tháng 2 hay tháng 4?

  • Phụ thuộc vào dữ liệu của bạn!

 

Các lựa chọn gồm:

  • Xem là thiếu
  • Nếu dữ liệu từ nhiều nguồn, suy luận theo nguồn
  • Suy luận dựa trên dữ liệu khác trong tập
Làm sạch dữ liệu trong R

Ayo berlatih!

Làm sạch dữ liệu trong R

Preparing Video For Download...