Introdução:

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

Questão 1 - Gráfico de linhas e barras

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

Questão 2 - Gráfico de barras empilhado

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)

Questão 3 - Histograma

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

Questão 4 - Gráfico de Pizza

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

Questão 5 - Gráfico Boxplot

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

Questão 6 - Gráfico de linhas

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

Questão 7 - Gráfico de Pizza (Plotly)

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

Questão 8 - Tabela (Plotly)

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

Questão 9 - Gráfico de linhas (Plotly)

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

Questão 10 - Gráfico de barras (Plotly)

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