Relatório da Atividade 12

Este relatório tem como objetivo expor a solução das questões componentes da Atividade 12 da disciplina de Computação para Análise de Dados do Programa de Pós-Graduação em Informática Aplicada da Universidade Federal Rural de Pernambuco (UFRPE).


Questão 1

Use os dados abaixo para gerar os gráficos em anexo. Para o segundográfico (barras), use a escala logarítmica (log = “y”) e as seguintes cores:“#E6E6E6”, “#666666”. Além disso, os gráficos podem ser organizados coma função layout(). Ver exemplos do uso da função layout() em: https://stackoverflow.com/questions/38810854/how-to-use-layout-function-in-r e https://bookdown.org/ndphillips/YaRrr/arranging-plots-with-parmfrow-and-layout.html

# Dados
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)

# Gráfico de linhas
plot(clock, MRT_1F, type="o", ylim=c(0, 550), xlab="Time between Things requests (seconds)", ylab="Response Time (sec.)", col="black", pch=4)
lines(clock, MRT_3F, type="o", col="gold", pch=8)
lines(clock, MRT_5F, type="o", col="red", pch=1)
lines(clock, MRT_10F, type="o", col="blue", pch=2)
lines(clock, MRT_15F, type="o", col="purple", pch=5)
lines(clock, MRT_sem_F, type="o", col="green", pch=6)

legend("topright", legend=c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
       col=c("black", "gold", "red", "blue", "purple", "green"),
       pch=c(4, 8, 1, 2, 5, 6), bty="n")

# Graficos de barras
cores <- c("#E6E6E6", "#666666")

layout(matrix(1:6, nrow=2, byrow=TRUE))

bp <- barplot(rbind(MRT_sem_F, MRT_1F), beside=TRUE, log="y", col=cores,
              names.arg=clock, ylab="Response time (s)", xlab="Time between Things requests")
legend(x=max(bp)*0.6, y=max(c(MRT_sem_F, MRT_1F)), legend=c("w/o Fog", "1 Fog"), fill=cores, bty="o")

bp <- barplot(rbind(MRT_sem_F, MRT_3F), beside=TRUE, log="y", col=cores,
        names.arg=clock, ylab="Response time (s)", xlab="Time between Things requests") 
legend(x=max(bp)*0.6, y=max(c(MRT_sem_F, MRT_1F))*0.3, legend=c("w/o Fog", "3 Fogs"), fill=cores, bty="o")

bp <- barplot(rbind(MRT_sem_F, MRT_5F), beside=TRUE, log="y", col=cores,
        names.arg=clock, ylab="Response time (s)", xlab="Time between Things requests") 
legend(x=max(bp)*0.6, y=max(c(MRT_sem_F, MRT_1F))*0.15, legend=c("w/o Fog", "5 Fogs"), fill=cores, bty="o")

bp <- barplot(rbind(MRT_sem_F, MRT_10F), beside=TRUE, log="y", col=cores,
        names.arg=clock, ylab="Response time (s)", xlab="Time between Things requests") 
legend(x=max(bp)*0.6, y=max(c(MRT_sem_F, MRT_1F))*0.05, legend=c("w/o Fog", "10 Fogs"), fill=cores, bty="o")

bp <- barplot(rbind(MRT_sem_F, MRT_15F), beside=TRUE, log="y", col=cores,
        names.arg=clock, ylab="Response time (s)", xlab="Time between Things requests")
legend(x=max(bp)*0.6, y=max(c(MRT_sem_F, MRT_1F))*0.02, legend=c("w/o Fog", "15 Fogs"), fill=cores, bty="o")

Questão 2

# Dados
dados <- matrix(c(53.8, 43.6, 2.6,
                  33.9, 54.2, 11.9,
                  2.6, 60.5, 36.8,
                  0.0, 21.4, 78.6),
                nrow = 3, byrow = FALSE)

rownames(dados) <- c("Bom", "Muito Bom", "Excelente")
colnames(dados) <- c("$10-19", "$20-29", "$30-39", "$40-49")
cores <- c("lightblue", "#7394d4", "blue")

# Gráfico de barras
par(mar = c(5, 4, 4, 6), xpd = TRUE)
bp <- barplot(dados,
        col = cores,
        beside = FALSE,
        args.legend = list(x = "topright", bty = "o"),
        main = "Qualidade da Refeição por Categoria de Preço",
        xlab = "Faixa de Preço",
        ylab = "Porcentagem",
        ylim = c(0, 120))

legend(x = "topright",
       inset = c(-0.2, 0),  # desloca para fora (direita)
       legend = rownames(dados),
       fill = cores,
       bty = "o")

Questão 3

# Dados
data("airquality")
maio <- subset(airquality, Month == 5)
temp_celsius <- (maio$Temp - 32) / 1.8

# Histograma
hist(temp_celsius,
     breaks = 10,
     freq = FALSE,       # Importante para a curva de densidade
     col = "skyblue",
     main = "Histograma das Temperaturas em Maio (°C)",
     xlab = "Temperatura (°C)",
     ylab = "Densidade")

# Curva de densidade
lines(density(temp_celsius, na.rm = TRUE), col = "red", lwd = 2)

Questão 4

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

