#     Nome Completo dos Alunos:
#     Anna Julia Schell Yang
#     Mariana Fernanda Silva Ferreira

##Parte 1 - 50% - R Básico
#Descrição do trabalho: fazer uma analise das notas de uma turma de 35 alunos de uma escola pública;



#Selecione uma amostra aleatoria de 15 alunos entre os 35 possĩveis
#Cada número gerado na amostra será considerado o identificador único de cada aluno
set.seed(123)
amostra_alunos <- sample(1:35,15)



#Calcule e imprima na tela (sem casas decimais) o % de representatividade dos 15 
#em relação ao total de alunos da turma
percentual_representatividade <- length(amostra_alunos) / 35 * 100
cat("Percentual da representatividade da amostra:", round(percentual_representatividade),"%")
## Percentual da representatividade da amostra: 43 %
#As notas dadas respectivamente por aluno sorteado foram: 
#150, 152, 145, 157, 167, 172, 175, 170, 165, 177, 162, 180, 160, 155, 147
#Crie um vetor com as notas da primeira avaliação. 
#Nome do vetor: av1_notas
av1_notas <- c(150, 152, 145, 157, 167, 172, 175, 170, 165, 177, 162, 180, 160, 155, 147)



#Imprima na tela as notas da primeira avaliação em ordem crescente
cat("Notas da primeira avaliação em ordem crescente:", sort(av1_notas),"")
## Notas da primeira avaliação em ordem crescente: 145 147 150 152 155 157 160 162 165 167 170 172 175 177 180
#Calcule a soma e a média da avaliação 1
#Não usar a função mean()
#Nome da variavel: av1_media
soma_av1 <- sum(av1_notas)
media_av1 <- soma_av1 / length(av1_notas)
cat("Soma da avaliação 1:", soma_av1, "")
## Soma da avaliação 1: 2434
media_av1 <- round(media_av1)



#Compare as notas de cada aluno com a média da avaliação
#Imprima na tela a nota do aluno e uma das duas mensagens seguintes:

nota do aluno : - acima da média nota do aluno : - abaixo ou igual à média

# Obs: neste exercício utilize FOR ou WHILE
for (i in seq_along(av1_notas)) {
  if (av1_notas[i] > media_av1) {
    cat("Nota do aluno", amostra_alunos[i], ":", av1_notas[i], "- acima da média\n")
  } else {
    cat("Nota do aluno", amostra_alunos[i], ":", av1_notas[i], "- abaixo ou igual à média\n")
  }
}
## Nota do aluno 31 : 150 - abaixo ou igual à média
## Nota do aluno 15 : 152 - abaixo ou igual à média
## Nota do aluno 14 : 145 - abaixo ou igual à média
## Nota do aluno 3 : 157 - abaixo ou igual à média
## Nota do aluno 10 : 167 - acima da média
## Nota do aluno 18 : 172 - acima da média
## Nota do aluno 22 : 175 - acima da média
## Nota do aluno 11 : 170 - acima da média
## Nota do aluno 5 : 165 - acima da média
## Nota do aluno 20 : 177 - acima da média
## Nota do aluno 33 : 162 - abaixo ou igual à média
## Nota do aluno 29 : 180 - acima da média
## Nota do aluno 27 : 160 - abaixo ou igual à média
## Nota do aluno 19 : 155 - abaixo ou igual à média
## Nota do aluno 9 : 147 - abaixo ou igual à média
#Divida as notas da avaliação 1 em 3 grupos: menores que 160, entre 160 e 170 e maiores que 170
#Imprima na tela os grupos de notas
#nome das variáveis: av1_notas_grupo1, av1_notas_grupo2, av1_notas_grupo3
av1_notas_grupo1 <- av1_notas[av1_notas < 160]
av1_notas_grupo2 <- av1_notas[(av1_notas >= 160) & (av1_notas <= 170)]
av1_notas_grupo3 <- av1_notas[av1_notas > 170]
cat("Notas do Grupo 1 (menores que 160):", av1_notas_grupo1, "\n")
## Notas do Grupo 1 (menores que 160): 150 152 145 157 155 147
cat("Notas do Grupo 2 (entre 160 e 170):", av1_notas_grupo2, "\n")
## Notas do Grupo 2 (entre 160 e 170): 167 170 165 162 160
cat("Notas do Grupo 3 (maiores que 170):", av1_notas_grupo3, "\n")
## Notas do Grupo 3 (maiores que 170): 172 175 177 180
#Calcule a quantidade de notas em cada um dos grupos criados para a avaliação 1
#Nome das variáveis: av1_qtde_grupo1, av1_qtde_grupo2, av1_qtde_grupo3
av1_qtde_grupo1 <- length(av1_notas_grupo1)
av1_qtde_grupo2 <- length(av1_notas_grupo2)
av1_qtde_grupo3 <- length(av1_notas_grupo3)



