Ex 12
Questão 1
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.196174208289447737)
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)
leg_text <- c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog")
leg_col <- c("black", "yellow", "red", "darkblue", "purple", "green")
leg_pch <- c(4, 11, 1, 2, 0, 4)
leg_lty <- c(1, 1, 1, 1, 1, 1)
plot_type <- "o"
par(mar = c(5, 4, 2, 2))
plot(clock, MRT_1F,
type = "n",
main = "",
xlab = "Time between Things requests (seconds)",
ylab = "Response Time (sec.)",
xlim = c(0, 3),
ylim = c(0, 520),
axes = FALSE
)
axis(2, at = seq(0, 500, by = 100))
axis(1, at = seq(0, 3, by = 0.5))
box()
lines(clock, MRT_1F, type = plot_type, pch = leg_pch[1], lty = leg_lty[1], col = leg_col[1])
lines(clock, MRT_3F, type = plot_type, pch = leg_pch[2], lty = leg_lty[2], col = leg_col[2])
lines(clock, MRT_5F, type = plot_type, pch = leg_pch[3], lty = leg_lty[3], col = leg_col[3])
lines(clock, MRT_10F, type = plot_type, pch = leg_pch[4], lty = leg_lty[4], col = leg_col[4])
lines(clock, MRT_15F, type = plot_type, pch = leg_pch[5], lty = leg_lty[5], col = leg_col[5])
lines(clock, MRT_sem_F, type = plot_type, pch = leg_pch[6], lty = leg_lty[6], col = leg_col[6])
legend("topright",
legend = leg_text,
pch = leg_pch,
lty = leg_lty,
col = leg_col,
cex = 0.8
)

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
cores_barras <- c("#E6E6E6", "#666666")
layout_matrix_barras <- matrix(c(1, 2, 3, 4, 5, 0), nrow = 3, ncol = 2, byrow = TRUE)
layout(layout_matrix_barras)
par(mar = c(4, 4, 1.5, 1))
data_1F <- rbind(MRT_sem_F, MRT_1F)
barplot(data_1F,
beside = TRUE, col = cores_barras, names.arg = clock,
xlab = "Time between Things requests", ylab = "Response time (s)",
log = "y", ylim = c(0.1, 600)
)
legend("topright", legend = c("w/o Fog", "1 Fog"), fill = cores_barras, cex = 0.8)
# w/o Fog vs 3 Fogs
data_3F <- rbind(MRT_sem_F, MRT_3F)
barplot(data_3F,
beside = TRUE, col = cores_barras, names.arg = clock,
xlab = "Time between Things requests", ylab = "Response time (s)",
log = "y", ylim = c(0.1, 600) # O ylim correto
)
legend("topright", legend = c("w/o Fog", "3 Fogs"), fill = cores_barras, cex = 0.8)
# w/o Fog vs 5 Fogs
data_5F <- rbind(MRT_sem_F, MRT_5F)
barplot(data_5F,
beside = TRUE, col = cores_barras, names.arg = clock,
xlab = "Time between Things requests", ylab = "Response time (s)",
log = "y", ylim = c(0.1, 100) # MUDANÇA: Ylim corrigido (max 83.9, teto 100)
)
legend("topright", legend = c("w/o Fog", "5 Fogs"), fill = cores_barras, cex = 0.8)
# w/o Fog vs 10 Fogs
data_10F <- rbind(MRT_sem_F, MRT_10F)
barplot(data_10F,
beside = TRUE, col = cores_barras, names.arg = clock,
xlab = "Time between Things requests", ylab = "Response time (s)",
log = "y", ylim = c(0.1, 50) # MUDANÇA: Ylim corrigido (max 29.5, teto 50)
)
legend("topright", legend = c("w/o Fog", "10 Fogs"), fill = cores_barras, cex = 0.8)
# w/o Fog vs 15 Fogs
data_15F <- rbind(MRT_sem_F, MRT_15F)
barplot(data_15F,
beside = TRUE, col = cores_barras, names.arg = clock,
xlab = "Time between Things requests", ylab = "Response time (s)",
log = "y", ylim = c(0.1, 50) # MUDANÇA: Ylim corrigido (max 11.3, teto 50)
)
legend("topright", legend = c("w/o Fog", "15 Fogs"), fill = cores_barras, cex = 0.8)

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
Questão 2
# Preparar os dados
dados_refeicao <- 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)
nomes_colunas <- c("$10-19", "$20-29", "$30-39", "$40-49")
nomes_linhas <- c("Good", "Very Good", "Excellent")
cores <- c("lightblue", "blue", "darkblue")
# Ajustar margens e permitir desenho externo
par(mar = c(5, 4, 4, 6) + 0.1)
# --- PASSO 3: Plotar o gráfico (sem legenda) ---
barplot(dados_refeicao,
main = "Qualidade da Refeição por Preço",
xlab = "Preço da Refeição (Meal Price)",
ylab = "Porcentagem (%)",
names.arg = nomes_colunas,
col = cores,
ylim = c(0, 100) # De volta ao ylim normal
)
# Adicionar legenda fora do gráfico
# Permitir que o R desenhe fora da área do gráfico
par(xpd = TRUE)
# Adicionar a legenda usando coordenadas
legend(x = 4.9, y = 100,
legend = nomes_linhas,
fill = cores,
cex = 0.8
)

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1, xpd = FALSE)
Questão 3
# Preparar os dados ---
# Carregar o dataset
data("airquality")
# Filtrar o dataset para pegar apenas o mês de Maio (Month == 5)
# e remover quaisquer NAs (valores faltantes)
temp_f_maio <- airquality[airquality$Month == 5, "Temp"]
temp_f_maio <- na.omit(temp_f_maio)
# Converter de Fahrenheit para Celsius
# C = (F - 32) / 1.8
temp_c_maio <- (temp_f_maio - 32) / 1.8
# --- PASSO 2: Plotar o Histograma (R Tradicional) ---
# Criar o histograma
hist(temp_c_maio,
main = "Histograma da Temperatura em Maio (Celsius)", # Título
xlab = "Temperatura (°C)", # Eixo X
ylab = "Densidade", # Eixo Y
col = "lightblue", # Cor
probability = TRUE # Requisito para densidade
)
# Calcular a densidade
densidade_temp <- density(temp_c_maio)
# Adicionar a linha (curva) ao gráfico
lines(densidade_temp, col = "darkblue")

