Questão 1
Carregamento dos Dados
MRT_1F <-c(517.1468515630205, 85.13094142168089, 30.333207896694553, 12.694776264558937, 3.3041601673945418, 1.1823111717498882, 1.1892293502386786)
MRT_3F <-c(156.68929936163462, 11.540837783562276, 0.4512835621696538, 0.4509797929766453, 0.4502068233039181, 0.4496185276300172, 0.4543157082191288)
MRT_5F <-c(83.90319666471157, 0.3068151086494968, 0.30522314133037304, 0.3072588968084928, 0.30655265997285697, 0.3055812715727718, 0.3053297166713006)
MRT_10F <-c(29.55430642951759, 0.19832832665772515, 0.1971923924717474, 0.19796648905716516, 0.19615594370806338, 0.2034569237883263, 0.19617420889447737)
MRT_15F <-c(11.317736530583566, 0.167364215666193, 0.16172168266811013, 0.16701085329580515, 0.1598052657153692, 0.1645934043532696, 0.16216563797118075)
MRT_sem_F <-c(11.93430909937736, 0.6095414637034009, 0.6060645101029295, 0.612167181646899, 0.6146761002685637, 0.6096747087200697, 0.6125810476877268)
clock <- c(0.1, 0.5, 1, 1.5, 2, 2.5, 3)
Gráfico de Linhas
# Cria o gráfico inicial com a primeira linha
plot(clock, MRT_1F, type = "b", pch = 4, col = "black", lwd = 1, ylim = range(c(MRT_1F, MRT_5F, MRT_3F, MRT_10F, MRT_15F, MRT_sem_F)),
xlab = "Time between Things requests (seconds)", ylab = "Response Time (sec.)")
# Adiciona as outras linhas
# 3F – triângulo duplo (pra cima e pra baixo)
lines(clock, MRT_3F, col = "yellow", lwd = 1)
points(clock, MRT_3F, pch = 2, col = "yellow")
points(clock, MRT_3F, pch = 6, col = "yellow", bg = "yellow")
# 5F
lines(clock, MRT_5F, col = "red", lwd = 1)
points(clock, MRT_5F, pch = 1, col = "red")
# 10F
lines(clock, MRT_10F, col = "blue", lwd = 1)
points(clock, MRT_10F, pch = 2, col = "blue")
# 15F
lines(clock, MRT_15F, col = "purple", lwd = 1)
points(clock, MRT_15F, pch = 5, col = "purple")
# sem F
lines(clock, MRT_sem_F, col = "green", lwd = 1)
points(clock, MRT_sem_F, pch = 4, col = "green")
# Adiciona legenda
legend("topright",
legend = c("1 Fog", "3 Fog", "5 Fog", "10 Fog", "15 Fog", "sem Fog"),
col = c("black", "yellow", "red", "blue", "purple", "green"),
pch = c(4, 17, 1, 2, 5, 4),
lty = 1)

Gráficos de Barras Agrupadas
layout(matrix(1:6, nrow = 3, ncol = 2, byrow = TRUE))
comparacoes <- list(
"1 Fog" = MRT_1F,
"3 Fog" = MRT_3F,
"5 Fog" = MRT_5F,
"10 Fog" = MRT_10F,
"15 Fog" = MRT_15F
)
for (nome in names(comparacoes)) {
y <- comparacoes[[nome]]
max_y <- ceiling(max(c(MRT_sem_F, y)))
barplot(
rbind(MRT_sem_F, y),
beside = TRUE,
names.arg = clock,
col = c("#E6E6E6", "#666666"),
ylim = c(0.1, max_y),
log = "y",
xlab = "Time between Things requests (seconds)",
ylab = "Response Time (sec.)",
main = paste("Sem Fog vs", nome),
cex.main = 1
)
legend("topright",
legend = c("Sem Fog", nome),
fill = c("#E6E6E6", "#666666"),
bty = "n",
cex = 0.8)
}

Questão 2
Criação da Tabela
tabela <- data.frame(
Quality_Rating = c("Good", "Very Good", "Excellent", "Total"),
`$10_19` = c(53.8, 43.6, 2.6, 100.0),
`$20_29` = c(33.9, 54.2, 11.9, 100.0),
`$30_39` = c(2.6, 60.5, 36.8, 100.0),
`$40_49` = c(0.0, 21.4, 78.6, 100.0)
)
Gráfico de Barras Agrupadas Preços
tabela_grafico <- tabela[1:3, ]
rownames(tabela_grafico) <- tabela_grafico$Quality_Rating
tabela_grafico <- tabela_grafico[, -1]
colnames(tabela_grafico) <- c("$10-19", "$20-29", "$30-39", "$40-49")
max_valor <- max(as.matrix(tabela_grafico), na.rm = TRUE)
ylim_max <- max_valor * 1.1
legenda_args <- list(
title = "Quality Rating",
x = "top",
cex = 0.5,
title.cex = 0.6
)
barplot(
as.matrix(tabela_grafico),
beside = TRUE,
col = rainbow(3),
legend.text = TRUE,
args.legend = legenda_args,
xlab = "Meal Price",
ylab = "Percentage (%)",
main = "Quality Rating by Meal Price",
ylim = c(0, ylim_max)
)

