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