Questões

Questão 1

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)

layout(matrix(c(1, 1, 2, 3, 4, 5, 6, 0), nrow = 4, byrow = TRUE))

plot(clock, MRT_1F, type = "b", pch = 4, col = "black",
     ylim = range(c(MRT_1F, MRT_3F, MRT_5F, MRT_10F, MRT_15F, MRT_sem_F)),
     xlab = "Time between Things requests (seconds)",
     ylab = "Response Time (sec.)")
lines(clock, MRT_3F,    type = "b", pch = 16, col = "yellow")
lines(clock, MRT_5F,    type = "b", pch = 1,  col = "red")
lines(clock, MRT_10F,   type = "b", pch = 17, col = "blue")
lines(clock, MRT_15F,   type = "b", pch = 2,  col = "purple")
lines(clock, MRT_sem_F, type = "b", pch = 4,  col = "green")
legend("topright",
       legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
       col = c("black", "yellow", "red", "blue", "purple", "green"),
       pch = c(4, 16, 1, 17, 2, 4), lty = 1, cex = 0.8)

barplot(rbind(MRT_sem_F, MRT_1F), beside = TRUE, log = "y",
        col = c("#E6E6E6", "#666666"), names.arg = clock,
        xlab = "Time between Things requests", ylab = "Response time (s)")
legend("topright", legend = c("w/o Fog", "1 Fog"),
       fill = c("#E6E6E6", "#666666"), cex = 0.7)

barplot(rbind(MRT_sem_F, MRT_3F), beside = TRUE, log = "y",
        col = c("#E6E6E6", "#666666"), names.arg = clock,
        xlab = "Time between Things requests", ylab = "Response time (s)")
legend("topright", legend = c("w/o Fog", "3 Fogs"),
       fill = c("#E6E6E6", "#666666"), cex = 0.7)

barplot(rbind(MRT_sem_F, MRT_5F), beside = TRUE, log = "y",
        col = c("#E6E6E6", "#666666"), names.arg = clock,
        xlab = "Time between Things requests", ylab = "Response time (s)")
legend("topright", legend = c("w/o Fog", "5 Fogs"),
       fill = c("#E6E6E6", "#666666"), cex = 0.7)

barplot(rbind(MRT_sem_F, MRT_10F), beside = TRUE, log = "y",
        col = c("#E6E6E6", "#666666"), names.arg = clock,
        xlab = "Time between Things requests", ylab = "Response time (s)")
legend("topright", legend = c("w/o Fog", "10 Fogs"),
       fill = c("#E6E6E6", "#666666"), cex = 0.7)

barplot(rbind(MRT_sem_F, MRT_15F), beside = TRUE, log = "y",
        col = c("#E6E6E6", "#666666"), names.arg = clock,
        xlab = "Time between Things requests", ylab = "Response time (s)")
legend("topright", legend = c("w/o Fog", "15 Fogs"),
       fill = c("#E6E6E6", "#666666"), cex = 0.7)

Questão 2

meal <- matrix(c(53.8, 33.9,  2.6,  0.0,
                 43.6, 54.2, 60.5, 21.4,
                  2.6, 11.9, 36.8, 78.6),
               nrow = 3, byrow = TRUE)
rownames(meal) <- c("Good", "Very Good", "Excellent")
colnames(meal) <- c("$10-19", "$20-29", "$30-39", "$40-49")

par(mar = c(5, 4, 4, 9))
barplot(meal, beside = FALSE, col = c("lightblue", "orange", "darkgreen"),
        main = "Qualidade da refeição por preço",
        xlab = "Faixa de preço", ylab = "Percentual (%)")
legend("topright", legend = rownames(meal),
       fill = c("lightblue", "orange", "darkgreen"), bty = "n",
       inset = c(-0.3, 0), xpd = TRUE, title = "Qualidade")

Questão 3

data(airquality)
mai <- subset(airquality, Month == 5)
mai$TempC <- (mai$Temp - 32) / 1.8

h    <- hist(mai$TempC, plot = FALSE)
dens <- density(mai$TempC, na.rm = TRUE)

hist(mai$TempC, freq = FALSE, col = "skyblue", border = "white",
     ylim = c(0, max(h$density, dens$y) * 1.05),
     main = "Temperaturas de maio (convertidas para °C)",
     xlab = "Temperatura (°C)", ylab = "Densidade")
lines(dens, col = "red", lwd = 2)

Questão 4

Questão 5

boxplot(count ~ spray, data = InsectSprays,
        outline = FALSE, col = "yellow",
        main = "Contagem de insetos por inseticida (sem outliers)",
        xlab = "Inseticida", ylab = "Contagem")

Questão 6

