Exercício 12

Questão 1

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)

color=c("#E6E6E6","#666666")

clock <- c(0.1, 0.5, 1, 1.5, 2, 2.5, 3)

plot(clock,MRT_1F,type = "o", pch=3,ylab = "ResponseTime(sec.)",xlab = "Time between Things requests (seconds")
lines(MRT_3F,type = "o",pch = 11,col = "yellow")
lines(MRT_5F,type = "o",pch = 1,col = "red")
lines(MRT_10F,type = "o",pch = 2,col = "blue")
lines(MRT_15F,type = "o",pch = 5,col = "violet")
lines(MRT_sem_F,type = "o",pch = 4,col = "green")
legend("topright", pch=c(3,11,1,2,5,4), col=c("black","yellow","red","blue","violet","green"), legend =c("1 Fogs","3 Fogs","5 Fogs","10 Fogs","15 Fogs","w/o Fog"))

layout(matrix(c(1,2,3,4,5,6), 2, 2, byrow = TRUE), widths=c(3,3))
## Warning in matrix(c(1, 2, 3, 4, 5, 6), 2, 2, byrow = TRUE): data length differs
## from size of matrix: [6 != 2 x 2]
barplot(rbind(MRT_sem_F,MRT_1F),log='x',names.arg = clock,xlab = "Time between Things requests", ylab = "Response times(s)",beside = T,col=color)
legend("topright",pch = (15),col=c("#E6E6E6","#666666"), legend = c("w/0 Fog","1 Fog"))

barplot(rbind(MRT_sem_F,MRT_3F),log='x',names.arg = clock,xlab = "Time between Things requests", ylab = "Response times(s)",beside = T,col=color)
legend("topright",pch = (15),col=c("#E6E6E6","#666666"), legend = c("w/0 Fog","3 Fog"))

barplot(rbind(MRT_sem_F,MRT_5F),log='x',names.arg = clock,xlab = "Time between Things requests", ylab = "Response times(s)",beside = T,col=color)
legend("topright",pch = (15),col=c("#E6E6E6","#666666"), legend = c("w/0 Fog","5 Fog"))

barplot(rbind(MRT_sem_F,MRT_10F),log='x',names.arg = clock,xlab = "Time between Things requests", ylab = "Response times(s)",beside = T,col=color)
legend("topright",pch = (15),col=c("#E6E6E6","#666666"), legend = c("w/0 Fog","10 Fog"))

barplot(rbind(MRT_sem_F,MRT_15F),log='x',names.arg = clock,xlab = "Time between Things requests", ylab = "Response times(s)",beside = T,col=color)
legend("topright",pch = (15),col=c("#E6E6E6","#666666"), legend = c("w/0 Fog","15 Fog"))

Questão 2

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.

colors <- c("green","blue","red")

quality <-c("$10-19","$20-29","$30-39","$40-49")

tipos <- c("Good","Very Good","Excellent")

valores <- matrix(c(53.8,33.9,2.6,0,43.6,54.2,60.5,21.4,2.6,11.9,36.8,78.6),nrow = 3,ncol = 4,byrow = TRUE)
barplot(valores,main = "Meal Price",names.arg= quality,xlab="Quality Rating",col = colors,ylab="%" )
legend("bottomleft", pch=c(15,15,15), col=colors, legend = tipos)

Questao 3

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.

amostra <- subset(x = airquality, subset = airquality$Month=="5")
amostra_graus <- (amostra$Temp-32)/1.8
hist(amostra_graus,xlab="Temperatura em Graus Celsius",ylab="Densidade", 
     main="Histograma de Temperatura Maio",density = 25,
     col='red', probability = T)
densidade <- density(amostra_graus)
lines(densidade)

Questao 4

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)

pcem <- round(sales$SALES/sum(sales$SALES)*100)
label_pcem <- paste(sales$COUNTRY, pcem)
label_pcem <- paste(label_pcem,"%",sep="")

pie(sales$SALES,labels = label_pcem,col=rainbow(length(sales$COUNTRY)))
legend("bottomleft", legend= sales$COUNTRY,cex = 0.8, fill = rainbow(length(sales$COUNTRY)))

