Khóa học
Trực quan hóa dữ liệu là kỹ năng thiết yếu đối với nhà khoa học dữ liệu. Nó kết hợp thống kê và thiết kế theo những cách có ý nghĩa và phù hợp. Ở một khía cạnh, trực quan hóa dữ liệu là một hình thức phân tích dữ liệu bằng đồ họa, nhấn mạnh việc biểu diễn chính xác và diễn giải dữ liệu. Ở khía cạnh khác, trực quan hóa dữ liệu dựa trên các lựa chọn thiết kế tốt để khiến biểu đồ của chúng ta hấp dẫn và hỗ trợ cả việc hiểu lẫn truyền đạt kết quả. Hơn nữa, còn có yếu tố sáng tạo, bởi cốt lõi của trực quan hóa dữ liệu là một hình thức giao tiếp bằng hình ảnh.

Điều quan trọng là hiểu sự khác biệt giữa trực quan hóa nhằm khám phá và nhằm giải thích. Trực quan hóa nhằm khám phá được tạo nhanh, nhiều dữ liệu và dành cho một nhóm nhỏ chuyên gia, như bạn và đồng nghiệp của bạn — mục đích chính của chúng là phân tích dữ liệu bằng đồ họa. Trực quan hóa nhằm giải thích tốn công sức, phụ thuộc dữ liệu cụ thể và hướng đến đối tượng rộng hơn, ví dụ trong ấn phẩm hoặc bài thuyết trình — chúng là một phần của quá trình truyền thông. Là một nhà khoa học dữ liệu, bạn cần có khả năng khám phá dữ liệu nhanh chóng, nhưng bạn cũng sẽ phải giải thích kết quả cho các bên liên quan. Thiết kế tốt bắt đầu từ việc suy nghĩ về khán giả — và đôi khi điều đó chỉ đơn giản là chính chúng ta.

Biểu đồ phân tán
Bên dưới là một tập dữ liệu chứa trọng lượng trung bình của não và cơ thể của 62 loài thú.
MASS::mammals
body brain
Arctic fox 3.385 44.50
Owl monkey 0.480 15.50
Mountain beaver 1.350 8.10
Cow 465.000 423.00
Grey wolf 36.330 119.50
Goat 27.660 115.00
Roe deer 14.830 98.20
...
Pig 192.000 180.00
Echidna 3.000 25.00
Brazilian tapir 160.000 169.00
Tenrec 0.900 2.60
Phalanger 1.620 11.40
Tree shrew 0.104 2.50
Red fox 4.235 50.40
Để hiểu mối quan hệ ở đây, bước đầu tiên rõ ràng nhất là vẽ một biểu đồ phân tán, như minh họa bên dưới:
ggplot(mammals, aes(x = body, y = brain)) +
geom_point()

Hai loài thú, voi châu Phi và voi châu Á, đều có trọng lượng não và cơ thể rất lớn, dẫn đến độ lệch dương trên cả hai trục.
Mô hình tuyến tính
Bây giờ, nếu chúng ta áp dụng một mô hình tuyến tính, đó sẽ là lựa chọn kém vì một vài giá trị cực trị có ảnh hưởng lớn.
ggplot(mammals, aes(x = body, y = brain)) +
geom_point(alpha = 0.6) +
stat_smooth(
method = "lm",
color = "red",
se = FALSE
)

Áp dụng phép biến đổi log cho cả hai biến cho phép một đường khớp tốt hơn.
ggplot(mammals, aes(x = body, y = brain)) +
geom_point(alpha = 0.6) +
coord_fixed() +
scale_x_log10() +
scale_y_log10() +
stat_smooth(
method = "lm",
color = "#C42126",
se = FALSE,
size = 1
)

Vì vậy, dù bắt đầu bằng một biểu đồ khám phá thô, nó đã cung cấp thông tin về dữ liệu của chúng ta và dẫn đến một kết quả có ý nghĩa.
Các biểu đồ của Anscombe
Khi chúng ta hình dung một mô hình tuyến tính, như trình bày trên biểu đồ vô danh này, chúng ta hình dung rằng mình đang mô tả dữ liệu trông như thế này.

Nhưng cùng một mô hình đó có thể đang mô tả một tập dữ liệu rất khác, chẳng hạn mối quan hệ parabol, vốn cần một mô hình khác.

Hoặc dữ liệu mà trong đó một giá trị cực trị có ảnh hưởng lớn, điều này trở nên rõ ràng khi loại bỏ điểm ngoại lai.

Và đôi khi, mô hình có thể đang mô tả một mối quan hệ mà thực tế không hề tồn tại vì một số giá trị cực trị có thể không chính xác.

Nếu chỉ dựa vào đầu ra số mà không vẽ dữ liệu, chúng ta sẽ bỏ lỡ những xu hướng nền tảng khác biệt và thú vị.

Chúng ta có thể thấy trực quan hóa dữ liệu bắt nguồn từ thống kê và phân tích dữ liệu bằng đồ họa, nhưng nó cũng là một quá trình sáng tạo liên quan đến một mức độ thử nghiệm và sai sót nhất định.
Ví dụ tương tác
Trong ví dụ sau, trước tiên bạn sẽ nạp gói ggplot2 bằng library(). Sau đó, bạn sẽ dùng str() để khám phá cấu trúc của tập dữ liệu mtcars.
Cuối cùng, bạn sẽ trực quan hóa ggplot và cố gắng hiểu ggplot xử lý dữ liệu như thế nào.
Bạn sẽ dùng tập dữ liệu mtcars chứa thông tin về 32 mẫu xe từ một số tạp chí Motor Trend năm 1973. Tập dữ liệu này nhỏ, trực quan và chứa nhiều biến liên tục lẫn phân loại.
# Load the ggplot2 package
library(ggplot2)
# Explore the mtcars data frame with str()
str(mtcars)
# Execute the following command
p <- ggplot(mtcars, aes(cyl, mpg)) +
geom_point()
Khi chạy đoạn mã trên, ta thu được kết quả sau:
data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...

Để tìm hiểu thêm về trực quan hóa dữ liệu với ggplot, vui lòng xem video từ khóa học Introduction to Data Visualization with ggplot2 của chúng tôi. Ngoài ra, hãy giữ ggplot2 Cheat Sheet bên cạnh như một tài liệu tham khảo tiện dụng.
Nội dung này được trích từ khóa học Introduction to Data Visualization with ggplot2 của DataCamp do Rick Scavetta giảng dạy.