CPAD - Exercicio 12

Questão 1

# Definição dos 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_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 layout para múltiplos gráficos
layout(matrix(1:6, nrow = 2, byrow = TRUE))

# Gráfico de linhas
graph_symbols <- c(1, 2, 3, 4, 5, 6) # Diferentes símbolos para cada linha
plot(clock, MRT_1F, type="o", col="red", pch=graph_symbols[1], ylim=c(0, max(MRT_1F)), xlab="Time between Things requests (seconds)", ylab="Response Time (sec.)")
lines(clock, MRT_3F, type="o", col="blue", pch=graph_symbols[2])
lines(clock, MRT_5F, type="o", col="green", pch=graph_symbols[3])
lines(clock, MRT_10F, type="o", col="purple", pch=graph_symbols[4])
lines(clock, MRT_15F, type="o", col="orange", pch=graph_symbols[5])
lines(clock, MRT_sem_F, type="o", col="black", pch=graph_symbols[6])
legend("topright", legend=c("1 Fog", "3 Fog", "5 Fog", "10 Fog", "15 Fog", "w/o Fog"), col=c("red", "blue", "green", "purple", "orange", "black"), pch=graph_symbols, lty=1, cex=0.8)

# Gráfico de barras com escala logarítmica
barplot(rbind(MRT_sem_F, MRT_1F), beside=TRUE, log="y", col=c("#E6E6E6", "#666666"), names.arg=clock, xlab="Time between Things requests", ylab="Response time (s)")
legend("topright", legend=c("w/o Fog", "1 Fog"), fill=c("#E6E6E6", "#666666"), cex=0.8)
barplot(rbind(MRT_sem_F, MRT_3F), beside=TRUE, log="y", col=c("#E6E6E6", "#666666"), names.arg=clock, xlab="Time between Things requests", ylab="Response time (s)")
legend("topright", legend=c("w/o Fog", "3 Fog"), fill=c("#E6E6E6", "#666666"), cex=0.8)
barplot(rbind(MRT_sem_F, MRT_5F), beside=TRUE, log="y", col=c("#E6E6E6", "#666666"), names.arg=clock, xlab="Time between Things requests", ylab="Response time (s)")
legend("topright", legend=c("w/o Fog", "5 Fog"), fill=c("#E6E6E6", "#666666"), cex=0.8)
barplot(rbind(MRT_sem_F, MRT_10F), beside=TRUE, log="y", col=c("#E6E6E6", "#666666"), names.arg=clock, xlab="Time between Things requests", ylab="Response time (s)")
legend("topright", legend=c("w/o Fog", "10 Fog"), fill=c("#E6E6E6", "#666666"), cex=0.8)
barplot(rbind(MRT_sem_F, MRT_15F), beside=TRUE, log="y", col=c("#E6E6E6", "#666666"), names.arg=clock, xlab="Time between Things requests", ylab="Response time (s)")
legend("topright", legend=c("w/o Fog", "15 Fog"), fill=c("#E6E6E6", "#666666"), cex=0.8)

Questão 2

