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)

# Configurando o layout para plotar 2 gráficos, um ao lado do outro
layout(matrix(c(1, 2), nrow = 1, ncol = 2))

# 1) Gráfico de Linhas (MRT por clock)
plot(clock, MRT_1F, type = "l", col = "red", ylim = c(0, max(MRT_1F)), 
     ylab = "Tempo Médio de Resposta (MRT)", xlab = "Clock", 
     main = "MRT por Clock")
lines(clock, MRT_3F, col = "blue")
lines(clock, MRT_5F, col = "green")
lines(clock, MRT_10F, col = "purple")
lines(clock, MRT_15F, col = "orange")
lines(clock, MRT_sem_F, col = "black")
legend("topright", legend = c("1F", "3F", "5F", "10F", "15F", "Sem F"), 
       col = c("red", "blue", "green", "purple", "orange", "black"), lty = 1, cex = 0.6)

# 2) Gráfico de Barras usando Escala Logarítmica
dados_barras <- rbind(MRT_1F, MRT_10F)
barplot(dados_barras, beside = TRUE, log = "y", col = c("#E6E6E6", "#666666"),
        names.arg = clock, xlab = "Clock", ylab = "MRT (Escala Log)", 
        main = "Comparativo de MRT (Escala Log)")
legend("topright", legend = c("MRT 1F", "MRT 10F"), fill = c("#E6E6E6", "#666666"), cex = 0.7)

Questão 2

dados_qualidade <- matrix(
  c(15,  5,  2,   # Preço Baixo
    10, 20,  5,   # Preço Médio
     2, 10, 25),  # Preço Alto
  nrow = 3, 
  byrow = TRUE
)

rownames(dados_qualidade) <- c("Baixo", "Médio", "Alto")
colnames(dados_qualidade) <- c("Regular", "Boa", "Excelente")

barplot(dados_qualidade, 
        main = "Qualidade da Refeição de Acordo com o Preço",
        xlab = "Qualidade da Refeição", 
        ylab = "Quantidade", 
        col = c("#FF6666", "#66B2FF", "#99FF99"),
        legend.text = rownames(dados_qualidade),
        args.legend = list(title = "Preço", x = "topleft"))

Questão 3

dados_maio <- subset(airquality, Month == 5)

# Conversão de Fahrenheit para Celsius
dados_maio$TempC <- (dados_maio$Temp - 32) / 1.8

# Histograma com curva de densidade.
# freq=FALSE é obrigatório para que o eixo y represente densidade
hist(dados_maio$TempC, freq = FALSE, 
     main = "Temperaturas de Maio (airquality)",
     xlab = "Temperatura (°C)", 
     ylab = "Densidade", 
     col = "lightblue", border = "black")

# Adicionando a curva de densidade
lines(density(dados_maio$TempC, na.rm = TRUE), col = "red", lwd = 2)

Questão 4

# Lendo os dados online
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)
# Porcentagem total de cada fatia
porcentagem <- round(sales$SALES / sum(sales$SALES) * 100, 1)
rotulos <- paste0(porcentagem, "%")

cores <- rainbow(nrow(sales))

# Gráfico de Pizza
pie(sales$SALES, labels = rotulos, col = cores, main = "Porcentagem de Vendas por País")

# Adicionando a Legenda
legend("topleft", legend = sales$COUNTRY, fill = cores, cex = 0.8)

Questão 5

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

Questão 6

processar_monitoramento <- function(caminho_arquivo) {
  df <- read.csv(caminho_arquivo, stringsAsFactors = FALSE)
  
  # 1. Transformar currentTime em horas contínuas usando difftime()
  df$currentTime <- as.POSIXct(df$currentTime, format="%Y-%m-%d %H:%M:%OS")
  tempo_inicial <- min(df$currentTime, na.rm = TRUE)
  df$TempoHoras <- as.numeric(difftime(df$currentTime, tempo_inicial, units="hours"))
  
  # 2. Converter usedMemory com Regex para MB
  df$MemoriaMB <- sapply(df$usedMemory, function(x) {
    # Isola o valor numérico
    valor <- as.numeric(str_extract(x, "[0-9.]+"))
    # Isola a unidade (B, MB, GB, TB)
    unidade <- str_extract(x, "[A-Za-z]+")
    
    # Conversões
    if (is.na(unidade) || unidade == "MB") {
      return(valor)
    } else if (unidade == "GB") {
      return(valor * 1024)
    } else if (unidade == "TB") {
      return(valor * 1000000)
    }
    return(valor)
  })
  
  return(df)
}

