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)
# Organiza o gráfico de linhas no topo e os cinco gráficos de barras abaixo.
layout(matrix(c(1,1,
2,3,
4,5,
6,0), nrow=4, byrow=TRUE),
heights=c(2.2,1,1,1))
# Gráfico de linhas
plot(clock, MRT_1F, type="o", pch=1, lty=1,
xlab="Time between Things requests (seconds)",
ylab="Response Time (sec)", ylim=c(0,max(MRT_1F)))
lines(clock, MRT_3F, type="o", pch=2, lty=1, col=2)
lines(clock, MRT_5F, type="o", pch=3, lty=1, col=3)
lines(clock, MRT_10F, type="o", pch=4, lty=1, col=4)
lines(clock, MRT_15F, type="o", pch=5, lty=1, col=5)
lines(clock, MRT_sem_F, type="o", pch=6, lty=1, col=6)
legend("topright",
legend=c("1 Fog","3 Fogs","5 Fogs","10 Fogs","15 Fogs","w/o Fog"),
col=c(1,2,3,4,5,6), pch=1:6, lty=1, cex=.75)
# Função auxiliar para os gráficos de barras em escala logarítmica
barra_fog <- function(com_fog, rotulo){
valores <- rbind(MRT_sem_F, com_fog)
barplot(valores,
beside=TRUE,
log="y",
names.arg=clock,
col=c("#E6E6E6", "#666666"),
xlab="Time between Things requests",
ylab="Response time (s)",
legend.text=c("w/o Fog",rotulo),
args.legend=list(x="topright",cex=.65))
}
barra_fog(MRT_1F,"1 Fog")
barra_fog(MRT_3F,"3 Fogs")
barra_fog(MRT_5F,"5 Fogs")
barra_fog(MRT_10F,"10 Fogs")
barra_fog(MRT_15F,"15 Fogs")

Questão 2
# Linhas = qualidade; colunas = faixas de preço.
qualidade <- matrix(c(53.8, 33.9, 2.6, 0.0,
43.6, 54.2, 60.5, 21.4,
2.6, 11.9, 36.8, 78.6),
nrow=3, byrow=TRUE)
rownames(qualidade) <- c("Good","Very Good","Excellent")
colnames(qualidade) <- c("$10-19","$20-29","$30-39","$40-49")
barplot(qualidade,
beside=FALSE,
col=c("lightblue","steelblue","navy"),
main="Qualidade da refeição por faixa de preço",
xlab="Preço da refeição",
ylab="Percentual (%)",
ylim=c(0,100))
legend("topright",
legend=rownames(qualidade),
fill=c("lightblue","steelblue","navy"),
title="Qualidade")

Questão 3
# Temperaturas de maio e conversão Fahrenheit -> Celsius
maio <- airquality[airquality$Month==5, ]
temp_c <- (maio$Temp - 32) / 1.8
hist(temp_c,
probability=TRUE,
col="lightblue",
border="white",
main="Temperaturas de Maio - Airquality",
xlab="Temperatura (°C)",
ylab="Densidade")
lines(density(temp_c, na.rm=TRUE), col="red", lwd=2)

Questão 4
# O arquivo é lido diretamente do endereço indicado no enunciado.
sales <- read.table(
"https://www.dropbox.com/scl/fi/mpjt4uuqb5vtmfiw38phk/Sales.txt?rlkey=93jlz79xwrrt7ah66d5k403d7&dl=1",
header=TRUE
)
# A tabela fornecida possui país na primeira coluna e valor de vendas na segunda.
# Somamos as vendas por país para deixar o código robusto caso haja repetições.
vendas_pais <- aggregate(sales[[2]],
by=list(Pais=sales[[1]]),
FUN=sum,
na.rm=TRUE)
names(vendas_pais)[2] <- "Vendas"
percentual <- 100 * vendas_pais$Vendas / sum(vendas_pais$Vendas)
rotulos <- paste0(round(percentual,1), "%")
cores <- rainbow(nrow(vendas_pais))
pie(vendas_pais$Vendas,
labels=rotulos,
col=cores,
main="Percentual de vendas por país")
legend("topright",
legend=vendas_pais$Pais,
fill=cores,
cex=.75)

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

