Questões
Questão 1
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)
# Configurando o layout para plotar 2 gráficos, um ao lado do outro
layout(matrix(c(1, 2), nrow = 1, ncol = 2))
# 1) Gráfico de Linhas (MRT por clock)
plot(clock, MRT_1F, type = "l", col = "red", ylim = c(0, max(MRT_1F)),
ylab = "Tempo Médio de Resposta (MRT)", xlab = "Clock",
main = "MRT por Clock")
lines(clock, MRT_3F, col = "blue")
lines(clock, MRT_5F, col = "green")
lines(clock, MRT_10F, col = "purple")
lines(clock, MRT_15F, col = "orange")
lines(clock, MRT_sem_F, col = "black")
legend("topright", legend = c("1F", "3F", "5F", "10F", "15F", "Sem F"),
col = c("red", "blue", "green", "purple", "orange", "black"), lty = 1, cex = 0.6)
# 2) Gráfico de Barras usando Escala Logarítmica
dados_barras <- rbind(MRT_1F, MRT_10F)
barplot(dados_barras, beside = TRUE, log = "y", col = c("#E6E6E6", "#666666"),
names.arg = clock, xlab = "Clock", ylab = "MRT (Escala Log)",
main = "Comparativo de MRT (Escala Log)")
legend("topright", legend = c("MRT 1F", "MRT 10F"), fill = c("#E6E6E6", "#666666"), cex = 0.7)

Questão 2
dados_qualidade <- matrix(
c(15, 5, 2, # Preço Baixo
10, 20, 5, # Preço Médio
2, 10, 25), # Preço Alto
nrow = 3,
byrow = TRUE
)
rownames(dados_qualidade) <- c("Baixo", "Médio", "Alto")
colnames(dados_qualidade) <- c("Regular", "Boa", "Excelente")
barplot(dados_qualidade,
main = "Qualidade da Refeição de Acordo com o Preço",
xlab = "Qualidade da Refeição",
ylab = "Quantidade",
col = c("#FF6666", "#66B2FF", "#99FF99"),
legend.text = rownames(dados_qualidade),
args.legend = list(title = "Preço", x = "topleft"))

Questão 3
dados_maio <- subset(airquality, Month == 5)
# Conversão de Fahrenheit para Celsius
dados_maio$TempC <- (dados_maio$Temp - 32) / 1.8
# Histograma com curva de densidade.
# freq=FALSE é obrigatório para que o eixo y represente densidade
hist(dados_maio$TempC, freq = FALSE,
main = "Temperaturas de Maio (airquality)",
xlab = "Temperatura (°C)",
ylab = "Densidade",
col = "lightblue", border = "black")
# Adicionando a curva de densidade
lines(density(dados_maio$TempC, na.rm = TRUE), col = "red", lwd = 2)

Questão 4
# Lendo os dados online
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)
# Porcentagem total de cada fatia
porcentagem <- round(sales$SALES / sum(sales$SALES) * 100, 1)
rotulos <- paste0(porcentagem, "%")
cores <- rainbow(nrow(sales))
# Gráfico de Pizza
pie(sales$SALES, labels = rotulos, col = cores, main = "Porcentagem de Vendas por País")
# Adicionando a Legenda
legend("topleft", legend = sales$COUNTRY, fill = cores, cex = 0.8)

Questão 5
boxplot(count ~ spray, data = InsectSprays,
outline = FALSE, col = "yellow",
main = "Contagem de Insetos por Inseticida",
xlab = "Tipo de Inseticida",
ylab = "Quantidade de Insetos")

