Questão 1

Gráficos

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

# Configurar layout: 2 linhas, 1 coluna
layout(matrix(c(1, 2), nrow = 2, ncol = 1))

# Primeiro gráfico: Linhas
plot(clock, MRT_1F, type = "o", col = "black", ylim = c(0, 550),
     xlab = "Clock (GHz)", ylab = "MRT (ms)", 
     main = "Mean Response Time vs Clock Speed", pch = 16)
lines(clock, MRT_3F, type = "o", col = "red", pch = 16)
lines(clock, MRT_5F, type = "o", col = "blue", pch = 16)
lines(clock, MRT_10F, type = "o", col = "green", pch = 16)
lines(clock, MRT_15F, type = "o", col = "purple", pch = 16)
lines(clock, MRT_sem_F, type = "o", col = "orange", pch = 16)
legend("topright", legend = c("1F", "3F", "5F", "10F", "15F", "sem F"),
       col = c("black", "red", "blue", "green", "purple", "orange"),
       lty = 1, pch = 16, cex = 0.8)

# Segundo gráfico: Barras com escala logarítmica
valores_iniciais <- c(MRT_1F[1], MRT_3F[1], MRT_5F[1], 
                      MRT_10F[1], MRT_15F[1], MRT_sem_F[1])
nomes <- c("1F", "3F", "5F", "10F", "15F", "sem F")
cores <- c("#E6E6E6", "#666666", "#E6E6E6", "#666666", "#E6E6E6", "#666666")

barplot(valores_iniciais, names.arg = nomes, log = "y",
        col = cores, main = "Initial MRT Values (Log Scale)",
        ylab = "MRT (ms) - Log Scale", xlab = "Configuration")

# Resetar layout
layout(1)

Questão 2

Gráfico de Barras Empilhadas

# Dados da tabela de qualidade de refeição
dados <- 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,
                ncol = 4,
                byrow = TRUE,)
rownames(dados) <- c("Bom", "Muito Bom", "Excelente")
colnames(dados) <- c("10-19", "20-29", "30-39", "40-49")

# Gráfico de barras empilhadas
barplot(dados, beside = FALSE, col = c("#FFD93D", "#4ECDC4", "#9D3"),
        main = "Qualidade da Refeição por Categoria de Preço",
        xlab = "Categoria de Preço", ylab = "Frequência",
        legend.text = rownames(dados),
        args.legend = list(x = "topright", bty = "n"))

Questão 3

Histograma de Temperaturas

# Carregar dataset airquality
data(airquality)

# Filtrar dados de maio e converter para Celsius
temp_maio <- airquality$Temp[airquality$Month == 5]
temp_celsius <- (temp_maio - 32) / 1.8

# Criar histograma
hist(temp_celsius, freq = FALSE, col = "lightblue", border = "white",
     main = "Distribuição de Temperaturas em Maio",
     xlab = "Temperatura (°C)", ylab = "Densidade")

# Adicionar curva de densidade
lines(density(temp_celsius), col = "darkblue", lwd = 2)

Questão 4

Gráfico de Pizza

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

# Calcular total de vendas por país
# Somar todas as colunas numéricas para cada país
vendas_pais <- aggregate(. ~ COUNTRY, data = sales, sum)

# Calcular o total somando as colunas numéricas
if (ncol(vendas_pais) > 2) {
  vendas_pais$Total <- rowSums(vendas_pais[, -1])
} else {
  vendas_pais$Total <- vendas_pais[, 2]
}

# Calcular porcentagens
porcentagens <- round(100 * vendas_pais$Total / sum(vendas_pais$Total), 1)
labels <- paste(vendas_pais$COUNTRY, "\n", porcentagens, "%", sep = "")

# Cores
cores <- rainbow(nrow(vendas_pais))

# Gráfico de pizza
pie(vendas_pais$Total, labels = labels, col = cores,
    main = "Porcentagem de Vendas Totais por País")