Questao 5

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(InsectSprays$count ~ InsectSprays$spray,
        main ="Relaçao entre quantidade e tratamento utilizado",
        xlab = "Tipo de tratamento",ylab = "Quantidade",
        col="yellow",outline=FALSE)

Questao 6

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.

x1<-read.csv('monitoringCloudData_0.1.csv')
x2<-read.csv('monitoringCloudData_0.5.csv')
x3<-read.csv('monitoringCloudData_1.csv')
x4<-read.csv('monitoringCloudData_NONE.csv')

#Função para Tornar o "Tempo" Contínuo
Tempo<-function(Datas){
  #Entrar com Coluna do dataset
  TT<-length(Datas)
  v<-vector(length=TT)
  v[1]<-0
  for (i in 1:(TT-1)){
    v[i+1]<-difftime(Datas[i+1],Datas[i])+v[i]
  }
  return(v)
}

#Aplicando Função de Tempo Contínuo
x1$Tempo<-Tempo(x1$currentTime)
x2$Tempo<-Tempo(x2$currentTime)
x3$Tempo<-Tempo(x3$currentTime)
x4$Tempo<-Tempo(x4$currentTime)


#Função Separar a unidade de medida dos dados (Ex: MB, TB, GB)
Separar<-function(Datas){
  TT<-tidyr::separate(Datas,col="usedMemory",into=c("usedMemory_P1","usedMemory_P2"),sep=-2)
  TT$usedMemory_P1<-as.numeric(TT$usedMemory_P1)
  return(TT)
  }

#Aplicando Função separar unidade de medida  
x1<-Separar(x1)  
x2<-Separar(x2)  
x3<-Separar(x3) 
x4<-Separar(x4) 

#Função atribuição do valor à ordem de grandeza da unidade de medida
Contabilizar<-function(Datas){
  #Entrar com Coluna do dataset
  TT<-length(Datas)
  v<-vector(length=TT)
  for (i in 1:TT){
    if (stringr::str_trim(Datas[i])=="MB"){
      v[i]=1}
    else if (stringr::str_trim(Datas[i])=="GB"){
      v[i]=1024}
    else if (stringr::str_trim(Datas[i])=="TB"){
      v[i]=1000000}
    }
  return(v)
  }

#Aplicando função atribuição à ordem de grandeza
x1$Fator<-Contabilizar(x1$usedMemory_P2)
x2$Fator<-Contabilizar(x2$usedMemory_P2)
x3$Fator<-Contabilizar(x3$usedMemory_P2)
x4$Fator<-Contabilizar(x4$usedMemory_P2)


#Calculado a Quantidade Total de Dados (Ex: 21 GB = 21 x 1024 = 21.540MB)
x1$Fator<-x1$Fator*x1$usedMemory_P1
x2$Fator<-x2$Fator*x2$usedMemory_P1
x3$Fator<-x3$Fator*x3$usedMemory_P1
x4$Fator<-x4$Fator*x4$usedMemory_P1


#função para gerar gráficos
Graf<-function(Tempo,Fator,numero){
  if (numero==0){
    m<-"Memory Analisys (None Workload)"}
  else{
    m<-paste("Memory Analisys (Workload of",numero,")")}
  
  plot(Tempo,Fator,type="l",ylab="Used Memory (MB)", xlab="Time (hour)",main=m)
}

#Geração de Gráficos
layout(matrix(c(1,1,2,2,3,3,4,4),nrow=2,byrow=T))
Graf(x4$Tempo,x4$Fator,0)
Graf(x1$Tempo,x1$Fator,0.1)
Graf(x2$Tempo,x2$Fator,0.5)
Graf(x3$Tempo,x3$Fator,1)

Questao 7

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(plotly)
## Carregando pacotes exigidos: ggplot2
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
netflix_data <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)

filtered_data <- netflix_data %>%
  filter(country!="") %>%    
  group_by(title) %>%
  filter(n_distinct(country) == 1) %>%
  group_by(country) %>%
  summarise(count = n()) %>%
  arrange(desc(count)) %>%
  head(10)

plotly_pie <- plot_ly(filtered_data, labels = ~country, values = ~count, type = "pie")

