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")
  )