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(). Ver exemplos do uso da função layout() em: https://stackoverflow.com/questions/38810854/how-to-use-layout-function-in-r e https://bookdown.org/ndphillips/YaRrr/arranging-plots-with-parmfrow-and-layout.html.
Adicionar 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)
definindo o layout:
# Layout
layout(matrix(c(0,1, 1,0,
0,1, 1,0,
2,2,3,3,
4,4,5,5,
6,6,0,0), nrow = 5, ncol = 4, byrow = TRUE))
# Gráfico de linhas
plot(clock, MRT_1F, type = "b", col = "black", lwd = 1, pch = 4,
ylim = c(0, max(MRT_1F)),
xlab = "Time between requests (seconds)", ylab = "Response Time (sec)")
lines(clock, MRT_3F, col = "yellow", lwd = 1, type = "b", pch = 0)
lines(clock, MRT_5F, col = "red", lwd = 1 , type = "b", pch = 1)
lines(clock, MRT_10F, col = "blue", lwd = 1,type = "b", pch = 2)
lines(clock, MRT_15F, col = "purple", lwd = 1, type = "b", pch = 5)
lines(clock, MRT_sem_F, col = "green", lwd = 1,type = "b", pch = 4)
legend("topright",
legend = c("1 Fog", "3 Fogs", "5 Fogs", "10Fogs", "15Fogs", "W/o Fog"),
col = c("black", "yellow", "red", "blue", "purple", "green"),
lwd = 1, lty = c(1,1,1,1,1,1), pch= c(4,0,1,2,5,4))
# plotar gráfico de barras comparativo
# Sem Fog vs 1 Fogs
dados <- cbind(MRT_sem_F, MRT_1F)
colnames(dados) <- c("W/o Fog", "1 Fog")
rownames(dados) <- clock
# Gráfico de barras lado a lado
barplot(t(dados), beside = TRUE,
col = c("#E6E6E6", "#666666"),
names.arg = clock,
ylim = c(0.5, max(dados)),
xlab = "Time between requests (seconds)",
ylab = "Response Time (s)",
log = "y")
legend("topright",
legend = c("W/o Fog", "1 Fog"),
fill = c("#E6E6E6", "#666666"),
bty = "n")
# Sem Fog vs 3 Fogs
dados <- cbind(MRT_sem_F, MRT_3F)
colnames(dados) <- c("W/o Fog", "3 Fogs")
rownames(dados) <- clock
barplot(t(dados), beside = TRUE,
col = c("#E6E6E6", "#666666"),
names.arg = clock,
ylim = c(0.1, max(dados)),
xlab = "Time between requests (seconds)",
ylab = "Response Time (s)",
log = "y")
legend("topright",
legend = c("W/o Fog", "3 Fogs"),
fill = c("#E6E6E6", "#666666"),
bty = "n")
# Sem Fog vs 5 Fogs
dados <- cbind(MRT_sem_F, MRT_5F)
colnames(dados) <- c("W/o Fog", "5 Fogs")
rownames(dados) <- clock
barplot(t(dados), beside = TRUE,
col = c("#E6E6E6", "#666666"),
names.arg = clock,
ylim = c(0.1, max(dados)),
xlab = "Time between requests (seconds)",
ylab = "Response Time (s)",
log = "y")
legend("topright",
legend = c("W/o Fog", "5 Fogs"),
fill = c("#E6E6E6", "#666666"),
bty = "n")
#Sem Fog vs 10 Fogs
dados <- cbind(MRT_sem_F, MRT_10F)
colnames(dados) <- c("W/o Fog", "10 Fogs")
rownames(dados) <- clock
barplot(t(dados), beside = TRUE,
col = c("#E6E6E6", "#666666"),
names.arg = clock,
ylim = c(0.1, max(dados)),
xlab = "Time between requests (seconds)",
ylab = "Response Time (s)",
log = "y")
legend("topright",
legend = c("W/o Fog", "10 Fogs"),
fill = c("#E6E6E6", "#666666"),
bty = "n")
#Sem Fog vs 15 Fogs
dados <- cbind(MRT_sem_F, MRT_15F)
colnames(dados) <- c("W/o Fog", "15 Fogs")
rownames(dados) <- clock
barplot(t(dados), beside = TRUE,
col = c("#E6E6E6", "#666666"),
names.arg = clock,
ylim = c(0.1, max(dados)),
xlab = "Time between requests (seconds)",
ylab = "Response Time (s)",
log = "y")
legend("topright",
legend = c("W/o Fog", "15 Fogs"),
fill = c("#E6E6E6", "#666666"),
bty = "n")
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 da tabela
dados <- 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
)
# Nome das linhas e colunas
rownames(dados) <- c("Good", "Very Good", "Excellent")
colnames(dados) <- c("$10-19", "$20-29", "$30-39", "$40-49")
# Cores para cada categoria
cores <- c("lightblue", "lightgreen", "orange")
# Criar gráfico de barras empilhadas
barplot(
dados,
beside = FALSE,
col = cores,
ylim = c(0, 120),
main = "Qualidade da Refeição por Faixa de Preço",
xlab = "Faixa de Preço ($)",
ylab = "Percentual (%)",
legend.text = rownames(dados),
args.legend = list(x = "topright", bty = "n")
)
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.
# Dataset airquality
data("airquality")
# Convertendo temperatura de Fahrenheit para Celsius
temp_c <- (airquality$Temp - 32) / 1.8
# Histograma
hist(
temp_c,
main = "Histograma das Temperaturas em Maio (°C)",
xlab = "Temperatura (°C)",
ylab = "Frequência",
col = "lightblue",
border = "white",
prob = T
)
lines(density(temp_c, na.rm = TRUE), col = "red", lwd = 2)
Crie um gráfico de pizza com a porcentagem da tabela total de vendas por país. Use o dataset abaixo. Inclua a porcentagem de cada fatia, as cores das fatias e o nome do gráfico. Adicionalmente, use o comando legend() para incluir a legenda do gráfico. sales <- read.table(“https://training-course-material.com/images/8/8f/Sales.txt”,header=TRUE)
# Ler o dataset
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt", header = TRUE)
sales
## COUNTRY SALES
## 1 US 340
## 2 UK 290
## 3 France 510
## 4 Poland 820
## 5 Japan 120
## 6 China 780
# Total de vendas por país
total_por_pais <- tapply(sales$SALES, sales$COUNTRY, sum)
# Porcentagens
porcentagem <- round(100 * total_por_pais / sum(total_por_pais), 1)
# Criar rótulos com país e porcentagem
rotulos <- paste(names(total_por_pais), "-", porcentagem, "%")
# Cores das fatias
cores <- rainbow(length(total_por_pais))
# Gráfico de pizza
pie(
total_por_pais,
labels = rotulos,
col = cores,
main = "Distribuição das Vendas por País"
)
# Legenda
legend(
"topright",
legend = names(total_por_pais),
fill = cores,
title = "Países",
bty = "n"
)
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”.
# Carregar dados
data("InsectSprays")
# 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 # Sem os outliers
)
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.
library(readr)
library(dplyr)
##
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
##
## filter, lag
## Os seguintes objetos são mascarados por 'package:base':
##
## intersect, setdiff, setequal, union
library(stringr)
# Função auxiliar para converter memória em MB
convert_to_mb <- function(x) {
x <- str_trim(x)
x <- toupper(x)
x <- str_replace_all(x, ",", ".") # garante ponto decimal
numeric_value <- as.numeric(str_extract(x, "[0-9.]+"))
unit <- str_extract(x, "[A-Z]+")
case_when(
unit == "TB" ~ numeric_value * 1e6,
unit == "GB" ~ numeric_value * 1024,
unit == "MB" ~ numeric_value,
TRUE ~ NA_real_
)
}
# Função auxiliar para preparar cada dataset
prepare_data <- function(df) {
df <- df %>%
mutate(
# Converter tempo para diferença em horas
currentTime = as.POSIXct(currentTime),
time_hr = as.numeric(difftime(currentTime, min(currentTime), units = "hours")),
# Converter memória para MB
usedMemory_MB = convert_to_mb(usedMemory)
)
return(df)
}
# Importar datasets
mcd_0_1 <- prepare_data(read_csv("monitoringCloudData/monitoringCloudData_0.1.csv", show_col_types = FALSE))
mcd_0_5 <- prepare_data(read_csv("monitoringCloudData/monitoringCloudData_0.5.csv", show_col_types = FALSE))
mcd_1 <- prepare_data(read_csv("monitoringCloudData/monitoringCloudData_1.csv", show_col_types = FALSE))
mcd_none <- prepare_data(read_csv("monitoringCloudData/monitoringCloudData_NONE.csv", show_col_types = FALSE))
# Layout 2 linhas, 2 colunas
layout(matrix(1:4, nrow = 2, ncol = 2, byrow = TRUE))
# Gráficos
plot(mcd_none$time_hr, mcd_none$usedMemory_MB, type = "l", col = "purple",xlab = "Time (hour", ylab = "Used Memory (MB)",
main = "monitoringCloudData_NONE")
plot(mcd_0_1$time_hr, mcd_0_1$usedMemory_MB, type = "l", col = "blue",xlab = "Time (hour", ylab = "Used Memory (MB)",
main = "monitoringCloudData_0.1")
plot(mcd_0_5$time_hr, mcd_0_5$usedMemory_MB, type = "l", col = "red",xlab = "Time (hour", ylab = "Used Memory (MB)",
main = "monitoringCloudData_0.5")
plot(mcd_1$time_hr, mcd_1$usedMemory_MB, type = "l", col = "green",
xlab = "Time (hour", ylab = "Used Memory (MB)",
main = "monitoringCloudData_1")
OBS:Para os exercícios a seguir utilizaremos o dataset Netflix Movies and TV Shows. Essa base de dados reúne os filmes e séries disponíveis na Netflix em 2019, e se divide em algumas colunas que descrevem o tipo do conteúdo (série ou filme), o país de origem, o ano de lançamento, o gênero, entre outros.
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.
# Pacotes
library(readr)
library(dplyr)
library(plotly)
## Warning: pacote 'plotly' foi compilado no R versão 4.5.2
## Carregando pacotes exigidos: ggplot2
##
## Anexando pacote: 'plotly'
## O seguinte objeto é mascarado por 'package:ggplot2':
##
## last_plot
## O seguinte objeto é mascarado por 'package:stats':
##
## filter
## O seguinte objeto é mascarado por 'package:graphics':
##
## layout
# Importar dataset
nt <- read_csv("netflix_titles.csv", show_col_types = FALSE)
# Filtrar apenas conteúdos com um único país
nt_single_country <- nt %>%
filter(!is.na(country)) %>%
filter(!grepl(",", country))
# Contar o número de títulos por país e pegar os 10 maiores
top_countries <- nt_single_country %>%
count(country, sort = TRUE) %>%
slice_max(n, n = 10)
# Criar o gráfico de pizza
fig <- plot_ly(
data = top_countries,
labels = ~country,
values = ~n,
type = 'pie',
textinfo = 'label+percent',
insidetextorientation = 'radial'
)
# Adicionar título e legenda (fora do pipe)
fig <- fig %>%
plotly::layout(
title = list(
text = "Top 10 países com mais conteúdos (apenas 1 país de origem)",
x = 0.5,
xanchor = 'center'
),
showlegend = TRUE
)
# Mostrar gráfico
fig
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.
# Criar tabela Plotly
fig_table <- plot_ly(
type = 'table',
header = list(
values = c("País", "Total de conteúdos"),
fill = list(color = "#808080"),
font = list(color = "white", size = 14),
align = "center"
),
cells = list(
values = list(top_countries$country, top_countries$n),
align = "center"
)
)
# Mostrar tabela
fig_table
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)
# Criar coluna com década
nt <- nt %>%
mutate(decade = floor(release_year / 10) * 10)
# Contar a quantidade de conteúdos por década e tipo
conteudo_decada <- nt %>%
filter(!is.na(decade)) %>%
group_by(decade, type) %>%
summarise(total = n(), .groups = "drop")
# Gráfico de linha com Plotly
fig <- plot_ly(conteudo_decada,
x = ~decade,
y = ~total,
color = ~type,
colors = c("yellow", "blue"), # azul e amarelo
type = 'scatter',
mode = 'lines+markers') %>%
layout(
title = "Quantidade de conteúdos por década na Netflix",
xaxis = list(title = "Década"),
yaxis = list(title = "Quantidade de conteúdos"),
legend = list(title = list(text = "Tipo de conteúdo")),
hovermode = "x unified"
)
# Mostrar gráfico
fig
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”).
# Filtrar filmes entre 2000 e 2010
filmes <- nt %>%
filter(type == "Movie",
release_year >= 2000,
release_year <= 2010)
# Extrair o primeiro gênero
filmes <- filmes %>%
mutate(genero_principal = trimws(sub(",.*", "", listed_in))) # remove espaços extras
# Filtrar os três gêneros desejados
filmes_generos <- filmes %>%
filter(genero_principal %in% c("Dramas", "Action & Adventure", "Comedies"))
# Contar a quantidade de filmes por ano e gênero
filmes_ano_genero <- filmes_generos %>%
group_by(release_year, genero_principal) %>%
summarise(total = n(), .groups = "drop")
# Gráfico de barras lado a lado com Plotly
fig <- plot_ly(
data = filmes_ano_genero,
x = ~release_year,
y = ~total,
color = ~genero_principal,
colors = c("orange", "green", "blue"),
type = "bar" # 👈 ESSENCIAL
) %>%
layout(
title = "Quantidade de filmes por gênero (2000–2010)",
xaxis = list(title = "Ano de lançamento"),
yaxis = list(title = "Quantidade de filmes"),
barmode = "group", # barras lado a lado
legend = list(title = list(text = "Gênero"))
)
# Mostrar o gráfico
fig