Questão 1

# Organizando layout com 2 linhas e 2 colunas
layout(matrix(c(1,2,3,4), nrow = 2, byrow = TRUE))

# Gráfico 1: MRT_1F
plot(clock, MRT_1F, type = "b", col = "blue", lwd = 2,
     main = "Gráfico 1: MRT_1F", xlab = "Clock (GHz)", ylab = "MRT")

# Gráfico 2: Barras MRT_1F e MRT_3F com escala log e cores específicas
barplot(rbind(MRT_1F, MRT_3F), beside = TRUE, log = "y",
        col = c("#E6E6E6", "#666666"), names.arg = clock,
        main = "Gráfico 2: Barras (log)", xlab = "Clock", ylab = "MRT")
legend("topright", legend = c("MRT_1F", "MRT_3F"), fill = c("#E6E6E6", "#666666"))

# Gráfico 3: Comparação de MRT_5F e MRT_10F
plot(clock, MRT_5F, type = "o", col = "green", ylim = c(0, max(MRT_5F, MRT_10F)),
     main = "Gráfico 3: MRT_5F vs MRT_10F", xlab = "Clock", ylab = "MRT")
lines(clock, MRT_10F, type = "o", col = "purple")
legend("topright", legend = c("MRT_5F", "MRT_10F"), col = c("green", "purple"), lty = 1, pch = 1)

# Gráfico 4: Todos os MRTs
matplot(clock, cbind(MRT_1F, MRT_3F, MRT_5F, MRT_10F, MRT_15F, MRT_sem_F),
        type = "l", lty = 1, col = 1:6, lwd = 2,
        xlab = "Clock", ylab = "MRT", main = "Gráfico 4: Todos MRTs")
legend("topright", legend = c("1F", "3F", "5F", "10F", "15F", "Sem F"), col = 1:6, lty = 1)

Questão 2

# Criando a matriz com os dados da tabela
dados <- matrix(c(
  53.8, 33.9, 2.6, 0.0,     # Good
  43.6, 54.2, 60.5, 21.4,   # Very Good
  2.6, 11.9, 36.8, 78.6     # Excellent
), 
nrow = 3, byrow = TRUE)

# Nomeando linhas e colunas
rownames(dados) <- c("Good", "Very Good", "Excellent")
colnames(dados) <- c("$10–19", "$20–29", "$30–39", "$40–49")

# Definindo cores
cores <- c("skyblue", "steelblue", "navy")

# Criando o gráfico de barras empilhadas
barplot(dados,
        col = cores,
        legend.text = rownames(dados),
        args.legend = list(x = "topright"),
        main = "Distribuição da Qualidade da Refeição por Faixa de Preço",
        xlab = "Preço da Refeição",
        ylab = "Percentual (%)")

Questão 3

# Filtrando os dados de maio
dados_maio <- subset(airquality, Month == 5)

# Convertendo temperatura de Fahrenheit para Celsius
temp_celsius <- (dados_maio$Temp - 32) / 1.8

# Gerando o histograma
hist(temp_celsius,
     breaks = 8,
     col = "lightblue",
     main = "Histograma das Temperaturas de Maio (°C)",
     xlab = "Temperatura (°C)",
     ylab = "Frequência",
     prob = TRUE)  # para adicionar curva de densidade

# Adicionando a curva de densidade
lines(density(temp_celsius, na.rm = TRUE), col = "darkblue", lwd = 2)

Questão 4

# Questão 4 - Gráfico de pizza com total de vendas por país

# Lendo o dataset e tratando corretamente os separadores
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",
                    header = TRUE,
                    sep = "\t",          # <-- separador tabulado
                    stringsAsFactors = FALSE,
                    fill = TRUE)         # <-- preenche linhas incompletas com NA

cat("Linhas:", nrow(sales), " - Amount:", length(sales$amount), " - Country:", length(sales$country), "\n")
## Linhas: 6  - Amount: 0  - Country: 0
# Conferir nomes das colunas
print(names(sales))
## [1] "COUNTRY" "SALES"
# Remover colunas ou linhas incompletas, se necessário
sales <- na.omit(sales)