#crie um vetor com as quantidades de notas de cada grupo da avaliação 1
#O nome do vetor deve ser: av1_qtde_notas_grupo1
av1_qtde_notas_grupo <- c(av1_qtde_grupo1, av1_qtde_grupo2, av1_qtde_grupo3)



#Calcule o % das quantidades de notas de cada grupo em relação a quantidade total de notas da amostra
#Nome das variaveis: av1_percentual_grupo1, av1_percentual_grupo2 e av1_percentual_grupo3
#Obs: Arrendonde para excluir as casas decimais
av1_percentual_grupo1 <- round((av1_qtde_grupo1 / length(av1_notas)) * 100)
av1_percentual_grupo2 <- round((av1_qtde_grupo2 / length(av1_notas)) * 100)
av1_percentual_grupo3 <- round((av1_qtde_grupo3 / length(av1_notas)) * 100)



#crie um vetor com o % das quantidades de notas de cada grupo da avaliação 1
#Nome da veriaveis: av1_percentual_notas_grupo
av1_percentual_notas_grupo <- c(av1_percentual_grupo1, av1_percentual_grupo2, av1_percentual_grupo3)



#crie uma matriz que mostre a quantidade de cada grupo e o % de cada grupo
#Nome da variavel: av1_matrix
av1_matrix <- matrix(c(av1_qtde_grupo1, av1_qtde_grupo2, av1_qtde_grupo3,
                       av1_percentual_grupo1, av1_percentual_grupo2, av1_percentual_grupo3),
                     ncol = 2, byrow = TRUE)



#Após um tempo, a pesquisa foi refeita com os mesmos alunos anteriormente sorteados, obedecendo rigorosamente a ordem de sorteio
#As novas notas da avaliação de cada aluno foram: 103 162 193 155 124 119 186 136 127 157 112 142 177 147 115
#Crie um vetor com as notas da avaliação 2
#Nome do vetor: av2_notas 
av2_notas <- c(103, 162, 193, 155, 124, 119, 186, 136, 127, 157, 112, 142, 177, 147, 115)



#Calcule a média e a mediana da avaliação 2
#Nome da variavel: av2_media e av2_mediana
av2_media <- mean(av2_notas)
av2_mediana <- median(av2_notas)



#Compare as duas médias das duas avaliacoes e imprima qual delas é a maior
#Utilize a estrutura de IF
media_av1 <- round(media_av1)
av2_media <- mean(c(103, 162, 193, 155, 124, 119, 186, 136, 127, 157, 112, 142, 177, 147, 115))

if (media_av1 > av2_media) {
  cat("A média da avaliação 1 é maior do que a média da avaliação 2.\n")
} else if (media_av1 < av2_media) {
  cat("A média da avaliação 2 é maior do que a média da avaliação 1.\n")
} else {
  cat("As médias das duas avaliações são iguais.\n")
}
## A média da avaliação 1 é maior do que a média da avaliação 2.
#A expectativa é que a média geral da avaliação 2 fosse 10% superior à média da avaliação 1.
#Calcule quanto seria essa média esperada
#Nome da variavel: av2_media_esperada
av2_media_esperada <- media_av1 * 1.1



