Questão 1

Gráfico de linha

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(5, 5, 2, 2))

plot(clock, MRT_1F,
     type = "b",
     col = "gray30",
     pch = 4,
     ylim = c(0, 530),
     xlab = "Time between Things requests (seconds)",
     ylab = "Response Time (sec.)")

lines(clock, MRT_3F, type = "b", col = "yellow", pch = 6)
lines(clock, MRT_5F, type = "b", col = "red", pch = 1)
lines(clock, MRT_10F, type = "b", col = "blue", pch = 2)
lines(clock, MRT_15F, type = "b", col = "purple", pch = 5)
lines(clock, MRT_sem_F, type = "b", col = "green", pch = 4)

legend("topright",
       legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
       col = c("gray30", "yellow", "red", "blue", "purple", "green"),
       pch = c(4, 6, 1, 2, 5, 4),
       lty = 1)

Gráficos de barras

layout(matrix(c(1, 2,
                3, 4,
                5, 0), ncol = 2, byrow = TRUE))

par(mar = c(4, 4, 2, 1))

grafico_barras <- function(dados_fog, nome_fog) {
  
  matriz <- rbind(MRT_sem_F, dados_fog)
  
  barplot(matriz,
          beside = TRUE,
          names.arg = clock,
          col = c("#E6E6E6", "#666666"),
          log = "y",
          xlab = "Time between Things requests",
          ylab = "Response time (s)",
          legend.text = c("w/o Fog", nome_fog),
          args.legend = list(x = "topright", bty = "o", cex = 0.7),
          cex.names = 0.8,
          cex.axis = 0.8)
}

grafico_barras(MRT_1F,  "1 Fog")
grafico_barras(MRT_3F,  "3 Fogs")
grafico_barras(MRT_5F,  "5 Fogs")
grafico_barras(MRT_10F, "10 Fogs")
grafico_barras(MRT_15F, "15 Fogs")

Questão 2

Gráfico de barras empilhadas

# Criando a matriz com os dados
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,
byrow = TRUE)

# Nome das linhas
rownames(dados) <- c("Good", "Very Good", "Excellent")

# Nome das colunas
colnames(dados) <- c("$10-19", "$20-29", "$30-39", "$40-49")

# Criando o gráfico de barras empilhadas
barplot(dados,
        col = c("lightblue", "orange", "green"),
        main = "Meal Quality by Price Category",
        xlab = "Meal Price Categories",
        ylab = "Percentage (%)",
        legend.text = rownames(dados))

Questão 3

Histograma com curva de densidade

# Filtrando apenas o mês de maio
maio <- subset(airquality, Month == 5)

# Convertendo Fahrenheit para Celsius
temp_celsius <- (maio$Temp - 32) / 1.8

# Criando o histograma
hist(temp_celsius,
     probability = TRUE,
     col = "lightblue",
     main = "Histogram of Temperatures in May",
     xlab = "Temperature (°C)",
     ylab = "Density")

# Adicionando curva de densidade
lines(density(temp_celsius),
      col = "red",
      lwd = 2)

Questão 4

Gráfico de pizza das vendas por país

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

# Somando vendas por país
total_vendas <- tapply(sales$SALES, sales$COUNTRY, sum)

# Calculando porcentagens
porcentagem <- round(100 * total_vendas / sum(total_vendas), 1)

# Criando rótulos
rotulos <- paste(names(total_vendas),
                  porcentagem,
                  "%")

# Definindo cores
cores <- rainbow(length(total_vendas))

# Criando gráfico de pizza
pie(total_vendas,
    labels = rotulos,
    col = cores,
    main = "Total Sales by Country")

# Adicionando legenda
legend("topright",
       legend = names(total_vendas),
       fill = cores)

Questão 5

Boxplot sem outliers

# Criando boxplot sem outliers
boxplot(count ~ spray,
        data = InsectSprays,
        outline = FALSE,
        col = "yellow",
        main = "Insect Count by Insecticide Type",
        xlab = "Type of Insecticide",
        ylab = "Insect Count")

Questão 6

# Função para converter memória para MB
converter_mb <- function(x) {
  
  valor <- as.numeric(gsub("[^0-9.]", "", x))
  unidade <- gsub("[0-9.]", "", x)
  
  ifelse(unidade == "TB", valor * 1000000,
         ifelse(unidade == "GB", valor * 1024,
                ifelse(unidade == "MB", valor,
                       ifelse(unidade == "KB", valor / 1024,
                              valor / (1024 * 1024)))))
}

# Caminho ABSOLUTO da pasta Documentos
pasta <- "C:/Users/Lenovo/OneDrive/Documentos"

# Função para tratar dados
tratar_dados <- function(nome_arquivo) {
  
  caminho <- file.path(pasta, nome_arquivo)
  
  dados <- read.csv(caminho)
  
  dados$currentTime <- as.POSIXct(dados$currentTime)
  
  dados$tempo_horas <- as.numeric(
    difftime(
      dados$currentTime,
      min(dados$currentTime),
      units = "hours"
    )
  )
  
  dados$usedMemory_MB <- converter_mb(dados$usedMemory)
  
  return(dados)
}

