Phân tích dữ liệu lớn - Trực quan hóa dữ liệu

Để hiểu dữ liệu, thường hữu ích khi hình dung nó. Thông thường trong các ứng dụng Dữ liệu lớn, mối quan tâm phụ thuộc vào việc tìm kiếm thông tin chi tiết hơn là chỉ đưa ra các lô đẹp. Sau đây là các ví dụ về các cách tiếp cận khác nhau để hiểu dữ liệu bằng cách sử dụng các biểu đồ.

Để bắt đầu phân tích dữ liệu chuyến bay, chúng ta có thể bắt đầu bằng cách kiểm tra xem có mối tương quan giữa các biến số hay không. Mã này cũng có sẵn trongbda/part1/data_visualization/data_visualization.R tập tin.

# Install the package corrplot by running
install.packages('corrplot')  

# then load the library 
library(corrplot)  

# Load the following libraries  
library(nycflights13) 
library(ggplot2) 
library(data.table) 
library(reshape2)  

# We will continue working with the flights data 
DT <- as.data.table(flights)  
head(DT) # take a look  

# We select the numeric variables after inspecting the first rows. 
numeric_variables = c('dep_time', 'dep_delay',  
   'arr_time', 'arr_delay', 'air_time', 'distance')

# Select numeric variables from the DT data.table 
dt_num = DT[, numeric_variables, with = FALSE]  

# Compute the correlation matrix of dt_num 
cor_mat = cor(dt_num, use = "complete.obs")  

print(cor_mat) 
### Here is the correlation matrix 
#              dep_time   dep_delay   arr_time   arr_delay    air_time    distance 
# dep_time   1.00000000  0.25961272 0.66250900  0.23230573 -0.01461948 -0.01413373 
# dep_delay  0.25961272  1.00000000 0.02942101  0.91480276 -0.02240508 -0.02168090 
# arr_time   0.66250900  0.02942101 1.00000000  0.02448214  0.05429603  0.04718917 
# arr_delay  0.23230573  0.91480276 0.02448214  1.00000000 -0.03529709 -0.06186776 
# air_time  -0.01461948 -0.02240508 0.05429603 -0.03529709  1.00000000  0.99064965 
# distance  -0.01413373 -0.02168090 0.04718917 -0.06186776  0.99064965  1.00000000  

# We can display it visually to get a better understanding of the data 
corrplot.mixed(cor_mat, lower = "circle", upper = "ellipse")  

# save it to disk 
png('corrplot.png') 
print(corrplot.mixed(cor_mat, lower = "circle", upper = "ellipse")) 
dev.off()

Mã này tạo ra hình ảnh hóa ma trận tương quan sau:

Chúng ta có thể thấy trong biểu đồ rằng có mối tương quan chặt chẽ giữa một số biến trong tập dữ liệu. Ví dụ, trễ chuyến đến và trễ chuyến dường như có mối tương quan cao. Chúng ta có thể thấy điều này vì hình elip cho thấy mối quan hệ gần như tuyến tính giữa cả hai biến, tuy nhiên, không đơn giản để tìm ra nhân quả từ kết quả này.

Chúng ta không thể nói rằng vì hai biến có tương quan với nhau, nên biến này có ảnh hưởng đến biến kia. Ngoài ra, chúng tôi thấy trong cốt truyện có mối tương quan chặt chẽ giữa thời gian trên không và khoảng cách, điều này khá hợp lý để mong đợi vì với khoảng cách xa hơn, thời gian bay sẽ tăng.

Chúng tôi cũng có thể phân tích dữ liệu đơn biến. Một cách đơn giản và hiệu quả để hình dung các bản phân phối làbox-plots. Đoạn mã sau đây trình bày cách tạo biểu đồ dạng hộp và dạng lưới bằng thư viện ggplot2. Mã này cũng có sẵn trongbda/part1/data_visualization/boxplots.R tập tin.

source('data_visualization.R') 
### Analyzing Distributions using box-plots  
# The following shows the distance as a function of the carrier 

p = ggplot(DT, aes(x = carrier, y = distance, fill = carrier)) + # Define the carrier 
   in the x axis and distance in the y axis 
   geom_box-plot() + # Use the box-plot geom 
   theme_bw() + # Leave a white background - More in line with tufte's 
      principles than the default 
   guides(fill = FALSE) + # Remove legend 
   labs(list(title = 'Distance as a function of carrier', # Add labels 
      x = 'Carrier', y = 'Distance')) 
p   
# Save to disk 
png(‘boxplot_carrier.png’) 
print(p) 
dev.off()   

# Let's add now another variable, the month of each flight 
# We will be using facet_wrap for this 
p = ggplot(DT, aes(carrier, distance, fill = carrier)) + 
   geom_box-plot() + 
   theme_bw() + 
   guides(fill = FALSE) +  
   facet_wrap(~month) + # This creates the trellis plot with the by month variable
   labs(list(title = 'Distance as a function of carrier by month', 
      x = 'Carrier', y = 'Distance')) 
p   
# The plot shows there aren't clear differences between distance in different months  

# Save to disk 
png('boxplot_carrier_by_month.png') 
print(p) 
dev.off()