Questão 3
Histograma
data("airquality")
maio <- subset(airquality, Month == 5)
temp_c <- (maio$Temp - 32) / 1.8
hist(temp_c,
breaks = "FD",
main = "Histograma das Temperaturas de Maio (°C)",
xlab = "Temperatura (°C)",
ylab = "Frequência",
col = "lightblue",
border = "white",
prob = T)
lines(density(temp_c),
col = "red",
lwd = 2)
media_celsius <- mean(temp_c, na.rm = TRUE)
abline(v = media_celsius, col = "darkgreen", lwd = 2, lty = 2)
legend("topright",
legend = c("Curva de Densidade (KDE)", paste("Média:", round(media_celsius, 2), "°C")),
col = c("red", "darkgreen"), # Cores dos elementos
lwd = c(2, 2), # Espessura da linha
lty = c(1, 2), # Tipo de linha (sólida para densidade, tracejada para média)
bty = "n", # Remove a caixa de borda
cex = 0.9) # Tamanho da fonte

Questão 4
Gráfico de Pizza de Vendas
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt", header = TRUE)
porcentagens <- round(sales$SALES / sum(sales$SALES) * 100, 1)
nomes_fatias <- paste(sales$COUNTRY, " (", porcentagens, "%)", sep = "")
rotulos <- paste(porcentagens, "%")
cores <- rainbow(length(sales$COUNTRY))
par(mar = c(1, 1, 3, 1))
pie(
sales$SALES,
labels = rotulos,
col = cores,
main = "Distribuição Total de Vendas por País",
cex.main = 1.2,
cex = 0.8
)
legend(
"topright",
legend = nomes_fatias,
fill = cores,
title = "País (Vendas)",
bty = "n",
cex = 0.8
)

Questão 6
Download zip
temp_zip <- tempfile(fileext = ".zip")
download.file(
"https://www.dropbox.com/scl/fi/gyajp6p4bacdasymcguz6/monitoringCloudData.zip?rlkey=4i3zj343im9s8hpldpjmtfldi&e=3&st=94ygvcub&dl=1",
temp_zip,
mode = "wb"
)
files_in_zip <- unzip(temp_zip, list = TRUE)
arquivos <- c(
"monitoringCloudData_NONE.csv",
"monitoringCloudData_0.1.csv",
"monitoringCloudData_0.5.csv",
"monitoringCloudData_1.csv"
)
unzip(temp_zip, files = arquivos, exdir = tempdir())
csv_paths <- file.path(tempdir(), arquivos)
dados <- lapply(csv_paths, read.csv)
names(dados) <- c("data_NONE","data_0.1", "data_0.5", "data_1")
Pré-processamento
dados_processados <- list()
for (nome in names(dados)) {
df <- dados[[nome]][, c("currentTime", "usedMemory")]
df$currentTime <- as.POSIXct(df$currentTime)
tempo_inicial <- df$currentTime[1]
df$tempo_horas <- as.numeric(difftime(df$currentTime, tempo_inicial, units = "hours"))
df$valor <- as.numeric(gsub("([0-9.]+).*", "\\1", df$usedMemory))
df$unidade <- gsub(".*(MB|GB|TB).*", "\\1", df$usedMemory)
df$usedMemory_MB <- 0
idx_gb <- which(df$unidade == "GB")
df$usedMemory_MB[idx_gb] <- df$valor[idx_gb] * 1024
idx_tb <- which(df$unidade == "TB")
df$usedMemory_MB[idx_tb] <- df$valor[idx_tb] * 1000000
idx_mb <- which(df$unidade == "MB")
df$usedMemory_MB[idx_mb] <- df$valor[idx_mb]
dados_processados[[nome]] <- df
}
Gráfico de Linhas de Tempo
layout(matrix(1:4, nrow = 2, ncol = 2, byrow = TRUE))
par(mar = c(4, 4, 2, 1) + 0.1, cex.main = 0.9)
max_tempo_horas <- max(sapply(dados_processados, \(x) max(x$tempo_horas, na.rm = TRUE)))
for (nome in names(dados_processados)) {
df <- dados_processados[[nome]]
df <- df[complete.cases(df$tempo_horas, df$usedMemory_MB), ]
min_memoria <- min(df$usedMemory_MB, na.rm = TRUE)
max_memoria <- max(df$usedMemory_MB, na.rm = TRUE)
plot(
df$tempo_horas,
df$usedMemory_MB,
type = "l",
col = "darkblue",
lwd = 2,
main = paste("Uso de Memória - Intervalo:", gsub("data_", "", nome)),
xlab = "Tempo Contínuo (horas)",
ylab = "Memória Usada (MB)",
xlim = c(0, max_tempo_horas),
ylim = c(min_memoria * 0.98, max_memoria * 1.02)
)
# Adiciona uma grade discreta
grid(col = "gray", lty = "dotted")
}

