Big Data Analytics - wizualizacja danych
Aby zrozumieć dane, często warto je zwizualizować. Zwykle w aplikacjach Big Data zainteresowanie polega na znalezieniu wglądu, a nie tylko na tworzeniu pięknych wykresów. Poniżej przedstawiono przykłady różnych podejść do zrozumienia danych za pomocą wykresów.
Aby rozpocząć analizę danych dotyczących lotów, możemy zacząć od sprawdzenia, czy istnieją korelacje między zmiennymi numerycznymi. Ten kod jest również dostępny wbda/part1/data_visualization/data_visualization.R plik.
# 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()
Ten kod generuje następującą wizualizację macierzy korelacji -
Na wykresie widać, że istnieje silna korelacja między niektórymi zmiennymi w zbiorze danych. Na przykład wydaje się, że opóźnienie przylotów i odlotów jest silnie skorelowane. Widzimy to, ponieważ elipsa pokazuje prawie liniową zależność między obiema zmiennymi, jednak nie jest łatwo znaleźć związek przyczynowy na podstawie tego wyniku.
Nie możemy powiedzieć, że skoro dwie zmienne są skorelowane, to jedna ma wpływ na drugą. Na wykresie znajdujemy również silną korelację między czasem antenowym a odległością, co jest dość rozsądne, ponieważ przy większej odległości czas lotu powinien wzrosnąć.
Możemy również przeprowadzić analizę danych na jednej zmiennej. Prostym i skutecznym sposobem wizualizacji dystrybucji sąbox-plots. Poniższy kod ilustruje sposób tworzenia wykresów pudełkowych i kratowych przy użyciu biblioteki ggplot2. Ten kod jest również dostępny wbda/part1/data_visualization/boxplots.R plik.
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()