Có một vấn đề được đặt ra là: Với hàng triệu mẫu DNA và con số ngày nay cùng với hàng triệu ca nhiễm COVID-19 trên toàn thế giới ngày càng gia tăng thì chúng ta cần làm gì để có thể biết được xu hướng, ý nghĩa và cách phân phối của dữ liệu (ứng với từng quốc gia cho các ca nhiễm COVID-19 chẳng hạn). Việc phân tích mối tương quan hoặc xu hướng phân bố của dữ liệu đóng vai trò cực kỳ quan trọng trong nghiên cứu khoa học và đánh giá thống kê.
Người Trung Hoa hay có câu một hình ảnh có giá trị tương đương với một vạn chữ. Quả đúng như vậy, với một “đại dương” số liệu thì việc khai thác hiệu quả “đại dương” này là một vấn đề nan giải. Chúng ta cần phải hiểu rằng, khi có dữ liệu thì việc truyền tải thông tin tới người khác là vô cùng khó khăn. Phải làm thế nào để họ hiểu, họ nắm được xem bộ dữ liệu đó nói về cái gì, miêu tả cái gì và rút ra điều gì từ bộ dữ liệu đó. Chữ viết hoàn toàn có thể sử dụng cho những bộ dữ liệu đơn giản nhưng không thể thực hiện được việc truyền tải nội dung về xu hướng và dao dộng của dữ liệu
Hiển thị dữ liệu, mô phỏng dữ liệu hay trực quan dữ liệu (Visualization) nói chung là một bước quan trọng trong tổng thể phân tích dữ liệu. Trước khi phân tích bất kỳ một mô hình nào, việc đầu tiên là chúng ta cần “cảm thụ” được bộ dữ liệu đó, tức là có một cái nhìn khái quát nhất về bộ dữ liệu mà chúng ta đang có. Hiện nay, trong phân tích nghiên cứu khoa học, một số biểu đồ thường được sử dụng, đó là:
Việc nắm vững ý nghĩa của các biểu đồ và thể hiện số liệu trên các biểu đồ này giúp chúng ta có thể có những nghiên cứu chuyên sâu hơn về các bộ dữ liệu.
Bài viết ngắn sau đây sẽ giúp khái quát nhất về việc mô phỏng dữ liệu. Trong đó gói package ggplot2 được sử dụng để phục vụ công việc trực quan dữ liệu (Visualization).
Biểu đồ có một lịch sử rất thú vị. Trước thể kỷ 18, dữ liệu khoa học thường được trình bày dạng bảng (tables) và đôi khi biểu đồ được coi là vô dụng vì không phản ánh bất kỳ điều gì. Quan điểm này khá là sai lầm, năm 1786, William Playfair (một nhà kinh tế chính trị học) sáng tạo ra biểu đồ tròn (pie chart), biểu đồ thanh (bar chart) và biểu đồ dây (line chart), những cái mà chúng ta vẫn sử dụng cho tới ngày nay. Mãi đến năm 1832, nhà thiên văn học người Anh là Alexander S. Herche sáng chế ra biểu đồ tương quan (scatter plot) và trở thành rất phổ biến trong khoa học thực nghiệm.
Hãy làm quen với Edward Tufte, vì ông là một guru - bậc thầy về biểu đồ. Ông là giáo sư thống kê học của Đại học Yale, giáo sư chính trị học và giáo sư về khoa học máy tính của đại học Yale, ông là người có ảnh hưởng rất lớn tới lĩnh vực trực quan dữ liệu. Ông là người đã dám thế chấp căn nhà của mình để vay tiền ngân hàng nghiên cứu và cho ra công trình data visualization mà sau này ông không bao giờ phải hối hận. Tờ báo New York Times gọi ông là Leonardo Da Vinci of Data
Edward Tufte đặt ra 4 triết lý và nguyên tắc chính trong trình bày dữ liệu bằng biểu đồ. Có thể tóm gọn như sau “Graphical excellence is that which gives to the viewer the greatest number of ideas in the shortest time with the least ink in the smallest space”. Như vậy, khi trình bày dữ liệu bằng biểu đồ phải để ý tới thông tin của 4 khía cạnh: Lượng thông tin, thời gian, lượng mực in và không gian. Từ đó có thể hiểu 4 nguyên tắc chính khi trình bày dữ liệu chính là: Phản ảnh dữ liệu một cách đầy đủ, tối ưu hóa dữ liệu trên mực in, tối ưu hóa mật độ dữ liệu và trình bày dữ liệu chứ không phải trang trí biểu đồ.
Chương trình ggplot2 do tác giả Hadley Wickham phát triển và phổ biến là một thư viện rất có ích cho việc biên soạn biểu đồ với chất lượng cao. Cú pháp của ggplot2 được mô phỏng theo việc chồng lấp các lớp (layers); mỗi lớp sẽ có một chức năng riêng. Tuy nhiên có 3 layers chính, đó là: * Lớp xác định biến số cần trực quan dữ liệu * Lớp hình thức thể hiện * Lớp trang trí, gán nhãn cho biểu đồ..
William Hadley
Về định nghĩa biến số, thông thường một biểu đồ thường có 2 biến số chính là \(x\) và \(y\). Nếu chúng ta muốn thể hiện mối liên quan giữa giới tính và thu nhập thì thông thường \(x\) sẽ là biến giới tính và \(y\) là biến thu nhập. Ví dụ dưới đây chỉ ra mối liên hệ giữa thu nhập và tuổi thọ trung bình giữa các quốc gia trong thư viện ggplot2.
Cú pháp của lớp này như sau:
\(p=ggplot(data = gapminder, aes(x = gdpPercap, y = life Exp))\)
Hình thức thể hiện của biến \(x\) và \(y\) thể hiện qua \(argument\) có tên là \(geom()\), trong đó có một số loại phổ biến sau: * geom_point(): Biểu đồ tương quan * geom_box(): Biểu đồ hộp * geom_histogram(): Biểu đồ phân bố * geom_line(): Biểu đồ dây * geom_text(): Biểu đồ chữ viết * geom_smooth(): Chọn đường biểu diễn làm mịn dữ liệu * geom_jitter(): Tạo sàng rung, hiển thị dữ liệu, fix lỗi overplotting * geom_hline(): Đường biểu diễn nằm ngang * geom_vline(): Đường biểu diễn thẳng đứng
## Warning: package 'ggplot2' was built under R version 4.0.2
## Warning: package 'gapminder' was built under R version 4.0.2
Một số trang trí cho biểu đồ có thể được thể hiện như sau:
Một trong những lợi thế của ggplot2 là cho phép người sử dụng hoán chuyển dữ liệu ngày trong phần arguments của hàm ggplot. Chúng ta có thể hoán chuyển đơn vị của trục tung (thu nhập) sang đơn vị log:
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
Thêm một số thành phần như xlab, ylab cho tiêu đề các trục tung và hoành:
## `geom_smooth()` using formula 'y ~ x'
Chúng ta có thể đổi màu nền theo phong cách của tạp chí “The Economist” với sự trợ giúp của gói “ggthemes”
## Warning: package 'ggthemes' was built under R version 4.0.3
p = ggplot(data = gapminder, aes(x = gdpPercap, y = lifeExp))
p = p + geom_point(aes(color = continent))
p = p + geom_smooth(method = "loess")
p = p + labs(x = "Log GDP Per Capita", y = "Life Expectancy")
p = p + ggtitle("Association between GDP Per Capita and Life Expectancy") +
theme(plot.title = element_text(lineheight = 0.8, face = "bold", hjust = 0.5))
p = p + theme(axis.title.x = element_text(color = "blue", size = 14, face = "bold"), axis.title.y = element_text(color = "red", face = "bold", size = 14))
p + scale_x_log10()
## `geom_smooth()` using formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'