(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(). 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.
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)
plot(
x = clock,
y= MRT_1F,
type="o",
pch=4,
col="black",
xlab = "Time between Things requests (seconds)",
ylab = "Response time (sec.)"
)
lines(
x = clock,
y = MRT_3F,
type="o",
pch=0,
col="yellow"
)
lines(
x = clock,
y = MRT_5F,
type="o",
pch=1,
col="red"
)
lines(
x = clock,
y = MRT_10F,
type="o",
pch=2,
col="blue"
)
lines(
x = clock,
y = MRT_15F,
type="o",
pch=5,
col="purple"
)
lines(
x = clock,
y = MRT_sem_F,
type="o",
pch=4,
col="green"
)
legend(
"topright",
pch = c(4, 0, 1, 2, 5,4),
col = c("black", "yellow", "red", "blue", "purple", "green"),
legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog")
)
layout(matrix(c(1, 2,
3, 4,
5, 0), nrow = 3, byrow= TRUE)
)
#Second chart
par(mar = rep(2, 4))
values_1F <- t(cbind(MRT_sem_F, MRT_1F))
barplot(
values_1F,
names.arg = clock,
col = c("gray", "black"),
xlab = "Time between Things requests (seconds)",
ylab = "Response time (sec.)",
log = "y",
beside = TRUE
)
legend(
"topright",
pch = c(15, 15),
col = c("gray", "black"),
legend = c("w/o Fog", "1 Fog")
)
# Third chart
values_3F <- t(cbind(MRT_sem_F, MRT_3F))
barplot(
values_3F,
names.arg = clock,
col = c("gray", "black"),
xlab = "Time between Things requests (seconds)",
ylab = "Response time (sec.)",
log = "y",
beside = TRUE,
)
legend(
"topright",
pch = c(15, 15),
col = c("gray", "black"),
legend = c("w/o Fog", "3 Fogs")
)
# 4th chart
values_5F <- t(cbind(MRT_sem_F, MRT_5F))
barplot(
values_5F,
names.arg = clock,
col = c("gray", "black"),
xlab = "Time between Things requests (seconds)",
ylab = "Response time (sec.)",
log = "y",
beside = TRUE,
)
legend(
"topright",
pch = c(15, 15),
col = c("gray", "black"),
legend = c("w/o Fog", "5 Fogs")
)
# 5th chart
values_10F <- t(cbind(MRT_sem_F, MRT_10F))
barplot(
values_10F,
names.arg = clock,
col = c("gray", "black"),
xlab = "Time between Things requests (seconds)",
ylab = "Response time (sec.)",
log = "y",
beside = TRUE,
)
legend(
"topright",
pch = c(15, 15),
col = c("gray", "black"),
legend = c("w/o Fog", "10 Fogs")
)
# 6th chart
values_15F <- t(cbind(MRT_sem_F, MRT_15F))
barplot(
values_15F,
names.arg = clock,
col = c("gray", "black"),
xlab = "Time between Things requests (seconds)",
ylab = "Response time (sec.)",
log = "y",
beside = TRUE,
)
legend(
"topright",
pch = c(15, 15),
col = c("gray", "black"),
legend = c("w/o Fog", "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.
data <- matrix(c(53.9, 33.9, 2.6, 0,
43.6, 54.2, 60.5, 21.4,
2.6, 11.9, 36.8, 78.6), nrow = 3, byrow = TRUE)
barplot(
data,
names.arg = c("$10-19", "$20-29", "$30-39", "$40-49"),
col = rainbow(3),
xlab = "Meal Price",
ylab = "Quality Rating %",
)
legend(
"topright",
pch = c(15, 15),
col = rainbow(3),
legend = c("Good", "Very Good", "Excellent")
)
(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.
airquality_may <- airquality %>% filter(Month == 5)
airquality_may_temperatures <- as.numeric(airquality$Temp)
airquality_may_temperatures
## [1] 67 72 74 62 56 66 65 59 61 69 74 69 66 68 58 64 66 57 68 62 59 73 61 61 57
## [26] 58 57 67 81 79 76 78 74 67 84 85 79 82 87 90 87 93 92 82 80 79 77 72 65 73
## [51] 76 77 76 76 76 75 78 73 80 77 83 84 85 81 84 83 83 88 92 92 89 82 73 81 91
## [76] 80 81 82 84 87 85 74 81 82 86 85 82 86 88 86 83 81 81 81 82 86 85 87 89 90
## [101] 90 92 86 86 82 80 79 77 79 76 78 78 77 72 75 79 81 86 88 97 94 96 94 91 92
## [126] 93 93 87 84 80 78 75 73 81 76 77 71 71 78 67 76 68 82 64 71 81 69 63 70 77
## [151] 75 76 68
to_celsius <- function (x) {return ((x-32)/1.8)}
airquality_may_temperatures_celsius <- sapply(airquality_may_temperatures, FUN = to_celsius)
density_temp <- density(airquality_may_temperatures_celsius)
hist(
airquality_may_temperatures_celsius,
col = rainbow(15),
main = "Histograma da temperatura do mês de Maio",
ylab = "Ocorrências",
xlab = "Temperatura °C",
probability = TRUE
)
lines(density_temp)
(5 pontos) 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)
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)
sales_number <- sales$SALES
countries <- sales$COUNTRY
# Valores em porcentagem
sales_percentage <- round(sales_number/sum(sales_number)*100)
# Transformar em string no formato "x%"
sales_percentage_str <- paste(sales_percentage, "%", sep = "")
# Concatenar país e sua porcentagem de vendas
labels <- paste(countries, sales_percentage_str)
pie(
sales_number,
labels = labels,
main = "Vendas por País",
col = rainbow(nrow(sales))
)
legend(
"topright",
legend = countries,
fill = rainbow(nrow(sales))
)
(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”.
boxplot(
count ~ spray,
data = InsectSprays,
main = "Variacao de Insetos encontrados em tratamento com Inseticida",
col = "yellow",
xlab = "Spray",
ylab = "Insetos",
outline = FALSE
)
(20 pontos) Gere os gráficos abaixo a partir dos seguintes dados:
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.
#Load data
monitoring_none <- read.csv("monitoringCloudData_NONE.csv")
monitoring_01 <- read.csv("monitoringCloudData_0.1.csv")
monitoring_05 <- read.csv("monitoringCloudData_0.5.csv")
monitoring_1 <- read.csv("monitoringCloudData_1.csv")
# Helper function to convert to MB
to_mb <- function(value) {
digits <- str_extract(value, "[[:digit:]]+")
numeric_digits <- sapply(digits, as.numeric)
unit <- str_extract(value, "[[:alpha:]]+")
if(unit == "MB")
return (numeric_digits)
if(unit == "GB")
return (numeric_digits * 1024)
if(unit == "TB")
return (numeric_digits * 1000000)
}
# Prepare data for monitoringCloudData_NONE.csv
time_serie_none <- sapply(monitoring_none$currentTime, function (x) {return (difftime(x, monitoring_none$currentTime[1], units = "hour"))})
used_memory_none <- as.vector(monitoring_none$usedMemory)
used_memory_value_none <- sapply(used_memory_none, to_mb)
# Prepare data for monitoringCloudData_0.1.csv
time_serie_01 <- sapply(monitoring_01$currentTime, function (x) {return (difftime(x, monitoring_01$currentTime[1], units = "hour"))})
used_memory_01 <- as.vector(monitoring_01$usedMemory)
used_memory_value_01 <- sapply(used_memory_01, to_mb)
# Prepare data for monitoringCloudData_0.5.csv
time_serie_05 <- sapply(monitoring_05$currentTime, function (x) {return (difftime(x, monitoring_05$currentTime[1], units = "hour"))})
used_memory_05 <- as.vector(monitoring_05$usedMemory)
used_memory_value_05 <- sapply(used_memory_05, to_mb)
# Prepare data for monitoringCloudData_1.csv
time_serie_1 <- sapply(monitoring_1$currentTime, function (x) {return (difftime(x, monitoring_1$currentTime[1], units = "hour"))})
used_memory_1 <- as.vector(monitoring_1$usedMemory)
used_memory_value_1 <- sapply(used_memory_1, to_mb)
layout(
matrix(c(1, 2,
3, 4), nr = 2, byrow = TRUE)
)
par(mar = rep(2,4))
plot(
used_memory_value_none,
x= time_serie_none,
main= "Memory Analysis (None Workload)",
ylab= "Used Memory (MB)",
xlab= "Time (hour)",
type = "l"
)
plot(
used_memory_value_01,
x= time_serie_01,
main= "Memory Analysis (Workload of 0.1)",
ylab= "Used Memory (MB)",
xlab= "Time (hour)",
type = "l"
)
plot(
used_memory_value_05,
x= time_serie_05,
main= "Memory Analysis (Workload of 0.5)",
ylab= "Used Memory (MB)",
xlab= "Time (hour)",
type = "l"
)
plot(
used_memory_value_1,
x= time_serie_1,
main= "Memory Analysis (Workload of 1.0)",
ylab= "Used Memory (MB)",
xlab= "Time (hour)",
type = "l"
)
(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.
netflix <- read.csv("netflix_titles.csv")
top_10_countries <- netflix %>%
filter(!grepl(",", country) & country != "") %>%
summarise(n = n(), .by = country) %>%
arrange(desc(n)) %>%
slice(1:10)
plot_ly(
data = top_10_countries,
labels=~country,
values=~n,
type = "pie"
)
(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
plot_ly(
type="table",
header = list(
values = c("País", "Total de conteúdos"),
align = c("center", "center"),
fill = list(color="gray"),
font = list(color="white")
),
cells = list(
values = rbind(top_10_countries$country, top_10_countries$n)
)
)
(10 pontos) Utilizando o Plotly, obtenha um gráfico de linha com pontos (como na imagem abaixo) contendo a quantidade de conteúdo por década do 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)
# Cria uma coluna chamada release_decade para armazenar a decada do filme
netflix$release_decade <- netflix$release_year - (netflix$release_year %% 10)
# Agrupa os filmes por década
movies_by_decade <- netflix %>% filter(type == "Movie") %>% group_by(release_decade) %>% summarise(count = n())
tv_shows_by_decade <- netflix %>% filter(type == "TV Show") %>% group_by(release_decade) %>% summarise(count = n())
movies_shows_by_decade <- merge(movies_by_decade, tv_shows_by_decade, by = "release_decade")
colnames(movies_shows_by_decade)[2] <- "movies"
colnames(movies_shows_by_decade)[3] <- "tv_shows"
chart <- plot_ly(
data=movies_shows_by_decade,
x=~release_decade,
y=~movies,
name = "Qtd. Conteúdo",
type = "scatter",
line = list(color="yellow"),
marker = list(color = "yellow"),
mode="lines+markers"
)
chart <- chart %>% add_trace(
movies_shows_by_decade,
y = ~tv_shows,
name = "TV Shows",
mode = "lines+markers",
line = list(color = "blue"),
marker = list(color = "blue")
)
chart <- chart %>%
layout(
xaxis = list(title = "Décadas"),
yaxis = list(title = "Qtd. Conteúdo")
)
chart
(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”).
selected_genres = c("Dramas", "Action & Adventure", "Comedies")
netflix$main_genre <- sapply(netflix$listed_in, FUN = function(x) { return (strsplit(x, ",")[[1]][1]) } )
genre_by_year <- netflix %>%
filter(type == "Movie") %>%
filter(release_year >= 2000 & release_year <= 2010) %>%
filter(main_genre %in% selected_genres) %>%
group_by(release_year, main_genre) %>%
summarise(count = n()) %>%
arrange(release_year)
## `summarise()` has grouped output by 'release_year'. You can override using the
## `.groups` argument.
count_by_genre <- genre_by_year %>% spread(main_genre, count)
count_by_genre <- count_by_genre %>% mutate_all(~replace_na(., 0))
## `mutate_all()` ignored the following grouping variables:
## • Column `release_year`
## ℹ Use `mutate_at(df, vars(-group_cols()), myoperation)` to silence the message.
fig <- plot_ly(count_by_genre, x = ~release_year, y = ~Dramas, type = "bar", name = "Drama")
fig <- fig %>% add_trace(y = ~`Action & Adventure`, name = 'Ação e Aventura')
fig <- fig %>% add_trace(y = ~Comedies, name = 'Comédia')
fig <- fig %>% layout(
xaxis = list(title = "Ano de Lançamento", range = c(1999.5, 2010.5)),
yaxis = list(title = 'Qtd. de Lançamentos'),
barmode = 'group'
)
fig