MRT_1F <- c(517.1468515630205, 85.13094142168089, 30.333207896694553,
12.694776264558937, 3.3041601673945418)
MRT_2F <- c(526.9692994038237, 280.4079496307135, 121.28292671587394,
76.65751249749171, 7.846599292193567)
labels <- c("1", "2", "3", "4", "5")
data_q1 <- data.frame(
Feature = labels,
MRT_1F = MRT_1F,
MRT_2F = MRT_2F
)
par(mfrow = c(1, 2), mar = c(5, 4, 4, 2) + 0.1)
# --- Gráfico 1: Linhas ---
plot(data_q1$MRT_1F, type = "l", col = "blue",
xlab = "Feature", ylab = "MRT (ms)", main = "MRT - Linhas",
ylim = range(c(data_q1$MRT_1F, data_q1$MRT_2F)),
xaxt = "n", lwd = 2)
lines(data_q1$MRT_2F, type = "l", col = "red", lwd = 2)
axis(side = 1, at = 1:length(labels), labels = labels)
legend("topright",
legend = c("1 Feature", "2 Features"),
col = c("blue", "red"),
lty = 1,
cex = 0.8)
# --- Gráfico 2: Barras (Escala Log) ---
# Transpõe para ficar 2 x 5 (2 séries, 5 features)
bar_data <- t(as.matrix(data_q1[, 2:3]))
colnames(bar_data) <- labels # nomes dos grupos no eixo X
barplot(bar_data,
col = c("#E6E6E6", "#666666"),
xlab = "Feature",
ylab = "log(MRT)",
main = "MRT - Barras (Escala Logarítmica)",
log = "y",
beside = TRUE)
legend("topright",
legend = c("1 Feature", "2 Features"),
fill = c("#E6E6E6", "#666666"),
cex = 0.8)
par(mfrow = c(1, 1))
tab_q2 <- matrix(
c(20, 10, 5, # Preço Baixo: Ruim, Média, Alta
15, 25, 15, # Preço Médio
5, 15, 30), # Preço Alto
nrow = 3, byrow = TRUE
)
colnames(tab_q2) <- c("Baixo", "Médio", "Alto")
rownames(tab_q2) <- c("Ruim", "Média", "Alta")
# Gráfico de barras empilhadas
barplot(
tab_q2,
col = c("#FF5733", "#FFC300", "#33FF57"),
main = "Qualidade da refeição por faixa de preço",
xlab = "Faixa de preço",
ylab = "Quantidade",
legend.text = rownames(tab_q2),
args.legend = list(x = "topright", bty = "n")
)
# Filtrar apenas mês de maio (Month == 5)
aq_maio <- subset(airquality, Month == 5)
# Converter de °F para °C
temp_C <- (aq_maio$Temp - 32) / 1.8
# Histograma com curva de densidade
hist(
temp_C,
breaks = 8,
col = "lightblue",
border = "white",
main = "Temperaturas em maio (Nova York) em °C",
xlab = "Temperatura (°C)",
ylab = "Frequência",
prob = TRUE
)
# Curva de densidade
dens <- density(temp_C, na.rm = TRUE)
lines(dens, col = "red", lwd = 2)
sales <- read.table(
"https://training-course-material.com/images/8/8f/Sales.txt",
header = TRUE
)
# assumindo que a 1ª coluna é País e a 2ª é Vendas
nomes_paises <- sales[[1]]
valores <- sales[[2]]
# porcentagens
pct <- round(valores / sum(valores) * 100, 1)
labels <- paste0(nomes_paises, " (", pct, "%)")
pie(
valores,
labels = labels,
col = hcl.colors(length(valores), "Set 2"),
main = "Participação nas vendas por país"
)
legend(
"topright",
legend = nomes_paises,
fill = hcl.colors(length(valores), "Set 2"),
bty = "n"
)
boxplot(
count ~ spray,
data = InsectSprays,
main = "Contagem de insetos por tipo de inseticida",
xlab = "Spray",
ylab = "Contagem de insetos",
col = "yellow",
outline = FALSE # remove outliers
)
# Conversor de textos de memória ("0.5 GB", "512 MB") para MB
conv_mb <- function(x) {
if (all(is.na(x))) return(rep(NA_real_, length(x)))
# separa número e unidade
num <- suppressWarnings(as.numeric(sub(" .*", "", x)))
unit <- toupper(sub(".* ", "", x))
mult <- ifelse(unit == "TB", 1e6,
ifelse(unit == "GB", 1024,
ifelse(unit == "MB", 1, 1)))
num * mult
}
# Função genérica para preparar dados de um arquivo de monitoramento
prep_mc <- function(file) {
df <- tryCatch(
read.csv(file, stringsAsFactors = FALSE),
error = function(e) NULL
)
if (is.null(df) || ncol(df) < 2) return(NULL)
# 1ª coluna = tempo, 2ª coluna = uso de memória (texto)
time_txt <- df[[1]]
mem_txt <- df[[2]]
# converte para POSIXct e horas relativas
time_posix <- as.POSIXct(time_txt, format = "%Y-%m-%d %H:%M:%OS", tz = "UTC")
horas <- as.numeric(difftime(time_posix, min(time_posix, na.rm = TRUE),
units = "hours"))
usedMB <- conv_mb(mem_txt)
out <- data.frame(horas = horas, usedMB = usedMB)
out <- out[is.finite(out$usedMB) & is.finite(out$horas), ]
if (nrow(out) == 0) return(NULL)
out
}
# Arquivos e rótulos
arqs <- c("monitoringCloudData_NONE.csv",
"monitoringCloudData_0.1.csv",
"monitoringCloudData_0.5.csv",
"monitoringCloudData_1.csv")
titulos <- c("Sem carga", "Carga 0.1", "Carga 0.5", "Carga 1.0")
dfs <- lapply(arqs, prep_mc)
# 4 gráficos em uma tela 2x2
op <- par(mfrow = c(2, 2))
for (i in seq_along(dfs)) {
df <- dfs[[i]]
if (!is.null(df) && nrow(df) > 0) {
with(df, {
plot(horas, usedMB, type = "l", col = "blue",
main = titulos[i],
xlab = "Tempo (horas)",
ylab = "Memória usada (MB)")
})
} else {
# painel vazio com aviso
plot(0, 0, type = "n", axes = FALSE,
xlab = "", ylab = "",
main = titulos[i])
text(0, 0, "dados ausentes")
}
}
par(op) # restaura layout
library(plotly)
library(dplyr)
library(stringr)
# considerar apenas uma país (sem vírgula)
netflix_one_country <- netflix_data %>%
filter(!is.na(country)) %>%
filter(!str_detect(country, ","))
top_10 <- netflix_one_country %>%
group_by(country) %>%
summarise(total = n(), .groups = "drop") %>%
arrange(desc(total)) %>%
slice(1:10)
p7 <- plot_ly(
top_10,
labels = ~country,
values = ~total,
type = "pie",
textinfo = "percent",
hoverinfo = "label+percent+value",
marker = list(line = list(color = "#FFFFFF", width = 1))
) %>%
layout(
title = "Top 10 países com mais conteúdo (country único)"
)
p7
top_10_tbl <- top_10 %>%
rename("País" = country,
"Total de conteúdos" = total)
p8 <- plot_ly(
type = "table",
header = list(
values = colnames(top_10_tbl),
fill = list(color = "#666666"),
font = list(color = "white", size = 12),
align = "center"
),
cells = list(
values = list(top_10_tbl$`País`, top_10_tbl$`Total de conteúdos`),
align = "center"
)
)
p8
netflix_decade <- netflix_data %>%
filter(!is.na(type), !is.na(release_year)) %>%
mutate(decade = floor(release_year / 10) * 10) %>%
group_by(decade, type) %>%
summarise(qtd = n(), .groups = "drop") %>%
filter(decade >= 1940)
p9 <- plot_ly(
netflix_decade,
x = ~decade,
y = ~qtd,
color = ~type,
colors = c("TV Show" = "blue", "Movie" = "yellow"),
type = "scatter",
mode = "lines"
) %>%
layout(
title = "Quantidade de conteúdo por década (Netflix)",
xaxis = list(
title = "Década",
tickvals = sort(unique(netflix_decade$decade)),
ticktext = paste0(sort(unique(netflix_decade$decade)), "'s")
),
yaxis = list(title = "Quantidade"),
legend = list(title = list(text = "Tipo"))
)
p9
generos_alvo <- c("Dramas", "Action & Adventure", "Comedies")
netflix_gen <- netflix_data %>%
filter(type == "Movie",
release_year >= 2000,
release_year <= 2010,
!is.na(listed_in)) %>%
mutate(
main_genre = sub(",.*", "", listed_in),
main_genre = str_trim(main_genre)
) %>%
filter(main_genre %in% generos_alvo) %>%
group_by(release_year, main_genre) %>%
summarise(qtd = n(), .groups = "drop")
# garantir todos anos e gêneros no grid (preenche com 0)
netflix_gen_full <- tidyr::complete(
netflix_gen,
release_year = 2000:2010,
main_genre = generos_alvo,
fill = list(qtd = 0)
)
p10 <- plot_ly(
netflix_gen_full,
x = ~release_year,
y = ~qtd,
color = ~main_genre,
type = "bar",
text = ~paste(
"Ano:", release_year,
"<br>Gênero:", main_genre,
"<br>Filmes:", qtd
),
hoverinfo = "text"
) %>%
layout(
title = "Filmes por gênero (2000–2010)",
xaxis = list(
title = "Ano",
tickmode = "array",
tickvals = 2000:2010
),
yaxis = list(title = "Quantidade de filmes"),
barmode = "group",
legend = list(title = list(text = "Gênero"))
)
p10