par(mfrow = c(1, 1))
Questão 4
# Carregar e Preparar os Dados ---
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt", header = TRUE)
# ler "COUNTRY" e suas "SALES"
sales_by_country <- aggregate(SALES ~ COUNTRY, data = sales, FUN = sum)
# Preparar Labels e Cores
pct <- round(sales_by_country$SALES / sum(sales_by_country$SALES) * 100)
labels_pct <- paste(pct, "%", sep = "")
cores <- rainbow(length(sales_by_country$COUNTRY))
# Ajustar Margens
par(mar = c(5, 4, 4, 7) + 0.1)
# Plotar o Gráfico de Pizza
pie(sales_by_country$SALES,
labels = labels_pct,
col = cores,
main = "Total de Vendas por País"
)
# Adicionar a Legenda Externa
par(xpd = TRUE)
legend(x = 1.3, y = 1.0,
legend = sales_by_country$COUNTRY,
fill = cores,
cex = 0.8
)

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1, xpd = FALSE)
Questão 5
# Carregar os dados
# O dataset InsectSprays já vem incluído no R
data("InsectSprays")
# Plotar o Boxplot (R Tradicional)
boxplot(count ~ spray, # Fórmula: 'count' por 'spray'
data = InsectSprays,
main = "Contagem de Insetos por Tipo de Inseticida", # Título
xlab = "Tipo de Inseticida (Spray)", # Eixo X
ylab = "Contagem de Insetos", # Eixo Y
col = "yellow", # Cor amarela
outline = FALSE # Remove os outliers
)