Questão 6
processar_monitoramento <- function(caminho_arquivo) {
df <- read.csv(caminho_arquivo, stringsAsFactors = FALSE)
# 1. Transformar currentTime em horas contínuas usando difftime()
df$currentTime <- as.POSIXct(df$currentTime, format="%Y-%m-%d %H:%M:%OS")
tempo_inicial <- min(df$currentTime, na.rm = TRUE)
df$TempoHoras <- as.numeric(difftime(df$currentTime, tempo_inicial, units="hours"))
# 2. Converter usedMemory com Regex para MB
df$MemoriaMB <- sapply(df$usedMemory, function(x) {
# Isola o valor numérico
valor <- as.numeric(str_extract(x, "[0-9.]+"))
# Isola a unidade (B, MB, GB, TB)
unidade <- str_extract(x, "[A-Za-z]+")
# Conversões
if (is.na(unidade) || unidade == "MB") {
return(valor)
} else if (unidade == "GB") {
return(valor * 1024)
} else if (unidade == "TB") {
return(valor * 1000000)
}
return(valor)
})
return(df)
}
# Lendo as 4 bases de dados
df_01 <- processar_monitoramento("monitoringCloudData_0.1.csv")
df_05 <- processar_monitoramento("monitoringCloudData_0.5.csv")
df_1 <- processar_monitoramento("monitoringCloudData_1.csv")
df_none <- processar_monitoramento("monitoringCloudData_NONE.csv")
layout(matrix(1:4, nrow=2, ncol=2))
plot(df_01$TempoHoras, df_01$MemoriaMB, type="l", col="blue",
main="Monitoramento 0.1", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")
plot(df_05$TempoHoras, df_05$MemoriaMB, type="l", col="red",
main="Monitoramento 0.5", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")
plot(df_1$TempoHoras, df_1$MemoriaMB, type="l", col="green",
main="Monitoramento 1.0", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")
plot(df_none$TempoHoras, df_none$MemoriaMB, type="l", col="purple",
main="Monitoramento NONE", xlab="Tempo Contínuo (Horas)", ylab="Memória Usada (MB)")

Questão 7
# Lendo a base do Netflix
netflix <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)
# Tratamento para achar apenas UM país
q7_dados <- netflix %>%
filter(country != "", !str_detect(country, ",")) %>%
count(country) %>%
top_n(10, n) %>%
arrange(desc(n))
# Plotly - Gráfico de Pizza
plot_ly(q7_dados, labels = ~country, values = ~n, type = 'pie') %>%
layout(title = 'Top 10 Países com Mais Conteúdos (País de Origem Único)')
Questão 8
plot_ly(
type = 'table',
header = list(
values = c("<b>País</b>", "<b>Total de conteúdos</b>"),
align = c('center', 'center'),
line = list(color = 'black', width = 1),
fill = list(color = 'grey'),
font = list(color = 'white', size = 14)
),
cells = list(
values = rbind(q7_dados$country, q7_dados$n),
align = c('center', 'center'),
line = list(color = 'black', width = 1),
fill = list(color = 'white'),
font = list(color = 'black', size = 12)
)
) %>%
layout(title = "Tabela do Top 10 Países")
Questão 9
q9_dados <- netflix %>%
filter(!is.na(release_year)) %>%
mutate(decada = floor(release_year / 10) * 10) %>%
group_by(decada, type) %>%
summarise(quantidade = n(), .groups = "drop")
plot_ly(q9_dados, x = ~decada, y = ~quantidade, color = ~type,
colors = c("Movie" = "gold", "TV Show" = "blue"),
type = 'scatter', mode = 'lines+markers') %>%
layout(title = "Quantidade de Conteúdo Netflix por Década",
xaxis = list(title = "Década"),
yaxis = list(title = "Quantidade de Conteúdo"))
Questão 10
# Filtrando filmes de 2000 a 2010
q10_dados <- netflix %>%
filter(type == "Movie", release_year >= 2000, release_year <= 2010) %>%
# Extraindo apenas o primeiro gênero da coluna listed_in
mutate(primeiro_genero = str_trim(sapply(str_split(listed_in, ","), `[`, 1))) %>%
filter(primeiro_genero %in% c("Dramas", "Action & Adventure", "Comedies")) %>%
group_by(release_year, primeiro_genero) %>%
summarise(quantidade = n(), .groups = "drop")
# Plotly - Barras Lado a Lado
plot_ly(q10_dados, x = ~release_year, y = ~quantidade, color = ~primeiro_genero, type = 'bar') %>%
layout(title = "Quantidade de Filmes Lançados por Gênero (2000 - 2010)",
xaxis = list(title = "Ano de Lançamento"),
yaxis = list(title = "Quantidade de Filmes"),
barmode = 'group')