Questão 1

Gráfico de linha contendo várias linhas:

# vetores contendo os dados dos gráficos

clock <- c(0.1, 0.5, 1, 1.5, 2, 2.5, 3)
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)

# grafico 1 - plot de referência
plot(clock, # eixo x
     MRT_1F, # eixo y
     type="o", # tipo da linha
     pch=4, # simbolo das observacoes
     cex=2, # tamanho dos simbolos
     col="black", # coloracao da linha
 #main = "Grafico 1", # titulo do grafico
  xlab="Time between Things request", # nome do eixo x
  ylab="Response time (s)", # nome do eixo y
  cex.lab=1.2, # tamanho fonte do nome dos eixos
 cex.axis=1.5,  #tamanho fonte da numeração dos eixos, 
 cex.main=2 # tamanho fonte titulo
)

# outras linhas no grafico 1
lines(clock, MRT_3F,type="o",col="yellow",pch=11,lwd=2)
lines(clock, MRT_5F,type="o",col="red",pch=1,lwd=2)
lines(clock, MRT_10F,type="o",col="blue",pch=2,lwd=2)
lines(clock, MRT_15F,type="o",col="purple",pch=5,lwd=2)
lines(clock, MRT_sem_F,type="o",col="green",pch=4,lwd=2)

# legenda do grafico
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, 11, 1, 2, 5, 4), # símbolos
       lty = 1)

Gráfico Matricial:

#grafico com escala logaritmica  (log = "y") e cores "#E6E6E6", "#666666"
par(mfrow = c(3, 2)) # Criando um gráfico matricial 3 x 2 

valores1 <- matrix(c(MRT_sem_F,MRT_1F), nrow=2, ncol=7,byrow=T)
valores3 <- matrix(c(MRT_sem_F,MRT_3F), nrow=2, ncol=7,byrow=T)
valores5 <- matrix(c(MRT_sem_F,MRT_5F), nrow=2, ncol=7,byrow=T)
valores10 <-matrix(c(MRT_sem_F,MRT_10F), nrow=2, ncol=7,byrow=T)
valores15 <- matrix(c(MRT_sem_F,MRT_15F), nrow=2, ncol=7,byrow=T)

# Ajusta as margens e permite desenhar fora. Útil na posição da legenda
par(mar = c(5, 5, 4, 8), xpd = TRUE)  # aumenta margem direita 

#grafico fog 1
barplot(valores1,
        log="y", 
        xlab="Time between Things request", ylab="Response time (s)",
  names.arg=clock,
  col=c("#E6E6E6","#666666"),
  beside=T # barras lado a lado
)
#legenda do grafico fog1
legend("topright",
       inset = c(-0.15, -0.5), #posicionamento da legenda no gráfico
       legend = c("w/o Fog", "1 Fog"),
       col=c("#E6E6E6","#666666"),
       pch = c(15,15),
       cex= 0.9 # tamanho da fonte da legenda
       )

#grafico fog 3
barplot(valores3,
        log="y", 
        xlab="Time between Things request", ylab="Response time (s)",
  names.arg=clock,
  col=c("#E6E6E6","#666666"),
  beside=T
)
#legenda do grafico fog3
legend("topright",
       inset = c(-0.15, -0.5), #posicionamento da legenda no gráfico
       legend = c("w/o Fog", "3 Fog"),
       col=c("#E6E6E6","#666666"),
       pch = c(15,15),
       cex= 0.9 # tamanho da fonte da legenda
       )

#grafico fog 5
barplot(valores5,
        log="y", 
        xlab="Time between Things request", ylab="Response time (s)",
  names.arg=clock,
  col=c("#E6E6E6","#666666"),
  beside=T
)
#legenda do grafico fog 5
legend("topright",
       inset = c(-0.15, -0.5), # posicionamento da legenda no gráfico
       legend = c("w/o Fog", "5 Fogs"),
       col=c("#E6E6E6","#666666"),
       pch = c(15,15)
       )#lty = 1)

#grafico fog 10
barplot(valores10,
        log="y", 
        xlab="Time between Things request", ylab="Response time (s)",
  names.arg=clock,
  col=c("#E6E6E6","#666666"),
  beside=T
)
#legenda do grafico fog 10
legend("topright",
       inset = c(-0.15, -0.5), #posicionamento da legenda no gráfico
       legend = c("w/o Fog", "10 Fogs"),
       col=c("#E6E6E6","#666666"),
       pch = c(15,15)
       )#lty = 1)