# Adicionar legenda
legend("topright", legend = vendas_pais$COUNTRY, fill = cores, 
       cex = 0.8, bty = "n")

Questão 5

Boxplot de Inseticidas

# Carregar dados
data(InsectSprays)

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

Questão 6

Gráficos de Monitoramento

# Função para processar os dados
processar_dados <- function(arquivo) {
  dados <- read.csv(arquivo, stringsAsFactors = FALSE)
  
  # Converter currentTime para formato de data/hora
  dados$currentTime <- as.POSIXct(dados$currentTime, format = "%Y-%m-%d %H:%M:%S")
  
  # Calcular tempo em horas desde o início
  tempo_inicio <- min(dados$currentTime, na.rm = TRUE)
  dados$tempo_horas <- as.numeric(difftime(dados$currentTime, tempo_inicio, units = "hours"))
  
  # Processar usedMemory para megabytes
  dados$usedMemory_MB <- sapply(dados$usedMemory, function(x) {
    x <- trimws(as.character(x))
    
    if (grepl("TB", x, ignore.case = TRUE)) {
      valor <- as.numeric(gsub("[^0-9.]", "", x))
      return(valor * 1000000)
    } else if (grepl("GB", x, ignore.case = TRUE)) {
      valor <- as.numeric(gsub("[^0-9.]", "", x))
      return(valor * 1024)
    } else if (grepl("MB", x, ignore.case = TRUE)) {
      valor <- as.numeric(gsub("[^0-9.]", "", x))
      return(valor)
    } else {
      # Tentar converter diretamente como número
      valor <- as.numeric(gsub("[^0-9.]", "", x))
      if (!is.na(valor)) return(valor)
    }
    return(NA)
  })
  
  # Remover linhas com NA
  dados <- dados[!is.na(dados$usedMemory_MB) & !is.na(dados$tempo_horas), ]
  
  return(dados)
}

# Carregar e processar os 4 arquivos
dados_01 <- processar_dados("monitoringCloudData_0.1.csv")
dados_05 <- processar_dados("monitoringCloudData_0.5.csv")
dados_1 <- processar_dados("monitoringCloudData_1.csv")
dados_NONE <- processar_dados("monitoringCloudData_NONE.csv")

# Configurar layout: 2x2
layout(matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2, byrow = TRUE))

# Gráfico 1: 0.1
plot(dados_01$tempo_horas, dados_01$usedMemory_MB, type = "l", col = "blue",
     main = "Monitoring 0.1", xlab = "Time (hours)", ylab = "Used Memory (MB)")

# Gráfico 2: 0.5
plot(dados_05$tempo_horas, dados_05$usedMemory_MB, type = "l", col = "red",
     main = "Monitoring 0.5", xlab = "Time (hours)", ylab = "Used Memory (MB)")

# Gráfico 3: 1
plot(dados_1$tempo_horas, dados_1$usedMemory_MB, type = "l", col = "green",
     main = "Monitoring 1", xlab = "Time (hours)", ylab = "Used Memory (MB)")

# Gráfico 4: NONE
plot(dados_NONE$tempo_horas, dados_NONE$usedMemory_MB, type = "l", col = "purple",
     main = "Monitoring NONE", xlab = "Time (hours)", ylab = "Used Memory (MB)")

# Resetar layout
layout(1)
library(plotly)

# Carregar dados Netflix
netflix <- read.csv("netflix_titles.csv")

# Filtrar conteúdos com apenas um país
netflix_um_pais <- netflix[!grepl(",", netflix$country) & netflix$country != "", ]

# Contar conteúdos por país
contagem_pais <- as.data.frame(table(netflix_um_pais$country))
colnames(contagem_pais) <- c("Pais", "Total")

# Ordenar e pegar top 10
top10_pais <- contagem_pais[order(-contagem_pais$Total), ][1:10, ]