# Lendo os arquivos
dados_none <- tratar_dados("monitoringCloudData_NONE.csv")
dados_01   <- tratar_dados("monitoringCloudData_0.1.csv")
dados_05   <- tratar_dados("monitoringCloudData_0.5.csv")
dados_1    <- tratar_dados("monitoringCloudData_1.csv")

# Layout dos gráficos
layout(matrix(c(1,2,
                3,4),
              ncol = 2,
              byrow = TRUE))

par(mar = c(5,5,3,2))

# NONE
plot(dados_none$tempo_horas,
     dados_none$usedMemory_MB,
     type = "l",
     main = "Memory Analysis (None Workload)",
     xlab = "Time (hour)",
     ylab = "Used Memory (MB)")

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

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

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

Questão 7

Gráfico de pizza com Plotly

# Carregando bibliotecas
library(plotly)
## Carregando pacotes exigidos: ggplot2
## 
## Anexando pacote: 'plotly'
## O seguinte objeto é mascarado por 'package:ggplot2':
## 
##     last_plot
## O seguinte objeto é mascarado por 'package:stats':
## 
##     filter
## O seguinte objeto é mascarado por 'package:graphics':
## 
##     layout
library(dplyr)
## 
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)

# Lendo dataset
netflix <- read.csv("C:/Users/Lenovo/OneDrive/Documentos/netflix_titles.csv")

# Filtrando conteúdos com apenas UM país
netflix_um_pais <- netflix %>%
  filter(!is.na(country)) %>%
  filter(!str_detect(country, ",")) %>%
  filter(str_detect(country, "[A-Za-z]"))

# Contando conteúdos por país
top10_paises <- netflix_um_pais %>%
  count(country, sort = TRUE) %>%
  slice(1:10)

# Criando gráfico de pizza
plot_ly(
  data = top10_paises,
  labels = ~country,
  values = ~n,
  type = "pie"
) %>%
  layout(
    title = "Top 10 Countries with Most Netflix Content"
  )

Questão 8

Tabela interativa com Plotly

library(plotly)

# Criando tabela
plot_ly(
  type = "table",
  
  header = list(
    values = c("País", "Total de conteúdos"),
    fill = list(color = "gray"),
    font = list(color = "white", size = 14),
    align = "center"
  ),
  
  cells = list(
    values = list(top10_paises$country,
                  top10_paises$n),
    align = "center"
  )
)

Questão 9

Quantidade de conteúdo por década

library(plotly)
library(dplyr)

# Criando coluna de década
netflix$decade <- floor(netflix$release_year / 10) * 10

# Agrupando por década e tipo
decadas <- netflix %>%
  group_by(decade, type) %>%
  summarise(total = n(), .groups = "drop")

# Separando séries e filmes
series <- decadas %>%
  filter(type == "TV Show")

movies <- decadas %>%
  filter(type == "Movie")

# Criando gráfico
plot_ly() %>%
  
  add_lines(
    data = series,
    x = ~decade,
    y = ~total,
    name = "TV Series",
    color = I("blue")
  ) %>%
  
  add_markers(
    data = series,
    x = ~decade,
    y = ~total,
    showlegend = FALSE,
    color = I("blue")
  ) %>%
  
  add_lines(
    data = movies,
    x = ~decade,
    y = ~total,
    name = "Movies",
    color = I("yellow")
  ) %>%
  
  add_markers(
    data = movies,
    x = ~decade,
    y = ~total,
    showlegend = FALSE,
    color = I("yellow")
  ) %>%
  
  layout(
    title = "Quantidade de Conteúdo por Década",
    xaxis = list(title = "Década"),
    yaxis = list(title = "Qtd. Conteúdo")
  )

Questão 10

Filmes por gênero entre 2000 e 2010

library(plotly)
library(dplyr)
library(stringr)

# Filtrando apenas filmes entre 2000 e 2010
filmes <- netflix %>%
  filter(type == "Movie") %>%
  filter(release_year >= 2000 & release_year <= 2010)

# Pegando apenas o PRIMEIRO gênero
filmes$primeiro_genero <- str_trim(
  sapply(strsplit(filmes$listed_in, ","), `[`, 1)
)

# Filtrando os gêneros desejados
generos <- filmes %>%
  filter(primeiro_genero %in%
           c("Dramas",
             "Action & Adventure",
             "Comedies"))

# Contando filmes por ano e gênero
dados_genero <- generos %>%
  group_by(release_year, primeiro_genero) %>%
  summarise(total = n(), .groups = "drop")

# Separando gêneros
drama <- dados_genero %>%
  filter(primeiro_genero == "Dramas")

acao <- dados_genero %>%
  filter(primeiro_genero == "Action & Adventure")

comedia <- dados_genero %>%
  filter(primeiro_genero == "Comedies")

# Criando gráfico
plot_ly() %>%
  
  add_bars(
    data = drama,
    x = ~release_year,
    y = ~total,
    name = "Drama",
    marker = list(color = "blue")
  ) %>%
  
  add_bars(
    data = acao,
    x = ~release_year,
    y = ~total,
    name = "Ação e Aventura",
    marker = list(color = "orange")
  ) %>%
  
  add_bars(
    data = comedia,
    x = ~release_year,
    y = ~total,
    name = "Comédia",
    marker = list(color = "green")
  ) %>%
  
  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"
    )
  )