Construindo uma tabela de frequência do jeito certo
O primeiro passo é sempre organizar os dados brutos em ordem crescente, mesmo que você pense que isso é perda de tempo. Eu já vi gente pular essa etapa e acabar errando a contagem das frequências porque o olho escaneava os números fora de sequência. Depois de ordenar, você calcula o range (amplitude total) subtraindo o menor valor do maior. Esse range dividido pelo número de classes que você quer dar origem aos intervalos. A escolha do número de classes segue a regra de Sturges como ponto de partida — k = 1 + 3,322 × log(n), onde n é o tamanho da amostra — mas ela é apenas um guia, não uma lei.
O que é uma tabela de frequencia estatistica
No fundo, é só uma organização de contagem. Você define intervalos de classe, conta quantos valores caem em cada um e apresenta esses totais de forma estruturada. O que diferencia quem sabe fazer certo de quem apenas decorou o processo é a decisão sobre como tratar bordas, classes abertas e distribuição assimétrica dos dados. Os elementos essenciais são: intervalos de classe (Xi), limites inferior e superior de cada classe, amplitude do intervalo (hi), frequência absoluta (fi), frequência relativa (fr), frequência acumulada (Fa) e, em alguns casos, a frequência relativa acumulada. A amplitude total do rol é a diferença entre o maior e o menor valor observado. A amplitude do intervalo de classe é dada por h = Range / k, arredondada para cima para garantir que todos os dados caibam nos intervalos.
Um detalhe que quase todo mundo esquece: o limite superior de uma classe é exclusive e o inferior é inclusive na convenção mais usada [a, b). Isso significa que um valor exatamente igual ao limite superior de uma classe pertence à classe seguinte. Se você não deixará isso claro desde o início, vai ter valores duplicados entre classes ou valores perdidos, e vai perder tempo voltando atrás.
A parte chata que ninguém ensina direito
Vou contar um caso meu porque ilustra algo que raramente aparece em material didático. Trabalhei com um conjunto de dados de tempos de resposta de um servidor com cerca de 2.000 observações. Os dados tinham uma concentração brutal perto de zero — uns 60% dos valores estavam entre 0 e 50 milissegundos — e uma cauda longa que ia até 2.500ms. Aplicando Sturges, o resultado dava cerca de 12 classes. Com a largura de classe calculada automaticamente, as primeiras classes ficavam extremamente estreitas e as últimas, absurdamente largas, o que tornava a distribuição visualmente distorcida e estatisticamente pouco informativa. A solução que adotei foi usar classes de amplitude variável, estreitando os intervalos na região de maior densidade e alargando na cauda. Foquei nos primeiros 100ms com intervalos de 10ms, depois parti para intervalos de 50ms até 500ms, e acima disso usei intervalos de 200ms. O resultado foi uma tabela que realmente mostrava o comportamento dos dados, em vez de mascará-lo com classes genéricas.
Isso também se aplica quando você tem dados discretos com poucos valores únicos. Se sua variável é, digamos, número de filhos por família e os valores vão de 0 a 8, criar intervalos de classe é absurdo. Você simplesmente usa a frequência direta de cada valor. Tabela de frequência não exige classes para tudo.
Um exemplo prático passo a passo
Vamos supor um conjunto pequeno de 30 notas de alunos: 4,5; 6,0; 7,2; 3,8; 8,1; 5,5; 6,8; 7,0; 4,2; 9,0; 5,0; 6,5; 7,8; 3,5; 8,5; 4,8; 6,2; 7,5; 5,8; 6,9; 4,0; 7,3; 8,0; 5,2; 6,7; 7,1; 4,9; 6,3; 5,7; 8,2. O range é 9,0 - 3,5 = 5,5. Com Sturges e n=30, k = 1 + 3,322 × log(30) 1 + 3,322 × 1,477 5,9, então arredondamos para 6 classes. A amplitude do intervalo fica 5,5 / 6 0,92, que arredondamos para 1,0 para facilitar. Os intervalos ficam: [3,5; 4,5), [4,5; 5,5), [5,5; 6,5), [6,5; 7,5), [7,5; 8,5), [8,5; 9,5). Note que o limite inferior começa no menor valor observado, 3,5, e o último intervalo cobre até 9,5, garantindo que o valor 9,0 caiba dentro de [8,5; 9,5).
Contando as frequências absolutas: [3,5; 4,5): 3,5; 3,8; 4,0; 4,2 = 4 valores fi = 4
[4,5; 5,5): 4,5; 4,8; 4,9; 5,0; 5,2 = 5 valores fi = 5 [5,5; 6,5): 5,5; 5,7; 5,8; 6,0; 6,2; 6,3; 6,5; 6,7 = 8 valores fi = 8
👉 Clique no botão abaixo para saber mais sobre o assunto!
[6,5; 7,5): 6,8; 6,9; 7,0; 7,1; 7,2; 7,3; 7,5; 7,8 = 8 valores fi = 8 [7,5; 8,5): 8,0; 8,1; 8,2; 8,5 = 4 valores fi = 4
[8,5; 9,5): 9,0 = 1 valor fi = 1 Total: 4+5+8+8+4+1 = 30. Checa-se a soma para garantir que nenhum valor foi perdido ou contado duas vezes.
Pegadinhas comuns
A mais frequente é errar a convenção de intervalos. Se você usa (a, b] em vez de [a, b), os valores que coincidem com os limites vão para o intervalo errado. Escolha uma convenção e use consistentemente em toda a tabela. Outra pegadinha: esquecer que a frequência relativa deve somar 1 (ou 100%). Se não soma, você errou a contagem ou deixou algum valor de fora do último intervalo. A frequência acumulada também costuma gerar confusão. Ela representa o número de observações menores ou iguais ao limite superior de cada classe (na convenção usual). É útil para respostas do tipo "quantos alunos tiveram nota até 6,5?" — nesse caso, você olha a Fa do intervalo [5,5; 6,5), que seria 4+5+8 = 17.
Quando os dados têm muitos valores repetidos (distribuição com alta moda), classes muito estreitas podem resultar em poucas classes com frequência significativa e muitas classes vazias. Nesse cenário, ampliar a amplitude do intervalo ou reduzir o número de classes resolve. O oposto também acontece: com dados muito dispersos e poucosos, classes muito largas escondem padrões importantes.
Ferramentas
Para conjuntos pequenos, a construção manual funciona e ajuda a entender o processo. Para conjuntos maiores — digamos, mais de 200 observações — o tempo gasto fazendo manualmente não compensa. Planilhas eletrônicas resolvem com a função FREQUÊNCIA ou com a criação de bins e contagens condicionais. Em Python, pandas.cut() com o parâmetro labels e inclusive_left=True ou False controla exatamente a convenção de fronteira. Em R, o comando hist() com breaks definido por você, ou table() para dados discretos, produz a tabela rapidamente. Existem pacotes como freqtable para análise mais avançada, mas para a maioria dos casos uma planilha bem configurada ou um script simples de cinco linhas em Python é suficiente.
Quando a tabela de frequência NÃO é a melhor opção
Se seus dados são contínuos e você tem milhares de observações, uma tabela de frequência com dezenas de classes gera ruído visual e pouco insight. Nesses casos, um histograma ou kernel density estimate (KDE) comunica a mesma informação de forma mais eficiente. Se os dados são categóricos nominais (cores, marcas, cidades), uma tabela de frequência simples com valores únicos é mais adequada que intervalos de classe, pois intervalos não fazem sentido para variáveis sem ordem intrínseca. Também vale lembrar que a tabela de frequência por si só não responde perguntas sobre tendência central, dispersão ou forma da distribuição. Ela é um organizador de dados, não uma ferramenta de inferência. Se seu objetivo é testar hipóteses ou modelar relações, existem métodos mais apropriados.
Download do template
Disponibilizo um arquivo em formato CSV com a estrutura pronta para preenchimento, incluindo colunas para limite inferior, limite superior, ponto médio, frequência absoluta, frequência relativa, frequência acumulada e frequência relativa acumulada. Basta adaptar os intervalos conforme a amplitude dos seus dados. O link está abaixo. Baixar template de tabela de frequência (CSV)
Se precisar de ajuste personalizado para um caso específico — dados com muitas repetições, amplitude variável, ou algum outro detalhe — é só avisar nos comentários.