valores <- sales$SALES
nomes <- sales$COUNTRY
porcentagens <- round(100 * valores / sum(valores), 1)
rotulos <- paste0(porcentagens, "%")

# Gráfico de pizza
cores <- rainbow(length(valores))
pie(valores,
    labels = rotulos,
    col = cores,
    main = "Participação nas Vendas por País")

legend("topright",
       legend = nomes,
       fill = cores,
       title = "Países",
       bty = "o")

Questão 5

# Dados
data("InsectSprays")

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

Questão 6

library(stringr)

process_data <- function(file_path) {
  data <- read.csv(file_path, stringsAsFactors = FALSE)
  
  data$currentTime <- as.POSIXct(data$currentTime, format="%Y-%m-%d %H:%M:%OS")
  
  time_diff <- difftime(data$currentTime, data$currentTime[1], units = "hours")
  data$timeHours <- as.numeric(time_diff)
  
  convert_to_MB <- function(mem_str) {
    val <- as.numeric(str_extract(mem_str, "[0-9.]+"))
    unit <- str_extract(mem_str, "[A-Za-z]+")
    
    if (unit == "TB") {
      val <- val * 1000000
    } else if (unit == "GB") {
      val <- val * 1024
    } else if (unit == "MB") {
      val <- val
    } else {
      val <- NA
    }
    return(val)
  }
  
  data$usedMemoryMB <- sapply(data$usedMemory, convert_to_MB)
  
  return(data)
}

# Dados
files <- c("monitoringCloudData_NONE.csv",
           "monitoringCloudData_0.1.csv",
           "monitoringCloudData_0.5.csv",
           "monitoringCloudData_1.csv")

list_data <- lapply(files, process_data)

titles <- c("Memory Analysis (None Workload)",
            "Memory Analysis (Workload of 0.1)",
            "Memory Analysis (Workload of 0.5)",
            "Memory Analysis (Workload of 1.0)")

layout(matrix(1:4, nrow=2, byrow=TRUE))

# Gráficos
for(i in 1:4) {
  data <- list_data[[i]]
  plot(data$timeHours, data$usedMemoryMB, type = "l", col = "black",
       xlab = "Time (hour)", ylab = "Used Memory (MB)",
       main = titles[i])
}

Questão 7

# Dados
library(dplyr)
library(readr)
library(stringr)
library(plotly)
netflix <- read_csv("netflix_titles.csv")

netflix_clean <- netflix %>%
  filter(!is.na(country)) %>%
  filter(!str_detect(country, ","))

top10_paises <- netflix_clean %>%
  count(country, name = "total") %>%
  arrange(desc(total)) %>%
  slice_head(n = 10)

# Gráfico de pizza
plot_ly(top10_paises, labels = ~country, values = ~total, type = "pie") %>%
  layout(title = "Top 10 Países com Mais Conteúdo")

Questão 8

# Tabela
plot_ly(
  type = 'table',
  header = list(
    values = c("País", "Total de conteúdos"),
    fill = list(color = "#666666"),
    font = list(color = "white"),
    align = "center"
  ),
  cells = list(
    values = list(top10_paises$country, top10_paises$total),
    align = "center"
  )
)

Questão 9

netflix_decade <- netflix %>%
  filter(!is.na(release_year)) %>%
  mutate(decade = paste0(floor(release_year / 10) * 10, "s")) %>%
  group_by(type, decade) %>%
  summarise(total = n(), .groups = "drop")

# Gráfico de linha
plot_ly(netflix_decade, x = ~decade, y = ~total, color = ~type,
        colors = c("TV Show" = "#1F77B4", "Movie" = "orange"),
        type = 'scatter', mode = 'lines+markers') %>%
  layout(title = "Quantidade de Conteúdo por Década",
         xaxis = list(title = "Década"),
         yaxis = list(title = "Qnd. de Conteúdo"))

Questão 10

filmes_generos <- netflix %>%
  filter(type == "Movie", release_year > 2000, release_year < 2010) %>%
  mutate(genero_original = word(listed_in, 1, sep = ", ")) %>%
  filter(genero_original %in% c("Dramas", "Comedies", "Action & Adventure")) %>%
  mutate(genero = recode(genero_original,
                         "Dramas" = "Drama",
                         "Comedies" = "Comédia",
                         "Action & Adventure" = "Ação e Aventura"))

filmes_generos$genero <- factor(filmes_generos$genero,
                                levels = c("Drama", "Ação e Aventura", "Comédia"))

dados_final <- filmes_generos %>%
  group_by(release_year, genero) %>%
  summarise(titulos = paste(title, collapse = "<br>"),
            quantidade = n(),
            .groups = "drop")

cores_pt <- c(
  "Drama" = "#1f77b4",
  "Comédia" = "#2ca02c",
  "Ação e Aventura" = "#ff7f0e"
)

plot_ly(dados_final,
        x = ~release_year,
        y = ~quantidade,
        color = ~genero,
        colors = cores_pt,
        type = 'bar',
        text = ~titulos,
        hoverinfo = "text+y") %>%
  layout(title = "Quantidade de Filmes por Gênero (2000–2010)",
         xaxis = list(title = "Ano de Lançamento"),
         yaxis = list(title = "Qnt. de Lançamentos"),
         barmode = 'group')