# Dados fornecidos
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)
Requisito: usar R base. Gráfico de linhas com todas as séries (1, 3, 5, 10, 15 Fogs e sem Fog).
# Primeiro traça um canvas
plot(clock, MRT_1F, type="b", pch=4, lty=1, col="black", ylim=c(0, max(MRT_1F)),
xlab="Time between Things requests (seconds)",
ylab="Response Time (sec.)")
# Adiciona cada série
lines(clock, MRT_3F, type="b", pch=8, col="yellow")
lines(clock, MRT_5F, type="b", pch=1, col="red")
lines(clock, MRT_10F, type="b", pch=2, col="blue")
lines(clock, MRT_15F, type="b", pch=5, col="purple")
lines(clock, MRT_sem_F, type="b", pch=4, col="green")
# Adiciona legenda
legend("topright",
legend=c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
col=c("black", "yellow", "red", "blue", "purple", "green"),
pch=c(4,8,1,2,5,4),
lty = 1,
bty="n")
Requisitos:
- R base
- Barras lado a lado com
beside = TRUE
- Escala logarítmica no eixo y:
log = "y"
- Cores obrigatórias:
col = c("#E6E6E6", "#666666")
- Organizar subgráficos com layout() (cinco painéis).
# Definindo colunas
cols <- c("#E6E6E6", "#666666")
# Função para generalizar gráficos
painel_barras <- function(y_fog, rotulo, ylim_max){
y_mat <- rbind(MRT_sem_F, y_fog)
barplot(y_mat,
beside = TRUE,
col = cols,
names.arg = clock,
log = "y",
ylim = c(0.1, ylim_max), # <-- limites específicos (varia de gráfico para gráfico)
ylab = "Response time (s)",
xlab = "Time between Things requests")
legend("topright", legend = c("w/o Fog", rotulo), fill = cols, bty = "n")
}
## Layout 3 x 2 (última célula vazia)
graphics::layout(matrix(c(1,2,3,4,5,0), nrow = 3, byrow = TRUE))
op <- par(mar = c(4,4,2,1))
# 1) ylim até 500
painel_barras(MRT_1F, "1 Fog", 500)
# 2) e 3) ylim até 50
painel_barras(MRT_3F, "3 Fogs", 50)
painel_barras(MRT_5F, "5 Fogs", 50)
# 4) e 5) ylim até 5
painel_barras(MRT_10F, "10 Fogs", 5)
painel_barras(MRT_15F, "15 Fogs", 5)
par(op)
# Reseta layout ao final
graphics::layout(1)
# Dados
tab <- 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
)
rownames(tab) <- c("Good", "Very Good", "Excellent")
colnames(tab) <- c("$10–19", "$20–29", "$30–39", "$40–49")
# Cores
cols <- c("#E6E6E6", "#999999", "#4D4D4D")
# Gráfico
par(mar = c(5,5,3,7), xpd = NA) # margem direita maior p/ legenda fora
bp <- barplot(tab,
col = cols,
ylim = c(0, 100),
xlab = "Meal Price",
ylab = "Percent (%)",
main = "Meal Quality Rating by Meal Price")
# Legenda fora, à direita, na ordem do topo (Excellent) para base (Good)
legend(x = max(bp) + 0.8, y = 100,
legend = rev(rownames(tab)),
fill = rev(cols),
bty = "n", cex = 0.9)
# Usa o dataset padrão do R
data("airquality")
# Filtra apenas o mês de maio (Month == 5)
maio <- subset(airquality, Month == 5)
# Converte temperatura de Fahrenheit para Celsius
temp_c <- (maio$Temp - 32) / 1.8
# Cria o histograma com cor, título e rótulos dos eixos
hist(
temp_c,
breaks = 10,
col = "skyblue",
main = "Histograma das Temperaturas em Maio (°C)",
xlab = "Temperatura (°C)",
ylab = "Frequência",
prob = TRUE # para permitir sobreposição da curva de densidade
)
# Adiciona a curva de densidade
lines(density(temp_c), col = "red", lwd = 2)
# Adiciona uma legenda
legend("topright", legend = c("Densidade"), col = "red", lwd = 2, bty = "n")
# Carrega os dados
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt", header = TRUE)
# Calcula total de vendas por país
sales_total <- aggregate(SALES ~ COUNTRY, data = sales, sum)
# Calcula as porcentagens
percent <- round((sales_total$SALES / sum(sales_total$SALES)) * 100, 1)
# Cria rótulos com porcentagem
labels <- paste(sales_total$COUNTRY, "-", percent, "%")
# Define uma paleta de cores
cores <- rainbow(nrow(sales_total))
# Gráfico de Pizza
pie(
sales_total$SALES, # Corrigido: usa SALES em maiúsculo
labels = paste0(percent, "%"),
col = cores,
main = "Porcentagem das Vendas por País"
)
# Adiciona legenda
legend(
"topright",
legend = labels,
fill = cores,
title = "Países"
)
# Carrega o conjunto de dados padrão do R
data("InsectSprays")
# Cria o boxplot sem outliers
boxplot(
count ~ spray, # variável resposta vs. fator (6 tipos de inseticida)
data = InsectSprays,
main = "Contagem de Insetos por Tipo de Inseticida",
xlab = "Tipo de Inseticida",
ylab = "Número de Insetos",
col = "yellow", # cor das caixas
outline = FALSE # remove os outliers
)
# Função para ler, ajustar e converter os dados
processa_dados <- function(file) {
# Lê o CSV
dados <- read.csv(file, header = TRUE)
# --- Ajuste do tempo (deve estar em formato datetime) ---
# Converte para objeto de tempo
dados$currentTime <- as.POSIXct(dados$currentTime)
# Calcula o tempo contínuo em horas desde o início
tempo_horas <- as.numeric(difftime(dados$currentTime, dados$currentTime[1], units = "hours"))
# --- Conversão da memória para MB ---
# Remove espaços
dados$usedMemory <- trimws(dados$usedMemory)
# Extrai valores numéricos
valores <- as.numeric(gsub("[^0-9\\.]", "", dados$usedMemory))
# Extrai unidade (MB, GB, TB)
unidade <- gsub("[0-9\\.]", "", dados$usedMemory)
# Converte todas as unidades para MB
memoria_mb <- ifelse(grepl("GB", unidade, ignore.case = TRUE), valores * 1024,
ifelse(grepl("TB", unidade, ignore.case = TRUE), valores * 1000000,
valores))
# Retorna os dados prontos
data.frame(time = tempo_horas, usedMemoryMB = memoria_mb)
}
# --- Lê e processa os quatro datasets ---
none <- processa_dados("monitoringCloudData_NONE.csv")
w01 <- processa_dados("monitoringCloudData_0.1.csv")
w05 <- processa_dados("monitoringCloudData_0.5.csv")
w1 <- processa_dados("monitoringCloudData_1.csv")
# --- Organiza o layout 2x2 ---
graphics::layout(matrix(1:4, nrow = 2, ncol = 2, byrow = TRUE))
# --- Gráfico 1: None ---
plot(none$time, none$usedMemoryMB, type = "l",
main = "Memory Analysis (None Workload)",
xlab = "Time (hour)", ylab = "Used Memory (MB)")
# --- Gráfico 2: Workload 0.1 ---
plot(w01$time, w01$usedMemoryMB, type = "l",
main = "Memory Analysis (Workload of 0.1)",
xlab = "Time (hour)", ylab = "Used Memory (MB)")
# --- Gráfico 3: Workload 0.5 ---
plot(w05$time, w05$usedMemoryMB, type = "l",
main = "Memory Analysis (Workload of 0.5)",
xlab = "Time (hour)", ylab = "Used Memory (MB)")
# --- Gráfico 4: Workload 1.0 ---
plot(w1$time, w1$usedMemoryMB, type = "l",
main = "Memory Analysis (Workload of 1.0)",
xlab = "Time (hour)", ylab = "Used Memory (MB)")
# Leitura
netflix <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)
# Limpeza de 'country': remove NAs, tira espaços, descarta vazios
netflix <- netflix %>%
mutate(country = trimws(country)) %>%
filter(!is.na(country), nzchar(country))
# Mantém apenas títulos com UM país (sem vírgulas após limpeza)
netflix_1pais <- netflix %>%
filter(!grepl(",", country))
# Conta e seleciona Top 10 países
top_paises <- netflix_1pais %>%
count(country, sort = TRUE) %>%
slice(1:10)
# Gráfico de pizza
fig_pizza <- plot_ly(
data = top_paises,
labels = ~country,
values = ~n,
type = "pie",
textinfo = "label+percent",
insidetextorientation = "radial",
marker = list(line = list(color = "#FFFFFF", width = 2))
) %>%
layout(
title = "Top 10 Países com Mais Conteúdos na Netflix (1 país por título)",
showlegend = TRUE
)
fig_pizza %>%
config(displayModeBar = FALSE)
# Tabela formatada
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 = rbind(top_paises$country, top_paises$n),
fill = list(color = "white"),
font = list(color = "black", size = 12),
align = "center"
)
) %>%
layout(title = "Top 10 Países — Títulos com 1 país de origem")
tabela %>%
config(displayModeBar = FALSE)
# Leitura do dataset
netflix <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)
# Criação da coluna 'decade'
netflix <- netflix %>%
mutate(decade = floor(release_year / 10) * 10) # Ex: 2003 -> 2000
# Contagem de conteúdos por década e tipo
conteudo_decada <- netflix %>%
filter(!is.na(release_year)) %>%
group_by(decade, type) %>%
summarise(qtd = n(), .groups = 'drop')
# Gráfico de linha com Plotly
fig <- plot_ly(conteudo_decada, x = ~decade, y = ~qtd, color = ~type,
colors = c("orange", "blue"), type = 'scatter', mode = 'lines+markers') %>%
layout(
title = "Quantidade de Conteúdos na Netflix por Década",
xaxis = list(title = "Década"),
yaxis = list(title = "Qtd. Conteúdo"),
legend = list(title = list(text = "Tipo de Conteúdo"))
)
fig %>%
config(displayModeBar = FALSE)
# --- 1. Filtra apenas FILMES ---
filmes <- netflix %>%
filter(type == "Movie", !is.na(release_year), release_year >= 2000, release_year <= 2010)
# --- 2. Considera apenas o PRIMEIRO gênero (antes da vírgula) ---
filmes <- filmes %>%
mutate(listed_in = trimws(sapply(strsplit(listed_in, ","), `[`, 1)))
# --- 3. Mantém apenas os 3 gêneros desejados ---
filmes <- filmes %>%
filter(listed_in %in% c("Dramas", "Action & Adventure", "Comedies"))
# --- 4. Conta quantos filmes foram lançados por ano e gênero ---
contagem <- filmes %>%
group_by(release_year, listed_in) %>%
summarise(qtd = n(), .groups = 'drop')
# --- 5. Gráfico de barras lado a lado ---
fig <- plot_ly(
data = contagem,
x = ~release_year,
y = ~qtd,
color = ~listed_in,
colors = c("blue", "orange", "green"),
type = "bar"
) %>%
layout(
barmode = "group",
title = "Quantidade de Filmes por Gênero (2000–2010)",
xaxis = list(title = "Ano de Lançamento"),
yaxis = list(title = "Qnt. de Lançamentos"),
legend = list(title = list(text = "Gênero"))
)
fig %>%
config(displayModeBar = FALSE)