# Verifique se colunas existem e estão corretas
str(sales)
## 'data.frame':    6 obs. of  2 variables:
##  $ COUNTRY: chr  "US" "UK" "France" "Poland" ...
##  $ SALES  : int  340 290 510 820 120 780
# Padronizar nomes (caso estejam com espaços ou maiúsculas)
names(sales) <- trimws(tolower(names(sales)))

# Verifique os nomes resultantes
print(names(sales))
## [1] "country" "sales"
# Agora calcule as vendas por país
vendas_por_pais <- tapply(sales$sales, sales$country, sum)


# Criar porcentagens e rótulos
porcentagem <- round(100 * vendas_por_pais / sum(vendas_por_pais), 1)
rotulos <- paste(names(vendas_por_pais), "-", porcentagem, "%")

# Cores para o gráfico
cores <- rainbow(length(vendas_por_pais))

# Gráfico de pizza
pie(vendas_por_pais,
    labels = rotulos,
    col = cores,
    main = "Distribuição das Vendas por País")

# Legenda
legend("topright", legend = names(vendas_por_pais), fill = cores)

Questão 5

# Carregar o dataset InsectSprays
data("InsectSprays")

# Criar o boxplot sem outliers
boxplot(count ~ spray, data = InsectSprays,
        main = "Contagem de Insetos por Tipo de Inseticida",  # Título
        xlab = "Tipo de Inseticida",  # Nome do eixo X
        ylab = "Contagem de Insetos",  # Nome do eixo Y
        col = "yellow",  # Cor de preenchimento das caixas
        outline = FALSE)  # Remover outliers

Questão 6

# Carregar as bibliotecas necessárias
library(ggplot2)

# Carregar os dados
data_0.1 <- read.csv("/Users/lucasaraujo/Projects/R_Projects/CPAD/monitoringCloudData_0.1.csv")
data_0.5 <- read.csv("/Users/lucasaraujo/Projects/R_Projects/CPAD/monitoringCloudData_0.5.csv")
data_1 <- read.csv("/Users/lucasaraujo/Projects/R_Projects/CPAD/monitoringCloudData_1.csv")
data_NONE <- read.csv("monitoringCloudData_NONE.csv")

# Função para ajustar os dados
adjust_data <- function(data) {
  
  # Ajustar a coluna currentTime para formato de data
  data$currentTime <- as.POSIXct(data$currentTime, format = "%Y-%m-%d %H:%M:%S", tz = "UTC")
  
  # Verifique se existem valores inválidos
  if (any(is.na(data$currentTime))) {
    warning("Existem valores inválidos na coluna currentTime!")
  }
  
  # Calcular a diferença de tempo (time_diff) em horas
  data$time_diff <- difftime(data$currentTime, min(data$currentTime, na.rm = TRUE), units = "hours")
  
  # Verifique se time_diff tem valores inválidos
  if (any(is.na(data$time_diff)) | any(is.infinite(data$time_diff))) {
    warning("Existem valores inválidos na coluna time_diff!")
  }
  
  # Limpeza da coluna usedMemory para números em MB
  data$usedMemory <- gsub("GB", "", data$usedMemory)
  data$usedMemory <- gsub("TB", "", data$usedMemory)
  data$usedMemory <- gsub("MB", "", data$usedMemory)
  
  # Converter para numérico
  data$usedMemory <- as.numeric(data$usedMemory)
  
  # Agora ajustar a coluna para MB (GB * 1024, TB * 1000000)
  data$usedMemory <- ifelse(grepl("GB", data$usedMemory), data$usedMemory * 1024, data$usedMemory)
  data$usedMemory <- ifelse(grepl("TB", data$usedMemory), data$usedMemory * 1000000, data$usedMemory)
  
  # Verifique se usadoMemory tem valores inválidos
  if (any(is.na(data$usedMemory)) | any(is.infinite(data$usedMemory))) {
    warning("Existem valores inválidos na coluna usedMemory!")
  }
  
  # Remover linhas com NA ou Inf nas colunas de interesse
  data <- data[complete.cases(data$time_diff, data$usedMemory), ]
  
  return(data)
}

