Universidade Estadual da Paraíba

Deyze Lopes Matias da Silva

Visualização de Dados

Relatório sobre faculdade

Introdução

Relatório feito como atividade avaliativa da matéria de Visualização de Dados, onde é uma técnica fundamental para a comunicação de informações de maneira clara, eficaz e acessível. Ela envolve o uso de representações gráficas, como gráficos, diagramas, mapas e outros tipos de imagens, para representar dados complexos de uma forma que facilite a interpretação e a análise. Será utilizado um arquivo sobre faculdades e informações específicas de cada aluno, que através da criação de gráficos de barras, mostramos a frequência das categorias, o uso de histogramas para mostrar a distribuição e ilustrar a mesma.

Pacotes usados

library(ggplot2)
library(readr)
library(dplyr)
library(magrittr)
library(formattable)
library(knitr)
library(reshape2)

Classificando as variáveis em Qualitativas (Nominal e Ordinal) e quantitativas (Discreta e Contínuas)

##  [1] "faculdade"    "sexo"         "idade"        "estado_civil" "filhos"      
##  [6] "altura"       "peso"         "transporte"   "exercicio"    "salario"     
## [11] "localidade"

faculdade: qualitativa nominal
sexo: qualitativa nominal
idade: quantitativa discreta
estado_civil: qualitativa nominal
filhos: quantitativa discreta
altura: quantitativa contínua
peso: quantitativa contínua
transporte: qualitativa nominal
exercício: quantitativa contínua
salario: quantitativa contínua
localidade: qualitativa nominal

Variáveis Qualitativas :

ggplot(dados, aes(x = faculdade, fill = faculdade)) +
  geom_bar() +
  scale_fill_manual(
    values = c(C = "#2300EE",
    B = "#FFF700",
    A = "#FF0D0D")
  ) +
  labs(title = "Distribuição de Faculdade", x = "Faculdade", y = "Frequência")

faculdade: 3 categorias (A, B, C). Categoria mais frequente: C(41 vezes).

ggplot(dados, aes(x = sexo)) +
  geom_bar(fill = "skyblue") +
  labs(title = "Distribuição de Sexo", x = "Sexo", y = "Frequência")

sexo: 2 categorias (F, M). Predominância de M(57 registros).

ggplot(dados) +
  aes(x = estado_civil, fill = estado_civil) +
  geom_bar() +
  scale_fill_manual(
    values = c(casado = "#2300EE",
    divorciado = "#FFF700",
    outro = "pink",
    solteiro = "#FF0D0D")
  ) +
  theme_minimal()

estado_civil: 4 categorias (casado, divorciado, outro e solteiro). Mais frequente: casado(31 registros).

ggplot(dados) +
  aes(x = transporte, colour = sexo) +
  geom_bar(fill = "#112446") +
  scale_color_hue(direction = 1) +
  theme_minimal()

transporte: 4 categorias (moto, bicicleta, ônibus e outro). Mais frequente: bicicleta(31 registros).

ggplot(dados) +
  aes(x = localidade, fill = localidade) +
  geom_bar() +
  scale_fill_manual(
    values = c(`zona rural` = "#06FF4D",
    `zona urbana` = "#D1BC06")
  ) +
  theme_linedraw()

localidade: 2 categorias (zona rural, zona urbana). Mais frequente: zona rural(58 registros).

Variáveis Quantitativas Discretas :

ggplot(dados, aes(x = idade)) +
  geom_histogram(binwidth = 1, fill = "pink", color = "black") +
  labs(title = "Distribuição do Idade", x = "Idade", y = "Frequência")

idade:
Média: 27,1 anos, com desvio padrão de 5,29.
Faixa: 17 a 35 anos.

ggplot(dados, aes(x = filhos)) +
  geom_histogram(binwidth = 1, fill = "orange", color = "black") +
  labs(title = "Distribuição do Número de Filhos", x = "Filhos", y = "Frequência")