# Lendo as 4 bases de dados
df_01 <- processar_monitoramento("monitoringCloudData_0.1.csv")
df_05 <- processar_monitoramento("monitoringCloudData_0.5.csv")
df_1 <- processar_monitoramento("monitoringCloudData_1.csv")
df_none <- processar_monitoramento("monitoringCloudData_NONE.csv")

layout(matrix(1:4, nrow=2, ncol=2))

plot(df_01$TempoHoras, df_01$MemoriaMB, type="l", col="blue", 
     main="Monitoramento 0.1", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")

plot(df_05$TempoHoras, df_05$MemoriaMB, type="l", col="red", 
     main="Monitoramento 0.5", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")

plot(df_1$TempoHoras, df_1$MemoriaMB, type="l", col="green", 
     main="Monitoramento 1.0", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")

plot(df_none$TempoHoras, df_none$MemoriaMB, type="l", col="purple", 
     main="Monitoramento NONE", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")

Questão 7

# Lendo a base do Netflix
netflix <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)

# Tratamento para achar apenas UM país
q7_dados <- netflix %>%
  filter(country != "", !str_detect(country, ",")) %>%
  count(country) %>%
  top_n(10, n) %>%
  arrange(desc(n))

# Plotly - Gráfico de Pizza
plot_ly(q7_dados, labels = ~country, values = ~n, type = 'pie') %>%
  layout(title = 'Top 10 Países com Mais Conteúdos (País de Origem Único)')

Questão 8

plot_ly(
  type = 'table',
  header = list(
    values = c("<b>País</b>", "<b>Total de conteúdos</b>"),
    align = c('center', 'center'),
    line = list(color = 'black', width = 1),
    fill = list(color = 'grey'),
    font = list(color = 'white', size = 14)
  ),
  cells = list(
    values = rbind(q7_dados$country, q7_dados$n),
    align = c('center', 'center'),
    line = list(color = 'black', width = 1),
    fill = list(color = 'white'),
    font = list(color = 'black', size = 12)
  )
) %>%
  layout(title = "Tabela do Top 10 Países")

Questão 9

q9_dados <- netflix %>%
  filter(!is.na(release_year)) %>%
  mutate(decada = floor(release_year / 10) * 10) %>%
  group_by(decada, type) %>%
  summarise(quantidade = n(), .groups = "drop")

plot_ly(q9_dados, x = ~decada, y = ~quantidade, color = ~type, 
        colors = c("Movie" = "gold", "TV Show" = "blue"),
        type = 'scatter', mode = 'lines+markers') %>%
  layout(title = "Quantidade de Conteúdo Netflix por Década",
         xaxis = list(title = "Década"),
         yaxis = list(title = "Quantidade de Conteúdo"))

Questão 10

# Filtrando filmes de 2000 a 2010
q10_dados <- netflix %>%
  filter(type == "Movie", release_year >= 2000, release_year <= 2010) %>%
  # Extraindo apenas o primeiro gênero da coluna listed_in
  mutate(primeiro_genero = str_trim(sapply(str_split(listed_in, ","), `[`, 1))) %>%
  filter(primeiro_genero %in% c("Dramas", "Action & Adventure", "Comedies")) %>%
  group_by(release_year, primeiro_genero) %>%
  summarise(quantidade = n(), .groups = "drop")

# Plotly - Barras Lado a Lado
plot_ly(q10_dados, x = ~release_year, y = ~quantidade, color = ~primeiro_genero, type = 'bar') %>%
  layout(title = "Quantidade de Filmes Lançados por Gênero (2000 - 2010)",
         xaxis = list(title = "Ano de Lançamento"),
         yaxis = list(title = "Quantidade de Filmes"),
         barmode = 'group')