# Aplique a função para cada conjunto de dados
data_0.1 <- adjust_data(data_0.1)
data_0.5 <- adjust_data(data_0.5)
## Warning in adjust_data(data_0.5): Existem valores inválidos na coluna
## currentTime!
## Warning in adjust_data(data_0.5): Existem valores inválidos na coluna
## time_diff!
data_1 <- adjust_data(data_1)
data_NONE <- adjust_data(data_NONE)

# Organize os gráficos com a função layout
layout(matrix(1:4, ncol = 2))

# Gráfico para o dataset 0.1
plot(data_0.1$time_diff, data_0.1$usedMemory, type = "l", col = "blue", 
     xlab = "Tempo (horas)", ylab = "Memória Usada (MB)", 
     main = "Monitoramento - 0.1")

# Gráfico para o dataset 0.5
plot(data_0.5$time_diff, data_0.5$usedMemory, type = "l", col = "red", 
     xlab = "Tempo (horas)", ylab = "Memória Usada (MB)", 
     main = "Monitoramento - 0.5")

# Gráfico para o dataset 1
plot(data_1$time_diff, data_1$usedMemory, type = "l", col = "green", 
     xlab = "Tempo (horas)", ylab = "Memória Usada (MB)", 
     main = "Monitoramento - 1")

# Gráfico para o dataset NONE
plot(data_NONE$time_diff, data_NONE$usedMemory, type = "l", col = "purple", 
     xlab = "Tempo (horas)", ylab = "Memória Usada (MB)", 
     main = "Monitoramento - NONE")

Questão 7

# Carregar pacotes necessários
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)
## 
## 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
# Carregar o dataset Netflix (supondo que você tenha o arquivo CSV)
netflix_data <- read.csv("/Users/lucasaraujo/Projects/R_Projects/CPAD/netflix_titles.csv", stringsAsFactors = FALSE)

# Filtrar os conteúdos com apenas UM país de origem
netflix_data <- netflix_data %>%
  filter(!is.na(country)) %>% 
  mutate(country_count = sapply(strsplit(country, ","), length)) %>%
  filter(country_count == 1)

# Contar os países com mais conteúdos
country_counts <- netflix_data %>%
  count(country, sort = TRUE) %>%
  top_n(10, n)

# Criar gráfico de pizza usando Plotly
pie_chart <- plot_ly(
  data = country_counts, 
  labels = ~country, 
  values = ~n, 
  type = 'pie',
  textinfo = 'label+percent',
  title = "Top 10 países com mais conteúdos na Netflix (2019)"
)

# Exibir o gráfico
pie_chart

Questão 8

# Carregar pacotes necessários
library(dplyr)
library(plotly)

# Filtragem dos dados conforme a questão anterior (para os 10 países com mais conteúdos)
country_counts <- netflix_data %>%
  count(country, sort = TRUE) %>%
  top_n(10, n)

# Criar a tabela com Plotly
table <- plot_ly(
  type = 'table',
  header = list(
    values = c("País", "Total de conteúdos"),
    align = 'center',
    line = list(color = 'black'),
    fill = list(color = 'gray'),
    font = list(color = 'white', size = 14)
  ),
  cells = list(
    values = list(country_counts$country, country_counts$n),
    align = 'center',
    line = list(color = 'black'),
    fill = list(color = 'white'),
    font = list(color = 'black', size = 12)
  )
)

# Exibir a tabela
table

Questão 9

# Carregar pacotes necessários
library(dplyr)
library(plotly)