filhos:
Média: 1,5 filhos, com desvio padrão de 1,07.
Faixa: 0 a 3 filhos.

ggplot(dados, aes(x = exercicio)) +
  geom_histogram(binwidth = 1, fill = "brown", color = "black") +
  labs(title = "Distribuição de Idade", x = "Idade", y = "Frequência")

exercicio:
Média: 4,75 vezes por semana, com desvio padrão de 3,11.
Faixa: 0 a 10.

Variáveis Quantitativas Contínuas :

ggplot(dados, aes(y = altura)) +
  geom_boxplot(fill = "lightgreen", color = "darkgreen") +
  labs(title = "Boxplot da Altura", y = "Altura (em metros)")

altura:
Mediana: aproximadamente 1,68 m
Faixa (aproximadamente): 1,45 a 1,96 m.

ggplot(dados, aes(x = peso)) +
  geom_histogram(binwidth = 1, fill = "lightblue", color = "black") +
  labs(title = "Distribuição do Peso", x = "Peso", y = "Frequência")

peso:
Média: 68,65 kg, com desvio padrão de 12,47.
Faixa: 45 a 90 kg.

ggplot(dados, aes(x = peso)) +
  geom_histogram(binwidth = 1, fill = "red", color = "black") +
  labs(title = "Distribuição do Salário", x = "Salário", y = "Frequência")

salario(Faixa):
Média: 2,85 (provavelmente uma faixa salarial, deve ser verificada).
Faixa: 1 a 5.

Em formato de tabelas coloridas :

Agora veremos as mesmas informações em formato de tabelas.

# 2 Agrupe as variáveis qualitativas por: faculdade, sexo, estado civil, transporte, localidade.

grupoFaculdade <- dados %>%
  group_by(faculdade) %>%
  summarise(alunos = n())

grupoSexo <- dados %>%
  group_by(sexo) %>%
  summarise(alunos = n())

grupoEstadoCivil <- dados %>%
  group_by(estado_civil) %>%
  summarise(alunos = n())

grupoTransporte <- dados %>%
  group_by(transporte) %>%
  summarise(alunos = n())

grupoLocalidade <- dados %>%
  group_by(localidade) %>%
  summarise(alunos = n())

cores <- function(x) {
  scales::col_numeric(palette = c("purple", "yellow", "green"), domain = NULL)(x)
}

grupoFaculdade %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
faculdade alunos
A 30
B 29
C 41
grupoSexo %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
sexo alunos
F 43
M 57
grupoEstadoCivil %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
estado_civil alunos
casado 31
divorciado 19
outro 29
solteiro 21
grupoTransporte %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
transporte alunos
bibicleta 31
moto 24
onibus 18
outro 27
grupoLocalidade %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
localidade alunos
zona rural 58
zona urbana 42

Analise entre as faculdades :

# 3 Agrupe as variáveis por: faculdade e sexo, faculdade e estado civil, faculdade e transporte, faculdade e localidade.

grupoFaculdadeSexo <- dados %>%
  group_by(faculdade, sexo) %>%
  summarise(alunos = n())
## `summarise()` has grouped output by 'faculdade'. You can override using the
## `.groups` argument.
grupoFaculdadeEstadoCivil <- dados %>%
  group_by(faculdade, estado_civil) %>%
  summarise(alunos = n())
## `summarise()` has grouped output by 'faculdade'. You can override using the
## `.groups` argument.
grupoFaculdadeTransporte <- dados %>%
  group_by(faculdade, transporte) %>%
  summarise(alunos = n())
## `summarise()` has grouped output by 'faculdade'. You can override using the
## `.groups` argument.
grupoFaculdadeLocalidade <- dados %>%
  group_by(faculdade, localidade) %>%
  summarise(alunos = n())
