Respostas do Exercício 12

Questão 1

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

par(mar = c(4, 4, 2.5, 1.5)) # (bottom, left, top, right)
layout(matrix(c(1, 1, 1, 2, 3, 4, 5, 6, 0), 3, 3, byrow = TRUE), heights = c(2, 1, 1))

# --- Gráfico 1 (Linha) ---
ylim_line <- c(0, max(MRT_1F))
xlim_line <- c(0, max(clock))

plot(clock, MRT_1F, type = "o", pch = 1, lty = 1, col = "black",
     ylim = ylim_line, xlim = xlim_line,
     xlab = "Time between Things requests (seconds)",
     ylab = "Response Time (sec.)")
lines(clock, MRT_3F, type = "o", pch = 2, lty = 2, col = "red")
lines(clock, MRT_5F, type = "o", pch = 3, lty = 3, col = "blue")
lines(clock, MRT_10F, type = "o", pch = 4, lty = 4, col = "purple")
lines(clock, MRT_15F, type = "o", pch = 5, lty = 5, col = "green")
lines(clock, MRT_sem_F, type = "o", pch = 6, lty = 6, col = "orange")

legend("topright",
       legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
       pch = 1:6, lty = 1:6,
       col = c("black", "red", "blue", "purple", "green", "orange"))

# --- Gráficos 2-6 (Barras) ---
cores_barra <- c("#E6E6E6", "#666666") # Cores pedidas
nomes_eixo_x <- clock

criar_barplot <- function(data, legenda) {
  barplot(t(data), beside = TRUE, names.arg = nomes_eixo_x,
          log = "y", col = cores_barra, # Escala logarítmica
          xlab = "Time between Things requests",
          ylab = "Response time (s)",
          legend.text = legenda,
          args.legend = list(x = "topright", bty = "n"))
}

# Criar os 5 gráficos de barra
criar_barplot(cbind(MRT_sem_F, MRT_1F), c("w/o Fog", "1 Fog"))
criar_barplot(cbind(MRT_sem_F, MRT_3F), c("w/o Fog", "3 Fogs"))
criar_barplot(cbind(MRT_sem_F, MRT_5F), c("w/o Fog", "5 Fogs"))
criar_barplot(cbind(MRT_sem_F, MRT_10F), c("w/o Fog", "10 Fogs"))
criar_barplot(cbind(MRT_sem_F, MRT_15F), c("w/o Fog", "1FSogs"))

# Resetar o layout para o padrão (importante!)
par(mfrow = c(1, 1), mar = c(5.1, 4.1, 4.1, 2.1))

Questão 2

dados_refeicao <- matrix(c(
  53.8, 33.9, 2.6, 0.0,  # Good
  43.6, 54.2, 60.5, 21.4, # Very Good (Corrigido)
  2.6, 11.9, 36.8, 78.6   # Excellent (Corrigido)
), nrow = 3, ncol = 4, byrow = TRUE)

# 2. Definir nomes
colnames(dados_refeicao) <- c("$10-19", "$20-29", "$30-39", "$40-49")
rownames(dados_refeicao) <- c("Good", "Very Good", "Excellent")

# 3. Criar o gráfico de barras empilhadas
barplot(dados_refeicao,
        main = "Qualidade da Refeição por Preço", # Título
        xlab = "Preço da Refeição (Meal Price)", # Nome eixo X
        ylab = "Porcentagem (%)", # Nome eixo Y
        col = c("lightblue", "lightyellow", "lightgreen"),
        legend.text = rownames(dados_refeicao), # Legenda
        args.legend = list(x = "topright"))

Questão 3

data(airquality)

dados_maio <- airquality[airquality$Month == 5, ]

temp_celsius <- (dados_maio$Temp - 32) / 1.8

# 4. Criar o histograma
hist(temp_celsius,
     prob = TRUE,
     col = "lightblue", 
     main = "Histograma da Temperatura em Maio (Celsius)",
     xlab = "Temperatura (°C)", 
     ylab = "Densidade")

# 5. Adicionar curva de densidade [cite: 95]
lines(density(temp_celsius, na.rm = TRUE), col = "red", lwd = 2)

Questão 4

sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt", header = TRUE)

sales_by_country <- aggregate(SALES ~ COUNTRY, data = sales, FUN = sum)

pct <- round(sales_by_country$SALES / sum(sales_by_country$SALES) * 100)
labels_pct <- paste(pct, "%", sep = "")
cores <- rainbow(length(sales_by_country$COUNTRY))

par(mar = c(5, 4, 4, 7) + 0.1)

pie(sales_by_country$SALES,
    labels = labels_pct,
    col = cores,
    main = "Total de Vendas por País"
)

par(xpd = TRUE)
legend(x = 1.3, y = 1.0,
       legend = sales_by_country$COUNTRY,
       fill = cores,
       cex = 0.8
)

Questão 5

data(InsectSprays)

# 2. Criar o boxplot
boxplot(count ~ spray,
        data = InsectSprays,
        main = "Contagem de Insetos por Tipo de Inseticida", # Título
        xlab = "Tipo de Inseticida", # Nome do eixo X
        ylab = "Contagem de Insetos", # Nome do eixo Y
        col = "yellow",  # Cor de preenchimento
        outline = FALSE  # Remove outliers
)

Questão 6