#grafico fog 15
barplot(valores15,
        log="y", 
        xlab="Time between Things request", ylab="Response time (s)",
  names.arg=clock,
  col=c("#E6E6E6","#666666"),
  beside=T
)
#legenda do grafico fog 15
legend("topright",
       inset = c(-0.15, -0.5),#posicionamento da legenda no gráfico
       legend = c("w/o Fog", "15 Fogs"),
       col=c("#E6E6E6","#666666"),
       pch = c(15,15)
       )#lty = 1)

Questão 2

Gráfico de barras empilhadas:

# Criar a matriz de dados (percentuais por faixa de preço)
dados <- matrix(
  c(53.7, 33.9, 2.6, 0.0,   # Good
    43.6, 54.2, 60.5, 21.4,   # Very Good
    2.6, 11.9, 36.8, 78.6),  # Excellent
  nrow = 3,
  byrow = TRUE
)

# Nomear linhas e colunas
rownames(dados) <- c("Good", "Very Good", "Excellent")
colnames(dados) <- c("$10-19", "$20-29", "$30-39", "$40-49")

# Criar o gráfico de barras empilhadas
barplot(
  dados,
  beside = T,                 # FALSE para barras empilhadas
  col = c("#66C2A5", "darkorange", "mediumpurple"),
  main = "Qualidade da Refeição por Faixa de Preço",
  xlab = "Faixa de Preço da Refeição",
  ylab = "Percentual (%)",
  legend.text = TRUE,             # adiciona legenda automaticamente
  args.legend = list(x = "topright", title = "Qualidade"),
  ylim = c(0, 120)                #  espaço para legendas e barras
)

Questão 3

Histograma das temperaturas com dataset airquality:

# carregando os dados
data("airquality")

# Apenas os dados do mes de maio
maio <- subset(airquality, Month == 5)

# Conversão da temperatura de Fahrenheit para Celsius
temperaturas<- (maio$Temp - 32) / 1.8

#  Criação do gráfico tipo histograma
hist(temperaturas,
     main = "Distribuição das Temperaturas em Maio (°C)", # título do gráfico
     xlab = "Temperatura (°C)", # fonte eixo X
     ylab = "Frequência", # fonte eixo Y
     col = "darkorange",      # coloração das barras
     border = "black",   # borda das barras
     freq = FALSE)         # usa densidade no eixo Y (necessário para adicionar a curva)

#  Adiciona a curva de densidade
densidade <- density(temperaturas)

lines(densidade, 
      col = "black", # coloração da curva
      lwd = 1.5 # largura da linha
      )

Questão 4

Gráfico de pizza:

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

# gráfico de pizza
x <- sales$SALES
labels <- sales$COUNTRY
pct <- round(x/sum(x)*100)
#lbls <- paste(labels, pct)
lbls <- paste(pct,"%", sep="")

pie(x, # dados de cada setor do gráfico
    labels=lbls, # nomes de cada setor do gráfico
    main = "Vendas por país", # título do gráfico
    col=rainbow(6), # coloração do gráfico
    )

# legenda do gráfico
legend("topright",
       legend=c(sales$COUNTRY),
       cex=0.8, fill=rainbow(length(x))
)

Questão 5

Gráfico Boxplot:

# boxplot
boxplot(count ~ spray, # variáveis dos eixo y ~ eixo x
        data = InsectSprays, # conjunto de dados
        main="Tratamento com Inseticidas", # título do gráfico
        xlab = "Inseticidas", # fonte eixo X
        ylab="Contagem", # fonte eixo Y
        col="yellow", # coloração das caixas
        outline=F # setado em FALSE para remoção dos outliers
        )

Questão 6

Monitoring Cloud:

# Conversão currentTime em horas contínuas 

# transformação em objeto POSIXct (data/hora)
monitor0.1$currentTime <- as.POSIXct(monitor0.1$currentTime, format="%Y-%m-%d %H:%M:%S")
monitor0.5$currentTime <- as.POSIXct(monitor0.5$currentTime, format="%Y-%m-%d %H:%M:%S")
monitor1$currentTime <- as.POSIXct(monitor1$currentTime, format="%Y-%m-%d %H:%M:%S")
monitorNONE$currentTime <- as.POSIXct(monitorNONE$currentTime, format="%Y-%m-%d %H:%M:%S")