ler_monitoramento <- function(nomes) {
  arquivo <- nomes[file.exists(nomes)][1]
  if (is.na(arquivo)) stop("Arquivo não encontrado: ", nomes[1])
  df <- read.csv(arquivo, stringsAsFactors = FALSE)

  partes     <- str_match(df$currentTime,
                          "(\\d{4}-\\d{2}-\\d{2}) (\\d{2}:\\d{2}:\\d{2}\\.\\d+)$")
  data_ini   <- str_extract(df$currentTime, "^\\d{4}-\\d{2}-\\d{2}")
  corrompido <- data_ini != partes[, 2]

  t_fim <- as.POSIXct(paste(partes[, 2], partes[, 3]),
                      format = "%Y-%m-%d %H:%M:%OS", tz = "UTC")
  t_ini <- as.POSIXct(paste(data_ini, partes[, 3]),
                      format = "%Y-%m-%d %H:%M:%OS", tz = "UTC")

  tempo <- t_fim
  for (i in which(corrompido)) {
    if (i == 1) next
    candidatos <- c(t_ini[i], t_fim[i])
    dist <- abs(as.numeric(difftime(candidatos, tempo[i - 1], units = "secs")))
    tempo[i] <- candidatos[which.min(dist)]
  }
  df$tempo <- tempo
  df$horas <- as.numeric(difftime(df$tempo, min(df$tempo), units = "hours"))

  mem <- str_match(df$usedMemory, "^\\s*([0-9.]+)\\s*([A-Za-z]+)\\s*$")
  fatores <- c(B = 1 / 1024^2, KB = 1 / 1024, MB = 1,
               GB = 1024, TB = 1000000)
  df$usedMB <- as.numeric(mem[, 2]) * unname(fatores[toupper(mem[, 3])])
  df
}

d01   <- ler_monitoramento(c("monitoringCloudData_0.1.csv", "monitoringCloudData_0_1.csv"))
d05   <- ler_monitoramento(c("monitoringCloudData_0.5.csv", "monitoringCloudData_0_5.csv"))
d1    <- ler_monitoramento("monitoringCloudData_1.csv")
dNone <- ler_monitoramento("monitoringCloudData_NONE.csv")

layout(matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE))

plot(dNone$horas, dNone$usedMB, type = "l",
     main = "Memory Analysis (None Workload)",
     xlab = "Time (hour)", ylab = "Used Memory (MB)")

plot(d01$horas, d01$usedMB, type = "l",
     main = "Memory Analysis (Workload of 0.1)",
     xlab = "Time (hour)", ylab = "Used Memory (MB)")

plot(d05$horas, d05$usedMB, type = "l",
     main = "Memory Analysis (Workload of 0.5)",
     xlab = "Time (hour)", ylab = "Used Memory (MB)")

plot(d1$horas, d1$usedMB, type = "l",
     main = "Memory Analysis (Workload of 1.0)",
     xlab = "Time (hour)", ylab = "Used Memory (MB)")

Questão 7

netflix <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)

um_pais <- netflix %>%
  filter(!is.na(country), country != "", !grepl(",", country))

top10 <- um_pais %>%
  count(country, sort = TRUE) %>%
  slice_head(n = 10)

plot_ly(top10, labels = ~country, values = ~n, type = "pie") %>%
  layout(title = "Top 10 países com mais conteúdos na Netflix")

Questão 8

tabela <- data.frame(
  "País" = top10$country,
  "Total de conteúdos" = top10$n,
  check.names = FALSE
)

plot_ly(
  type = "table",
  header = list(
    values = names(tabela),
    fill = list(color = "gray"),
    font = list(color = "white"),
    align = "center"
  ),
  cells = list(
    values = list(tabela$`País`, tabela$`Total de conteúdos`),
    align = "center"
  )
)

Questão 9

contagem <- netflix %>%
  filter(!is.na(release_year)) %>%
  mutate(
    decada = floor(release_year / 10) * 10,
    tipo = case_when(type == "TV Show" ~ "TV Series",
                     type == "Movie"   ~ "Movies")
  ) %>%
  filter(!is.na(tipo)) %>%
  count(decada, tipo)

grade <- expand.grid(
  decada = seq(min(contagem$decada), max(contagem$decada), by = 10),
  tipo = c("TV Series", "Movies"),
  stringsAsFactors = FALSE
)
dados_q9 <- grade %>%
  left_join(contagem, by = c("decada", "tipo")) %>%
  mutate(n = ifelse(is.na(n), 0, n))

plot_ly(dados_q9, x = ~decada, y = ~n, color = ~tipo,
        colors = c("TV Series" = "blue", "Movies" = "yellow"),
        type = "scatter", mode = "lines+markers") %>%
  layout(
    title = "Quantidade de conteúdo por década",
    xaxis = list(title = "Década"),
    yaxis = list(title = "Qnd. Conteúdo")
  )

Questão 10

# Usa só o primeiro gênero de cada filme
generos_pt <- c("Dramas" = "Drama",
                "Action & Adventure" = "Ação e Aventura",
                "Comedies" = "Comédia")

filmes <- netflix %>%
  filter(type == "Movie", release_year >= 2000, release_year <= 2010) %>%
  mutate(genero_principal = str_trim(str_split_fixed(listed_in, ",", 2)[, 1])) %>%
  filter(genero_principal %in% names(generos_pt)) %>%
  count(release_year, genero_principal)

grade10 <- expand.grid(
  release_year = 2000:2010,
  genero_principal = names(generos_pt),
  stringsAsFactors = FALSE
)
dados_q10 <- grade10 %>%
  left_join(filmes, by = c("release_year", "genero_principal")) %>%
  mutate(
    n = ifelse(is.na(n), 0, n),
    genero = factor(unname(generos_pt[genero_principal]), levels = unname(generos_pt))
  )

plot_ly(dados_q10, x = ~release_year, y = ~n, color = ~genero,
        type = "bar",
        colors = c("Drama" = "#1f77b4",
                   "Ação e Aventura" = "#ff7f0e",
                   "Comédia" = "#2ca02c")) %>%
  layout(
    barmode = "group",
    title = "Filmes por gênero (2000–2010)",
    xaxis = list(title = "Ano de Lançamento"),
    yaxis = list(title = "Qnt. de Lançamentos")
  )