# Carregar o dataset Netflix (supondo que você tenha o arquivo CSV)
netflix_data <- read.csv("/Users/lucasaraujo/Projects/R_Projects/CPAD/netflix_titles.csv", stringsAsFactors = FALSE)

# Converter a coluna 'release_year' para numérico
netflix_data$release_year <- as.numeric(netflix_data$release_year)

# Agrupar os anos por década (ex: 2000-2009, 2010-2019, etc.)
netflix_data$decade <- floor(netflix_data$release_year / 10) * 10

# Contar a quantidade de filmes e séries por década
content_by_decade <- netflix_data %>%
  filter(!is.na(release_year)) %>%
  group_by(decade, type) %>%
  count() %>%
  ungroup()

# Separar os dados por tipo (série e filme)
series_data <- content_by_decade %>% filter(type == "TV Show")
movies_data <- content_by_decade %>% filter(type == "Movie")

# Criar gráfico de linha com Plotly
plot <- plot_ly() %>%
  add_lines(data = series_data, x = ~decade, y = ~n, type = 'scatter', mode = 'lines', name = 'Séries', line = list(color = 'blue')) %>%
  add_lines(data = movies_data, x = ~decade, y = ~n, type = 'scatter', mode = 'lines', name = 'Filmes', line = list(color = 'yellow')) %>%
  layout(
    title = "Quantidade de Conteúdo por Década na Netflix",
    xaxis = list(
      title = "Década",
      tickmode = "array", # Modo de ticks ajustado
      tickvals = seq(1940, max(netflix_data$decade), by = 20) # Exibe apenas as décadas de 20 em 20 anos.
    ),
    yaxis = list(title = "Quantidade de Conteúdo"),
    showlegend = TRUE
  )

# Exibir o gráfico
plot

Questão 10

# Carregar pacotes necessários
library(dplyr)
library(plotly)

# Carregar o dataset Netflix (supondo que você tenha o arquivo CSV)
netflix_data <- read.csv("/Users/lucasaraujo/Projects/R_Projects/CPAD/netflix_titles.csv", stringsAsFactors = FALSE)

# Converter a coluna 'release_year' para numérico
netflix_data$release_year <- as.numeric(netflix_data$release_year)

# Filtrar os filmes lançados entre 2000 e 2010
netflix_data_filtered <- netflix_data %>%
  filter(release_year >= 2000 & release_year <= 2010) %>%
  filter(type == "Movie")  # Apenas filmes

# Extrair o primeiro gênero listado na coluna 'listed_in'
netflix_data_filtered$primary_genre <- sapply(strsplit(netflix_data_filtered$listed_in, ","), `[`, 1)

# Filtrar apenas os gêneros de interesse: "Dramas", "Action & Adventure", "Comedies"
genres_of_interest <- c("Dramas", "Action & Adventure", "Comedies")
netflix_data_filtered <- netflix_data_filtered %>%
  filter(primary_genre %in% genres_of_interest)

# Contar a quantidade de filmes por gênero e ano
content_by_genre_year <- netflix_data_filtered %>%
  group_by(release_year, primary_genre) %>%
  count() %>%
  ungroup()

# Criar gráfico de barras lado a lado com Plotly
plot <- plot_ly(content_by_genre_year, x = ~release_year, y = ~n, color = ~primary_genre, type = 'bar',
                barmode = 'group', 
                colors = c('blue', 'red', 'green')) %>%
  layout(
    title = "Quantidade de Filmes por Gênero (2000-2010)",
    xaxis = list(title = "Ano de Lançamento"),
    yaxis = list(title = "Quantidade de Filmes"),
    showlegend = TRUE
  )

