library(tidyverse)
library(readxl)
library(formattable)
library(ggplot2)
library(dplyr)
library(lubridate)
library(scales)
library(readr)
library(gt)
library(extrafont)
library(ggstats)
library(hrbrthemes)
dados=read.csv2("dados.csv",sep = ",",dec = ".")
dados=dados %>% rename(id=X)
col_names <- sapply(dados, function(col) length(unique(col)) < 8)
dados <- dados %>%
mutate(across(names(col_names)[col_names], as.factor))Tarefa - Candidados ao estágio
Carregando os pacotes e importando a base
Além de carregarmos a base, acima também renomeamos a variável para id para maior entendimento e transformamos algumas variáveis em fator para melhor entendimento, nosso banco de dados em uma breve visualização está assim:
| id | salario | sexo | cor | casado | idade | anos_escolaridade |
|---|---|---|---|---|---|---|
| 1 | 3439.524 | Feminino | Preto | Sim | 30 | 19 |
| 2 | 3769.823 | Feminino | Preto | Sim | 42 | 8 |
| 3 | 5558.708 | Feminino | Branco | Não | 25 | 10 |
| 4 | 4070.508 | Masculino | Preto | Não | 31 | 19 |
| 5 | 4129.288 | Feminino | Branco | Sim | 38 | 11 |
| 6 | 5715.065 | Feminino | Indígena | Não | 46 | 8 |
Agora vamos responder nossas perguntas de algumas formas breves, seja utilizando comando simples e objetivos para chegarmos na resposta ou através de belos gráficos para uma visualização melhor do resultado.
Questão 1: Qual é o salário médio dos individuos no banco de dados? (arredonde o valor para um casa decimal)
resultado <- dados %>% summarise(média_salário = round(mean(salario),1))
resultado %>% gt()| média_salário |
|---|
| 4090.4 |
Através de simples comando do pacote de manipulação de dados dplyr, filtramos a média salarial e arrendondamos para uma casa decimal.
Questão 2: Quantos candidatos do sexo feminino estão no banco de dados?
num=dados %>% group_by(sexo) %>% summarise(número_Candidatos=n())
num %>% gt()| sexo | número_Candidatos |
|---|---|
| Feminino | 49 |
| Masculino | 51 |
Novamente usamos manipulações de dados e o pacote gt para visualizarmos.
Questão 3: Qual é a idade média dos candidatos casados? (arredonde para zero casas decimais)
casados=dados %>% group_by(casado) %>% summarise(média_Idade=round(mean(idade)))
casados %>% gt()| casado | média_Idade |
|---|---|
| Não | 34 |
| Sim | 38 |
Valre ressaltar que candidatos que são casados são relativamente mais velhos
Questão 4: Qual é a cor mais comum entre os individuos?
cores <- c("#D3D3D3","#F5F5DC","#A0AAB2","#ECECEC","#483C32")
corcomum=dados %>% group_by(cor) %>% count() %>% arrange(desc(n))
ggplot(corcomum, aes(x = reorder(cor, n), y = n,fill=cor)) +
geom_bar(stat = "identity", width = 0.5) + # Reduz a largura das barras
geom_text(
aes(label = n),
hjust = -0.2, # Ajusta a posição do texto
vjust = 0.4,
color = "black", # Letras mais escuras
size = 7, # Tamanho maior para o texto
family = "Arial"
) +
scale_fill_manual(values = cores)+
labs(title = "Número de candidatos pela cor", y = "Quantidade de Candidatos", x = "Cor do candidato") +
coord_flip() +
theme_minimal() +
theme(
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank(),
legend.position = "none",
plot.title = element_text(hjust = 0.5, size = 20, color = "black",family = "Tahoma", face = "bold"), # Título mais escuro
axis.text = element_text(size = 14, color = "black",family = "Tahoma", face = "bold"), # Letras mais e8scuras
axis.title = element_text(size = 16, color = "black",family = "Tahoma", face = "bold"), # Letras mais escuras
axis.line = element_line(color = "black"), # Linha do eixo mais escura
panel.background = element_rect(fill = "white"), # Fundo branco
plot.margin = margin(0.2, 0.2, 0.2, 0.2, "cm") # Reduz o tamanho do gráfico
)Através do gráfico, verificamos que a maioria dos candidatos são indígenas, seguido por preto e brancos. usamos o pacote ggplot2 para uma ótima visualização de dados, além de utilizar outros pacotes para aprimorar o gráfico.
Questão 5: Qual é o nível de escolaridade (anos de escolaridade) média, mínima e máximo e mediana dos candidatos?
estatisticasne=dados %>% summarise(média=sprintf("%.2f",mean(anos_escolaridade)),mínimo=min(anos_escolaridade),máximo=max(anos_escolaridade),mediana=median(anos_escolaridade))
estatisticasne %>%gt() %>%
tab_header(title = "Estatística nível de escolaridade (em anos) dos candidatos")| Estatística nível de escolaridade (em anos) dos candidatos | |||
| média | mínimo | máximo | mediana |
|---|---|---|---|
| 13.98 | 8 | 20 | 14 |
Novamente, através da manipulação de dados conseguimos todas as estatísticas da nossa base.
Questão 6: Qual é a diferença salarial média entre homens e mulheres no banco de dados?
Sexo=c("Masculino","Feminino","Diferença Salarial")
SF=dados %>% filter(sexo=="Feminino") %>% pull(salario) %>% mean()
SM=dados %>% filter(sexo=="Masculino") %>% pull(salario) %>% mean()
Média=c(SM,SF,SF-SM)
DataSalario=data.frame(Sexo,Média)
DataSalario %>% gt() %>% tab_header(title = md("Salários por Sexo e **Diferença Salárial**"))| Salários por Sexo e Diferença Salárial | |
| Sexo | Média |
|---|---|
| Masculino | 3952.0090 |
| Feminino | 4234.4516 |
| Diferença Salarial | 282.4426 |
Agora além de usarmos a manipulação de dados do pacote dplyr, também usamos a subtração e depois criamos um data.frame com as informalões necessárias.
Questão 7: Qual é a proporção de candidatos casados entre os candidatos de diferentes cor?
ggplot(dados) +
aes(x = cor , fill = casado , by = cor) +
geom_bar(position = "fill") +
geom_text(stat = "prop", position = position_fill(.5))+
labs(title = "Proporção de candidatos casados entre os candidatos de diferentes cor", y = "Porcentagem", x = "Cor do Candidato")+
theme_minimal()+
theme(
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank(),
plot.title = element_text(hjust = 0.5, size = 20, color = "black",family = "Tahoma", face = "bold"), # Título mais escuro
axis.text = element_text(size = 14, color = "black",family = "Tahoma", face = "bold"), # Letras mais escuras
axis.title = element_text(size = 16, color = "black",family = "Tahoma", face = "bold"), # Letras mais escuras
axis.line = element_line(color = "black") # Linha do eixo mais escura
)Agora vale ressaltar que criamos um gráfico para melhor visualização dos resultados solicitados, onde cada barra representa uma cor e a porcentagem de casados dentre cada cor.
Questão 8: Qual é a relação entre anos de escolaridade e salário?
ggplot(dados, aes(x=anos_escolaridade, y=salario)) +
geom_point( color="black") +
labs(title = "Relação entre anos de escolaridade e salário", y = "Salário", x = "Anos de escolaridade")+
geom_smooth(method=lm , color="red", se=FALSE)+
theme_ipsum()+
theme(
plot.title = element_text(hjust = 0.5, size = 20, color = "black",family = "Tahoma", face = "bold"),
axis.title.y = element_text(size = 16, color = "black", hjust = 0.5,family = "Tahoma", face = "bold"), # Centraliza o texto dos eixos X e Y
axis.title.x = element_text(size = 16, color = "black", hjust = 0.5,family = "Tahoma", face = "bold"), # Centraliza o título dos eixos X e Y
)Vale destacar agora que nosso gráfico de relação entre anos de escolaridade e salário foi o de dispersão, onde melhor mostrar se há alguma tendência e também podemos traçar uma linha para melhor visualizar, nesse caso visualizamos que não há uma correlação entre as variáveis, indicando que mesmo com muitos anos de escolaridade, o salário não aumenta.
Questão 9: Qual é a média de idade dos candidatos que têm um salário acima da média? (arredonde o valor para zero casas decimais) Primeiro vamos achar o salário médio
salariom=mean(dados$salario)
dadosSAM=dados %>% filter(salario>salariom)
dadosSSAM=dados %>% filter(salario<=salariom)
Candidatos <- c("Todos os candidatos","Salário acima da média","Salário abaixo da média")
Idade_Média <- c(mean(dados$idade),mean(dadosSAM$idade),mean(dadosSSAM$idade))
Idade_Média=round(Idade_Média)
dataa=data.frame(Candidatos,Idade_Média)
dataa %>% gt() %>% tab_header(title = md("SIdade média dos Candidatos por faixa de **salário**"))| SIdade média dos Candidatos por faixa de salário | |
| Candidatos | Idade_Média |
|---|---|
| Todos os candidatos | 36 |
| Salário acima da média | 37 |
| Salário abaixo da média | 35 |
Para essa questão, criamos variáveis que separamos nossa base em salários acima e abaixo que a média, após isso, criamos nosso data.frame e nossa tabela, com todas as informações que precisamos, indicando que a média de idade é maior para salários maiores que a média
Questão 10: Qual é a idade média dos individuos de cada cor?
dados %>% group_by(cor) %>% summarise(Idade_Média=round(mean(idade),2)) %>% gt() %>% tab_header(title = md("Idade Média dos indivíduos de cada **Cor**"))| Idade Média dos indivíduos de cada Cor | |
| cor | Idade_Média |
|---|---|
| Amarelo | 32.86 |
| Branco | 37.70 |
| Indígena | 35.58 |
| Pardo | 39.71 |
| Preto | 33.39 |
Para essa questão, uma simples manipulação de dados também foi capaz de identificar as idades médias, verificando que os Pardos são os mais velhos e os Amarelos mais novos
Questão 11: Crie um boxplot para visualizar a distribuição dos salários dos individuos em relação ao estado civil (casado ou não). Interprete os resultados.
ggplot(dados, aes(x = NULL , y = salario)) +
geom_boxplot(fill = "#4e79a7", colour = "gold",
alpha = 0.8) +
scale_y_continuous(name = "Distribuição dos Salários",
breaks = seq(0, 7000, 1000),
limits=c(1000, 7000)) +
scale_x_discrete(name = "Estado Civil do Candidato") +
ggtitle("Boxplot visualização distribuição de Salário em relação\n ao estado civil (Se o candidato é casado ou não)") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5,size = 14, family = "Tahoma", face = "bold"),
text = element_text(size = 12, family = "Tahoma"),
axis.title = element_text(face="bold"),
axis.text.x=element_text(size = 11)) +
facet_grid(. ~ casado)Para esse último gráfico, vale resaltar que para uma melhor visualização, separamos em duas imagens que compartilham o eixo X, para uma análise estatística, verificamos que a mediana dos candidatos casados é levemente maior e também possui uma maior variação, indicando que os candidatos casados possuem rendas mais próximas entre si, porém mesmo os candidatos não casados tendo uma mediana maior, indica uma maior dispersão pelo tamanho do Boxplot, indicando que os salários vão de valores baixos até valores muito altos (algo que é mais comum em relação aos candidatos casados).