#Calcule a diferença entre a média obtida e a esperada da avaliação 2
#Nome da variavel: av2_media_diff
av2_media_diff <- av2_media - av2_media_esperada



#Para cada aluno, calcule a média de suas notas e a diferença entre as notas 
#da primeira avaliação e da segunda avaliação 
#Armazene a diferenca em um vetor chamado av12_diferenca
av1_av2_medias <- (av1_notas + av2_notas) / 2
av12_diferenca <- av1_notas - av2_notas



#crie uma matriz contendo: 
#o número de cada aluno sorteado, sua primeira nota, sua segunda nota, a amplitude entre as notas e a nota média de suas notas
#nome da variavel: tabela_aluno
num_alunos <- seq_along(av1_notas)
amplitude_notas <- av2_notas - av1_notas
tabela_aluno <- matrix(c(num_alunos, av1_notas, av2_notas, amplitude_notas, av1_av2_medias),
                       ncol = 5, byrow = FALSE)



#salvar a tabela_aluno em um arquivo csv
#nome do arquivo: tabela_aluno.csv
write.csv(tabela_aluno, file = "tabela_aluno.csv", row.names = FALSE)



#Crie uma função chamada 'calcular_medidas' que receba somente um vetor com as notas de uma avaliacao (1 ou 2)
#A função retornar: maior nota, menor nota, média (1 casa decimal) e amplitude das notas 
#Obs: Pode usar a função mean() para calcular a média das notas do vetor
calcular_medidas <- function(notas) {
  if (length(notas) == 0) {
    stop("O vetor de notas está vazio.")
  }
  maior_nota <- max(notas)
  menor_nota <- min(notas)
  media_nota <- round(mean(notas), 1)
  amplitude_notas <- maior_nota - menor_nota
  
  return(c(maior_nota, menor_nota, media_nota, amplitude_notas))
}



#crie um vetor de dois elementos, sendo o número 1 representando a primeira avaliação 1 e 
#o número 2, representado a segunda avaliação
#nome da variavel: avaliacao
avaliacao <- c(1, 2)



#crie uma matriz contendo: 
#o número da avaliação (nome da variavel: avaliacao);
#a maior nota de cada avaliacao (nome da variavel: av12_maior);
#a menor nota de cada avaliacao (nome da variavel: av12_menor);
#a amplitude (diferenca) entre a maior e menor nota de cada avaliacao (nome da variavel: av12_amplitude);
#a media de cada avaliacao (nome da variavel: av12_media);
#nome da matriz: tabela_avaliacao
avaliacao
## [1] 1 2
av12_maior <- c(max(av1_notas),max(av2_notas))
av12_menor <- c(min(av1_notas),min(av2_notas))
av12_amplitude<-av12_maior-av12_menor
av12_media<-c(media_av1, av2_media)

tabela_avaliacao<- cbind(avaliacao, av12_maior, av12_menor, av12_amplitude, av12_media)




#salvar a tabela em um arquivo excel
#nome do arquivo: tabela_avaliacao.xlsx
install.packages("openxlsx")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
# Instala a biblioteca openxlsx
if (!requireNamespace("openxlsx", quietly = TRUE)) {
  install.packages("openxlsx")
}
library(openxlsx)
# Caminho do arquivo Excel
caminho_arquivo <- "tabela_avaliacao.xlsx"
# Salva a tabela_avaliacao em Excel
write.xlsx(tabela_avaliacao, caminho_arquivo)




## Parte 2 - 50% - R com Estatística