Questão 6
none <- read.csv("C:/Users/ruang/Documents/R exercicio 12/monitoringCloudData_NONE.csv")
w01 <- read.csv("C:/Users/ruang/Documents/R exercicio 12/monitoringCloudData_0.1.csv")
w05 <- read.csv("C:/Users/ruang/Documents/R exercicio 12/monitoringCloudData_0.5.csv")
w10 <- read.csv("C:/Users/ruang/Documents/R exercicio 12/monitoringCloudData_1.csv")
# Converte currentTime em data/hora e calcula o tempo contínuo em horas.
ajusta_tempo <- function(dados){
dados$currentTime <- as.POSIXct(dados$currentTime,
format="%Y-%m-%d %H:%M:%OS")
dados$hora <- as.numeric(
difftime(dados$currentTime,
dados$currentTime[1],
units="hours")
)
dados
}
# Converte MB/GB/TB para MB.
# Conforme o enunciado: 1 GB = 1024 MB; 1 TB = 1.000.000 MB.
memoria_mb <- function(x){
numero <- as.numeric(gsub("[^0-9.]", "", x))
unidade <- toupper(gsub("[0-9.]", "", x))
fator <- ifelse(unidade=="TB", 1000000,
ifelse(unidade=="GB", 1024, 1))
numero*fator
}
prepara <- function(dados){
dados <- ajusta_tempo(dados)
dados$usedMemory_MB <- memoria_mb(dados$usedMemory)
dados
}
none <- prepara(none)
w01 <- prepara(w01)
w05 <- prepara(w05)
w10 <- prepara(w10)
layout(matrix(1:4, nrow=2, byrow=TRUE))
plot(none$hora, none$usedMemory_MB, type="l",
main="Memory Analysis (None Workload)",
xlab="Time (hour)", ylab="Used Memory (MB)")
plot(w01$hora, w01$usedMemory_MB, type="l",
main="Memory Analysis (Workload of 0.1)",
xlab="Time (hour)", ylab="Used Memory (MB)")
plot(w05$hora, w05$usedMemory_MB, type="l",
main="Memory Analysis (Workload of 0.5)",
xlab="Time (hour)", ylab="Used Memory (MB)")
plot(w10$hora, w10$usedMemory_MB, type="l",
main="Memory Analysis (Workload of 1.0)",
xlab="Time (hour)", ylab="Used Memory (MB)")

Questão 7
library(dplyr)
library(plotly)
netflix <- read.csv("netflix_titles.csv", stringsAsFactors=FALSE)
# Apenas conteúdos associados a um único país:
# excluímos vazios/NA e valores que contêm vírgula.
top_paises <- netflix %>%
filter(!is.na(country), country!="", !grepl(",", country)) %>%
count(country, name="Total") %>%
arrange(desc(Total)) %>%
slice_head(n=10)
plot_ly(top_paises,
labels=~country,
values=~Total,
type="pie",
textinfo="label+percent") %>%
layout(title="10 países com mais conteúdos na Netflix")
Questão 8
tabela_paises <- top_paises %>%
transmute(País=country, `Total de conteúdos`=Total)
plot_ly(
type="table",
header=list(
values=list("País","Total de conteúdos"),
fill=list(color="gray"),
font=list(color="white"),
align="center"
),
cells=list(
values=list(tabela_paises$País,
tabela_paises$`Total de conteúdos`),
align="center"
)
)
Questão 9
por_decada <- netflix %>%
filter(type %in% c("TV Show","Movie"), !is.na(release_year)) %>%
mutate(Decada=floor(release_year/10)*10) %>%
count(Decada,type, name="Total")
series <- por_decada %>% filter(type=="TV Show")
filmes <- por_decada %>% filter(type=="Movie")
plot_ly() %>%
add_trace(data=series,
x=~Decada, y=~Total,
type="scatter", mode="lines+markers",
name="TV Series",
line=list(color="blue")) %>%
add_trace(data=filmes,
x=~Decada, y=~Total,
type="scatter", mode="lines+markers",
name="Movies",
line=list(color="yellow")) %>%
layout(title="Quantidade de conteúdo por década",
xaxis=list(title="Década"),
yaxis=list(title="Qtd. Conteúdo"))
Questão 10
# Primeiro gênero descrito em listed_in.
filmes_genero <- netflix %>%
filter(type=="Movie",
release_year>=2000,
release_year<=2010) %>%
mutate(Genero=trimws(sub(",.*", "", listed_in))) %>%
filter(Genero %in% c("Dramas","Action & Adventure","Comedies")) %>%
count(release_year,Genero, name="Total")
# Inclui combinações ano/gênero sem ocorrência com Total=0.
grade <- expand.grid(
release_year=2000:2010,
Genero=c("Dramas","Action & Adventure","Comedies"),
stringsAsFactors=FALSE
)
filmes_genero <- merge(grade, filmes_genero,
by=c("release_year","Genero"), all.x=TRUE)
filmes_genero$Total[is.na(filmes_genero$Total)] <- 0
plot_ly(filmes_genero,
x=~release_year,
y=~Total,
color=~Genero,
type="bar") %>%
layout(
barmode="group",
title="Filmes por gênero entre 2000 e 2010",
xaxis=list(title="Ano de lançamento"),
yaxis=list(title="Quantidade de lançamentos")
)