# cálculo da diferença em horas a partir do primeiro registro
tempo_horas0.1 <- as.numeric(difftime(monitor0.1$currentTime,
                                   monitor0.1$currentTime[1],
                                   units = "hours"))
tempo_horas0.5 <- as.numeric(difftime(monitor0.5$currentTime,
                                   monitor0.5$currentTime[1],
                                   units = "hours"))
tempo_horas1 <- as.numeric(difftime(monitor1$currentTime,
                                   monitor1$currentTime[1],
                                   units = "hours"))
tempo_horasNONE <- as.numeric(difftime(monitorNONE$currentTime,
                                   monitorNONE$currentTime[1],
                                   units = "hours"))

#  conversão usedMemory para MB 

# criação de função para conversão
converter_para_mb <- function(x) {
  # remove espaços
  x <- str_trim(x)
  
  # extrai o valor numérico
  valor <- as.numeric(str_extract(x, "[0-9.]+"))
  
  # extrai a unidade (MB, GB, TB)
  unidade <- str_extract(x, "[A-Za-z]+")
  
  # conversão
  if (unidade == "MB") {
    return(valor)
  } else if (unidade == "GB") {
    return(valor * 1024)
  } else if (unidade == "TB") {
    return(valor * 1e6)
  } else {
    return(NA) # caso apareça unidade inesperada
  }
}

# aplicação da função a toda a coluna
monitor0.1$usedMemory_MB <- sapply(monitor0.1$usedMemory, converter_para_mb)
monitor0.5$usedMemory_MB <- sapply(monitor0.5$usedMemory, converter_para_mb)
monitor1$usedMemory_MB <- sapply(monitor0.5$usedMemory, converter_para_mb)
monitorNONE$usedMemory_MB <- sapply(monitorNONE$usedMemory, converter_para_mb)

#grafico com layout 2x2
layout(matrix(1:4, nrow=2, ncol=2)) # semelhante à linha abaixo
#par(mfrow = c(2, 2)) # Criando um gráfico matricial 2 x 2

#  Gráfico principal: memória usada em MB vs tempo
plot(tempo_horasNONE,
     monitorNONE$usedMemory_MB,
     type="l", col="black", lwd=2,
     xlab="Tempo (horas)",
     ylab="Memória usada (MB)",
    #ylim = range(monitorNONE$usedMemory_MB) * c(0.9, 1.1), # setando os limites do eixo y para melhor visualização
     main="Análise de Memória (NONE Workload)")

#Gráfico monitor 0.1
plot(tempo_horas0.1,
     monitor0.1$usedMemory_MB,
     type="l", col="black", lwd=2,
     xlab="Tempo (horas)",
     ylab="Memória usada (MB)",
     main="Análise de Memória (Workload de 0.1)")

# gráfico monitor 0.5
plot(tempo_horas0.5,
     monitor0.5$usedMemory_MB,
     type="l", col="black", lwd=2,
     xlab="Tempo (horas)",
     ylab="Memória usada (MB)",
     main="Análise de Memória (Workload de 0.5)")

# gráfico monitor 1
plot(tempo_horas1,
     monitor1$usedMemory_MB,
     type="l", col="black", lwd=2,
     xlab="Tempo (horas)",
     ylab="Memória usada (MB)",
     main="Análise de Memória (Workload de 1.0)")

Questão 7

Gráfico de Pizza - Plotly Conjunto de dados Netflix:

# gráfico de pizza usando o Plotly

netflix %>%
  mutate(country = trimws(country)) %>% # A função trimws() remove espaços extras no início e no fim das strings
  filter(
    !is.na(country), # remoção de NAs
    country != "", # Remoção de linhas vazias em country
    !grepl(",", country)
  ) %>%
  count(country, sort = TRUE) %>% # quantos títulos existem por país
  top_n(10, n) %>% # selecão apenas os 10 países com mais títulos
  plot_ly(
    labels = ~country,# rótulos dos setores (nomes dos países)
    values = ~n,# valores correspondentes (quantidade de títulos)
    type = "pie", # tipo do grafico
    textinfo = "percent",           # mostra apenas o percentual
    hoverinfo = "label+percent",    # mostra país e percentual ao passar o mouse
    insidetextorientation = "radial" # define orientação do texto dentro das fatia
  ) %>%
  layout(
    title = "Top 10 países com mais conteúdos",
    legend = list(title = list(text = "País")) # personalização do título da legenda
  )

Questão 8

Gráfico Tabela:

# Filtramos apenas títulos com um país, removendo valores faltantes e vazios
top_paises2 <- netflix %>%
  mutate(country = trimws(country)) %>%     # remoção espaços extras
  filter(
    !is.na(country),                        # remoção NAs
    country != "",                          # remoção strings vazias
    !grepl(",", country)                    # seleciona apenas um país
  ) %>%
  count(country, sort = TRUE) %>%           # contagem e ordenação dos títulos por país
  top_n(10, n) %>%                          # seleção dos 10 países com mais títulos
  rename("País" = country, "Total de conteúdos" = n)  # Renomeia colunas para a tabela


# a tabela com Plotly

plot_ly(
  type = "table",
  header = list(
    values = names(top_paises2),             # cabeçalho da tabela
    fill = list(color = "gray"),            # fundo do cabeçalho cinza
    font = list(color = "white", size = 14), # texto branco e tamanho 14
    align = "center"                       # centraliza o texto do cabeçalho
  ),
  cells = list(
    values = t(top_paises2),                 # valores das células (transpostos)
    align = "center",                       # alinha os textos das células
    fill = list(color = "white"),           # coloração das células
    font = list(color = "black", size = 12) # coloração e tamanho da fonte
  )
) %>%
  layout(
    title = "Top 10 Países com Mais Conteúdos"
  )

Questão 9

Gráfico de linha e pontos:

# conjunto de dados desejado
dados_decadas <- netflix %>%
  mutate(
    decada = floor(release_year / 10) * 10  # transforma o ano em década (ex: 1995 em 1990)
  ) %>%
  group_by(decada, type) %>%                 # agrupa por década e tipo
  summarise(total = n(), .groups = "drop")   # conta o total de títulos em cada grupo

plot_ly() %>%
  # Linha + pontos para Séries
  add_trace(
    data = dados_decadas %>% filter(type == "TV Show"),
    x = ~decada,
    y = ~total,
    type = 'scatter',
    mode = 'lines+markers',    # inclui linha e ponto
    name = "TV Series (Seriado)",
    line = list(color = 'steelblue', width = 3),  
    marker = list(color = 'steelblue', size = 8)
  ) %>%
  # Linha + pontos para Filmes
  add_trace(
    data = dados_decadas %>% filter(type == "Movie"), # apenas series
    x = ~decada, #eixo X
    y = ~total, # eixo Y
    type = 'scatter', # tipo do gráfico
    mode = 'lines+markers', # linhas e pontos
    name = "Movies (Filme)",
    line = list(color = 'gold', width = 3),  
    marker = list(color = 'gold', size = 8)
  ) %>%
  layout(
    xaxis = list(title = "Década"), # texto eixo X
    yaxis = list(title = "Qnd. Conteúdo"), # texto eixo Y
    legend = list(title = list(text = "Tipo de conteúdo")) # titulo legenda
  )

Questão 10

Gráfico de barras lado a lado:

# preparação dos dados
dados_filmes <- netflix %>%
  filter(
    type == "Movie",                  # apenas filmes
    release_year >= 2000,             # ano >= 2000
    release_year <= 2010              # ano <= 2010
  ) %>%
  mutate(
    # Pega apenas o primeiro gênero listado
    primeiro_genero = sub(",.*", "", listed_in)  # substitui tudo após a primeira vírgula
  ) %>%
  filter(primeiro_genero %in% c("Dramas", "Action & Adventure", "Comedies")) %>%
  group_by(release_year, primeiro_genero) %>%
  summarise(total = n(), .groups = "drop")

# grafico de barras lado a lado
plot_ly(
  data = dados_filmes,
  x = ~release_year,            # eixo X ano de lançamento
  y = ~total,                   # eixo Y quantidade de filmes
  color = ~primeiro_genero,     # cor das barras de acordo com o gênero
  colors = c("Dramas" = "slateblue", "Action & Adventure" = "darkorange", "Comedies" = "lightgreen"), # cores personalizadas 
  type = 'bar'                  # tipo  gráfico  barra
) %>%
  layout(
    barmode = 'group',           # barras lado a lado
    title = list(
      text = "Filmes por gênero (2000-2010)",
      x = 0.5,
      xanchor = "center",
      font = list(size = 16)
    ),
    xaxis = list(title = "Ano de Lançamento"),
    yaxis = list(title = "Quantidade de filmes"),
    legend = list(title = list(text = "Gênero"))
  )