Exercício 12 - Primeira Parte

Crie os gráficos abaixo no R Markdown cada um em uma aba chamada de, por exemplo, Questão 1, Questão 2, etc. Após finalizar os gráficos, publique a resposta e submeta o link do R markdown no formulário. Note que o código precisa ser apresentado. Além disso, para as questões de 1 a 6 use o R tradicional, enquanto para as questões de 7 a 10 use o Ploty.

Questão 01

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

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

# Cria um line plot
plot(clock, MRT_1F, type = "n", col = "black", ylim = c(0, 500), xlab = "Time between Things requests (seconds)", ylab = "Response Time (sec)")

# Adiciona os pontos
points(clock, MRT_1F, type = "p", col = "black", pch = 4)
points(clock, MRT_3F, type = "p", col = "yellow", pch = 11)
points(clock, MRT_5F, type = "p", col = "red", pch = 1)
points(clock, MRT_10F, type = "p", col = "blue", pch = 2)
points(clock, MRT_15F, type = "p", col = "gray", pch = 5)
points(clock, MRT_sem_F, type = "p", col = "green", pch = 4)

# Adiciona as linhas
lines(clock, MRT_1F, type = "l", col = "black")
lines(clock, MRT_3F, type = "l", col = "yellow")
lines(clock, MRT_5F, type = "l", col = "red")
lines(clock, MRT_10F, type = "l", col = "blue")
lines(clock, MRT_15F, type = "l", col = "gray")
lines(clock, MRT_sem_F, type = "l", col = "green")

