Aqui serão apresentados os gráficos gerados a partir da lista de exercício oferecida na disciplina de Computação para Análise de Dados do Programa de Pós-Graduação em Informática Aplicada (UFRPE).
O objetivo aqui é ilustrar a relação entre o tempo de chamado e o de resposta entre 1, 3, 5, 10, 15 e nenhum sapo. Mas, é necessário criar primeiramente os elementos que comporão este gráfico:
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)
Uma vez criados os vetores contendo os dados necessários o gráfico
será construido a partir da função plot(). Vejamos as
etapas para esta cosntrução:
A configuração inicial de gráfico inclui os vetores
clock e MRT_1F nos eixos x e y,
respectivamente.
plot(clock, MRT_1F, type = "o", col = "black", pch = 4, ylim = range(0, max(MRT_1F)), xlab = "Time between Things requests (seconds)", ylab = "Response Time (sec)", main = "Gráfico de Linhas")
Aqui, incluimos além os argumentos type que define como
os pontos e linhas serão apresentados, o col que atribui
cor as linhas, ylim = range(0, max(MRT_1F)) que estabelece
o limite do eixo y, o xlabe ylab para
adicionar títulos aos eixos e main o título do
gráfico.
As demais linhas são inserida com função lines() e cada
conjunto de dados recebe uma cor diferente:
plot(clock, MRT_1F, type = "o", col = "black", ylim = range(0, max(MRT_1F)), xlab = "Time between Things requests (seconds)", ylab = "Response Time (sec)", main = "Grafico de Linhas")
lines(clock, MRT_3F, type = "o", col = "yellow", pch = 8)
lines(clock, MRT_5F, type = "o", col = "red", pch = 1)
lines(clock, MRT_10F, type = "o", col = "blue", pch = 2)
lines(clock, MRT_15F, type = "o", col = "purple", pch = 11)
lines(clock, MRT_sem_F, type = "o", col = "green", pch = 0)
Por fim, a legenda é adicionada ao gráfico utilizando a função
legend() finalizando a sua construção. Vejamos:
plot(clock, MRT_1F, type = "o", col = "black", ylim = range(0, max(MRT_1F)), xlab = "Time between Things requests (seconds)", ylab = "Response Time (sec)", main = "Grafico de Linhas")
lines(clock, MRT_3F, type = "o", col = "yellow", pch = 8)
lines(clock, MRT_5F, type = "o", col = "red", pch = 1)
lines(clock, MRT_10F, type = "o", col = "blue", pch = 2)
lines(clock, MRT_15F, type = "o", col = "purple", pch = 11)
lines(clock, MRT_sem_F, type = "o", col = "green", pch = 0)
legend("topright", legend = c("1 Frog", "3 Frog", "5 Frog", "10 Frog", "15 Frog", "w/o Frog"), col = c("black", "yellow", "red", "blue", "purple", "green"), lty = 1, pch = c(8, 1, 2, 11, 0))
Um segundo gráfico é requerido, e desta vez ilustraremos a comparação
entre do intervalo de tempo entre um chamado e uma resposta para grupos
em relação a quando não há sapos em um gráfico de barras mostrando duas
categorias por plotagem. Utilizaremos os mesmo dados do gráfico
anterior, mas, para uma melhor visualização aplicaremos a função
log() nos grupos estudados os convertendo em uma escala
logarítmica.
A aplicação da conversão segue o seguinte comando:
log_MRT_1F <- log(MRT_1F)
log_MRT_3F <- log(MRT_3F)
log_MRT_5F <- log(MRT_5F)
log_MRT_10F <- log(MRT_10F)
log_MRT_15F <- log(MRT_15F)
log_MRT_sem_F <- log(MRT_sem_F)
Para mostrar as categorias da forma exigida, é preciso organizar os dados em uma matriz e estabelecer outros elementos, seguindo os passos:
Definindo os dados para o gráfico:
log_MRT_1F <- log(c(517.1468515630205, 85.13094142168089, 30.333207896694553, 12.694776264558937, 3.3041601673945418, 1.1823111717498882, 1.1892293502386786))
log_MRT_sem_F <- log(c(11.93430909937736, 0.6095414637034009, 0.6060645101029295, 0.612167181646899, 0.6146761002685637, 0.6096747087200697, 0.6125810476877268))
Criando os elementos do gráfico:
colors <- c("#E6E6E6", "#666666")
groups <- c("1 Frog", "w/o Frog")
time <- c(0.1, 0.5, 1, 1.5, 2, 2.5, 3)
Criando uma matriz para os valores:
values <- rbind(log_MRT_1F, log_MRT_sem_F)
Plotando o gráfico:
barplot(values, main = "Gráfico 1",
names.arg = time, xlab = "Time between Things requests (seconds)",
ylab = "log(Response Time) (sec)", col = colors, beside = TRUE)
legend("topright", pch = c(15, 15), col = colors, legend = groups)
Repetindo o mesmo processo para os outros grupos teremos cinco gáficos de barra. Essa tarefa pode ser otimizada construindo uma função que cria os gráficos para os valores restantes. Vamos primeiro editar os elementos principais dos gráficos:
colors <- c("#E6E6E6", "#666666")
groups <- c("Group", "w/o Frog")
Após isso, a função será criada com o seguinte comando:
create_barplot <- function(values, title) {
barplot(values, main = title,
names.arg = clock, xlab = "Time between Things requests (seconds)",
ylab = "log(Response Time) (sec)", col = colors, beside = TRUE)
legend("topright", pch = c(15, 15), col = colors, legend = groups)
}
Agora seguimos para a configuração da plotagem com todos os gráficos
utilizando a função layout():
# Configurando o layout 3x2
layout(matrix(1:6, nrow = 3, ncol = 2))
# Plotando os gráficos
create_barplot(rbind(log_MRT_1F, log_MRT_sem_F), "1 Frog vs w/o Frog")
create_barplot(rbind(log_MRT_3F, log_MRT_sem_F), "3 Frogs vs w/o Frog")
create_barplot(rbind(log_MRT_5F, log_MRT_sem_F), "5 Frogs vs w/o Frog")
create_barplot(rbind(log_MRT_10F, log_MRT_sem_F), "10 Frogs vs w/o Frog")
create_barplot(rbind(log_MRT_15F, log_MRT_sem_F), "15 Frogs vs w/o Frog")
# Placeholder for the last plot in the 3x2 layout
plot.new()
Aqui a relação entre preços pagos por refeições e categorias de
avaliação. Então, temos uma escala de preços indo de 10 a 49 dólares; as
avaliações boa, muito boa e excelente e a proporção que cada uma
possui.
Assim, vamos criar esses elementos como vetores:
colors <- c("brown", "orange", "green")
category <- c("Good", "Very good", "Excellent")
price <- c("10-19", "20-29", "30-39", "40-49")
price <- paste(price, "$", sep = "")
#Criar uma triz com os valores
values <-
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, ncol = 4, byrow = TRUE)
barplot(values, main = "Quality Rating",
names.arg = price, xlab = "Meal price", ylab = "Proportion rating (%)", col = colors, beside = FALSE)
legend("topright", pch = c(15, 15, 15), col = colors, legend = category, cex = 0.8)
Histogramas permitem uma visualização precisa da distribuição dos
elementos de uma amostra. É possível adicionar outros elementos a
plotagem final evidenciando a natureza dessa distribuição como uma
curva. Neste histograma observaremos a variável “temperatura” mas antes
converteremos os registros que estão em Fahrenheit para Celsius.
Assim, o gráfico requerido segue os seguintes passos:
Preparando os dados e convertendo as temperaturas
dados <- airquality
dados$Temp_Celsius <- round((airquality$Temp - 32) / 1.8)
head(dados)
## Ozone Solar.R Wind Temp Month Day Temp_Celsius
## 1 41 190 7.4 67 5 1 19
## 2 36 118 8.0 72 5 2 22
## 3 12 149 12.6 74 5 3 23
## 4 18 313 11.5 62 5 4 17
## 5 NA NA 14.3 56 5 5 13
## 6 28 NA 14.9 66 5 6 19
Plotagem do histograma
hist(dados$Temp_Celsius,
main = "Histograma das Temperaturas (Celsius)",
xlab = "Temperatura (°C)",
ylab = "Frequência",
col = "lightblue",
border = "black")
Será representado por um gráfico de pizza a porcentagem de vendas por
país presentes no dataset Sales.txt.
Carregando os dados
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)
Plotagem do gráfico
library(plotly)
sales_fig <-plot_ly(sales, labels = ~COUNTRY, values = ~SALES, type = 'pie',
textinfo = 'label+percent', insidetextorientation = 'radial')
# Adicionar título ao gráfico
sales_fig <- sales_fig %>% layout(title = 'Proporção de vendas')
# Ajustar o layout do gráfico com autosize
sales_fig <- sales_fig %>% layout(
title = 'Proporção de vendas',
autosize = TRUE,
margin = list(l = 100, r = 100, b = 180, t = 120)
)
# Exibir o gráfico
sales_fig
Para observar a distribuição de variáveis outros gráficos podem ser
utilizados. Nesta questão, foi contruído um gráfico do tipo boxplot
aplicado ao banco de dados InsectSpray no R para entender a
distribuição da quantidade de insetos após o uso de 6 tipos de
inseticidas sem a presença de outliers.
De início, vamos carregar o banco de dados e observar brevemente sua
composição
data("InsectSprays")
head(InsectSprays)
## count spray
## 1 10 A
## 2 7 A
## 3 20 A
## 4 14 A
## 5 14 A
## 6 12 A
Agora passamos para a remoção dos outliers existentes com o
argumento outline e a plotagem do gráfico
boxplot(count ~ spray, data = InsectSprays,
xlab = "Inseticidas aplicados",
ylab = "Constagem de insetos",
main = "Conatgem de insetos por aplicação de inseticida",
outline = FALSE,
col = "yellow")
Aqui ilustraremos a partir de gráficos de linhas a relação entre a
coleta de recursos (currentTime) e a menória utilizada (usedMemory).
Antes disso, é necessário realizar alguns ajustes no banco de
dados:
— Ajustar a coluna currentTime para que os registros de
tempo se organizem de maneira contínua;
— Ajustar a coluna usedMemory para que as informações
fiquem em formato megabyte.
Inicialmente, vamos carregar os pacotes necessários para as
manipulações
Com base no banco de dados Netflix Movies an TV Shows,
construiremos um gráfico de pizza para observar a proporção de filmes
por país. Vamos carregar os dados:
library(readr)
datamovie <- read.csv("C:\\Users\\karin\\Downloads\\netflix_titles.csv", sep = ",")
Agora, é preciso realizar uma filtragem no banco de dados usando como
referência a coluna country e considerando apenas os filme
com apenas um páis de origem
library(plotly)
library(tidyverse)
library(dplyr)
# Limpar os dados da coluna 'country' removendo espaços em branco
datamovie <- datamovie %>%
mutate(country = str_trim(country))
# Filtrar os dados para considerar apenas os conteúdos com um país de origem
um_pais <- datamovie %>%
filter(!is.na(country) & !str_detect(country, ","))
# Verificar se há dados após a filtragem
print(dim(um_pais))
# Agrupar os países menos frequentes
um_pais <- um_pais %>%
mutate(pais_agrupado = fct_lump(country, n = 10))
# Contar os conteúdos por país agrupado
contagem <- um_pais %>%
count(pais_agrupado) %>%
arrange(desc(n))
contagem <- dplyr::filter(contagem, n != 831)
# Criar o gráfico de pizza
fig <- plot_ly(contagem, labels = ~pais_agrupado, values = ~n, type = 'pie',
textinfo = 'label+percent', insidetextorientation = 'radial')
# Adicionar título ao gráfico
fig <- fig %>% layout(title = ' Países com Mais Conteúdo na Netflix (2019)')
# Ajustar o layout do gráfico com autosize
fig <- fig %>% layout(
title = ' Países com Mais Conteúdo na Netflix (2019)',
autosize = TRUE,
margin = list(l = 100, r = 100, b = 180, t = 120)
)
# Exibir o gráfico
fig
Utilizando o banco de dados filtrado na questão anterior, agora, os
dados serão estruturados em uma tabela ainda utilizando o pacote
Ploty()
#elementos da tabela
dados <- data.frame(pais = c("Canadá", "França", "India", "Japão", "México",
"Coréia do Sul", "Espanha", "Reino Unido", "Estados Unidos", "Outros"), contagem = c(181, 124, 972, 245, 110, 199, 145, 419, 2818, 1443))
table_fig <- plot_ly(
type = 'table',
columnwidth = c(50, 50),
header = list(
values = c("País", "Total de conteúdos"),
align = c("center", "center"),
line = list(width = 1.5, color = c("black")),
fill = list(color = c("lightgrey")),
font = list(family = "Arial", size = 14, color = c("black"))
),
cells = list(
values = rbind(dados$pais, dados$contagem),
align = c("center", "center"),
line = list(width = 1.5, color = c("black")),
fill = list(color = c("white")),
font = list(family = "Arial", size = 12, color = c("black"))
)
)
table_fig
Ainda usando o banco de dados netflix_titles.csv foi
contruido um gráfico de linhas que expressa a quantidade de conteúdos
criados por década. Sendo assim, antes da plotagem, precisamos ajustar
os dados que utilizaremos.
Carregando os dados
library(readr)
datamovie <- read.csv("C:\\Users\\karin\\Downloads\\netflix_titles.csv", sep = ",")
Agora damos sequencia a manipulação, adicionando uma coluna com as décadas
library(dplyr)
datamovie <- datamovie %>%
mutate(decada = (release_year %/% 10) * 10)
Em seguida contabilizamos a quantidade de filmes e séries feitas por década
library(tidyr)
conteudo_decada <- datamovie %>%
group_by(decada, type) %>%
summarise(count = n()) %>%
spread(type, count, fill = 0)
# Certifique-se de que as colunas estão corretamente nomeadas
colnames(conteudo_decada) <- c("decada", "Movies", "TV Shows")
conteudo_decada
## # A tibble: 10 × 3
## # Groups: decada [10]
## decada Movies `TV Shows`
## <dbl> <dbl> <dbl>
## 1 1920 0 1
## 2 1940 13 1
## 3 1950 11 0
## 4 1960 22 3
## 5 1970 63 4
## 6 1980 99 7
## 7 1990 194 31
## 8 2000 601 127
## 9 2010 3951 1760
## 10 2020 423 476
Agora seguimos para a plotagem do gráfico
library(plotly)
dados <- data.frame( decada = c(1920, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020),
Movies = c(0, 13, 11, 22, 63, 99, 194, 601, 3951, 423),
Tv_Shows = c(1, 1, 0, 3, 4, 7, 31, 127, 1760, 476))
# Criar o gráfico de linha com pontos
fig <- plot_ly(dados, x = ~decada, y = ~Movies, type = 'scatter', mode = 'lines', name = 'Movies', line = list(color = 'yellow'))
fig <- fig %>% add_trace(y = ~Tv_Shows, name = 'TV Shows', mode = 'lines', line = list(color = 'blue'))
fig
Agora construiremos um gráfico de barras que representa a quantidade de filmes lançados de um determinado gênero entre os anos de 2000 e 2010.
Carregando os dados
library(readr)
datamovie <- read.csv("C:\\Users\\karin\\Downloads\\netflix_titles.csv", sep = ",")
Agora os dados serão filtrados pelos lançamentos entre 2000 e 2010, separando os filmes com multiplos gêneros.
filmes <- datamovie %>%
filter(type == "Movie", release_year >= 2000, release_year <= 2010) %>%
mutate(primeiro_genero = sapply(strsplit(listed_in, ", "), `[`, 1)) %>%
filter(primeiro_genero %in% c("Dramas", "Action & Adventure", "Comedies"))
#quantidade de filmes lançados por ano e por gênero
conteudo_genero <- filmes %>%
group_by(release_year, primeiro_genero) %>%
summarise(count = n()) %>%
spread(primeiro_genero, count, fill = 0)
Agora plotaremos o gráfico
# Criar o gráfico de barras
fig <- plot_ly(conteudo_genero, x = ~release_year, y = ~Dramas, type = 'bar', name = 'Dramas')
fig <- fig %>% add_trace(y = ~`Action & Adventure`, name = 'Action & Adventure')
fig <- fig %>% add_trace(y = ~Comedies, name = 'Comedies')
# Atualizar layout do gráfico
fig <- fig %>% layout(barmode = 'group',
title = 'Quantidade de Filmes por Gênero (2000-2010)',
xaxis = list(title = 'Ano de Lançamento'),
yaxis = list(title = 'Quantidade de Filmes'))
# Mostrar o gráfico
fig