Exercício 12

Questão 1

Carregando os 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

# Ajuste de margens
par(mar = c(5, 5, 4, 2) + 0.1)

# Criar o gráfico de linha
plot(clock, MRT_1F,
type = "b",
col = "black",
pch = 4,
ylim = c(0, 520),
xlab = "Time between Things requests (seconds)",
ylab = "Response Time (sec.)",
main = "")

# Adicionar as linhas
lines(clock, MRT_3F, type = "b", col = "goldenrod1", pch = 3)
lines(clock, MRT_5F, type = "b", col = "red", pch = 2)
lines(clock, MRT_10F, type = "b", col = "blue", pch = 1)
lines(clock, MRT_15F, type = "b", col = "purple", pch = 8)
lines(clock, MRT_sem_F, type = "b", col = "green", pch = 6)

# Legenda
legend("topright",
legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
col = c("black", "goldenrod1", "red", "blue", "purple", "green"),
lty = 1,
pch = c(4, 3, 2, 1, 8, 6),
cex = 0.8)

Gráfico de Barras

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

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

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

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

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

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

Questão 2

Carregando os dados

# Criando o data frame com base na tabela
quality_data <- data.frame(
  Quality = c("Good", "Very Good", "Excellent"),
  `10-19` = c(53.8, 43.6, 2.6),
  `20-29` = c(33.9, 54.2, 11.9),
  `30-39` = c(2.6, 60.5, 36.8),
  `40-49` = c(0.0, 21.4, 78.6)
)

Gráfico de Barras

# Transpor os dados para que as faixas de preço fiquem nas colunas
quality_matrix <- as.matrix(quality_data[, -1])
rownames(quality_matrix) <- quality_data$Quality

colors <- c("#FF9999", "#66B2FF", "#99FF99")

# Criar gráfico de barras
barplot(quality_matrix,
beside = TRUE,
col = colors,
ylim = c(0, 100),
xlab = "Faixa de Preço da Refeição (US$)",
ylab = "Percentual (%)",
main = "Distribuição da Qualidade da Refeição por Faixa de Preço")

# Adicionar legenda
legend("top", inset = c(0, 0.03),
       legend = rownames(quality_matrix),
       fill = colors,
       title = "Qualidade da refeição",
       horiz = TRUE,
       bty = "n",
       cex = 0.9)

Questão 3

Histograma

data(airquality)

temp_maio <- airquality[airquality$Month == 5, "Temp"]

temp_maio_C <- (temp_maio - 32) / 1.8

# Criar histograma
hist(
  temp_maio_C,
  col = "lightblue",
  probability = T,
  main = "Histograma da temperatura de Maio",
  xlab = "Temperatura (°C)",
  ylab = "Frequência"
)

lines(density(temp_maio_C), col = "red")

#Adicionar legenda
legend("topright",
legend = c("Curva de Densidade"),
col = "red",
lwd = 2,
bty = "n")

Questão 4

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

pct <- round(sales$SALES/sum(sales$SALES)*100)
lbls <- paste(sales$COUNTRY, pct)
lbls <- paste(lbls, "%", sep="")

pie(sales$SALES, labels = lbls,
    main = "Sales by Country",
    col=rainbow(nrow(sales)))

Questão 5

Gráfico Boxplot

data(InsectSprays)

boxplot(count ~ spray,
        data = InsectSprays,
        main = "Insetos tratados com Inseticidas",
        col = "yellow",
        outline = FALSE,
        xlab = "Inseticidas",
        ylab = "Contagem de insetos")

Questão 6

# Função auxiliar para converter memória em MB
converter_para_MB <- function(valor) {
  valor <- trimws(valor)
  valor <- gsub(",", ".", valor)
  
  if (grepl("TB", valor, ignore.case = TRUE)) {
    return(as.numeric(gsub("[^0-9.]", "", valor)) * 1000000)
  } else if (grepl("GB", valor, ignore.case = TRUE)) {
    return(as.numeric(gsub("[^0-9.]", "", valor)) * 1024)
  } else if (grepl("MB", valor, ignore.case = TRUE)) {
    return(as.numeric(gsub("[^0-9.]", "", valor)))
  } else if (grepl("KB", valor, ignore.case = TRUE)) {
    return(as.numeric(gsub("[^0-9.]", "", valor)) / 1024)
  } else {
    return(as.numeric(valor))
  }
}

# Função para processar cada CSV
processar_dados <- function(arquivo) {
  dados <- read.csv(arquivo, header = TRUE, sep = ",", stringsAsFactors = FALSE)
  
  # Converter tempo em horas contínuas
  dados$currentTime <- as.POSIXct(dados$currentTime, format="%Y-%m-%d %H:%M:%S")
  tempo_inicial <- min(dados$currentTime, na.rm = TRUE)
  dados$tempo_horas <- as.numeric(difftime(dados$currentTime, tempo_inicial, units = "hours"))
  
  # Converter memória para MB
  dados$usedMemory <- sapply(dados$usedMemory, converter_para_MB)
  
  return(dados)
}

# Ler e processar os 4 arquivos
dados_none <- processar_dados("C:/Users/danta/OneDrive/Documentos/monitoringCloudData_NONE.csv")
dados_01   <- processar_dados("C:/Users/danta/OneDrive/Documentos/monitoringCloudData_0.1.csv")
dados_05   <- processar_dados("C:/Users/danta/OneDrive/Documentos/monitoringCloudData_0.5.csv")
dados_1    <- processar_dados("C:/Users/danta/OneDrive/Documentos/monitoringCloudData_1.csv")

