(20 pontos) Use os dados abaixo para gerar os gráficos. Para o segundo gráfico (barras), use a escala logarítmica (log = “y”) e as seguintes cores: “#E6E6E6”, “#666666”. Além disso, os gráficos podem ser organizados com a função layout().
# --- Dados ---
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)
# --- Fim dos Dados ---
# Layout segundo a imagem nas instruções
par(mar = c(4, 4, 3, 1))
layout_matrix <- matrix(c(
1, 1,
2, 3,
4, 5,
6, 0
), nrow = 4, byrow = TRUE)
layout(layout_matrix)
# Gráfico 1: Linhas para cada MRT vs clock
# Criar o gráfico
plot(clock, MRT_1F,
type = "o",
pch = 4,
lty = 1,
col = "black",
ylim = c(0, max(MRT_1F)),
xlab = "Time between Things requests (seconds)",
ylab = "Response Time (sec.)")
# Adicionar as outras linhas
lines(clock, MRT_3F, type="o", pch=1, lty=1, col="yellow")
lines(clock, MRT_5F, type="o", pch=0, lty=1, col="red")
lines(clock, MRT_10F, type="o", pch=2, lty=1, col="blue")
lines(clock, MRT_15F, type="o", pch=5, lty=1, col="purple")
lines(clock, MRT_sem_F, type="o", pch=3, lty=1, col="green")
# Adicionar a 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, 1, 0, 2, 5, 3),
lty = 1)
# Gráfico 2: Barras (com log="y")
# Cores
cores_g2 <- c("#E6E6E6", "#666666")
# Limite superior do Y
ylim_g2 <- c(0.1, max(MRT_1F))
# Função helper para criar os barplots
criar_barplot <- function(data_fog, fog_name) {
dados_combinados <- rbind(MRT_sem_F, data_fog)
barplot(dados_combinados,
beside = TRUE,
col = cores_g2,
names.arg = clock,
xlab = "Time between Things requests",
ylab = "Response time (s)",
log = "y", # Escala logarítmica [cite: 5]
ylim = ylim_g2
)
legend("topright",
legend = c("w/o Fog", fog_name),
fill = cores_g2)
}
# Gerar os 5 gráficos
criar_barplot(MRT_1F, "1 Fog")
criar_barplot(MRT_3F, "3 Fogs")
criar_barplot(MRT_5F, "5 Fogs")
criar_barplot(MRT_10F, "10 Fogs")
criar_barplot(MRT_15F, "15 Fogs")
(5 pontos) Para a tabela abaixo que classifica a qualidade de refeição de acordo com categorias de preços crie um gráfico de barras empilhadas. Também adicione título, nomes de eixos e legenda.
# --- Dados ---
dados_q2 <- matrix(c(53.8, 43.6, 2.6,
33.9, 54.2, 11.9,
2.6, 60.5, 36.8,
0.0, 21.4, 78.6),
nrow = 3, ncol = 4)
colnames(dados_q2) <- c("$10-19", "$20-29", "$30-39", "$40-49")
rownames(dados_q2) <- c("Good", "Very Good", "Excellent")
# --- Fim dos Dados ---
# Cores
cores_q2 <- c("green", "orange", "brown")
# Criar o gráfico de barras empilhadas
barplot(dados_q2,
main = "Quality Rating by Meal Price",
xlab = "Meal Price",
ylab = "Percentage",
col = cores_q2,
ylim = c(0, 150), # Aumentei pois a legenda estava em cima do gráfico...
legend.text = rownames(dados_q2),
args.legend = list(x = "topright")
)
(5 pontos) Faça o histograma das temperaturas do mês de maio do dataset airquality. No entanto, primeiro converta as temperaturas para graus Celsius através da expressão °C = (°F − 32) / 1.8. Após isso, gere o histograma. Também adicione título, nomes de eixos, cor e curva de densidade.
# --- Dados ---
data(airquality)
# --- Fim dos Dados ---
# Filtrar pelo mês de Maio
temps_f_maio <- airquality$Temp[airquality$Month == 5]
# Converter para Celsius
temps_c <- (temps_f_maio - 32) / 1.8
# Gerar o histograma
hist(temps_c,
main = "Histograma da Temperatura (Maio - Celsius)",
xlab = "Temperatura (°C)",
ylab = "Frequência",
col = "blue",
freq = FALSE,
)
# 4. Adicionar curva de densidade
lines(density(temps_c), col = "red", lwd = 2)
(10 pontos) Use os dados dos 4 arquivos ‘monitoringCloudData…’ para criar um gráfico de linha da segunda coluna (totalCpuUsage…) em função da primeira coluna (currentTime) de cada um dos arquivos, todos no mesmo gráfico. Use cores diferentes e adicione uma legenda.
# --- Dados ---
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt", header=TRUE)
# --- Fim dos Dados ---
# Calcular porcentagens
total_sales <- sum(sales$SALES)
porcentagens <- (sales$SALES / total_sales) * 100
# Criar porcentagem
pct <- paste(sales$COUNTRY, " - ", round(porcentagens, 1), "%", sep="")
# Cores
cores_q4 <- rainbow(length(sales$COUNTRY))
# Gráfico de Pizza
pie(sales$SALES,
labels = pct,
col = cores_q4,
main = "Total de Vendas por País"
)
# Adicionar legenda separada
legend("topright",
legend = sales$COUNTRY,
fill = cores_q4)
(5 pontos) Utilize os dados de contagens de insetos em unidades experimentais agrícolas tratados com inseticidas diferentes disponíveis no R em InsectSprays e construa um boxplot sem a presença dos outliers para os 6 tipos de inseticidas. Coloque título e nomes de eixos adequados. Além disso, as caixas devem ser preenchidas com a cor “yellow”.
# --- Dados ---
data(InsectSprays)
# --- Fim dos Dados ---
# Criar o boxplot
boxplot(count ~ spray,
data = InsectSprays,
main = "Contagem de Insetos por Tipo de Inseticida",
xlab = "Tipo de Inseticida",
ylab = "Número de Insetos",
col = "yellow",
outline = FALSE
)
(20 pontos) Gere os gráficos abaixo a partir dos seguintes dados: monitoringCloudData_0.1.csv, monitoringCloudData_0.5.csv, monitoringCloudData_1.csv e monitoringCloudData_NONE.csv. Esses dados consistem de informações de monitoramento dos recursos de uma máquina virtual. Basicamente, é necessário gerar gráficos de linha do tempo de coleta dos recursos (currentTime) em relação a memória usada (usedMemory). Porém, é necessário ajustar a coluna “currentTime” para que o tempo fique contínuo e a coluna “usedMemory” para que todas as informações fiquem megabytes. Por fim, use a função layout() para organizar os gráficos. Dica 1: use a função difftime() para calcular a diferença do tempo em horas. Dica 2:use os conceitos vistos na aula de string/regex para converter os dados na coluna “usedMemory” para apenas megabytes. Além disso, considere que um terabyte equivale a 1000000 megabytes e 1 gigabyte equivale a 1024 megabytes.
# --- Dados ---
# --- FUNÇÕES DE PROCESSAMENTO ---
# Converter para MB
convert_to_mb <- function(mem_vector) {
# Extrai a parte numérica
values <- as.numeric(sub("([0-9.]+).*", "\\1", mem_vector))
# Extrai a unidade (MB, GB, TB)
units <- sub("[0-9.]+", "", mem_vector)
# Converte
mb_values <- ifelse(units == "GB", values * 1024,
ifelse(units == "TB", values * 1000000,
ifelse(units == "MB", values, NA)))
return(mb_values)
}
# Função para processar um arquivo
process_data <- function(file_path) {
data <- read.csv(file_path)
#Ajustar o tempo
data$currentTime <- as.POSIXct(data$currentTime, format="%Y-%m-%d %H:%M:%OS")
data$hours <- as.numeric(difftime(data$currentTime, data$currentTime[1], units="hours"))
#Ajustar a memória
data$usedMemory_MB <- convert_to_mb(data$usedMemory)
return(na.omit(data))
}
# --- CARREGAMENTO E PROCESSAMENTO DOS DADOS ---
data_01 <- process_data("monitoringCloudData_0.1.csv")
data_05 <- process_data("monitoringCloudData_0.5.csv")
data_1 <- process_data("monitoringCloudData_1.csv")
data_none <- process_data("monitoringCloudData_NONE.csv")
# --- Fim dos Dados ---
# --- GERAÇÃO DOS GRÁFICOS ---
# Ajustar as margens
par(mar = c(4, 4, 2.5, 1.5))
# Layout
layout(matrix(1:4, nrow = 2, byrow = TRUE))
# Plot 1: None
plot(data_none$hours, data_none$usedMemory_MB, type="l",
xlab="Time (hour)", ylab="Used Memory (MB)",
main="Memory Analysis (None Workload)")
# Plot 2: 0.1
plot(data_01$hours, data_01$usedMemory_MB, type="l",
xlab="Time (hour)", ylab="Used Memory (MB)",
main="Memory Analysis (Workload of 0.1)")
# Plot 3: 0.5
plot(data_05$hours, data_05$usedMemory_MB, type="l",
xlab="Time (hour)", ylab="Used Memory (MB)",
main="Memory Analysis (Workload of 0.5)")
# Plot 4: 1.0
plot(data_1$hours, data_1$usedMemory_MB, type="l",
xlab="Time (hour)", ylab="Used Memory (MB)",
main="Memory Analysis (Workload of 1.0)")
(10 pontos) Filtrando os conteúdos com apenas UM país de origem (coluna “country”), utilize o Plotly para obter um gráfico de pizza dos 10 países com mais conteúdo na plataforma.
# --- Dados ---
netflix_data <- read.csv("netflix_titles.csv")
# --- Fim dos Dados ---
# Filtrar por país único
data_q7 <- netflix_data %>%
filter(country != "" & !is.na(country)) %>%
filter(!str_detect(country, ",")) %>%
group_by(country) %>%
summarise(total = n()) %>%
arrange(desc(total)) %>%
slice_max(order_by = total, n = 10) # Pegar o Top 10
# Criar gráfico de pizza com Plotly
fig_q7 <- plot_ly(data_q7,
labels = ~country,
values = ~total,
type = 'pie',
textinfo = 'label+percent',
insidetextorientation = 'radial') %>%
layout(title = "Top 10 Países (Com apenas UM país de origem) na Netflix",
showlegend = TRUE) # Manti para ficar explicito as fatias que não mostram o nome(apesar de dar para ver se passar a seta em cima...)
# Exibir o gráfico
fig_q7
(10 pontos) Considerando os 10 países descritos na questão anterior, utilize o Plotly para obter uma tabela com as colunas “País” e “Total de conteúdos”. Para tal tabela, é necessário que o cabeçalho esteja com o fundo da célula cinza e a letra em branco, e que todos os textos das células estejam @centralizados.
# --- Dados ---
data_q8 <- data_q7 %>%
rename(País = country, "Total de conteúdos" = total)
# --- Fim dos Dados ---
# Criar a tabela com Plotly
fig_q8<- plot_ly(
type = 'table',
# Configuração do cabeçalho
header = list(
values = names(data_q8),
fill = list(color = "grey"),
font = list(color = "white", size = 14), # Letra branca
align = "center" # Centralizar cabeçalho
),
# Configuração das células
cells = list(
values = t(as.matrix(unname(data_q8))),
fill = list(color = "white"),
font = list(color = "black", size = 12),
align = "center"
)
) %>%
layout(title = "Top 10 Países ")
# Exibir a tabela
fig_q8
(10 pontos) Utilizando o Plotly, obtenha um gráfico de linha com uantidade de conteúdo por década dpontos (como na imagem abaixo) contendo a qo Netflix, onde o eixo X representa as décadas e o eixo Y a quantidade de conteúdo disponível na plataforma (coluna “release_year”). Use uma linha azul para representar as séries e uma linha amarela representando os filmes. (Obs: considerar como década o período que compreende os anos de XXX0 à XXX9, por exemplo, 2000 à 2009)
# --- Dados ---
# Limpar dados
data_q9 <- netflix_data %>%
filter(!is.na(release_year))
# --- Fim dos Dados ---
# Criar a coluna "década" (XXX0 a XXX9)
data_q9$decade <- floor(data_q9$release_year / 10) * 10
# Agregar por década e tipo
ddata_q9_agg <- data_q9 %>%
group_by(decade, type) %>%
summarise(total = n(), .groups = 'drop') %>%
tidyr::pivot_wider(names_from = type, values_from = total, values_fill = 0) %>%
filter(decade >= 1940 & decade <= 2020)
# Criar gráfico de linha com Plotly
fig_q9 <- plot_ly(ddata_q9_agg, x = ~decade) %>%
# Linha de Séries (TV Show) - Azul
add_trace(y = ~`TV Show`,
name = 'TV Series',
type = 'scatter',
mode = 'lines+markers',
line = list(color = 'blue'),
marker = list(color = 'blue')) %>%
# Linha de Filmes (Movies) - Amarela/Laranja
add_trace(y = ~Movie,
name = 'Movies',
type = 'scatter',
mode = 'lines+markers',
line = list(color = 'orange'),
marker = list(color = 'orange')) %>%
layout(title = "Quantidade de Conteúdo por Década",
xaxis = list(title = "Década", dtick = 20),
yaxis = list(title = "Qnd. Conteúdo"))
# Exibir gráfico
fig_q9
(10 pontos) Utilizando o Plotly, obtenha um gráfico que representa a quantidade de filmes lançados de um determinado gênero entre os anos de 2000 e 2010. Este gráfico deve ser de barras lado-a-lado (como na imagem abaixo), com cada barra representando a quantidade de filmes dos gêneros “Dramas”, “Action & Adventure” e “Comedies” lançados naquele determinado ano. (Obs: Para filmes com múltiplos gêneros, considerar apenas o primeiro descrito na coluna “listed_in”).
# --- Dados ---
# Filtrar dados: Apenas Filmes, entre 2000 e 2010
data_q10 <- netflix_data %>%
filter(type == "Movie") %>%
filter(release_year >= 2000 & release_year <= 2010) %>%
filter(!is.na(listed_in) & listed_in != "")
# --- Fim dos Dados ---
# Extrair o gênero
data_q10$first_genre <- str_trim(str_split_fixed(data_q10$listed_in, ",", n = 2)[, 1])
# Filtrar pelos 3 gêneros solicitados
target_genres <- c("Dramas", "Action & Adventure", "Comedies")
data_q10_filtered <- data_q10 %>%
filter(first_genre %in% target_genres)
# Agregar dados
data_q10_agg <- data_q10_filtered %>%
group_by(release_year, first_genre) %>%
summarise(total = n())
# Criar gráfico de barras agrupado
fig_q10 <- plot_ly(data_q10_agg,
x = ~release_year,
y = ~total,
color = ~first_genre,
colors = c("orange", "blue", "green"),
type = 'bar',
barmode = 'group') %>%
layout(title = "Filmes Lançados (2000-2010) por Gênero",
xaxis = list(title = "Ano de Lançamento",
tickmode = 'linear',
dtick = 2),
yaxis = list(title = "Qnt. de Lançamentos"),
legend = list(title = list(text = "Gênero")))
# Exibir gráfico
fig_q10