Big Data Analytics - Visualizzazione dei dati

Per comprendere i dati, spesso è utile visualizzarli. Normalmente nelle applicazioni Big Data, l'interesse si basa sulla ricerca di informazioni piuttosto che sulla semplice realizzazione di bei grafici. Di seguito sono riportati esempi di diversi approcci alla comprensione dei dati utilizzando i grafici.

Per iniziare ad analizzare i dati dei voli, possiamo iniziare controllando se ci sono correlazioni tra variabili numeriche. Questo codice è disponibile anche inbda/part1/data_visualization/data_visualization.R file.

# 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()

Questo codice genera la seguente visualizzazione della matrice di correlazione:

Possiamo vedere nel grafico che c'è una forte correlazione tra alcune delle variabili nel set di dati. Ad esempio, il ritardo all'arrivo e il ritardo alla partenza sembrano essere altamente correlati. Possiamo vederlo perché l'ellisse mostra una relazione quasi lineare tra entrambe le variabili, tuttavia, non è semplice trovare la causalità da questo risultato.

Non si può dire che, poiché due variabili sono correlate, una abbia effetto sull'altra. Inoltre troviamo nella trama una forte correlazione tra il tempo di volo e la distanza, il che è abbastanza ragionevole aspettarsi poiché con maggiore distanza, il tempo di volo dovrebbe crescere.

Possiamo anche fare analisi univariate dei dati. Un modo semplice ed efficace per visualizzare le distribuzioni sonobox-plots. Il codice seguente mostra come produrre grafici a scatole e grafici a traliccio utilizzando la libreria ggplot2. Questo codice è disponibile anche inbda/part1/data_visualization/boxplots.R file.

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()