Compreender e aplicar técnicas de apresentação e sumarização de dados, incluindo contagens, gráficos de barras e de setores, distribuição de frequências, histogramas, gráficos de dispersão e 3D, boxplots, além de medidas de posição, dispersão e forma.
Comentário do professor
Nesta aula, o foco será a análise descritiva. Em outras palavras, vamos aprender a organizar, resumir e representar os dados de modo que a estrutura da informação se torne mais visível e interpretável.
1. Introdução
Em Estatística e Ciência de Dados, uma análise raramente começa por modelos complexos. Antes disso, é preciso entender como os dados estão organizados, quais padrões gerais apresentam, quais grupos se destacam, como os valores se distribuem e quais medidas resumem melhor o comportamento das variáveis.
Nesta aula, estudaremos um conjunto de ferramentas fundamentais para esse processo:
contagens;
gráficos de barras;
gráficos de setores;
distribuições de frequências;
histogramas;
gráficos de dispersão;
gráficos 3D;
diagramas em caixa;
medidas de posição;
medidas de dispersão;
medidas de forma.
Comentário do professor
Uma boa análise descritiva não substitui métodos inferenciais ou modelos mais elaborados, mas quase sempre melhora a qualidade de qualquer etapa posterior da análise.
2. Pacotes utilizados
library(dplyr)
Warning: package 'dplyr' was built under R version 4.4.3
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(ggplot2)
Warning: package 'ggplot2' was built under R version 4.4.3
library(plotly)
Warning: package 'plotly' was built under R version 4.4.3
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
library(scatterplot3d)library(fdth)
Attaching package: 'fdth'
The following objects are masked from 'package:stats':
sd, var
Comentário do professor
Nesta aula: - dplyr será usado para organizar e resumir dados; - ggplot2 será usado para construir gráficos bidimensionais; - plotly será usado para versões interativas de gráficos bidimensionais e tridimensionais; - scatterplot3d será apresentado como alternativa clássica de gráfico 3D estático; - fdth será usado como recurso complementar para construção de tabelas de distribuição de frequências.
3. Conjunto de dados da aula
Utilizaremos um conjunto de dados sintético em contexto compatível com o curso de Estatística e Ciência de Dados.
Cada linha representa um estudante e cada coluna representa uma variável observada para esse estudante.
4. Contagens
Contar ocorrências é uma das etapas mais simples e, ao mesmo tempo, mais importantes da análise descritiva.
4.1 Contagem absoluta com count()
Vamos contar quantos estudantes existem em cada turma.
Execute este código
dados %>%count(turma)
Comentário do professor
A função count() produz uma tabela de frequências absolutas. - count(turma) significa: conte quantas vezes cada valor de turma aparece na base.
Agora, vamos contar quantos estudantes preferem cada linguagem.
Execute este código
dados %>%count(linguagem)
4.2 Contagem relativa
Podemos transformar essas contagens em proporções.
Execute este código
dados %>%count(linguagem) %>%mutate(proporcao = n /sum(n))
Comentário do professor
A função mutate() cria uma nova variável. Aqui, proporcao = n / sum(n) divide a contagem de cada categoria pelo total de observações.
Ilustração 4.1 – Contagens e proporções
flowchart LR
A["Base de dados"] --> B["count()"]
B --> C["Frequências absolutas"]
C --> D["mutate(n / sum(n))"]
D --> E["Frequências relativas"]
5. Gráficos de barras e de setores
Esses gráficos são especialmente adequados para variáveis qualitativas ou para tabelas de frequências.
5.1 Gráfico de barras com ggplot2
Vamos construir um gráfico de barras para a variável linguagem.
Execute este código
ggplot(dados, aes(x = linguagem)) +geom_bar(fill ="gray60", color ="black") +labs(title ="Distribuição da linguagem preferida",x ="Linguagem",y ="Frequência" ) +theme_minimal()
Comentário do professor
A função geom_bar() conta automaticamente as categorias quando apenas a variável do eixo x é informada em aes(x = ...).
Principais elementos
aes(x = linguagem): define a variável categórica no eixo horizontal;
geom_bar(): constrói as barras;
fill: cor de preenchimento;
color: cor da borda;
labs(): define título e rótulos;
theme_minimal(): aplica um tema gráfico.
5.2 Gráfico de setores com base em frequências
O gráfico de setores pode ser construído a partir de uma tabela de frequências.
Execute este código
freq_linguagem <- dados %>%count(linguagem) %>%mutate(prop = n /sum(n),percentual =round(100* prop, 1))freq_linguagem
Agora, o gráfico:
Execute este código
ggplot(freq_linguagem, aes(x ="", y = n, fill = linguagem)) +geom_col(color ="white") +coord_polar(theta ="y") +labs(title ="Gráfico de setores da linguagem preferida",x =NULL,y =NULL ) +theme_void()
Comentário do professor
No ggplot2, o gráfico de setores costuma ser produzido a partir de barras empilhadas com geom_col() e transformação polar com coord_polar(theta = "y").
Atenção
Embora o gráfico de setores seja visualmente popular, em muitos casos o gráfico de barras oferece comparação mais precisa entre categorias.
6. Distribuição de frequências
A distribuição de frequências organiza os dados em categorias ou classes, permitindo resumir a estrutura de uma variável.
6.1 Distribuição de frequências para variável qualitativa
Execute este código
dados %>%count(turma) %>%mutate(frequencia_relativa = n /sum(n),percentual =100* frequencia_relativa )
A função cut() agrupa valores numéricos em intervalos. - breaks: define os pontos de corte; - labels: define os nomes das classes; - right = FALSE: indica que os intervalos são fechados à esquerda e abertos à direita.
6.3 Construção de tabelas de frequências com o pacote fdth
O pacote fdth disponibiliza funções específicas para construção de tabelas de distribuição de frequências, sendo bastante útil em análises descritivas.
Comentário do professor
A função principal do pacote é fdt(), utilizada para construir tabelas de frequências. Ela pode ser aplicada tanto a dados discretos quanto a dados contínuos.
6.3.1 Exemplo com dados não agrupados
Quando a variável assume poucos valores distintos, a tabela pode ser construída sem agrupamento em classes.
Execute este código
fdt(dados$projetos)
Comentário do professor
Neste caso, a função fdt() identifica automaticamente os valores observados da variável projetos e constrói a tabela de frequências com: - frequência absoluta; - frequência relativa; - frequência acumulada; - frequência relativa acumulada.
6.3.2 Exemplo com dados agrupados
Para variáveis quantitativas contínuas, a tabela geralmente é construída com agrupamento em classes.
Execute este código
fdt(dados$nota_r, start =4, end =10, h =1)
Comentário do professor
Na função fdt(x, start, end, h): - x: variável numérica; - start: limite inferior inicial; - end: limite superior final; - h: amplitude de classe.
Aqui, estamos pedindo ao R que construa classes de amplitude 1 no intervalo de 4 a 10.
6.3.3 Exemplo com definição automática do agrupamento
Também é possível deixar que o próprio pacote determine automaticamente uma estrutura de classes.
Execute este código
fdt(dados$horas_estudo)
Comentário do professor
Quando os argumentos de classe não são especificados, o pacote define automaticamente uma estrutura de agrupamento com base nos dados observados.
6.3.4 Armazenando a tabela em um objeto
Execute este código
tabela_fdth <-fdt(dados$nota_r, start =4, end =10, h =1)tabela_fdth
O pacote fdth é particularmente útil em Estatística Descritiva porque fornece tabelas prontas e bem organizadas, facilitando a interpretação das frequências observadas.
7. Histogramas
O histograma é um gráfico apropriado para representar a distribuição de variáveis quantitativas.
7.1 Histograma com ggplot2
Execute este código
ggplot(dados, aes(x = nota_r)) +geom_histogram(bins =5,fill ="steelblue",color ="white" ) +labs(title ="Histograma da nota em R",x ="Nota em R",y ="Frequência" ) +theme_minimal()
Comentário do professor
A função geom_histogram() constrói o histograma. - bins: número de classes; - fill: cor de preenchimento; - color: cor da borda.
Comentário do professor
O histograma é uma ferramenta importante para avaliar: - concentração dos valores; - assimetria; - dispersão; - presença de possíveis valores extremos.
Ilustração 7.1 – Ideia do histograma
flowchart LR
A["Variável quantitativa"] --> B["Agrupamento em classes"]
B --> C["Contagem por classe"]
C --> D["Histograma"]
8. Gráficos de dispersão e 3D
Gráficos de dispersão são usados para investigar a relação entre variáveis quantitativas.
8.1 Gráfico de dispersão bidimensional com ggplot2
Execute este código
ggplot(dados, aes(x = horas_estudo, y = nota_r)) +geom_point(color ="darkred", size =3, alpha =0.8) +labs(title ="Horas de estudo versus nota em R",x ="Horas de estudo por semana",y ="Nota em R" ) +theme_minimal()
Comentário do professor
O gráfico de dispersão permite observar: - direção da associação; - intensidade aparente da relação; - possíveis agrupamentos; - valores atípicos.
8.2 Adicionando linha de tendência com ggplot2
Execute este código
ggplot(dados, aes(x = horas_estudo, y = nota_r)) +geom_point(color ="darkred", size =3, alpha =0.8) +geom_smooth(method ="lm", se =FALSE, color ="navy", linewidth =1) +labs(title ="Horas de estudo versus nota em R",x ="Horas de estudo por semana",y ="Nota em R" ) +theme_minimal()
`geom_smooth()` using formula = 'y ~ x'
Comentário do professor
A camada geom_smooth(method = "lm") adiciona uma reta de tendência baseada em regressão linear simples. - method = "lm": ajusta um modelo linear; - se = FALSE: remove a faixa de confiança; - color: define a cor da reta; - linewidth: controla a espessura da linha.
8.3 Gráfico de dispersão bidimensional interativo com plotly
Execute este código
grafico_2d <-ggplot( dados,aes(x = horas_estudo,y = nota_r,text =paste("Nome:", nome,"<br>Projetos:", projetos,"<br>Frequência:", frequencia ) )) +geom_point(color ="darkred", size =3, alpha =0.8) +labs(title ="Horas de estudo versus nota em R",x ="Horas de estudo por semana",y ="Nota em R" ) +theme_minimal()ggplotly(grafico_2d, tooltip ="text")
Comentário do professor
O pacote plotly permite transformar gráficos em visualizações interativas. A função ggplotly() converte um gráfico criado com ggplot2 em um gráfico interativo. - tooltip = "text" indica que o texto personalizado definido em aes(text = ...) será exibido ao passar o cursor sobre os pontos.
Comentário do professor
A interatividade é especialmente útil quando queremos explorar observações individuais, identificar pontos extremos e examinar múltiplas variáveis ao mesmo tempo.
8.4 Gráfico de dispersão tridimensional com plotly
Agora vamos representar simultaneamente:
horas_estudo
projetos
nota_r
Execute este código
plot_ly(data = dados,x =~horas_estudo,y =~projetos,z =~nota_r,type ="scatter3d",mode ="markers",color =~turma,colors =c("A"="#1f77b4", "B"="#d62728", "C"="#2ca02c"),marker =list(size =4),text =~paste("Nome:", nome,"<br>Turma:", turma,"<br>Horas de estudo:", horas_estudo,"<br>Projetos:", projetos,"<br>Nota em R:", nota_r ),hoverinfo ="text") %>%layout(title ="Gráfico de dispersão 3D",scene =list(xaxis =list(title ="Horas de estudo"),yaxis =list(title ="Projetos"),zaxis =list(title ="Nota em R") ) )
Comentário do professor
A função plot_ly() cria gráficos interativos de forma nativa. Neste exemplo: - x, y e z definem os três eixos; - type = "scatter3d" define o tipo de gráfico; - mode = "markers" indica que a representação será por pontos; - color = ~turma permite distinguir grupos por cor; - text define as informações exibidas na interação; - layout() controla título e nomes dos eixos.
8.5 Alternativa clássica com scatterplot3d
Embora o plotly seja mais moderno e visualmente mais rico, também existe a alternativa clássica com scatterplot3d.
Execute este código
scatterplot3d(x = dados$horas_estudo,y = dados$projetos,z = dados$nota_r,pch =19,color ="darkgreen",main ="Gráfico de dispersão 3D (versão estática)",xlab ="Horas de estudo",ylab ="Projetos",zlab ="Nota em R")
Comentário do professor
A função scatterplot3d() produz uma visualização tridimensional estática e simples. Ela pode ser útil em contextos introdutórios, mas, em termos de exploração visual, o plotly oferece uma experiência mais atual, mais flexível e mais informativa.
Atenção
Gráficos 3D podem ser úteis para introduzir relações multivariadas, mas exigem cautela na interpretação, pois a perspectiva visual pode dificultar a leitura precisa. Em muitos casos, um bom gráfico bidimensional, eventualmente com cor, tamanho ou facetas, pode comunicar melhor a informação.
9. Diagrama em caixa (Boxplot)
O boxplot resume a distribuição de uma variável com base em quartis, mediana e possíveis valores extremos.
9.1 Boxplot simples
Execute este código
ggplot(dados, aes(x ="", y = nota_r)) +geom_boxplot(fill ="gray75", color ="black") +labs(title ="Boxplot da nota em R",x ="",y ="Nota em R" ) +theme_minimal()
9.2 Boxplot por grupo
Execute este código
ggplot(dados, aes(x = turma, y = nota_r, fill = turma)) +geom_boxplot() +labs(title ="Boxplot da nota em R por turma",x ="Turma",y ="Nota em R" ) +theme_minimal()
Comentário do professor
No boxplot: - a linha central representa a mediana; - a caixa vai do primeiro ao terceiro quartil; - os “bigodes” se estendem para valores não extremos; - pontos fora dessa faixa aparecem como possíveis outliers.
Ilustração 9.1 – Componentes do boxplot
flowchart TD
A["Mínimo não extremo"] --> B["Q1"]
B --> C["Mediana"]
C --> D["Q3"]
D --> E["Máximo não extremo"]
E --> F["Possíveis outliers"]
10. Medidas de posição
As medidas de posição resumem a localização central ou relativa dos dados.
10.1 Média
Execute este código
mean(dados$nota_r)
[1] 7.586667
Comentário do professor
A função mean() calcula a média aritmética, isto é,
\[
\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i
\]
10.2 Mediana
Execute este código
median(dados$nota_r)
[1] 7.5
Comentário do professor
A mediana é o valor que divide os dados ordenados em duas metades.
e mede a dispersão da parte central da distribuição.
11.5 Coeficiente de variação
Execute este código
100*sd(dados$nota_r) /mean(dados$nota_r)
[1] 20.81639
Comentário do professor
O coeficiente de variação é dado por:
\[
CV = 100 \times \frac{s}{\bar{x}}
\]
e expressa a dispersão em termos percentuais em relação à média.
12. Medidas de forma
As medidas de forma ajudam a descrever assimetria e curtose da distribuição.
12.1 Função para assimetria
assimetria <-function(x) { n <-length(x) m <-mean(x) s <-sd(x)sum(((x - m) / s)^3) / n}
Aplicando a função
Execute este código
assimetria(dados$nota_r)
[1] -0.2157528
Comentário do professor
A assimetria mede o grau de inclinação da distribuição. - valor próximo de 0: distribuição aproximadamente simétrica; - valor positivo: cauda à direita; - valor negativo: cauda à esquerda.
12.2 Função para curtose
curtose <-function(x) { n <-length(x) m <-mean(x) s <-sd(x)sum(((x - m) / s)^4) / n}
Aplicando a função
Execute este código
curtose(dados$nota_r)
[1] 1.491381
Comentário do professor
A curtose está relacionada ao grau de concentração dos dados em torno do centro e ao peso das caudas da distribuição.
Ilustração 12.1 – Forma da distribuição
flowchart LR
A["Distribuição simétrica"] --> B["Assimetria ~ 0"]
C["Cauda à direita"] --> D["Assimetria > 0"]
E["Cauda à esquerda"] --> F["Assimetria < 0"]
13. Tabela resumo completa
Vamos construir uma tabela de sumarização para nota_r.
Em muitas análises descritivas, é conveniente reunir várias medidas em uma única tabela-resumo, o que facilita a interpretação conjunta da posição, dispersão e forma da distribuição.
14. Integração entre sumarização e visualização
Uma análise descritiva completa costuma articular tabelas e gráficos.
Execute este código
dados %>%group_by(turma) %>%summarise(media_nota =mean(nota_r),desvio_padrao =sd(nota_r),.groups ="drop" )
Agora, o gráfico correspondente:
Execute este código
dados %>%group_by(turma) %>%summarise(media_nota =mean(nota_r),.groups ="drop" ) %>%ggplot(aes(x = turma, y = media_nota, fill = turma)) +geom_col() +labs(title ="Média da nota em R por turma",x ="Turma",y ="Média da nota" ) +theme_minimal()
Comentário do professor
Esse fluxo mostra uma prática importante: resumir numericamente os dados e, em seguida, representá-los graficamente para reforçar a interpretação.
15. Erros comuns e boas práticas
Erros comuns
usar gráfico de setores quando a comparação entre categorias exige maior precisão;
interpretar histograma como se fosse gráfico de barras;
construir boxplots sem compreender quartis e outliers;
usar média em distribuições muito assimétricas sem considerar a mediana;
interpretar gráficos 3D sem cautela;
confundir variabilidade com valor central.
Boas práticas
combine medidas numéricas e representações gráficas;
escolha o gráfico de acordo com o tipo de variável;
ao resumir dados quantitativos, examine posição, dispersão e forma conjuntamente;
use títulos e rótulos informativos nos gráficos;
interprete medidas e gráficos de forma integrada, não isolada.
16. Exercícios propostos
Exercício 1
Conte quantos estudantes pertencem a cada turma e calcule também a frequência relativa de cada uma delas.
Exercício 2
Construa um gráfico de barras para a variável turma, com título e rótulos adequados.
Exercício 3
Construa uma tabela de distribuição de frequências para a variável linguagem, contendo:
frequência absoluta;
frequência relativa;
percentual.
Exercício 4
Crie classes para a variável nota_r usando os intervalos:
[4,6)
[6,8)
[8,10)
e apresente a distribuição de frequências correspondente.
Exercício 5
Utilize o pacote fdth para construir:
uma tabela de frequências não agrupada para a variável projetos;
uma tabela de frequências agrupada para a variável nota_r.
Exercício 6
Construa um histograma da variável horas_estudo, com número adequado de classes, título e rótulos dos eixos.
Exercício 7
Construa um gráfico de dispersão entre horas_estudo e nota_r, adicionando também uma reta de regressão linear.
Exercício 8
Construa uma versão interativa, com plotly, do gráfico de dispersão entre horas_estudo e nota_r.
Exercício 9
Construa um gráfico de dispersão 3D entre horas_estudo, projetos e nota_r utilizando plotly.
Exercício 10
Construa também a versão estática tridimensional usando scatterplot3d e compare brevemente com a versão interativa.
Exercício 11
Construa um boxplot da variável nota_r por turma.
Exercício 12
Calcule, para a variável nota_r, as seguintes medidas:
média;
mediana;
quartis;
variância;
desvio-padrão;
amplitude interquartílica;
coeficiente de variação.
Exercício 13
Aplique as funções de assimetria e curtose construídas nesta aula à variável nota_r e interprete brevemente os resultados.
Comentário do professor
Os exercícios desta aula foram planejados para integrar apresentação gráfica e sumarização numérica, isto é, as duas dimensões centrais da análise descritiva.
17. Para a próxima aula
Na próxima aula, continuaremos avançando no estudo de análise descritiva e representação dos dados, aprofundando estratégias de interpretação estatística em contextos mais próximos de aplicações reais.
Tarefa do aluno
Refaça todos os exemplos da aula e procure comparar, para a variável nota_r, aquilo que é revelado pelas medidas numéricas com aquilo que é mostrado pelos gráficos e tabelas de frequências, incluindo a diferença entre visualizações estáticas e interativas.
Código fonte
---title: "Aula 7 – Apresentação e sumarização de dados"author: "Prof. Marcelo Ribeiro"format: html: toc: true toc-location: left number-sections: false theme: cosmo css: estilo.css page-layout: full code-fold: false code-tools: true df-print: paged embed-resources: true mermaid: theme: neutrallang: pt-BReditor: visual---## Objetivo da AulaCompreender e aplicar técnicas de apresentação e sumarização de dados, incluindo contagens, gráficos de barras e de setores, distribuição de frequências, histogramas, gráficos de dispersão e 3D, boxplots, além de medidas de posição, dispersão e forma.::: {.callout-note title="Comentário do professor"}Nesta aula, o foco será a **análise descritiva**. Em outras palavras, vamos aprender a organizar, resumir e representar os dados de modo que a estrutura da informação se torne mais visível e interpretável.:::## 1. IntroduçãoEm Estatística e Ciência de Dados, uma análise raramente começa por modelos complexos. Antes disso, é preciso entender como os dados estão organizados, quais padrões gerais apresentam, quais grupos se destacam, como os valores se distribuem e quais medidas resumem melhor o comportamento das variáveis.Nesta aula, estudaremos um conjunto de ferramentas fundamentais para esse processo:- contagens;- gráficos de barras;- gráficos de setores;- distribuições de frequências;- histogramas;- gráficos de dispersão;- gráficos 3D;- diagramas em caixa;- medidas de posição;- medidas de dispersão;- medidas de forma.::: {.callout-note title="Comentário do professor"}Uma boa análise descritiva não substitui métodos inferenciais ou modelos mais elaborados, mas quase sempre melhora a qualidade de qualquer etapa posterior da análise.:::## 2. Pacotes utilizados```{r}library(dplyr)library(ggplot2)library(plotly)library(scatterplot3d)library(fdth)```::: {.callout-note title="Comentário do professor"}Nesta aula:- `dplyr` será usado para organizar e resumir dados;- `ggplot2` será usado para construir gráficos bidimensionais;- `plotly` será usado para versões interativas de gráficos bidimensionais e tridimensionais;- `scatterplot3d` será apresentado como alternativa clássica de gráfico 3D estático;- `fdth` será usado como recurso complementar para construção de tabelas de distribuição de frequências.:::## 3. Conjunto de dados da aulaUtilizaremos um conjunto de dados sintético em contexto compatível com o curso de Estatística e Ciência de Dados.```{r}dados <-tibble(id =1:15,nome =c("Ana", "Bruno", "Carla", "Daniel", "Eva","Felipe", "Giovana", "Heitor", "Isabela", "Joao","Karen", "Lucas", "Marina", "Nicolas", "Olivia"),turma =c("A", "A", "B", "B", "A","B", "A", "B", "A", "B","A", "B", "C", "C", "C"),linguagem =c("R", "Python", "R", "Python", "R","Python", "Python", "R", "R", "Python","R", "Python", "R", "Python", "R"),horas_estudo =c(12, 8, 15, 7, 11, 9, 6, 14, 13, 10, 16, 5, 14, 9, 12),projetos =c(3, 1, 4, 1, 2, 2, 1, 5, 4, 3, 5, 1, 4, 2, 3),nota_r =c(8.7, 6.1, 9.2, 5.8, 7.5, 6.9, 5.4, 9.5, 8.8, 7.2, 9.7, 4.9, 9.0, 6.7, 8.4),frequencia =c(92, 85, 97, 78, 88, 83, 75, 99, 94, 86, 98, 72, 96, 84, 91))dados```::: {.callout-note title="Comentário do professor"}Cada linha representa um estudante e cada coluna representa uma variável observada para esse estudante.:::## 4. ContagensContar ocorrências é uma das etapas mais simples e, ao mesmo tempo, mais importantes da análise descritiva.## 4.1 Contagem absoluta com `count()`Vamos contar quantos estudantes existem em cada turma.::: {.callout-tip title="Execute este código"}```{r}dados %>%count(turma)```:::::: {.callout-note title="Comentário do professor"}A função `count()` produz uma tabela de frequências absolutas.- `count(turma)` significa: conte quantas vezes cada valor de `turma` aparece na base.:::Agora, vamos contar quantos estudantes preferem cada linguagem.::: {.callout-tip title="Execute este código"}```{r}dados %>%count(linguagem)```:::## 4.2 Contagem relativaPodemos transformar essas contagens em proporções.::: {.callout-tip title="Execute este código"}```{r}dados %>%count(linguagem) %>%mutate(proporcao = n /sum(n))```:::::: {.callout-note title="Comentário do professor"}A função `mutate()` cria uma nova variável. Aqui, `proporcao = n / sum(n)` divide a contagem de cada categoria pelo total de observações.:::#### Ilustração 4.1 – Contagens e proporções```{mermaid}flowchart LRA["Base de dados"] --> B["count()"]B --> C["Frequências absolutas"]C --> D["mutate(n / sum(n))"]D --> E["Frequências relativas"]```## 5. Gráficos de barras e de setoresEsses gráficos são especialmente adequados para variáveis qualitativas ou para tabelas de frequências.## 5.1 Gráfico de barras com `ggplot2`Vamos construir um gráfico de barras para a variável `linguagem`.::: {.callout-tip title="Execute este código"}```{r}ggplot(dados, aes(x = linguagem)) +geom_bar(fill ="gray60", color ="black") +labs(title ="Distribuição da linguagem preferida",x ="Linguagem",y ="Frequência" ) +theme_minimal()```:::::: {.callout-note title="Comentário do professor"}A função `geom_bar()` conta automaticamente as categorias quando apenas a variável do eixo x é informada em `aes(x = ...)`.:::### Principais elementos- `aes(x = linguagem)`: define a variável categórica no eixo horizontal;- `geom_bar()`: constrói as barras;- `fill`: cor de preenchimento;- `color`: cor da borda;- `labs()`: define título e rótulos;- `theme_minimal()`: aplica um tema gráfico.## 5.2 Gráfico de setores com base em frequênciasO gráfico de setores pode ser construído a partir de uma tabela de frequências.::: {.callout-tip title="Execute este código"}```{r}freq_linguagem <- dados %>%count(linguagem) %>%mutate(prop = n /sum(n),percentual =round(100* prop, 1))freq_linguagem```:::Agora, o gráfico:::: {.callout-tip title="Execute este código"}```{r}ggplot(freq_linguagem, aes(x ="", y = n, fill = linguagem)) +geom_col(color ="white") +coord_polar(theta ="y") +labs(title ="Gráfico de setores da linguagem preferida",x =NULL,y =NULL ) +theme_void()```:::::: {.callout-note title="Comentário do professor"}No `ggplot2`, o gráfico de setores costuma ser produzido a partir de barras empilhadas com `geom_col()` e transformação polar com `coord_polar(theta = "y")`.:::::: {.callout-warning title="Atenção"}Embora o gráfico de setores seja visualmente popular, em muitos casos o gráfico de barras oferece comparação mais precisa entre categorias.:::## 6. Distribuição de frequênciasA distribuição de frequências organiza os dados em categorias ou classes, permitindo resumir a estrutura de uma variável.## 6.1 Distribuição de frequências para variável qualitativa::: {.callout-tip title="Execute este código"}```{r}dados %>%count(turma) %>%mutate(frequencia_relativa = n /sum(n),percentual =100* frequencia_relativa )```:::## 6.2 Distribuição de frequências por classesVamos construir classes para `nota_r`.::: {.callout-tip title="Execute este código"}```{r}dados %>%mutate(classe_nota =cut( nota_r,breaks =c(4, 6, 8, 10),right =FALSE,labels =c("[4,6)", "[6,8)", "[8,10)") ) ) %>%count(classe_nota) %>%mutate(frequencia_relativa = n /sum(n),percentual =100* frequencia_relativa )```:::::: {.callout-note title="Comentário do professor"}A função `cut()` agrupa valores numéricos em intervalos.- `breaks`: define os pontos de corte;- `labels`: define os nomes das classes;- `right = FALSE`: indica que os intervalos são fechados à esquerda e abertos à direita.:::## 6.3 Construção de tabelas de frequências com o pacote `fdth`O pacote **`fdth`** disponibiliza funções específicas para construção de tabelas de distribuição de frequências, sendo bastante útil em análises descritivas.::: {.callout-note title="Comentário do professor"}A função principal do pacote é `fdt()`, utilizada para construir tabelas de frequências. Ela pode ser aplicada tanto a dados discretos quanto a dados contínuos.:::### 6.3.1 Exemplo com dados não agrupadosQuando a variável assume poucos valores distintos, a tabela pode ser construída sem agrupamento em classes.::: {.callout-tip title="Execute este código"}```{r}fdt(dados$projetos)```:::::: {.callout-note title="Comentário do professor"}Neste caso, a função `fdt()` identifica automaticamente os valores observados da variável `projetos` e constrói a tabela de frequências com:- frequência absoluta;- frequência relativa;- frequência acumulada;- frequência relativa acumulada.:::### 6.3.2 Exemplo com dados agrupadosPara variáveis quantitativas contínuas, a tabela geralmente é construída com agrupamento em classes.::: {.callout-tip title="Execute este código"}```{r}fdt(dados$nota_r, start =4, end =10, h =1)```:::::: {.callout-note title="Comentário do professor"}Na função `fdt(x, start, end, h)`:- `x`: variável numérica;- `start`: limite inferior inicial;- `end`: limite superior final;- `h`: amplitude de classe.Aqui, estamos pedindo ao R que construa classes de amplitude 1 no intervalo de 4 a 10.:::### 6.3.3 Exemplo com definição automática do agrupamentoTambém é possível deixar que o próprio pacote determine automaticamente uma estrutura de classes.::: {.callout-tip title="Execute este código"}```{r}fdt(dados$horas_estudo)```:::::: {.callout-note title="Comentário do professor"}Quando os argumentos de classe não são especificados, o pacote define automaticamente uma estrutura de agrupamento com base nos dados observados.:::### 6.3.4 Armazenando a tabela em um objeto::: {.callout-tip title="Execute este código"}```{r}tabela_fdth <-fdt(dados$nota_r, start =4, end =10, h =1)tabela_fdth```:::::: {.callout-important title="Comentário do professor"}O pacote `fdth` é particularmente útil em Estatística Descritiva porque fornece tabelas prontas e bem organizadas, facilitando a interpretação das frequências observadas.:::## 7. HistogramasO histograma é um gráfico apropriado para representar a distribuição de variáveis quantitativas.## 7.1 Histograma com `ggplot2`::: {.callout-tip title="Execute este código"}```{r}ggplot(dados, aes(x = nota_r)) +geom_histogram(bins =5,fill ="steelblue",color ="white" ) +labs(title ="Histograma da nota em R",x ="Nota em R",y ="Frequência" ) +theme_minimal()```:::::: {.callout-note title="Comentário do professor"}A função `geom_histogram()` constrói o histograma.- `bins`: número de classes;- `fill`: cor de preenchimento;- `color`: cor da borda.:::::: {.callout-note title="Comentário do professor"}O histograma é uma ferramenta importante para avaliar:- concentração dos valores;- assimetria;- dispersão;- presença de possíveis valores extremos.:::#### Ilustração 7.1 – Ideia do histograma```{mermaid}flowchart LRA["Variável quantitativa"] --> B["Agrupamento em classes"]B --> C["Contagem por classe"]C --> D["Histograma"]```## 8. Gráficos de dispersão e 3DGráficos de dispersão são usados para investigar a relação entre variáveis quantitativas.## 8.1 Gráfico de dispersão bidimensional com `ggplot2`::: {.callout-tip title="Execute este código"}```{r}ggplot(dados, aes(x = horas_estudo, y = nota_r)) +geom_point(color ="darkred", size =3, alpha =0.8) +labs(title ="Horas de estudo versus nota em R",x ="Horas de estudo por semana",y ="Nota em R" ) +theme_minimal()```:::::: {.callout-note title="Comentário do professor"}O gráfico de dispersão permite observar:- direção da associação;- intensidade aparente da relação;- possíveis agrupamentos;- valores atípicos.:::## 8.2 Adicionando linha de tendência com `ggplot2`::: {.callout-tip title="Execute este código"}```{r}ggplot(dados, aes(x = horas_estudo, y = nota_r)) +geom_point(color ="darkred", size =3, alpha =0.8) +geom_smooth(method ="lm", se =FALSE, color ="navy", linewidth =1) +labs(title ="Horas de estudo versus nota em R",x ="Horas de estudo por semana",y ="Nota em R" ) +theme_minimal()```:::::: {.callout-note title="Comentário do professor"}A camada `geom_smooth(method = "lm")` adiciona uma reta de tendência baseada em regressão linear simples.- `method = "lm"`: ajusta um modelo linear;- `se = FALSE`: remove a faixa de confiança;- `color`: define a cor da reta;- `linewidth`: controla a espessura da linha.:::## 8.3 Gráfico de dispersão bidimensional interativo com `plotly`::: {.callout-tip title="Execute este código"}```{r}grafico_2d <-ggplot( dados,aes(x = horas_estudo,y = nota_r,text =paste("Nome:", nome,"<br>Projetos:", projetos,"<br>Frequência:", frequencia ) )) +geom_point(color ="darkred", size =3, alpha =0.8) +labs(title ="Horas de estudo versus nota em R",x ="Horas de estudo por semana",y ="Nota em R" ) +theme_minimal()ggplotly(grafico_2d, tooltip ="text")```:::::: {.callout-note title="Comentário do professor"}O pacote `plotly` permite transformar gráficos em visualizações interativas.A função `ggplotly()` converte um gráfico criado com `ggplot2` em um gráfico interativo.- `tooltip = "text"` indica que o texto personalizado definido em `aes(text = ...)` será exibido ao passar o cursor sobre os pontos.:::::: {.callout-important title="Comentário do professor"}A interatividade é especialmente útil quando queremos explorar observações individuais, identificar pontos extremos e examinar múltiplas variáveis ao mesmo tempo.:::## 8.4 Gráfico de dispersão tridimensional com `plotly`Agora vamos representar simultaneamente:- `horas_estudo`- `projetos`- `nota_r`::: {.callout-tip title="Execute este código"}```{r}plot_ly(data = dados,x =~horas_estudo,y =~projetos,z =~nota_r,type ="scatter3d",mode ="markers",color =~turma,colors =c("A"="#1f77b4", "B"="#d62728", "C"="#2ca02c"),marker =list(size =4),text =~paste("Nome:", nome,"<br>Turma:", turma,"<br>Horas de estudo:", horas_estudo,"<br>Projetos:", projetos,"<br>Nota em R:", nota_r ),hoverinfo ="text") %>%layout(title ="Gráfico de dispersão 3D",scene =list(xaxis =list(title ="Horas de estudo"),yaxis =list(title ="Projetos"),zaxis =list(title ="Nota em R") ) )```:::::: {.callout-note title="Comentário do professor"}A função `plot_ly()` cria gráficos interativos de forma nativa.Neste exemplo:- `x`, `y` e `z` definem os três eixos;- `type = "scatter3d"` define o tipo de gráfico;- `mode = "markers"` indica que a representação será por pontos;- `color = ~turma` permite distinguir grupos por cor;- `text` define as informações exibidas na interação;- `layout()` controla título e nomes dos eixos.:::## 8.5 Alternativa clássica com `scatterplot3d`Embora o `plotly` seja mais moderno e visualmente mais rico, também existe a alternativa clássica com `scatterplot3d`.::: {.callout-tip title="Execute este código"}```{r}scatterplot3d(x = dados$horas_estudo,y = dados$projetos,z = dados$nota_r,pch =19,color ="darkgreen",main ="Gráfico de dispersão 3D (versão estática)",xlab ="Horas de estudo",ylab ="Projetos",zlab ="Nota em R")```:::::: {.callout-note title="Comentário do professor"}A função `scatterplot3d()` produz uma visualização tridimensional estática e simples.Ela pode ser útil em contextos introdutórios, mas, em termos de exploração visual, o `plotly` oferece uma experiência mais atual, mais flexível e mais informativa.:::::: {.callout-warning title="Atenção"}Gráficos 3D podem ser úteis para introduzir relações multivariadas, mas exigem cautela na interpretação, pois a perspectiva visual pode dificultar a leitura precisa. Em muitos casos, um bom gráfico bidimensional, eventualmente com cor, tamanho ou facetas, pode comunicar melhor a informação.:::## 9. Diagrama em caixa (Boxplot)O boxplot resume a distribuição de uma variável com base em quartis, mediana e possíveis valores extremos.## 9.1 Boxplot simples::: {.callout-tip title="Execute este código"}```{r}ggplot(dados, aes(x ="", y = nota_r)) +geom_boxplot(fill ="gray75", color ="black") +labs(title ="Boxplot da nota em R",x ="",y ="Nota em R" ) +theme_minimal()```:::## 9.2 Boxplot por grupo::: {.callout-tip title="Execute este código"}```{r}ggplot(dados, aes(x = turma, y = nota_r, fill = turma)) +geom_boxplot() +labs(title ="Boxplot da nota em R por turma",x ="Turma",y ="Nota em R" ) +theme_minimal()```:::::: {.callout-note title="Comentário do professor"}No boxplot:- a linha central representa a mediana;- a caixa vai do primeiro ao terceiro quartil;- os “bigodes” se estendem para valores não extremos;- pontos fora dessa faixa aparecem como possíveis outliers.:::#### Ilustração 9.1 – Componentes do boxplot```{mermaid}flowchart TDA["Mínimo não extremo"] --> B["Q1"]B --> C["Mediana"]C --> D["Q3"]D --> E["Máximo não extremo"]E --> F["Possíveis outliers"]```## 10. Medidas de posiçãoAs medidas de posição resumem a localização central ou relativa dos dados.## 10.1 Média::: {.callout-tip title="Execute este código"}```{r}mean(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}A função `mean()` calcula a média aritmética, isto é,$$\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i$$:::## 10.2 Mediana::: {.callout-tip title="Execute este código"}```{r}median(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}A mediana é o valor que divide os dados ordenados em duas metades.:::## 10.3 Quartis e percentis::: {.callout-tip title="Execute este código"}```{r}quantile(dados$nota_r, probs =c(0.25, 0.50, 0.75))```:::::: {.callout-note title="Comentário do professor"}A função `quantile()` calcula quantis da distribuição.- `probs = 0.25`: primeiro quartil;- `probs = 0.50`: mediana;- `probs = 0.75`: terceiro quartil.:::## 10.4 Medidas de posição em uma única tabela::: {.callout-tip title="Execute este código"}```{r}tibble(media =mean(dados$nota_r),mediana =median(dados$nota_r),minimo =min(dados$nota_r),q1 =quantile(dados$nota_r, 0.25),q3 =quantile(dados$nota_r, 0.75),maximo =max(dados$nota_r))```:::## 11. Medidas de dispersãoEssas medidas quantificam o grau de variabilidade dos dados.## 11.1 Amplitude::: {.callout-tip title="Execute este código"}```{r}max(dados$nota_r) -min(dados$nota_r)```:::## 11.2 Variância::: {.callout-tip title="Execute este código"}```{r}var(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}A variância amostral é dada por:$$s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2$$:::## 11.3 Desvio-padrão::: {.callout-tip title="Execute este código"}```{r}sd(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}O desvio-padrão é a raiz quadrada da variância:$$s = \sqrt{s^2}$$:::## 11.4 Amplitude interquartílica::: {.callout-tip title="Execute este código"}```{r}IQR(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}A amplitude interquartílica é definida por:$$AIQ = Q_3 - Q_1$$e mede a dispersão da parte central da distribuição.:::## 11.5 Coeficiente de variação::: {.callout-tip title="Execute este código"}```{r}100*sd(dados$nota_r) /mean(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}O coeficiente de variação é dado por:$$CV = 100 \times \frac{s}{\bar{x}}$$e expressa a dispersão em termos percentuais em relação à média.:::## 12. Medidas de formaAs medidas de forma ajudam a descrever assimetria e curtose da distribuição.## 12.1 Função para assimetria```{r}assimetria <-function(x) { n <-length(x) m <-mean(x) s <-sd(x)sum(((x - m) / s)^3) / n}```### Aplicando a função::: {.callout-tip title="Execute este código"}```{r}assimetria(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}A assimetria mede o grau de inclinação da distribuição.- valor próximo de 0: distribuição aproximadamente simétrica;- valor positivo: cauda à direita;- valor negativo: cauda à esquerda.:::## 12.2 Função para curtose```{r}curtose <-function(x) { n <-length(x) m <-mean(x) s <-sd(x)sum(((x - m) / s)^4) / n}```### Aplicando a função::: {.callout-tip title="Execute este código"}```{r}curtose(dados$nota_r)```:::::: {.callout-note title="Comentário do professor"}A curtose está relacionada ao grau de concentração dos dados em torno do centro e ao peso das caudas da distribuição.:::#### Ilustração 12.1 – Forma da distribuição```{mermaid}flowchart LRA["Distribuição simétrica"] --> B["Assimetria ~ 0"]C["Cauda à direita"] --> D["Assimetria > 0"]E["Cauda à esquerda"] --> F["Assimetria < 0"]```## 13. Tabela resumo completaVamos construir uma tabela de sumarização para `nota_r`.::: {.callout-tip title="Execute este código"}```{r}tibble(media =mean(dados$nota_r),mediana =median(dados$nota_r),minimo =min(dados$nota_r),maximo =max(dados$nota_r),variancia =var(dados$nota_r),desvio_padrao =sd(dados$nota_r),amplitude_interquartilica =IQR(dados$nota_r),assimetria =assimetria(dados$nota_r),curtose =curtose(dados$nota_r))```:::::: {.callout-note title="Comentário do professor"}Em muitas análises descritivas, é conveniente reunir várias medidas em uma única tabela-resumo, o que facilita a interpretação conjunta da posição, dispersão e forma da distribuição.:::## 14. Integração entre sumarização e visualizaçãoUma análise descritiva completa costuma articular tabelas e gráficos.::: {.callout-tip title="Execute este código"}```{r}dados %>%group_by(turma) %>%summarise(media_nota =mean(nota_r),desvio_padrao =sd(nota_r),.groups ="drop" )```:::Agora, o gráfico correspondente:::: {.callout-tip title="Execute este código"}```{r}dados %>%group_by(turma) %>%summarise(media_nota =mean(nota_r),.groups ="drop" ) %>%ggplot(aes(x = turma, y = media_nota, fill = turma)) +geom_col() +labs(title ="Média da nota em R por turma",x ="Turma",y ="Média da nota" ) +theme_minimal()```:::::: {.callout-note title="Comentário do professor"}Esse fluxo mostra uma prática importante: resumir numericamente os dados e, em seguida, representá-los graficamente para reforçar a interpretação.:::## 15. Erros comuns e boas práticas::: {.callout-warning title="Erros comuns"}- usar gráfico de setores quando a comparação entre categorias exige maior precisão;- interpretar histograma como se fosse gráfico de barras;- construir boxplots sem compreender quartis e outliers;- usar média em distribuições muito assimétricas sem considerar a mediana;- interpretar gráficos 3D sem cautela;- confundir variabilidade com valor central.:::::: {.callout-important title="Boas práticas"}- combine medidas numéricas e representações gráficas;- escolha o gráfico de acordo com o tipo de variável;- ao resumir dados quantitativos, examine posição, dispersão e forma conjuntamente;- use títulos e rótulos informativos nos gráficos;- interprete medidas e gráficos de forma integrada, não isolada.:::## 16. Exercícios propostos### Exercício 1Conte quantos estudantes pertencem a cada turma e calcule também a frequência relativa de cada uma delas.### Exercício 2Construa um gráfico de barras para a variável `turma`, com título e rótulos adequados.### Exercício 3Construa uma tabela de distribuição de frequências para a variável `linguagem`, contendo:- frequência absoluta;- frequência relativa;- percentual.### Exercício 4Crie classes para a variável `nota_r` usando os intervalos:- `[4,6)`- `[6,8)`- `[8,10)`e apresente a distribuição de frequências correspondente.### Exercício 5Utilize o pacote `fdth` para construir:- uma tabela de frequências não agrupada para a variável `projetos`;- uma tabela de frequências agrupada para a variável `nota_r`.### Exercício 6Construa um histograma da variável `horas_estudo`, com número adequado de classes, título e rótulos dos eixos.### Exercício 7Construa um gráfico de dispersão entre `horas_estudo` e `nota_r`, adicionando também uma reta de regressão linear.### Exercício 8Construa uma versão interativa, com `plotly`, do gráfico de dispersão entre `horas_estudo` e `nota_r`.### Exercício 9Construa um gráfico de dispersão 3D entre `horas_estudo`, `projetos` e `nota_r` utilizando `plotly`.### Exercício 10Construa também a versão estática tridimensional usando `scatterplot3d` e compare brevemente com a versão interativa.### Exercício 11Construa um boxplot da variável `nota_r` por turma.### Exercício 12Calcule, para a variável `nota_r`, as seguintes medidas:- média;- mediana;- quartis;- variância;- desvio-padrão;- amplitude interquartílica;- coeficiente de variação.### Exercício 13Aplique as funções de assimetria e curtose construídas nesta aula à variável `nota_r` e interprete brevemente os resultados.::: {.callout-note title="Comentário do professor"}Os exercícios desta aula foram planejados para integrar apresentação gráfica e sumarização numérica, isto é, as duas dimensões centrais da análise descritiva.:::## 17. Para a próxima aulaNa próxima aula, continuaremos avançando no estudo de análise descritiva e representação dos dados, aprofundando estratégias de interpretação estatística em contextos mais próximos de aplicações reais.::: {.callout-tip title="Tarefa do aluno"}Refaça todos os exemplos da aula e procure comparar, para a variável `nota_r`, aquilo que é revelado pelas medidas numéricas com aquilo que é mostrado pelos gráficos e tabelas de frequências, incluindo a diferença entre visualizações estáticas e interativas.:::