# Dados usados
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)
# Vetor de nomes para as legendas
legendas <- c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog")
# Vetor de cores e tipos de linha/ponto para o gráfico de linha
cores_linha <- c("black", "red", "blue", "purple", "green", "orange")
tipos_linha <- c(1, 2, 3, 4, 5, 6)
tipos_ponto <- c(1, 2, 3, 4, 5, 6)
# Layout dos gráficos
# 1 gráfico na linha de cima
# 5 gráficos na linha de baixo
layout(matrix(c(1, 1, 1, 1, 1, 2, 3, 4, 5, 6), nrow = 2, byrow = TRUE))
par(mar = c(4, 4, 2, 1)) # Ajustar margens
# Gráfico de Linhas
# Definir o range do eixo Y
ylim_max <- max(MRT_1F)
tam_simbolo <- 1.8 # Tamanho dos símbolos nos gráficos de linha
plot(clock, MRT_1F,
type = "o", pch = tipos_ponto[1], lty = tipos_linha[1], col = cores_linha[1],
ylim = c(0, ylim_max),
xlab = "Time between Things requests (seconds)",
ylab = "Response Time (sec.)",
cex = tam_simbolo
)
# Adicionar as outras linhas
lines(clock, MRT_3F, type = "o", pch = tipos_ponto[2], lty = tipos_linha[2], col = cores_linha[2], cex = tam_simbolo)
lines(clock, MRT_5F, type = "o", pch = tipos_ponto[3], lty = tipos_linha[3], col = cores_linha[3], cex = tam_simbolo)
lines(clock, MRT_10F, type = "o", pch = tipos_ponto[4], lty = tipos_linha[4], col = cores_linha[4], cex = tam_simbolo)
lines(clock, MRT_15F, type = "o", pch = tipos_ponto[5], lty = tipos_linha[5], col = cores_linha[5], cex = tam_simbolo)
lines(clock, MRT_sem_F, type = "o", pch = tipos_ponto[6], lty = tipos_linha[6], col = cores_linha[6], cex = tam_simbolo)
# Adicionar legenda
legend("topright",
legend = legendas,
col = cores_linha,
lty = tipos_linha,
pch = tipos_ponto,
pt.cex = tam_simbolo
)
# Gráficos de Barra
cores_barra <- c("#E6E6E6", "#666666")
# Função auxiliar para criar cada gráfico de barra
criar_barra <- function(dados_f, legenda_f) {
# Combinar 'sem Fog' e os 'dados_f'
dados_combinados <- rbind(MRT_sem_F, dados_f)
barplot(dados_combinados,
beside = TRUE,
col = cores_barra,
log = "y",
xlab = "Time between Things requests",
ylab = "Response time (s)",
names.arg = clock
)
legend("topright",
legend = c("w/o Fog", legenda_f),
fill = cores_barra,
bty = "n"
)
}
# Criar os gráficos de barra
par(mar = c(4, 4, 2, 1)) # Resetar margens para os gráficos menores
criar_barra(MRT_1F, "1 Fog")
criar_barra(MRT_3F, "3 Fogs")
criar_barra(MRT_5F, "5 Fogs")
criar_barra(MRT_10F, "10 Fogs")
criar_barra(MRT_15F, "15 Fogs")
# Resetar o layout para o padrão
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
# Criar a matriz de dados
dados_q2 <- matrix(
c(
53.8, 43.6, 2.6, # Coluna $10-19
33.9, 54.2, 11.9, # Coluna $20-29
2.6, 60.5, 36.8, # Coluna $30-39
0.0, 21.4, 78.6 # Coluna $40-49
),
nrow = 3,
byrow = FALSE
)
# Definir nomes das colunas e linhas
colnames(dados_q2) <- c("$10-19", "$20-29", "$30-39", "$40-49")
rownames(dados_q2) <- c("Good", "Very Good", "Excellent")
# Cores para as pilhas
cores_q2 <- c("blue", "green", "yellow")
# Ajustar margens para caber a legenda na lateral
par(mar = c(5.1, 4.1, 4.1, 8.1))
# Criar o gráfico de barras empilhadas
barplot(dados_q2,
main = "Qualidade da Refeição por Preço", # Título do gráfico
xlab = "Preço da Refeição (Meal Price)", # Rótulo do eixo X
ylab = "Porcentagem Total", # Rótulo do eixo Y
col = cores_q2, # Cores das pilhas
ylim = c(0, 100) # Ajustar limite para a legenda caber
)
legend("topright",
legend = rownames(dados_q2),
fill = cores_q2,
inset = c(-0.25, 0), # Coloca a legenda fora da área do gráfico
xpd = TRUE, # Permite desenhar a legenda fora
bty = "n" # Remove a caixa ao redor da legenda
)
# Resetar as margens para o padrão
par(mar = c(5.1, 4.1, 4.1, 2.1))
airquality e converter a coluna
Temp de Fahrenheit para Celsius.hist(), definindo
freq = FALSE para permitir a sobreposição da curva de
densidade.# Carregar o dataset
data("airquality")
# Converter Temperatura de F para C
# Fórmula: °C = (°F - 32) / 1.8
temp_celsius <- (airquality$Temp - 32) / 1.8
# Gerar o histograma
hist(temp_celsius,
freq = FALSE, # Permite plotar a densidade
main = "Histograma da Temperatura em Maio (Celsius)",
xlab = "Temperatura (°C)",
ylab = "Densidade",
col = "lightblue", # Cor do histograma
border = "black"
)
# Adicionar curva de densidade
lines(density(temp_celsius, na.rm = TRUE), col = "red", lwd = 2)
# Ler os dados da tabela
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)
# Agregar vendas por país
sales_por_pais <- aggregate(SALES ~ COUNTRY, data = sales, FUN = sum)
# Calcular porcentagens
total_sales <- sum(sales_por_pais$SALES)
porcentagens <- round((sales_por_pais$SALES / total_sales) * 100, 1)
labels_pie <- paste(sales_por_pais$COUNTRY, " (", porcentagens, "%)", sep = "")
# Definir cores
cores_pie <- rainbow(length(sales_por_pais$COUNTRY))
# Criar o gráfico de pizza
pie(sales_por_pais$SALES,
labels = labels_pie,
col = cores_pie,
main = "Porcentagem de Vendas por País"
)
# Adicionar legenda
legend("topright",
legend = sales_por_pais$COUNTRY,
fill = cores_pie,
cex = 0.8
)
# Carregar o dataset
data("InsectSprays")
# Criar o boxplot
boxplot(count ~ spray,
data = InsectSprays,
main = "Contagem de Insetos por Tipo de Inseticida",
xlab = "Tipo de Inseticida",
ylab = "Contagem de Insetos",
col = "yellow",
outline = FALSE # Remove os outliers
)
# Carregar biblioteca para manipulação de strings
library(stringr)
# Função de pré-processamento
# Esta função lê e limpa cada arquivo
processar_dados <- function(caminho_arquivo) {
# Ler os dados
dados <- read.csv(caminho_arquivo)
# Limpeza da Memória
dados$usedMemory_MB <- NA
# Identificar unidades
idx_mb <- grepl("MB", dados$usedMemory, ignore.case = TRUE)
idx_gb <- grepl("GB", dados$usedMemory, ignore.case = TRUE)
idx_tb <- grepl("TB", dados$usedMemory, ignore.case = TRUE)
# Converter tudo para numérico (removendo "MB", "GB", "TB" e outros caracteres)
valores_num <- as.numeric(gsub("[^0-9.]", "", dados$usedMemory))
# Converter para MB
dados$usedMemory_MB[idx_mb] <- valores_num[idx_mb]
dados$usedMemory_MB[idx_gb] <- valores_num[idx_gb] * 1024 # 1 GB = 1024 MB
dados$usedMemory_MB[idx_tb] <- valores_num[idx_tb] * 1000000 # 1 TB = 1000000 MB
# Limpeza do Tempo
# Os arquivos usam string de data/hora
# A função as.POSIXct consegue ler esse formato diretamente.
dados$Timestamp <- as.POSIXct(dados$currentTime)
# Calcular tempo decorrido em horas
tempo_inicial <- min(dados$Timestamp, na.rm = TRUE)
dados$Time_Hour <- as.numeric(difftime(dados$Timestamp, tempo_inicial, units = "hours"))
return(dados)
}
# Processar os arquivos
# Os arquivos estão no diretório atual
caminho_base <- "./"
dados_none <- processar_dados(paste0(caminho_base, "monitoringCloudData_NONE.csv"))
dados_0.1 <- processar_dados(paste0(caminho_base, "monitoringCloudData_0.1.csv"))
dados_0.5 <- processar_dados(paste0(caminho_base, "monitoringCloudData_0.5.csv"))
dados_1.0 <- processar_dados(paste0(caminho_base, "monitoringCloudData_1.csv"))
# Configurar o layout e plotar
layout(matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE))
par(mar = c(4, 4, 3, 2)) # Ajustar margens
# Gráfico 1: None Workload
plot(dados_none$Time_Hour, dados_none$usedMemory_MB,
type = "l",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
main = "Memory Analysis (None Workload)"
)
# Gráfico 2: Workload 0.1
plot(dados_0.1$Time_Hour, dados_0.1$usedMemory_MB,
type = "l",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
main = "Memory Analysis (Workload of 0.1)"
)
# Gráfico 3: Workload 0.5
plot(dados_0.5$Time_Hour, dados_0.5$usedMemory_MB,
type = "l",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
main = "Memory Analysis (Workload of 0.5)"
)
# Gráfico 4: Workload 1.0
plot(dados_1.0$Time_Hour, dados_1.0$usedMemory_MB,
type = "l",
xlab = "Time (hour)",
ylab = "Used Memory (MB)",
main = "Memory Analysis (Workload of 1.0)"
)
# Resetar o layout
par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)
library(plotly)
library(dplyr)
# Carregar os dados
if (!exists("netflix_data")) {
netflix_data <- read.csv("netflix_titles.csv")
}
# Preparar os dados
top_10_paises <- netflix_data %>%
# Filtrar linhas sem país definido
filter(country != "") %>%
# Filtrar por conteúdo com apenas UM país
filter(!grepl(",", country)) %>%
# Contar por país
group_by(country) %>%
summarise(Total_Conteudos = n()) %>%
# Ordenar e pegar o Top 10
arrange(desc(Total_Conteudos)) %>%
top_n(10)
# Criar o gráfico de pizza com Plotly
fig <- plot_ly(top_10_paises,
labels = ~country,
values = ~Total_Conteudos,
type = "pie",
textinfo = "label+percent",
insidetextorientation = "radial"
) %>%
layout(
title = "Top 10 Países com Mais Conteúdo na Netflix (Origem Única)",
margin = list(t = 80, b = 50) # Ajustar margens para o título
)
fig
library(plotly)
library(dplyr)
# Garantir que os dados da Q7 existam
# (Se este chunk for executado separadamente, ele recalcula 'top_10_paises')
if (!exists("top_10_paises")) {
if (!exists("netflix_data")) {
netflix_data <- read.csv("netflix_titles.csv")
}
top_10_paises <- netflix_data %>%
filter(country != "") %>%
filter(!grepl(",", country)) %>%
group_by(country) %>%
summarise(Total_Conteudos = n()) %>%
arrange(desc(Total_Conteudos)) %>%
top_n(10)
}
# Renomear colunas para a tabela
tabela_dados <- top_10_paises
colnames(tabela_dados) <- c("País", "Total de conteúdos")
# Criar a tabela com Plotly
fig_tabela <- plot_ly(
type = "table",
# Estilização do cabeçalho
header = list(
values = colnames(tabela_dados),
fill = list(color = "grey"), # Fundo cinza
font = list(color = "white", size = 14), # Letra branca
align = "center" # Centralizado
),
# Estilização das células
cells = list(
values = list(tabela_dados$País, tabela_dados$`Total de conteúdos`),
fill = list(color = "white"),
align = "center", # Centralizado
font = list(size = 12)
)
) %>%
layout(title = "Total de Conteúdos por País (Top 10)")
fig_tabela
Este código cria o gráfico de linhas da quantidade de conteúdo por
década. Ele primeiro cria a coluna Decada (arredondando o
release_year para baixo), depois agrupa por década e tipo
(Filme/Série). Por último, plota as linhas com plotly,
usando as cores azul para séries e “laranja” para filmes.
# Garantir que os dados da Netflix existam
if (!exists("netflix_data")) {
netflix_data <- read.csv("netflix_titles.csv")
}
# Preparar os dados
conteudo_por_decada <- netflix_data %>%
# Criar coluna de década
mutate(Decada = floor(release_year / 10) * 10) %>%
# Contar por Década e Tipo
group_by(Decada, type) %>%
summarise(Qnd_Conteudo = n()) %>%
# Filtrar dados muito antigos
filter(Decada >= 1940) %>%
ungroup()
# Renomear "Movie" e "TV Show" para bater com a legenda da imagem
conteudo_por_decada$type <- recode(conteudo_por_decada$type,
"Movie" = "Movies",
"TV Show" = "TV Series"
)
# Criar gráfico de linha com Plotly
fig_decada <- plot_ly(conteudo_por_decada,
x = ~Decada,
y = ~Qnd_Conteudo,
color = ~type,
type = "scatter",
mode = "lines+markers",
# Definir cores manualmente
colors = c("Movies" = "orange", "TV Series" = "blue")
) %>%
layout(
title = "Quantidade de Conteúdo por Década",
xaxis = list(title = "Década"),
yaxis = list(title = "Qnd. Conteúdo"),
legend = list(title = list(text = ""))
)
fig_decada
Este código cria um gráfico de barras agrupado. Ele filtra por: - Tipo: “Movie” - Anos: 2000 a 2010 - Gêneros: “Dramas”, “Action & Adventure”, “Comedies”
Ele também extrai apenas o primeiro gênero listado antes de agrupar.
library(plotly)
library(dplyr)
library(stringr)
# Garantir que os dados da Netflix existam
if (!exists("netflix_data")) {
netflix_data <- read.csv("netflix_titles.csv")
}
# Gêneros e anos de interesse
generos_alvo <- c("Dramas", "Action & Adventure", "Comedies")
anos_alvo <- 2000:2010
# Preparar os dados
dados_generos_ano <- netflix_data %>%
# Filtrar por tipo e ano
filter(type == "Movie" & release_year %in% anos_alvo) %>%
# Extrair o primeiro gênero
mutate(Primeiro_Genero = str_split(listed_in, ", ", simplify = TRUE)[, 1]) %>%
# Filtrar apenas os gêneros de interesse
filter(Primeiro_Genero %in% generos_alvo) %>%
# Contar por ano e gênero
group_by(release_year, Primeiro_Genero) %>%
summarise(Qnd_Lancamentos = n()) %>%
ungroup()
# Renomear para português
dados_generos_ano$Primeiro_Genero <- recode(dados_generos_ano$Primeiro_Genero,
"Dramas" = "Drama",
"Action & Adventure" = "Ação e Aventura",
"Comedies" = "Comédia"
)
# Criar o gráfico de barras agrupado
fig_generos <- plot_ly(dados_generos_ano,
x = ~release_year,
y = ~Qnd_Lancamentos,
color = ~Primeiro_Genero,
type = "bar" # barmode = "group" é o padrão
) %>%
layout(
title = "Lançamentos 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_generos