# Criar a matriz de dados
dados <- matrix(
  c(53.8, 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 as linhas e colunas da matriz
rownames(dados) <- c("Bom", "Muito bom", "Excelente")
colnames(dados) <- c("$10-19", "$20-29", "$30-39", "$40-49") 

# Definir as cores para cada categoria de qualidade
cores <- c("lightblue", "orange", "darkred")

# Criar o gráfico de barras empilhadas
barplot(dados, 
        beside = FALSE,      # Barras empilhadas
        col = cores,         # Definição de cores
        legend.text = rownames(dados), # Adicionar legenda
        main = "Distribuição da Qualidade das Refeições por Faixa de Preço",
        xlab = "Faixa de Preço ($)", 
        ylab = "Percentual (%)")

# Adicionar grade para melhor visualização
grid(nx = NA, ny = NULL, lty = "dotted", col = "gray")

Questão 3

data("airquality")

# Filtrar apenas os dados do mês de maio
maio_temperaturas <- airquality$Temp[airquality$Month == 5]

# Converter as temperaturas de Fahrenheit para Celsius
temp_celsius <- (maio_temperaturas - 32) / 1.8

# Criar o histograma com cor e curva de densidade
hist(temp_celsius, 
     main = "Distribuição das Temperaturas em Maio", # Título
     xlab = "Temperatura (°C)",  # Nome do eixo X
     ylab = "Frequência",        # Nome do eixo Y
     col = "lightblue",          # Cor das barras
     border = "black",           # Cor da borda das barras
     probability = TRUE)         # Normaliza para exibir a curva de densidade

# Adicionar a curva de densidade ao histograma
lines(density(temp_celsius), col = "red", lwd = 2)

Questão 4

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

# Calcular o total de vendas
total_vendas <- sum(sales$SALES)

# Calcular a porcentagem de vendas de cada país
sales$Porcentagem <- (sales$SALES / total_vendas) * 100

# Definir cores para o gráfico de pizza
cores <- rainbow(nrow(sales))  # Paleta de cores diferentes para cada fatia

# Criar rótulos para exibir país + porcentagem
rotulos <- paste(sales$COUNTRY, "\n", sales$Porcentagem, "%")

# Criar o gráfico de pizza
pie(sales$SALES, 
    labels = rotulos, 
    col = cores, 
    main = "Distribuição de Vendas por País")

# Adicionar a legenda
legend("topright", legend = sales$COUNTRY, fill = cores, cex = 0.8)

Questão 5

# Carregar o conjunto de dados InsectSprays
data("InsectSprays")

# Criar o boxplot sem outliers e com cor amarela
boxplot(count ~ spray, data = InsectSprays, 
        col = "yellow",      # Cor das caixas
        main = "Contagem de Insetos por Inseticida",  # Título
        xlab = "Tipo de Inseticida",  # Nome do eixo X
        ylab = "Número de Insetos",   # Nome do eixo Y
        outline = FALSE)   # Remove os outliers

Questão 6

# Ler os dados
monitoringCloudData_NONE <- read.csv("monitoringCloudData_NONE.csv")

monitoringCloudData_0.1 <- read.csv("monitoringCloudData_0.1.csv")

monitoringCloudData_0.5 <- read.csv("monitoringCloudData_0.5.csv")

monitoringCloudData_1 <- read.csv("monitoringCloudData_1.csv")
## Ajuste da Coluna currentTime
monitoringCloudData_NONE$currentTime <- as.POSIXct(monitoringCloudData_NONE$currentTime, format="%Y-%m-%d %H:%M:%S")

monitoringCloudData_0.1$currentTime <- as.POSIXct(monitoringCloudData_0.1$currentTime, format="%Y-%m-%d %H:%M:%S")

monitoringCloudData_0.5$currentTime <- as.POSIXct(monitoringCloudData_0.5$currentTime, format="%Y-%m-%d %H:%M:%S")

monitoringCloudData_1$currentTime <- as.POSIXct(monitoringCloudData_1$currentTime, format="%Y-%m-%d %H:%M:%S")

# Calcular o tempo em horas desde o primeiro registro
monitoringCloudData_NONE$hoursSinceStart <- as.numeric(difftime(monitoringCloudData_NONE$currentTime, min(monitoringCloudData_NONE$currentTime), units = "hours"))

monitoringCloudData_0.1$hoursSinceStart <- as.numeric(difftime(monitoringCloudData_0.1$currentTime, min(monitoringCloudData_0.1$currentTime), units = "hours"))

monitoringCloudData_0.5$hoursSinceStart <- as.numeric(difftime(monitoringCloudData_0.5$currentTime, min(monitoringCloudData_0.5$currentTime), units = "hours")) #Por algum motivo, estar retornando NA no cálculo do difftime

monitoringCloudData_1$hoursSinceStart <- as.numeric(difftime(monitoringCloudData_1$currentTime, min(monitoringCloudData_1$currentTime), units = "hours"))

# Função para converter memória para Megabytes
convertToMb <- function(memory_str) {
  value <- as.numeric(gsub("[^0-9.]", "", memory_str))
  unit <- gsub("[0-9.]", "", memory_str)
  
  if (unit == "TB") {
    return(value * 1e6)
  } else if (unit == "GB") {
    return(value * 1024)
  } else if (unit == "MB") {
    return(value)
  } else {
    return(NA)
  }
}

# Aplicar a função
monitoringCloudData_NONE$usedMemoryMB <- sapply(monitoringCloudData_NONE$usedMemory, convertToMb)

monitoringCloudData_0.1$usedMemoryMB <- sapply(monitoringCloudData_0.1$usedMemory, convertToMb)

monitoringCloudData_0.5$usedMemoryMB <- sapply(monitoringCloudData_0.5$usedMemory, convertToMb)

monitoringCloudData_1$usedMemoryMB <- sapply(monitoringCloudData_1$usedMemory, convertToMb)

## Geração dos Gráficos

# Configurar layout para múltiplos gráficos
layout(matrix(1:4, ncol = 2, byrow = TRUE))

# Gráfico 1: Memória usada ao longo do tempo
plot(monitoringCloudData_NONE$hoursSinceStart, monitoringCloudData_NONE$usedMemoryMB, type="l", col="black", xlab="Horas desde o início", ylab="Memória Usada (MB)", main="Análise de Memória (None)")

plot(monitoringCloudData_0.1$hoursSinceStart, monitoringCloudData_0.1$usedMemoryMB, type="l", col="black", xlab="Horas desde o início", ylab="Memória Usada (MB)", main="Análise de Memória (0.1)")

#plot(monitoringCloudData_0.5$hoursSinceStart, monitoringCloudData_0.5$usedMemoryMB, type="l", col="black", xlab="Horas desde o início", ylab="Memória Usada (MB)", main="Análise de Memória (0.5)") 

plot(monitoringCloudData_1$hoursSinceStart, monitoringCloudData_1$usedMemoryMB, type="l", col="black", xlab="Horas desde o início", ylab="Memória Usada (MB)", main="Análise de Memória (1.0)")

Questão 7

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
# Carregar os dados
netflix_data <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)

# Removendo NA e espaços vazios da coluna country
netflix_data <- netflix_data[!(is.na(netflix_data$country) | netflix_data$country==""), ]

# Apenas 1 país
netflix_data_1_country <- subset(netflix_data, !grepl(",", country))

# Contar o número de conteúdos por país
top_countries <- as.data.frame(table(netflix_data_1_country$country))
names(top_countries) <- c("country", "count")
top_countries <- top_countries[order(-top_countries$count), ]
top_countries <- head(top_countries, 10)

pie_chart <- plot_ly(top_countries, labels = ~country, values = ~count, type = 'pie',
                     textinfo = 'label+percent', insidetextorientation = 'radial') %>%
  layout(title = "Top 10 países com mais conteúdo na plataforma")

pie_chart

Questão 8

table_chart <- plot_ly(
  type = 'table',
  header = list(
    values = c("<b>País</b>", "<b>Total de Conteúdos</b>"),
    fill = list(color = "grey"),
    font = list(color = "white", size = 14),
    align = c("center", "center")
  ),
  cells = list(
    values = list(top_countries$country, top_countries$count),
    align = c("center", "center")
  )
)

table_chart

Questão 9

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

# Contar a quantidade de conteúdos por década e tipo
decade_count <- as.data.frame(table(netflix_data$decade, netflix_data$type))
names(decade_count) <- c("decade", "type", "count")

line_chart <- plot_ly(decade_count, x = ~decade, y = ~count, color = ~type, type = 'scatter', mode = 'lines+markers',
                      colors = c("yellow", "blue")) %>%
  layout(title = "Quantidade de Conteúdo por Década",
         xaxis = list(title = "Década"),
         yaxis = list(title = "Qntd. Conteúdos"))

line_chart

Questão 10

#Separar os filmes lançados entre 2000 e 2010
netflix_data_2000_2010 <- subset(netflix_data, release_year>=2000 & release_year<=2010)

#Pegnado o primeiro gênero
netflix_data_2000_2010$listed_in <- sub(",.*", "", netflix_data_2000_2010$listed_in)


# Contar quantidade de filmes por ano e gênero selecionado
genres <- c("Dramas", "Action & Adventure", "Comedies")
movies_genre_d_ad_c <- subset(netflix_data_2000_2010, listed_in %in% genres)
movies_genre_d_ad_c <- as.data.frame(table(movies_genre_d_ad_c$release_year, movies_genre_d_ad_c$listed_in))
names(movies_genre_d_ad_c) <- c("year", "genre", "count")

bar_chart <- plot_ly(movies_genre_d_ad_c, x = ~year, y = ~count, color = ~genre, type = 'bar') %>%
  layout(xaxis = list(title = "Ano de Lançamento"),
         yaxis = list(title = "Qntd. de Lançamentos"),
         barmode = 'group')

bar_chart