# Criar gráfico de pizza
plot_ly(top10_pais, labels = ~Pais, values = ~Total, type = 'pie',
        textposition = 'inside', textinfo = 'label+percent') %>%
  layout(title = "Top 10 Países com Mais Conteúdo na Netflix")

Questão 8

Tabela - Top 10 Países

library(plotly)

# Usar dados do exercício anterior
top10_pais <- top10_pais[order(-top10_pais$Total), ]

# Converter Pais para character para evitar problemas com factors
top10_pais$Pais <- as.character(top10_pais$Pais)

# Criar tabela
plot_ly(
  type = 'table',
  header = list(
    values = c("País", "Total de conteúdos"),
    align = c('center', 'center'),
    line = list(width = 1, color = 'black'),
    fill = list(color = 'grey'),
    font = list(family = "Arial", size = 14, color = "white")
  ),
  cells = list(
    values = list(top10_pais$Pais, top10_pais$Total),
    align = c('center', 'center'),
    line = list(color = "black", width = 1),
    font = list(family = "Arial", size = 12, color = c("black"))
  )
)

Questão 9

Gráfico de Linha - Conteúdo por Década

library(plotly)

# Carregar dados
netflix <- read.csv("netflix_titles.csv")

# Calcular década
netflix$decada <- floor(netflix$release_year / 10) * 10

# Separar por tipo
series <- netflix[netflix$type == "TV Show", ]
filmes <- netflix[netflix$type == "Movie", ]

# Contar por década
contagem_series <- as.data.frame(table(series$decada))
colnames(contagem_series) <- c("Decada", "Total")
contagem_series$Decada <- as.numeric(as.character(contagem_series$Decada))

contagem_filmes <- as.data.frame(table(filmes$decada))
colnames(contagem_filmes) <- c("Decada", "Total")
contagem_filmes$Decada <- as.numeric(as.character(contagem_filmes$Decada))

# Criar gráfico
plot_ly() %>%
  add_trace(data = contagem_series, x = ~Decada, y = ~Total, 
            type = 'scatter', mode = 'lines+markers',
            name = 'Séries', line = list(color = 'blue')) %>%
  add_trace(data = contagem_filmes, x = ~Decada, y = ~Total,
            type = 'scatter', mode = 'lines+markers',
            name = 'Filmes', line = list(color = 'yellow')) %>%
  layout(title = "Quantidade de Conteúdo por Década",
         xaxis = list(title = "Década"),
         yaxis = list(title = "Quantidade de Conteúdo"))

Questão 10

Gráfico de Barras - Gêneros 2000-2010

library(plotly)

# Carregar dados
netflix <- read.csv("netflix_titles.csv")

# Filtrar filmes entre 2000 e 2010
filmes <- netflix[netflix$type == "Movie" & 
                  netflix$release_year >= 2000 & 
                  netflix$release_year <= 2010, ]

# Extrair primeiro gênero
filmes$primeiro_genero <- sapply(strsplit(as.character(filmes$listed_in), ","), 
                                 function(x) trimws(x[1]))

# Filtrar apenas os gêneros de interesse
generos_interesse <- c("Dramas", "Action & Adventure", "Comedies")
filmes_filtrados <- filmes[filmes$primeiro_genero %in% generos_interesse, ]

# Criar tabela de contagem
contagem <- table(filmes_filtrados$release_year, filmes_filtrados$primeiro_genero)
contagem_df <- as.data.frame(contagem)
colnames(contagem_df) <- c("Ano", "Genero", "Quantidade")

# Criar gráfico de barras lado a lado
plot_ly(contagem_df, x = ~Ano, y = ~Quantidade, color = ~Genero, 
        type = 'bar', colors = c("red", "blue", "green")) %>%
  layout(title = "Quantidade de Filmes por Gênero (2000-2010)",
         xaxis = list(title = "Ano"),
         yaxis = list(title = "Quantidade de Filmes"),
         barmode = 'group')