## `summarise()` has grouped output by 'faculdade'. You can override using the
## `.groups` argument.
grupoFaculdadeSexo %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
faculdade sexo alunos
A F 12
A M 18
B F 14
B M 15
C F 17
C M 24
grupoFaculdadeEstadoCivil %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
faculdade estado_civil alunos
A casado 11
A divorciado 4
A outro 7
A solteiro 8
B casado 10
B divorciado 7
B outro 7
B solteiro 5
C casado 10
C divorciado 8
C outro 15
C solteiro 8
grupoFaculdadeTransporte %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
faculdade transporte alunos
A bibicleta 10
A moto 7
A onibus 6
A outro 7
B bibicleta 8
B moto 7
B onibus 8
B outro 6
C bibicleta 13
C moto 10
C onibus 4
C outro 14
grupoFaculdadeLocalidade %>%
  formattable(list(
    alunos = formatter("span",
                       style = x ~ style(background = cores(x)))
  ))
faculdade localidade alunos
A zona rural 17
A zona urbana 13
B zona rural 20
B zona urbana 9
C zona rural 21
C zona urbana 20

Medidas de tendência central, separatrizes, varialidade, assimetria e curtose :

# 4 Calcule as medidas de tendência central, separatrizes, variabilidade, assimetria e curtose das variáveis (altura, peso, salário, idade).

# Calcula o índice do 10º percentil, arredondando para o número inteiro mais próximo superior
percentil10 <- ceiling((10 * (100 + 1)) / 100)

# Calcula o índice do 90º percentil, arredondando para o número inteiro mais próximo superior
percentil90 <- ceiling((90 * (100 + 1)) / 100)

# Calcula o índice do 1º quartil, arredondando para o número inteiro mais próximo superior
quartil1 <- ceiling((100 + 1) / 4)

# Calcula o índice do 2º quartil, arredondando para o número inteiro mais próximo superior
quartil2 <- ceiling((2 * (100 + 1)) / 4)

# Calcula o índice do 3º quartil, arredondando para o número inteiro mais próximo superior
quartil3 <- ceiling((3 * (100 + 1)) / 4)

# Calcula a soma dos valores da variável 'altura' até o valor correspondente ao 3º quartil
somaQuartil3Altura <- sum(dados$altura[1:quartil3])

# Calcula a soma dos valores da variável 'altura' até o valor correspondente ao 1º quartil
somaQuartil1Altura <- sum(dados$altura[1:quartil1])

# Calcula a soma dos valores da variável 'altura' até o valor correspondente ao percentil 90
somaPercentil90Altura <- sum(dados$altura[1:percentil90]) 

# Calcula a soma dos valores da variável 'altura' até o valor correspondente ao percentil 10
somaPercentil10Altura <- sum(dados$altura[1:percentil10])

TabelaAltura <- dados %>%
  arrange(altura) %>%
  summarise(
    quartil1 = altura[quartil1],               # 1º quartil
    quartil2 = altura[quartil2],               # 2º quartil (mediana)
    quartil3 = altura[quartil3],               # 3º quartil
    minima = min(altura),                     # Valor mínimo de altura
    media = mean(altura),                     # Média das alturas
    mediana = median(altura),                 # Mediana das alturas
    maxima = max(altura),                     # Valor máximo de altura
    variancia = sum((altura - media)^2) / (n() - 1),  # Variância das alturas
    desvio_Padrao = sqrt(variancia),           # Desvio padrão das alturas
    coeficiente_variacao = (desvio_Padrao / media) * 100,  # Coeficiente de variação (%)
    coeficiente_Pearson = (3 * (media - mediana)) / desvio_Padrao,  # Coeficiente de Pearson
    curtose = (somaQuartil3Altura - somaQuartil1Altura) / (2 * (somaPercentil90Altura - somaPercentil10Altura))  # Curtose
  )

kable(TabelaAltura)
quartil1 quartil2 quartil3 minima media mediana maxima variancia desvio_Padrao coeficiente_variacao coeficiente_Pearson curtose
1.604497 1.679584 1.737718 1.420777 1.67443 1.679523 1.952505 0.0122849 0.1108372 6.619398 -0.1378525 0.3110221