# 2.4. Restaurar as configurações gráficas padrão
layout(1)
par(mar = c(5, 4, 4, 2) + 0.1, cex.main = 1)
Preparação para as próximas questões
Download csv
url <- "https://www.dropbox.com/scl/fi/vjlgt50835d6snk03add2/netflix_titles.csv?rlkey=rzrveurxlom9cjp51nbv4w1gw&e=1&st=4du21n9d&dl=1"
temp_file <- tempfile(fileext = ".csv")
download.file(url, temp_file, mode = "wb")
netflix_data <- read.csv(temp_file, header = TRUE, stringsAsFactors = FALSE)
Libraries
library(readr)
library(dplyr)
##
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
##
## filter, lag
## Os seguintes objetos são mascarados por 'package:base':
##
## intersect, setdiff, setequal, union
library(plotly)
## Carregando pacotes exigidos: ggplot2
##
## Anexando pacote: 'plotly'
## O seguinte objeto é mascarado por 'package:ggplot2':
##
## last_plot
## O seguinte objeto é mascarado por 'package:stats':
##
## filter
## O seguinte objeto é mascarado por 'package:graphics':
##
## layout
Top 10 países
dados_filtrados <- netflix_data %>%
filter(
country != "",
!is.na(country),
!grepl(",", country)
)
top_paises <- dados_filtrados %>%
group_by(country) %>%
summarise(total = n()) %>%
arrange(desc(total)) %>%
head(10)
Questão 9
Quantidade de Conteúdo por Década
netflix_data$decade <- floor(netflix_data$release_year / 10) * 10
conteudo_por_decada <- netflix_data %>%
filter(type %in% c("Movie", "TV Show")) %>%
group_by(decade, type) %>%
summarise(total_conteudo = n(), .groups = 'drop') %>%
# Preencher décadas sem dados com zero para garantir linhas contínuas no gráfico
tidyr::complete(decade, type, fill = list(total_conteudo = 0)) %>%
arrange(decade)
fig <- plotly::plot_ly(
conteudo_por_decada,
x = ~decade,
y = ~total_conteudo,
color = ~type,
type = 'scatter',
mode = 'lines+markers',
colors = c("Movie" = "yellow", "TV Show" = "blue")
) %>%
plotly::layout(
title = "Quantidade de Conteúdo Netflix por Década (Filmes vs. Séries)",
xaxis = list(
title = "Década",
tickvals = ~unique(conteudo_por_decada$decade),
ticktext = ~paste0(unique(conteudo_por_decada$decade), "s"),
dtick = 10
),
yaxis = list(title = "Total de Conteúdo"),
legend = list(title = list(text = 'Tipo de Conteúdo'))
)
fig
Questão 10
Gráfico Barras Agrupadas Gêneros
netflix_data$primary_genre <- trimws(sub(",.*", "", netflix_data$listed_in))
generos_alvo <- c("Dramas", "Action & Adventure", "Comedies")
ano_min <- 2000
ano_max <- 2010
dados_filtrados <- subset(netflix_data,
type == "Movie" &
release_year > ano_min &
release_year < ano_max &
primary_genre %in% generos_alvo)
dados_grafico <- aggregate(show_id ~ release_year + primary_genre,
data = dados_filtrados,
FUN = length)
names(dados_grafico)[3] <- "count"
dados_grafico <- dados_grafico[order(dados_grafico$release_year), ]
fig <- plot_ly(
dados_grafico,
x = ~release_year,
y = ~count,
color = ~primary_genre,
type = 'bar'
) %>%
layout(
title = paste("Filmes Lançados por Gênero Principal (", ano_min, " - ", ano_max, ")", sep=""),
xaxis = list(
title = "Ano de Lançamento",
type = "category",
tickangle = -45
),
yaxis = list(title = "Quantidade de Filmes"),
barmode = 'group',
legend = list(title = list(text = 'Gênero Primário'))
)
fig