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.
library(ggplot2)
library(readr)
library(dplyr)
library(magrittr)
library(formattable)
library(knitr)
library(reshape2)
## [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
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).
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.
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.
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 |
# 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 |
# 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…
# 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")
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.