# Adiciona a legenda
legend("topright", legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"), col = c("black", "yellow", "red", "blue", "gray", "green"), pch=c(4,11,1,2,5,4), lty = c(1,1,1,1,1,1))

Questão 02

(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.

# Dados
dados <- data.frame(
  PrecoRefeicao = factor(c("$10–19", "$20–29", "$30–39", "$40–49"), levels = c("$10–19", "$20–29", "$30–39", "$40–49")),
  Good = c(53.8, 33.9, 2.6, 0),
  VeryGood = c(43.6, 54.2, 60.5, 21.4),
  Excellent = c(2.6,11.9,36.8,78.6)
)

# Cria gráfico de barras empilhadas
barplot(as.matrix(dados[,2:4]), col=c("blue","green","red", "yellow"), 
        main="Meal Quality by Price Range", 
        legend = c("$10–19", "$20–29", "$30–39", "$40–49"), 
        args.legend = list(x = "topright", bty = "n"))

Questão 03

(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.

# Carrega o conjunto de dados airquality
data(airquality)

# Seleciona as temperaturas do mês de maio
temperaturas_maio <- airquality$Temp[airquality$Month == 5]

# Converte as temperaturas para graus Celsius
temperaturas_celsius <- (temperaturas_maio - 32) / 1.8

# Cria o histograma
hist(temperaturas_celsius, 
     main = "Histograma das Temperaturas de Maio",
     xlab = "Temperatura (°C)",
     ylab = "Frequência",
     col = "green",
     density = 20,
     border = "black",
     xlim = c(min(temperaturas_celsius), max(temperaturas_celsius)))

# Adiciona uma curva de densidade
curva_densidade <- density(temperaturas_celsius)
curva_densidade$y <- curva_densidade$y * 50
lines(curva_densidade, col = "red", lwd = 2)

# Adiciona uma legenda
legend("topright", legend = "Densidade", col = "red", lwd = 2)

Questão 04

(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.

# Dados
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)

# Gera o gráfico de pizza
pie(sales$SALES, labels=paste(sales$COUNTRY, round(100*sales$SALES/sum(sales$SALES), 1), "%"), col=rainbow(length(sales$COUNTRY)))

# Adiciona a legenda
legend("topright", legend=sales$COUNTRY, fill=rainbow(length(sales$COUNTRY)))

# Adiciona o título
title("Vendas por País")

Questão 05

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

# Carrega o dataset InsectSprays
data(InsectSprays)

# Gera o boxplot sem outliers
boxplot(InsectSprays$count ~ InsectSprays$spray, 
        main="Contagem de Insetos por Tipo de Inseticida", 
        xlab="Tipo de Inseticida", ylab="Contagem de Insetos",
        col="yellow", varwidth=TRUE, outline=FALSE)

Questão 06

Exercício 12 - Segunda Parte

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.

Questão 07

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.

# carrega o dataframe
library(readr)
netflix_titles <- read_csv("netflix_titles.csv")
## Rows: 7787 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (11): show_id, type, title, director, cast, country, date_added, rating,...
## dbl  (1): release_year
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Carrega a biblioteca plotly
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.2
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.2
## 
## 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
# Filtra os conteúdos com apenas UM país de origem
netflix_one_country <- subset(netflix_titles, !is.na(country) & !grepl(",", country))

# Conta o número de títulos por país
country_counts <- table(netflix_one_country$country)

# Ordena os países por número de títulos
country_counts <- sort(country_counts, decreasing = TRUE)

# Seleciona os 10 países com mais títulos
top_10_countries <- head(country_counts, 10)

# Gera o gráfico de pizza
plot_ly(labels = names(top_10_countries), values = top_10_countries, type = "pie", 
        textposition = "inside", textinfo = "label+percent", 
        marker = list(colors = rainbow(length(top_10_countries)), line = list(color = "white", width = 1))) %>%
  layout(title = "Top 10 Países com Mais Conteúdo na Netflix")

Questão 08

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.

# Filtra os conteúdos com apenas UM país de origem
netflix_one_country <- subset(netflix_titles, !is.na(country) & !grepl(",", country))

# Conta o número de títulos por país
country_counts <- table(netflix_one_country$country)

# Ordena os países por número de títulos
country_counts <- sort(country_counts, decreasing = TRUE)

# Seleciona os 10 países com mais títulos
top_10_countries <- head(country_counts, 10)

# Gera a tabela
table_data <- data.frame(top_10_countries)
table_data %>%
  plot_ly() %>%
  add_trace(type = "table",
            header = list(values = c("País", "Total de conteúdos"),
                          fill = list(color = "#506784"),
                          font = list(color = "white", size = 14)),
            cells = list(values = t(table_data),
                         align = "center",
                         font = list(size = 12),
                         height = 30)) %>%
  layout(title = "Top 10 Países com Mais Conteúdo na Netflix")

Questão 09

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)

# Filtra os dados para incluir apenas filmes e séries
netflix_movies_series <- subset(netflix_titles, type %in% c("Movie", "TV Show"))

# Converte o ano de lançamento para década
netflix_movies_series$decade <- 10 * floor(netflix_movies_series$release_year / 10)

# Conta o número de filmes e séries por década
content_counts <- table(netflix_movies_series$decade, netflix_movies_series$type)

# Gera o gráfico de linha com pontos
plot_ly(x = names(content_counts[,1]), y = content_counts[,1], type = "scatter", mode = "lines+markers", name = "Movies", line = list(color = "blue")) %>%
  add_trace(x = names(content_counts[,2]), y = content_counts[,2], type = "scatter", mode = "lines+markers", name = "TV Series", line = list(color = "orange")) %>%
  layout(title = "Quantidade de Conteúdo por Década do Netflix", xaxis = list(title = "Década"), yaxis = list(title = "Quantidade de Conteúdo"))

Questão 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”).

# Filtra os dados para incluir apenas filmes
netflix_movies <- subset(netflix_titles, type == "Movie")

# Filtra os dados para incluir apenas filmes lançados entre 2000 e 2010
netflix_movies_2000_2010 <- subset(netflix_movies, release_year >= 2000 & release_year <= 2010)

# Filtra os dados para incluir apenas os gêneros "Dramas", "Action & Adventure" e "Comedies"
netflix_movies_2000_2010_dac <- subset(netflix_movies_2000_2010, grepl("Dramas|Action & Adventure|Comedies", listed_in))

# Conta o número de filmes por ano e por gênero
genre_counts <- table(netflix_movies_2000_2010_dac$release_year, netflix_movies_2000_2010_dac$listed_in)

# Gera o gráfico de barras lado a lado
plot_ly() %>%
  add_trace(x = names(genre_counts[,1]), y = genre_counts[,1], name = "Dramas", type = "bar", marker = list(color = "blue")) %>%
  add_trace(x = names(genre_counts[,2]), y = genre_counts[,2], name = "Action & Adventure", type = "bar", marker = list(color = "orange")) %>%
  add_trace(x = names(genre_counts[,3]), y = genre_counts[,3], name = "Comedies", type = "bar", marker = list(color = "green")) %>%
  layout(title = "Quantidade de Filmes Lançados por Gênero entre 2000 e 2010", xaxis = list(title = "Ano"), yaxis = list(title = "Quantidade de Filmes"))