plotly_pie

Questao 8

library(dplyr)
library(plotly)

netflix_data <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)

filtered_data <- netflix_data %>%
  filter(country!="") %>%   
  group_by(title) %>%
  filter(n_distinct(country) == 1) %>%
  group_by(country) %>%
  summarise(count = n()) %>%
  arrange(desc(count)) %>%
  head(10)

table_data <- filtered_data %>%
  select(País = country, `Total de conteúdos` = count)

table_plot <- plot_ly(
  data = table_data,
  type = "table",
  columnwidth = c(100, 100),
  header = list(
    values = colnames(table_data),
    align = "center",
    fill = list(color = "grey"),
    font = list(color = "white")
  )
) %>%
  add_trace(
    cells = list(
      values = list(table_data$País, table_data$`Total de conteúdos`),
      align = "center"
    )
  )

table_plot

Questao 9

library(dplyr)
library(plotly)

netflix_data <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)

content_data <- netflix_data %>%
  mutate(decade = floor(release_year / 10) * 10) %>%
  filter(!is.na(release_year)) %>%
  group_by(decade, type) %>%
  summarise(count = n())
## `summarise()` has grouped output by 'decade'. You can override using the
## `.groups` argument.
line_plot <- plot_ly(
  data = content_data,
  x = ~decade,
  y = ~count,
  color = ~type,
  colors = c("blue", "yellow"),
  type = "scatter",  
  marker = list(size = 8),
  line = list(color = 'blue'),
  mode = "lines+markers"
) %>%
  layout(
    xaxis = list(title = "Décadas"),
    yaxis = list(title = "Quantidade de Conteúdo"),
    legend = list(title = "Tipo"),
    title = "Quantidade de Conteúdo por Década"
  )

line_plot

Questao 10

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”).

filme<-read.csv("netflix_titles.csv",na.strings = "")

Sel<-dplyr::filter(filme,release_year>2000 & release_year<2010)

#Função separar categorias
Categoria<-function(Data){
  TT<-length(Data)
  v<-vector()
  for (i in 1:TT){
    if (substr(stringr::str_trim(Data[i]),1,6)=="Dramas"){
      v[i]<-"Dramas"}
    else if (substr(stringr::str_trim(Data[i]),1,18)=="Action & Adventure"){
      v[i]<-"Action_Adventure"}
    else if (substr(stringr::str_trim(Data[i]),1,8)=="Comedies"){
      v[i]<-"Comedies"}
    else {v[i]<-"Outro"}
    }
    return(v)
}

Sel$release_year<-as.character(Sel$release_year)

#Aplicando função para categorizar
Sel$Categoria<-Categoria(Sel$listed_in)

#separando as categorias desejadas
Cat<-dplyr::filter(Sel,Categoria=="Comedies" | Categoria=="Action_Adventure" | Categoria=="Dramas")
Cat<-dplyr::select(Cat,release_year,Categoria)

#Quatificando por categoria
Cat<-dplyr::group_by(Cat,Categoria,release_year)
Cat<-unique(dplyr::mutate(Cat,Quantidade=length(Categoria)))

#Separando data frame em colunas de categorias desejadas
Cat<-tidyr::spread(Cat, key="Categoria",value="Quantidade")

#Trocando NA por zeros
Cat$Comedies[which(is.na(Cat$Comedies))]<-0
Cat$Action_Adventure[which(is.na(Cat$Action_Adventure))]<-0
Cat$Dramas[which(is.na(Cat$Dramas))]<-0

#Gráficos
FIG <- plotly::plot_ly(Cat, x = ~release_year, y = ~Dramas, type = 'bar', name = 'Drama',marker = list(color = 'blue'))
FIG <- plotly::add_trace(FIG,y = ~Action_Adventure, name = 'Ação e Aventura', marker = list(color = 'orange'))
FIG <- plotly::add_trace(FIG,y = ~Comedies, name = 'Comédia', marker = list(color = 'green'))


FIG<-plotly::layout(FIG,title = 'Netflix',
         xaxis = list(title = 'Ano de Lançamento'),
         yaxis = list (title = 'Qnt. de Lançamentos'))

FIG