Note que a tabela expressa, sobre a altura dos alunos…

# Soma dos valores de peso até o 1º quartil
somaQuartil1Peso <- sum(dados$peso[1:quartil1])

# Soma dos valores de peso até o 3º quartil
somaQuartil3Peso <- sum(dados$peso[1:quartil3])

# Soma dos valores de peso até o percentil 10
somaPercentil10Peso <- sum(dados$peso[1:percentil10]) 

# Soma dos valores de peso até o percentil 90
somaPercentil90Peso <- sum(dados$peso[1:percentil90])

TabelaPeso <- dados %>%
  arrange(peso) %>%
  summarise(
    quartil1 = peso[quartil1],               # 1º quartil
    quartil2 = peso[quartil2],               # 2º quartil (mediana)
    quartil3 = peso[quartil3],               # 3º quartil
    minimo = min(peso),                     # Valor mínimo de peso
    medio = mean(peso),                     # Média dos pesos
    mediano = median(peso),                 # Mediana dos pesos
    maximo = max(peso),                     # Valor máximo de peso
    variancia = sum((peso - medio)^2) / (n() - 1),  # Variância dos pesos
    desvio_Padrao = sqrt(variancia),         # Desvio padrão dos pesos
    coeficiente_variacao = (desvio_Padrao / medio) * 100,  # Coeficiente de variação (%)
    coeficiente_Pearson = (3 * (medio - mediano)) / desvio_Padrao,  # Coeficiente de Pearson
    curtose = (somaQuartil3Peso - somaQuartil1Peso) / (2 * (somaPercentil90Peso - somaPercentil10Peso))  # Curtose
  )

kable(TabelaPeso)
quartil1 quartil2 quartil3 minimo medio mediano maximo variancia desvio_Padrao coeficiente_variacao coeficiente_Pearson curtose
59 70 79 45 68.65 70 90 155.5429 12.47169 18.16706 -0.3247356 0.3129729

Note que a tabela expressa, sobre o peso dos alunos…

# Soma dos salários até o 1º quartil
somaQuartil1Salario = sum(dados$salario[1:quartil1])

# Soma dos salários até o 3º quartil
somaQuartil3Salario = sum(dados$salario[1:quartil3])

# Soma dos salários até o percentil 10
somaPercentil10Salario = sum(dados$salario[1:percentil10])

# Soma dos salários até o percentil 90
somaPercentil90Salario = sum(dados$salario[1:percentil90])

TabelaSalario <- dados %>%
  arrange(salario) %>%
  summarise(
    quartil1 = salario[quartil1],                # 1º quartil
    quartil2 = salario[quartil2],                # 2º quartil (mediana)
    quartil3 = salario[quartil3],                # 3º quartil
    minimo = min(salario),                      # Valor mínimo de salário
    medio = mean(salario),                      # Média dos salários
    mediano = median(salario),                  # Mediana dos salários
    maximo = max(salario),                      # Valor máximo de salário
    variancia = sum((salario - medio)^2) / (n() - 1),  # Variância dos salários
    desvio_Padrao = sqrt(variancia),            # Desvio padrão dos salários
    coeficiente_variacao = (desvio_Padrao / medio) * 100,  # Coeficiente de variação (%)
    coeficiente_Pearson = (3 * (medio - mediano)) / desvio_Padrao,  # Coeficiente de Pearson
    curtose = (somaQuartil3Salario - somaQuartil1Salario) / (2 * (somaPercentil90Salario - somaPercentil10Salario))  # Curtose
  )

kable(TabelaSalario)
quartil1 quartil2 quartil3 minimo medio mediano maximo variancia desvio_Padrao coeficiente_variacao coeficiente_Pearson curtose
2 3 4 1 2.85 3 5 2.108586 1.452097 50.95077 -0.3098966 0.2788018

Note que a tabela expressa, sobre o salário dos alunos…

IMC dos alunos :