# Configuração do layout (2x2)
layout(matrix(1:4, nrow = 2, byrow = TRUE))

# Gráficos de linha
plot(dados_none$tempo_horas, dados_none$usedMemory, type="l",
     main="Memory Analysis (None Workload)",
     xlab="Time (hour)", ylab="Used Memory (MB)")

plot(dados_01$tempo_horas, dados_01$usedMemory, type="l",
     main="Memory Analysis (Workload of 0.1)",
     xlab="Time (hour)", ylab="Used Memory (MB)")

plot(dados_05$tempo_horas, dados_05$usedMemory, type="l",
     main="Memory Analysis (Workload of 0.5)",
     xlab="Time (hour)", ylab="Used Memory (MB)")

plot(dados_1$tempo_horas, dados_1$usedMemory, type="l",
     main="Memory Analysis (Workload of 1.0)",
     xlab="Time (hour)", ylab="Used Memory (MB)")

Questão 7

# Carregar os pacotes necessários
library(dplyr)
library(plotly)

# 1. Carregar os dados
netflix <- read.csv("C:/Users/danta/OneDrive/Documentos/netflix_titles.csv", stringsAsFactors = FALSE)

# Filtrar apenas os conteúdos com apenas um país de origem
netflix_filtrado <- netflix %>%
  filter(!is.na(country)) %>%
  mutate(n_paises = sapply(strsplit(country, ","), length)) %>%
  filter(n_paises == 1)

# Agrupar por país e obter os 10 países com mais conteúdo
top10 <- netflix_filtrado %>%
  group_by(country) %>%
  summarise(contagem = n()) %>%
  arrange(desc(contagem)) %>%
  slice_head(n = 10)

# Preparar os dados para o gráfico de pizza
top10 <- top10 %>% 
  mutate(pct = round(100 * contagem / sum(contagem), 1),
         label = paste(country, pct, "%"))

#Criar o gráfico de pizza
plot_ly(top10,
           labels = ~country,
           values = ~contagem,
           type = "pie",
           textinfo = "percent",
           insidetextorientation = 'radial') %>%
  layout(title = "Top 10 Países com mais conteúdos na Netflix")

Questão 8

# Criar tabela
fig <- plot_ly(
  type = 'table',
  header = list(
    values = c("<b>País</b>", "<b>Total de Conteúdos</b>"),
    align = c('center', 'center'),
    line = list(width = 1, color = 'black'),
    fill = list(color = 'pink'),
    font = list(color = 'black', size = 14)
  ),
  cells = list(
    values = list(top10$country, top10$contagem),
    align = c('center', 'center'),
    line = list(width = 1, color = 'black'),
    fill = list(color = 'white'),
    font = list(color = 'black', size = 12)
  )
)

fig <- fig %>% layout(title = "Top 10 Países com mais conteúdos na Netflix")
fig

Questão 9

library(dplyr)
library(plotly)

# Carregar o dataset
netflix <- read.csv("C:/Users/danta/OneDrive/Documentos/netflix_titles.csv", stringsAsFactors = FALSE)

# Remover registros sem ano de lançamento
netflix <- netflix %>% filter(!is.na(release_year))

# Criar coluna de década
netflix <- netflix %>%
  mutate(decada = floor(release_year / 10) * 10)

# Contar quantidade de conteúdos por década e tipo
dados_decada <- netflix %>%
  group_by(decada, type) %>%
  summarise(qtd_conteudo = n(), .groups = "drop")

# Garantir ordem das décadas
dados_decada <- dados_decada %>% arrange(decada)

dados_decada$type <- factor(dados_decada$type, levels = c("TV Show", "Movie"))

# Criar gráfico de linhas
fig <- plot_ly(dados_decada, x = ~decada, y = ~qtd_conteudo,
               color = ~type,
               colors = c("blue", "orange"),
               type = 'scatter', mode = 'lines+markers') %>%
  layout(title = "Quantidade de conteúdos da Netflix por década",
         xaxis = list(title = "Década"),
         yaxis = list(title = "Qtd. Conteúdo"),
         legend = list(title = list(text = "Tipo de Conteúdo"),
                       traceorder = "normal"))
fig

Questão 10

library(dplyr)
library(plotly)

# Filtrar apenas filmes
filmes <- netflix %>%
  filter(type == "Movie", !is.na(listed_in), !is.na(release_year)) %>%
  # Extrair o primeiro gênero da lista
  mutate(genero = trimws(sub(",.*", "", listed_in))) %>%
  # Filtrar anos entre 2000 e 2010
  filter(release_year >= 2000 & release_year <= 2010) %>%
  # Filtrar apenas os gêneros de interesse
  filter(genero %in% c("Dramas", "Action & Adventure", "Comedies"))

# Agrupar e contar lançamentos por ano e gênero
dados_genero <- filmes %>%
  group_by(release_year, genero) %>%
  summarise(qtd_lancamentos = n(), .groups = "drop")

# Criar gráfico de barras
fig <- plot_ly(dados_genero, 
               x = ~release_year, 
               y = ~qtd_lancamentos, 
               color = ~genero,
               colors = c("blue", "orange", "green"),
               type = "bar") %>%
  layout(barmode = "group",
         title = "Quantidade de filmes por gênero (2000–2010)",
         xaxis = list(title = "Ano de Lançamento"),
         yaxis = list(title = "Qtd. de Lançamentos"),
         legend = list(title = list(text = "Gênero")))

fig