# 1. Função para processar os dados de cada arquivo
processar_dados <- function(filepath) {
  
  df <- read.csv(filepath, stringsAsFactors = FALSE)
  df$currentTime <- as.POSIXct(df$currentTime, format = "%Y-%m-%d %H:%M:%OS")

  min_time <- min(df$currentTime, na.rm = TRUE)
  df$Time_hour <- as.numeric(difftime(df$currentTime, min_time, units = "hours"))

  df$usedMemory <- gsub(",", ".", df$usedMemory, fixed = TRUE)
  
  # 2. Extrair valores e unidades
  valores <- as.numeric(gsub("([0-9\\.]+).*", "\\1", df$usedMemory))
  unidades <- gsub("[0-9\\.\\s]+", "", df$usedMemory)
  
  # 3. Calcular multiplicador para converter para MB
  multiplicador <- ifelse(unidades == "TB", 1000000,
                       ifelse(unidades == "GB", 1024,
                              ifelse(unidades == "KB", 1/1024, 1))) # '1' para MB
  
  df$usedMemory_MB <- valores * multiplicador
  
  return(df)
}

# 2. Função para plotar
plotar_memoria <- function(df, titulo) {
  plot(df$Time_hour, df$usedMemory_MB,
       type = 'l', main = titulo, xlab = "Time (hour)", ylab = "Used Memory (MB)",
       xlim = range(df$Time_hour, na.rm = TRUE),
       ylim = range(df$usedMemory_MB, na.rm = TRUE))
}

# 3. Definir nomes dos arquivos e títulos (nomes sem espaço)
arquivos <- c("monitoringCloudData_NONE.csv", "monitoringCloudData_0.1.csv",
            "monitoringCloudData_0.5.csv", "monitoringCloudData_1.csv")
titulos <- c("Memory Analysis (None Workload)", "Memory Analysis (Workload of 0.1)",
             "Memory Analysis (Workload of 0.5)", "Memory Analysis (Workload of 1.0)")

# 4. Definir layout 2x2 
graphics::layout(matrix(c(1, 2, 3, 4), 2, 2, byrow = TRUE))

# 5. Loop para ler, processar e plotar cada arquivo
tryCatch({
  for (i in 1:4) {
    dados <- processar_dados(arquivos[i])
    plotar_memoria(dados, titulos[i])
  }
}, error = function(e) {
  print("Erro ao ler ou processar os arquivos CSV da Questão 6.")
  print(e)
})

# 6. Resetar o layout para o padrão
graphics::layout(1)

Questão 7

# Filtra e pega o Top 10
top_10_paises <- netflix_df %>%
  filter(country != "" & !is.na(country) & !grepl(",", country)) %>%
  count(country, sort = TRUE) %>%
  top_n(10, n)

# Cria o gráfico
fig7 <- plot_ly(top_10_paises,
                labels = ~country,
                values = ~n,
                type = 'pie',
                textinfo = 'label+percent',
                insidetextorientation = 'radial') %>%
  layout(title = "Top 10 Países com Mais Conteúdo (País Único)")

print(fig7)

Questão 8

dados_tabela <- top_10_paises %>%
  rename(País = country, "Total de conteúdos" = n)

fig8 <- plot_ly(
  type = 'table',
  header = list(
    values = names(dados_tabela),
    fill = list(color = "grey"),   # Fundo cinza
    font = list(color = "white"), # Letra branca
    align = "center"              # Centralizado
  ),
  cells = list(
    values = unname(as.list(dados_tabela)),
    align = "center" # Células centralizadas
  )
)

print(fig8)

Questão 9

conteudo_por_decada <- netflix_df %>%
  filter(!is.na(release_year) & type %in% c("Movie", "TV Show")) %>%
  mutate(Decada = floor(release_year / 10) * 10) %>%
  group_by(Decada, type) %>%
  summarise(Quantidade = n(), .groups = 'drop') %>%
  mutate(Tipo = ifelse(type == "Movie", "Movies", "TV Series"))

fig9 <- plot_ly(conteudo_por_decada,
                x = ~Decada,
                y = ~Quantidade,
                color = ~Tipo,
                type = 'scatter',
                mode = 'lines+markers',
                # Cores: azul para séries, amarela (laranja) para filmes
                colors = c("Movies" = "orange", "TV Series" = "blue")) %>%
  layout(title = "Quantidade de Conteúdo por Década",
         xaxis = list(title = "Década"),
         yaxis = list(title = "Qnd. Conteúdo"))

print(fig9)

Questão 10

generos_alvo <- c("Dramas", "Action & Adventure", "Comedies")

dados_genero <- netflix_df %>%
  filter(type == "Movie" &
           release_year >= 2000 & release_year <= 2010) %>%
  mutate(Primeiro_Genero = sapply(strsplit(listed_in, ","), function(x) trimws(x[1]))) %>%
  filter(Primeiro_Genero %in% generos_alvo) %>%
  group_by(release_year, Primeiro_Genero) %>%
  summarise(Quantidade = n(), .groups = 'drop') %>%
  mutate(Genero = case_when(
    Primeiro_Genero == "Dramas" ~ "Drama",
    Primeiro_Genero == "Action & Adventure" ~ "Ação e Aventura",
    Primeiro_Genero == "Comedies" ~ "Comédia"
  ))

fig10 <- plot_ly(dados_genero,
                 x = ~release_year,
                 y = ~Quantidade,
                 color = ~Genero,
                 type = 'bar') %>%
  layout(
    barmode = 'group',
    xaxis = list(title = "Ano de Lançamento"),
    yaxis = list(title = "Qnt. de Lançamentos")
  )

print(fig10)