# 5 Calcule o índice de massa corporal agrupando por faculdade e sexo e compare os resultados utilizando as medidas descritivas (média, mediana, moda, variância, desvio-padrão, assimetria, curtose e coeficiente de variação).

dados$IMC <- dados$peso / (dados$altura^2)  # Cálculo do IMC (Índice de Massa Corporal)

DadosIMC <- dados %>%
  group_by(faculdade, sexo) %>%
  arrange(IMC) %>%
  summarise(
    alunos = n(),
    quartil3 = sum(dados$IMC[1:quartil3]),           # Soma do IMC até o 3º quartil
    quartil1 = sum(dados$IMC[1:quartil1]),           # Soma do IMC até o 1º quartil
    percentil90 = sum(dados$IMC[1:percentil90]),     # Soma do IMC até o percentil 90
    percentil10 = sum(dados$IMC[1:percentil10]),     # Soma do IMC até o percentil 10
    medio = mean(IMC),                                 # Média do IMC
    mediano = median(IMC),                             # Mediana do IMC
    variancia = sum((IMC - medio)^2) / (n() - 1),      # Variância do IMC
    desvio_Padrao = sqrt(variancia),                   # Desvio padrão do IMC
    coefi_Pearson = (3 * (medio - mediano)) / desvio_Padrao,  # Coeficiente de Pearson
    curtose = (quartil3 - quartil1) / (2 * (percentil90 - percentil10)),  # Curtose do IMC
    coeficiente_variacao = (desvio_Padrao / medio) * 100   # Coeficiente de variação
  )
## `summarise()` has grouped output by 'faculdade'. You can override using the
## `.groups` argument.
kable(DadosIMC)
faculdade sexo alunos quartil3 quartil1 percentil90 percentil10 medio mediano variancia desvio_Padrao coefi_Pearson curtose coeficiente_variacao
A F 12 1883.399 642.2081 2248.377 288.0401 24.38020 25.24719 48.45851 6.961215 -0.3736363 0.3165759 28.55274
A M 18 1883.399 642.2081 2248.377 288.0401 27.85013 26.45770 37.62796 6.134163 0.6809894 0.3165759 22.02562
B F 14 1883.399 642.2081 2248.377 288.0401 23.70272 24.11160 18.35946 4.284794 -0.2862749 0.3165759 18.07722
B M 15 1883.399 642.2081 2248.377 288.0401 22.42348 22.41693 15.68455 3.960372 0.0049594 0.3165759 17.66172
C F 17 1883.399 642.2081 2248.377 288.0401 25.12762 25.92167 27.27396 5.222448 -0.4561399 0.3165759 20.78370
C M 24 1883.399 642.2081 2248.377 288.0401 24.35117 25.34769 18.45615 4.296062 -0.6958872 0.3165759 17.64212
abc <- unique(dados$faculdade)

par(mfrow = c(1, length(abc)))
for (faculdade in abc) {
  FS <- dados[dados$faculdade == faculdade, ]
  hist(FS$salario,
       main = paste(faculdade),
       xlab = "Salarios",
       ylab = "Alunos",
       col = "purple",
       border = "black",
       xlim = c(1, 5),
       ylim = c(0, 20),
       labels = TRUE,
       breaks = 5)
}

par(mfrow = c(1, 1))
ggplot(dados, aes(x = idade, y = peso, color = sexo)) +
  geom_point() +
  facet_wrap(~ faculdade) +
  labs(x = "Idade", y = "Peso") +
  scale_color_manual(values = c("#ff93c9", "black")) +
  theme_minimal()

ggplot(dados, aes(x = altura, y = peso, color = sexo)) +
  geom_point() +
  facet_wrap(~ faculdade) +
  labs(x = "Altura", y = "Peso") +
  scale_color_manual(values = c("purple", "black")) +
  theme_minimal()

ggplot(dados, aes(x = exercicio, y = peso, color = sexo)) +
  geom_point() +
  facet_wrap(~ faculdade) +
  labs(x = "Exercício", y = "Peso") +
  scale_color_manual(values = c("#ff93c9", "black")) +
  theme_minimal()