# Exibir o gráfico
plot
## Warning: 'bar' objects don't have these attributes: 'barmode'
## Valid attributes include:
## '_deprecated', 'alignmentgroup', 'base', 'basesrc', 'cliponaxis', 'constraintext', 'customdata', 'customdatasrc', 'dx', 'dy', 'error_x', 'error_y', 'hoverinfo', 'hoverinfosrc', 'hoverlabel', 'hovertemplate', 'hovertemplatesrc', 'hovertext', 'hovertextsrc', 'ids', 'idssrc', 'insidetextanchor', 'insidetextfont', 'legendgroup', 'legendgrouptitle', 'legendrank', 'marker', 'meta', 'metasrc', 'name', 'offset', 'offsetgroup', 'offsetsrc', 'opacity', 'orientation', 'outsidetextfont', 'selected', 'selectedpoints', 'showlegend', 'stream', 'text', 'textangle', 'textfont', 'textposition', 'textpositionsrc', 'textsrc', 'texttemplate', 'texttemplatesrc', 'transforms', 'type', 'uid', 'uirevision', 'unselected', 'visible', 'width', 'widthsrc', 'x', 'x0', 'xaxis', 'xcalendar', 'xhoverformat', 'xperiod', 'xperiod0', 'xperiodalignment', 'xsrc', 'y', 'y0', 'yaxis', 'ycalendar', 'yhoverformat', 'yperiod', 'yperiod0', 'yperiodalignment', 'ysrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'
## Warning: 'bar' objects don't have these attributes: 'barmode'
## Valid attributes include:
## '_deprecated', 'alignmentgroup', 'base', 'basesrc', 'cliponaxis', 'constraintext', 'customdata', 'customdatasrc', 'dx', 'dy', 'error_x', 'error_y', 'hoverinfo', 'hoverinfosrc', 'hoverlabel', 'hovertemplate', 'hovertemplatesrc', 'hovertext', 'hovertextsrc', 'ids', 'idssrc', 'insidetextanchor', 'insidetextfont', 'legendgroup', 'legendgrouptitle', 'legendrank', 'marker', 'meta', 'metasrc', 'name', 'offset', 'offsetgroup', 'offsetsrc', 'opacity', 'orientation', 'outsidetextfont', 'selected', 'selectedpoints', 'showlegend', 'stream', 'text', 'textangle', 'textfont', 'textposition', 'textpositionsrc', 'textsrc', 'texttemplate', 'texttemplatesrc', 'transforms', 'type', 'uid', 'uirevision', 'unselected', 'visible', 'width', 'widthsrc', 'x', 'x0', 'xaxis', 'xcalendar', 'xhoverformat', 'xperiod', 'xperiod0', 'xperiodalignment', 'xsrc', 'y', 'y0', 'yaxis', 'ycalendar', 'yhoverformat', 'yperiod', 'yperiod0', 'yperiodalignment', 'ysrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'
## Warning: 'bar' objects don't have these attributes: 'barmode'
## Valid attributes include:
## '_deprecated', 'alignmentgroup', 'base', 'basesrc', 'cliponaxis', 'constraintext', 'customdata', 'customdatasrc', 'dx', 'dy', 'error_x', 'error_y', 'hoverinfo', 'hoverinfosrc', 'hoverlabel', 'hovertemplate', 'hovertemplatesrc', 'hovertext', 'hovertextsrc', 'ids', 'idssrc', 'insidetextanchor', 'insidetextfont', 'legendgroup', 'legendgrouptitle', 'legendrank', 'marker', 'meta', 'metasrc', 'name', 'offset', 'offsetgroup', 'offsetsrc', 'opacity', 'orientation', 'outsidetextfont', 'selected', 'selectedpoints', 'showlegend', 'stream', 'text', 'textangle', 'textfont', 'textposition', 'textpositionsrc', 'textsrc', 'texttemplate', 'texttemplatesrc', 'transforms', 'type', 'uid', 'uirevision', 'unselected', 'visible', 'width', 'widthsrc', 'x', 'x0', 'xaxis', 'xcalendar', 'xhoverformat', 'xperiod', 'xperiod0', 'xperiodalignment', 'xsrc', 'y', 'y0', 'yaxis', 'ycalendar', 'yhoverformat', 'yperiod', 'yperiod0', 'yperiodalignment', 'ysrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'