#Utilizando o dataset TREES disponível no R, responda as questões abaixo:
#selecione duas variáveis, elabore o gráfico de dispersão e explique o gráfico;
data(trees)
# Variáveis: Girth (circunferência) e Height (altura)
girth <- trees$Girth
height <- trees$Height
# Gráfico dispersão
plot(girth, height, main = "Gráfico de Dispersão: Circunferência vs. Altura",
     xlab = "Circunferência (in)", ylab = "Altura (ft)", pch = 16, col = "blue")




#utilizando o dataset IRIS, disponivel no R
#selecione uma variável qualitativa nominal, elabore a tabela de frequencia absoluta e relativa;
#selecione uma variável quantitativa contínua, elabore a tabela de frequencia absoluta e relativa;
data(iris)

#Variável qualitativa nominal Species
species <- iris$Species

# Tabela frequência absoluta
tabela_freq_absoluta_species <- table(species)
print(tabela_freq_absoluta_species)
## species
##     setosa versicolor  virginica 
##         50         50         50
# Tabela frequência relativa
tabela_freq_relativa_species <- prop.table(tabela_freq_absoluta_species)
print(tabela_freq_relativa_species)
## species
##     setosa versicolor  virginica 
##  0.3333333  0.3333333  0.3333333
# Variável quantitativa contínua Petal.Length
petal_length <- iris$Petal.Length

# Tabela frequência absoluta (intervalos)
intervalos <- seq(min(petal_length), max(petal_length), by = 1)
tabela_freq_absoluta_petal_length <- cut(petal_length, breaks = intervalos, include.lowest = TRUE)
tabela_freq_absoluta_petal_length <- table(tabela_freq_absoluta_petal_length)
print(tabela_freq_absoluta_petal_length)
## tabela_freq_absoluta_petal_length
## [1,2] (2,3] (3,4] (4,5] (5,6] 
##    50     1    15    42    33
# Tabela frequência relativa
tabela_freq_relativa_petal_length <- prop.table(tabela_freq_absoluta_petal_length)
print(tabela_freq_relativa_petal_length)
## tabela_freq_absoluta_petal_length
##       [1,2]       (2,3]       (3,4]       (4,5]       (5,6] 
## 0.354609929 0.007092199 0.106382979 0.297872340 0.234042553
#utilizando o dataset TITANIC disponivel no R, responda às questões abaixo:
#selecione uma variavel qualitativa ordinal;
#elabore um gráfico de barras

install.packages("tidyverse")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.3'
## (as 'lib' is unspecified)
library(tidyverse) 
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

library(colorspace) 

# Data titanic
tb_titanic <- read_csv("http://www.populacoes.info/df/titanic.csv") 
## Rows: 891 Columns: 12
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): Name, Sex, Ticket, Cabin, Embarked
## dbl (7): PassengerId, Survived, Pclass, Age, SibSp, Parch, Fare
## 
## ℹ 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.
# Modificar os dados  
tb_titanic %<>%       
  mutate(Sexo = as.factor(recode(Sex, 
                                 female = 'feminino', 
                                 male   = 'masculino'))) %>% 
  mutate(Classe = as.factor(recode(Pclass,   
                                   `1` = '1ª classe',  
                                   `2` = '2ª classe', 
                                   `3` = '3ª classe'))) %>% 
  mutate(Sobreviventes = as.factor(recode(Survived, 
                                          `0` = 'faleceram', 
                                          `1` = 'sobreviveram'))) %>% 
  select(-c(Sex, Pclass, Survived)) %>%  # Remover as colunas originais se não forem mais necessárias
  rename(Sexo = Sexo, Classe = Classe, Sobreviventes = Sobreviventes) 

# Grafico 
spineplot(Sobreviventes ~ Classe, 
          data = tb_titanic, 
          main = "Registros de naufrágio do Navio Titanic, 1912:\nPassageiros sobreviventes por classe de embarque", 
          col = qualitative_hcl(2, palette = "Harmonic"))