ggplot(dados, aes(x = sexo, y = idade, fill = sexo)) +
  geom_boxplot() +
  facet_wrap(~ faculdade) +
  labs(x = "Sexo", y = "Idade") +
  scale_fill_manual(values = c("green", "black")) +
  theme_minimal()

ggplot(dados, aes(x = sexo, y = peso, fill = sexo)) +
  geom_boxplot() +
  facet_wrap(~ faculdade) +
  labs(x = "Sexo", y = "Peso") +
  scale_fill_manual(values = c("purple", "green")) +
  theme_minimal()

ggplot(dados, aes(x = sexo, y = salario, fill = sexo)) +
  geom_boxplot() +
  facet_wrap(~ faculdade) +
  labs(x = "Sexo", y = "Salario") +
  scale_fill_manual(values = c("yellow", "blue")) +
  theme_minimal()

ggplot(dados, aes(x = sexo, y = exercicio, fill = sexo)) +
  geom_boxplot() +
  facet_wrap(~ faculdade) +
  labs(x = "Sexo", y = "Exercicio") +
  scale_fill_manual(values = c("purple", "black")) +
  theme_minimal()

matz <- dados %>%
  select(peso, altura, idade, exercicio) %>%
  cor()
correlacao = melt(matz)
f <- dados %>% filter(sexo == "F")
m <- dados %>% filter(sexo == "M")
a <- dados %>% filter(faculdade == "A")
b <- dados %>% filter(faculdade == "B")
c <- dados %>% filter(faculdade == "C")
grafico <- function(dados, title) {
  matz <- dados %>%
    select(peso, altura, idade, exercicio) %>%
    cor()
  correlacao <- melt(matz)
  ggplot(correlacao, aes(Var1, Var2, fill = value)) +
    geom_tile() + 
    scale_fill_gradient2(low = "red", high = "blue", mid = "yellow", midpoint = 0) +
    labs(title = title,
         fill = "Correlação") +
    geom_text(aes(label = round(value, 2)), color = "black", size = 4)
}

grafico(f, "Sexo Feminino")

grafico(m, "Sexo Masculino")

grafico(a, "Faculdade A")

grafico(b, "Faculdade b")

grafico(c, "Faculdade A")

Conclusão :

O perfil demográfico indica que Os participantes têm idades entre 17 e 35 anos, com uma média de 27 anos. Isso sugere que o público desenvolvido está predominantemente na faixa jovem-adulta.O estado civil mais frequente é “casado”, diminuindo que boa parte do grupo já formou família, tendo uma média de filhos de 1,5 filhos, com valores variando de 0 a 3, ou seja, a maioria possui famílias pequenas. Nos aspectos físicos e de saúde, o peso médio é de 68,65 kg, com valores variando entre 45 e 90 kg, gozando de uma frequência de exercício numa média de 4,75 vezes por semana, diminuindo que a maioria realiza atividade física regularmente. Há uma grande variação, com pessoas que não se exercitam (0 vezes) e outras que praticam até 10 vezes por semana. Tratando de trabalho e transporte a faixa salarial média está em 2,85 (em uma escala de 1 a 5). Propõe que a maioria pertence a uma classe de renda proporcional. A bicicleta é o meio de transporte mais comum, seguido pela moto. Isso estar relacionado à localidade predominante do grupo. A maioria (58%) vive na zona rural, o que pode influenciar tanto a preferência de transporte como o estilo de vida (exercícios, acesso ao trabalho, etc.). Em síntese, há uma distribuição equilibrada entre gêneros, mas os homens são levemente predominantes. Os dados sobre estado civil e filhos confirmam que estão em uma fase ativa de construção familiar e profissional, boa parte da população pratica exercícios regularmente. A renda predominante é interessante, e o transporte usado reflete um perfil mais econômico e prático, especialmente em zonas rurais.