par(mfrow = c(1, 1))
Questão 6
# Criar as Funções de Limpeza
# Função para converter memória
converter_para_mb <- function(memoria_str) {
sapply(memoria_str, function(x) {
if (grepl("TB", x)) {
num <- as.numeric(gsub("TB", "", x))
return(num * 1000000) # 1 TB = 1,000,000 MB
} else if (grepl("GB", x)) {
num <- as.numeric(gsub("GB", "", x))
return(num * 1024) # 1 GB = 1024 MB
} else if (grepl("MB", x)) {
return(as.numeric(gsub("MB", "", x)))
} else if (grepl("KB", x)) {
num <- as.numeric(gsub("KB", "", x))
return(num / 1024)
} else {
return(as.numeric(x))
}
})
}
# Converter 'currentTime' para horas contínuas
converter_para_horas <- function(time_col) {
# Converter o texto da data para um objeto de Data/Hora do R
time_obj <- as.POSIXct(time_col, format = "%Y-%m-%d %H:%M:%S")
# Encontrar o primeiro tempo (o início do experimento)
start_time <- min(time_obj, na.rm = TRUE)
# Calcular a diferença em horas
elapsed_time <- difftime(time_obj, start_time, units = "hours")
# Converter para um número simples
return(as.numeric(elapsed_time))
}
# Verificar e Carregar os 4 CSVs
file_none <- "monitoringCloudData_NONE.csv"
file_0_1 <- "monitoringCloudData_0.1.csv"
file_0_5 <- "monitoringCloudData_0.5.csv"
file_1_0 <- "monitoringCloudData_1.csv"
if (!file.exists(file_none) || !file.exists(file_0_1) || !file.exists(file_0_5) || !file.exists(file_1_0)) {
stop("ERRO: Um ou mais arquivos CSV da Questão 6 não foram encontrados.
Verifique se os 4 arquivos .csv estão no mesmo diretório do seu .Rmd")
}
data_none <- read.csv(file_none)
data_0_1 <- read.csv(file_0_1)
data_0_5 <- read.csv(file_0_5)
data_1_0 <- read.csv(file_1_0)
print("Todos os 4 arquivos CSV foram carregados com sucesso.")
## [1] "Todos os 4 arquivos CSV foram carregados com sucesso."
# Definir o Layout
layout(matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE))
par(mar = c(5, 4, 3, 2) + 0.1)
# Limpar e Plotar Gráfico 1 (None Workload)
df_none <- data.frame(Time = converter_para_horas(data_none$currentTime),
Memory = converter_para_mb(data_none$usedMemory))
df_none_sorted <- na.omit(df_none[order(df_none$Time), ])
plot(df_none_sorted$Time, df_none_sorted$Memory,
type = "l",
main = "Memory Analysis (None Workload)",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
ylim = c(96, 107)
)
# Limpar e Plotar Gráfico 2 (Workload of 0.1)
df_0_1 <- data.frame(Time = converter_para_horas(data_0_1$currentTime),
Memory = converter_para_mb(data_0_1$usedMemory))
df_0_1_sorted <- na.omit(df_0_1[order(df_0_1$Time), ])
plot(df_0_1_sorted$Time, df_0_1_sorted$Memory,
type = "l",
main = "Memory Analysis (Workload of 0.1)",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
ylim = c(0, 3500)
)
# Limpar e Plotar Gráfico 3 (Workload of 0.5)
df_0_5 <- data.frame(Time = converter_para_horas(data_0_5$currentTime),
Memory = converter_para_mb(data_0_5$usedMemory))
df_0_5_sorted <- na.omit(df_0_5[order(df_0_5$Time), ])
plot(df_0_5_sorted$Time, df_0_5_sorted$Memory,
type = "l",
main = "Memory Analysis (Workload of 0.5)",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
)
# Limpar e Plotar Gráfico 4 (Workload of 1.0)
df_1_0 <- data.frame(Time = converter_para_horas(data_1_0$currentTime),
Memory = converter_para_mb(data_1_0$usedMemory))
df_1_0_sorted <- na.omit(df_1_0[order(df_1_0$Time), ])
plot(df_1_0_sorted$Time, df_1_0_sorted$Memory,
type = "l",
main = "Memory Analysis (Workload of 1.0)",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
ylim = c(240, 255)
)

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
Questão 7
# Carregar as bibliotecas ---
library(plotly)
## Warning: pacote 'plotly' foi compilado no R versão 4.5.2
## Carregando pacotes exigidos: ggplot2
## Warning: pacote 'ggplot2' foi compilado no R versão 4.5.2
##
## 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
# Carregar o novo dataset ---
tryCatch({
netflix_data <- read.csv("netflix_titles.csv")
}, error = function(e) {
stop("ERRO: Arquivo 'netflix_titles.csv' não encontrado.")
})
# Preparar os dados
top_10_countries <- netflix_data %>%
# Remover linhas onde o país está vazio
filter(!is.na(country) & country != "") %>%
# Filtrar APENAS UM país
filter(!grepl(",", country)) %>%
# Agrupar por país e contar
group_by(country) %>%
summarize(Total = n()) %>%
# 'with_ties = FALSE' garante EXATAMENTE 10 países
slice_max(order_by = Total, n = 10, with_ties = FALSE) %>%
# 5. Ordenar
arrange(desc(Total))
# Criar o Gráfico de Pizza (Plotly)
fig <- plot_ly(top_10_countries,
labels = ~country,
values = ~Total,
type = 'pie',
textinfo = 'percent+label',
insidetextfont = list(color = '#FFFFFF')
)
fig <- fig %>% layout(title = "Top 10 Países (Origem Única) na Netflix")
# Exibir a figura
fig
Questão 8
# Renomear as colunas para a exibição
data_para_tabela <- top_10_countries %>%
rename("País" = country,
"Total de conteúdos" = Total)
# Criar a Tabela (Plotly)
fig_tabela <- plot_ly(
type = 'table',
# Define o cabeçalho
header = list(
values = names(data_para_tabela),
align = "center", # Centralizar cabeçalho
fill = list(color = "grey"), # Fundo cinza
font = list(color = "white", size = 12) # Letra em branco
),
# Define as células
cells = list(
values = rbind(data_para_tabela$País, data_para_tabela$`Total de conteúdos`),
align = "center",
font = list(size = 12)
)
)
fig_tabela <- fig_tabela %>% layout(title = "Top 10 Países (Origem Única) na Netflix")
fig_tabela
Questão 9
# Carregar as bibliotecas ---
library(plotly)
library(dplyr)
# Preparar os Dados ---
data_por_decada <- netflix_data %>%
#Remover linhas onde o ano de lançamento é NA
filter(!is.na(release_year)) %>%
#Criar a coluna "Decade"
mutate(Decade = floor(release_year / 10) * 10) %>%
# Agrupar por Década e por Tipo (Filme/Série)
group_by(Decade, type) %>%
# Contar o total em cada grupo
summarize(Count = n()) %>%
ungroup() %>%
# começar de 1940 (como na imagem de exemplo)
filter(Decade >= 1940)
## `summarise()` has grouped output by 'Decade'. You can override using the
## `.groups` argument.
# Definir as cores
cores_linhas <- c("orange", "blue")
# Criar o Gráfico de Linha (Plotly) ---
fig_decada <- plot_ly(data_por_decada,
x = ~Decade, # Eixo X
y = ~Count, # Eixo Y
color = ~type, # Cria as duas linhas (Movie, TV Series)
colors = cores_linhas, # Aplica nossas cores
type = 'scatter', # Tipo de gráfico
mode = 'lines+markers' # Linhas com pontos
)
# Adicionar títulos aos eixos e ao gráfico
fig_decada <- fig_decada %>% layout(
title = "Quantidade de Conteúdo por Década",
xaxis = list(title = "Década"),
yaxis = list(title = "Qnd. Conteúdo")
)
# Exibir o gráfico
fig_decada
Questão 10
# Carregar as bibliotecas ---
library(plotly)
library(dplyr)
library(tidyr)
# Preparar os Dados ---
# Gêneros que queremos filtrar
generos_desejados <- c("Dramas", "Action & Adventure", "Comedies")
data_generos_ano <- netflix_data %>%
# apenas Filmes
filter(type == "Movie") %>%
# entre os anos 2000 e 2010
filter(release_year >= 2000 & release_year <= 2010) %>%
# apenas o PRIMEIRO gênero, 'separate' para dividir na primeira vírgula
separate(listed_in, into = c("Genero_1"), sep = ",", extra = "drop") %>%
# apenas os 3 gêneros que queremos
filter(Genero_1 %in% generos_desejados) %>%
# Agrupar por ano e pelo primeiro gênero
group_by(release_year, Genero_1) %>%
# Contar o total em cada grupo
summarize(Count = n()) %>%
ungroup()
## `summarise()` has grouped output by 'release_year'. You can override using the
## `.groups` argument.
# --- Gráfico de Barras Agrupado (Plotly) ---
fig_barras <- plot_ly(data_generos_ano,
x = ~release_year, # Eixo X (Ano)
y = ~Count, # Eixo Y (Contagem)
color = ~Genero_1, # Agrupa por Gênero
type = 'bar' # Tipo de gráfico
)
# Adicionar títulos e 'barmode = "group"' para ficar lado-a-lado
fig_barras <- fig_barras %>% layout(
title = "Filmes Lançados por Gênero (2000-2010)",
xaxis = list(title = "Ano de Lançamento"),
yaxis = list(title = "Qnt. de Lançamentos"),
barmode = 'group'
)
# Exibir o gráfico
fig_barras