Módulo statistics do Python: guia prático

O módulo statistics do Python fornece funções integradas para médias, dispersão, regressão linear simples e distribuição normal. Use-o para cálculos rápidos, aprendizado e protótipos; migre para NumPy/SciPy/Pandas para conjuntos de dados maiores ou análises avançadas.
Links rápidos
O que é o módulo statistics do Python?
Estatísticas descritivas
Regressão e correlação
A distribuição normal
E quanto a NumPy, SciPy e Pandas?
Importar o módulo statistics é simples, porque ele faz parte da biblioteca padrão do Python. Ele foi desenhado para cálculos estatísticos casuais e educacionais. Para iniciar em um script ou sessão interativa, basta importar:
import statistics
Em sessões interativas (IPython, Jupyter) você pode importar apenas as funções que usa com:
from statistics import mean, median
Importe funções no namespace principal apenas em sessões interativas. Em scripts, prefira importações qualificadas para evitar colisões com nomes built-in.
O que é o módulo statistics do Python?
O módulo statistics é uma coleção de funções para cálculos estatísticos simples. Ele é parte da biblioteca padrão do Python. Seu foco são necessidades de aprendizado, protótipos e cálculo rápido. Não substitui bibliotecas otimizadas para grandes volumes de dados.
Definição rápida: média, mediana e percentis são medidas de tendência central; desvio padrão e variância medem dispersão.
Importante: o módulo funciona com iteráveis convenientes (listas, tuplas). Em dados muito grandes ou arrays numéricos otimizados, prefira NumPy/Pandas.
Estatísticas descritivas
Estatísticas descritivas resumem características principais de um conjunto de dados. Use-as para entender tendência central, dispersão e forma.
- Tendência central: mean, median, mode.
- Dispersão: variance, stdev, pstdev, pvariance.
- Medidas alternativas: geometric_mean, harmonic_mean.
- Percentis e quartis: quantiles.
Exemplos práticos. Crie uma pequena amostra e calcule medidas básicas:
a = [4, 4, 3, 6]
print(mean(a)) # média aritmética
print(median(a)) # mediana
print(mode(a)) # moda
Saída esperada (valores descritos):
- mean(a) → 4.25 (soma 17 / 4 elementos)
- median(a) → 4
- mode(a) → 4
Observação sobre mean vs fmean:
- statistics.mean aceita números e devolve o tipo apropriado.
- statistics.fmean converte internamente para float e é geralmente mais rápida em listas numéricas.
Médias alternativas:
- geometric_mean(a): útil ao comparar taxas de crescimento.
- harmonic_mean(a): útil em médias de taxas (por exemplo, velocidades médias com distâncias iguais).
Exemplo de média ponderada com fmean:
weights = [1, 2, 3, 4]
# Para média ponderada simples com fmean, combine a e weights apropriadamente
# statistics não fornece fmean(a, weights) na versão antiga; verifique sua versão.
Observação: verifique a versão do Python para confirmação da API. Em versões modernas, há suporte a fmean e geometric_mean.
Cálculo de dispersão:
from statistics import stdev, pstdev, variance, pvariance
print(stdev(a)) # desvio padrão amostral
print(pstdev(a)) # desvio padrão populacional
print(variance(a))
print(pvariance(a))
- stdev usa n-1 no denominador (amostral).
- pstdev usa n no denominador (populacional).
Percentis e quantis:
from statistics import quantiles
# quantiles retorna quartis por padrão
print(quantiles(a))
Min e max padrão:
print(min(a))
print(max(a))
Dicas práticas:
- Use median quando dados têm outliers fortes.
- Use geometric_mean para taxas de retorno compostas.
- Use harmonic_mean para médias de taxas (por exemplo, velocidade média se a distância é constante).
Regressão e correlação
O módulo statistics fornece ferramentas para regressão linear simples (duas variáveis) e correlação.
Regressão linear simples (menor quadrado ordinário):
from statistics import linear_regression
x = [1, 2, 3, 4, 5]
y = [5, 7, 9, 11, 13]
slope, intercept = linear_regression(x, y)
print(slope, intercept) # slope=2, intercept=3 esperados
A equação da reta fica y = slope * x + intercept. Esta função não gera gráficos e só trata duas variáveis (x e y).
Correlação:
from statistics import correlation
print(correlation(x, y)) # 1.0 para correlação perfeita positiva
A função correlation retorna o coeficiente de correlação de Pearson r. Valores: -1 (perfeita negativa), 0 (sem correlação linear), +1 (perfeita positiva).
Quando usar e quando não:
- Use statistics.linear_regression para respostas rápidas e quando só houver duas variáveis.
- Use statsmodels ou scikit-learn para regressões com múltiplos preditores, análise de resíduos, p-valores e diagnósticos.
- Use Seaborn/Matplotlib para visualização (scatterplots, linhas de ajuste).
A distribuição normal
A distribuição normal (curva em sino) descreve muitas variáveis naturais aproximadas por uma distribuição contínua.
Exemplo: estimativa de altura média de homens adultos em um conjunto hipotético.
import math
from statistics import NormalDist
# exemplo baseado em dados hipotéticos (esquema demonstrativo)
sd = math.sqrt(2690) * 0.3
print(sd) # ≈ 15.56
men_height = NormalDist(mu=175.1, sigma=sd)
# porcentagem entre 160 e 180 cm
p = men_height.cdf(180) - men_height.cdf(160)
print(p) # aproximadamente 0.46 → 46%
Interpretação rápida: a função cdf retorna a probabilidade acumulada até um valor. A diferença entre cdf(180) e cdf(160) dá a fração entre esses pontos.
Limitações e cuidado:
- As suposições de normalidade devem ser verificadas antes de interpretar probabilidades literais.
- Para dados fortemente assimétricos, resultados podem ser enganosos.
E quanto a NumPy, SciPy, Pandas e statsmodels?
Resumo curto: NumPy/Pandas/SciPy/ statsmodels escalam melhor e fornecem recursos avançados. O módulo statistics é ótimo para aprendizado, protótipos e cálculos rápidos.
Quando escolher cada alternativa:
- statistics: cálculos simples, sessões interativas, ensino.
- NumPy: arrays grandes, operações vetoriais de alto desempenho.
- Pandas: análise tabular, leitura de arquivos, agrupamentos, séries temporais.
- SciPy: funções estatísticas e numéricas avançadas (distribuições, integração).
- statsmodels: regressão, modelos estatísticos, inferência, diagnóstico.
Migração típica:
- Comece com statistics para entender o problema.
- Ao exigir desempenho e vetorização, converta listas para numpy.array e use numpy.mean, np.std etc.
- Para análise tabular e operações por coluna, use pandas.DataFrame e métodos .mean(), .std(), .quantile().
Boas práticas e metodologia rápida
Mini-metodologia para análise exploratória com statistics (pequenos conjuntos):
- Limpeza básica: remova None/NaN, converta tipos.
- Calcule medidas centrais: mean, median, mode.
- Calcule dispersão: stdev, variance.
- Verifique quantis: quantiles.
- Analise correlações simples: correlation.
- Faça uma regressão linear simples se necessário: linear_regression.
- Interprete resultados com visualizações (Matplotlib/Seaborn) se possível.
Checklist rápido por função:
- mean/fmean: média aritmética
- geometric_mean: média geométrica
- harmonic_mean: média harmônica
- median: mediana
- mode: moda
- stdev/pstdev: desvio padrão (amostral/populacional)
- variance/pvariance: variância
- quantiles: quartis/percentis
- correlation: coeficiente de correlação
- linear_regression: slope + intercept
- NormalDist: cdf, pdf, inv_cdf (funções de distribuição)
Cheatsheet: funções úteis e assinaturas
Função | O que faz | Notas rápidas |
---|---|---|
mean(data) | Média aritmética | Retorna int ou float conforme entrada |
fmean(data) | Média como float | Mais rápido em números |
geometric_mean(data) | Média geométrica | Útil para taxas de crescimento |
harmonic_mean(data) | Média harmônica | Útil para velocidades médias |
median(data) | Mediana | Divide o conjunto ao meio |
mode(data) | Moda | Levanta erro se houver ambiguidade em versões antigas |
stdev(data) | Desvio padrão amostral | Usa n-1 |
pstdev(data) | Desvio padrão populacional | Usa n |
variance(data) | Variância amostral | |
pvariance(data) | Variância populacional | |
quantiles(data, n=4) | Retorna n-1 cortes | Padrão retorna quartis |
correlation(x, y) | Coef. de correlação de Pearson | Duas séries de igual tamanho |
linear_regression(x, y) | slope, intercept | Regressão linear simples |
NormalDist(mu, sigma) | Objeto de distribuição normal | Métodos: cdf, pdf, inv_cdf |
Comparação prática: statistics vs NumPy vs Pandas
Critério | statistics | NumPy | Pandas |
---|---|---|---|
Facilidade de uso | Alta para tarefas simples | Média | Alta para dados tabulares |
Performance em arrays grandes | Baixa | Alta (vetorizado) | Alta (internamente vetorizado) |
Recursos estatísticos avançados | Limitado | Médio (com SciPy) | Alto (integra com statsmodels) |
Visualização | Nenhuma | Nenhuma direta | Integra bem com Matplotlib/Seaborn |
Quando o módulo statistics falha (contraexemplos)
- Processamento de milhões de registros: performance fraca.
- Operações vetoriais complexas (broadcasting): não projetado para isso.
- Regressões multivariadas, modelos de efeitos mistos, análises de sobrevivência: use statsmodels ou scikit-learn.
- Séries temporais com alinhamento por índice: use Pandas.
Diretrizes de migração e compatibilidade
- Detecte gargalos: se as operações são repetidas em laços, converta para NumPy.
- Substitua listas por numpy.array para computação vetorizada.
- Use pandas.DataFrame quando precisar de operações por coluna, joins ou leitura de CSV/Excel.
- Para funções estatísticas avançadas, combine NumPy/Pandas com SciPy e statsmodels.
Exemplo de migração simples:
# Antes (statistics)
a = [1, 2, 3, 4, 5]
from statistics import mean
m = mean(a)
# Depois (NumPy)
import numpy as np
arr = np.array(a)
m_np = arr.mean()
Checklist por função de papel
Data Scientist:
- Verifique suposições de distribuição.
- Use statsmodels para inferência e testes.
Analista/Engenheiro de Dados:
- Transforme dados para NumPy/Pandas antes de escalar.
- Automatize pipelines com verificações de nulos e tipos.
Professor ou instrutor:
- Use statistics para demonstrar conceitos em sala.
- Mostre a diferença entre média, mediana e moda com exemplos simples.
Iniciante em Python:
- Comece com statistics para aprender definições estatísticas.
- Acompanhe com visualizações simples para compreensão.
Exemplo prático passo a passo
- Carregue dados pequenos em uma lista.
- Limpe valores inválidos (None, strings ).
- Calcule mean, median e stdev.
- Verifique correlação entre duas listas relacionadas.
- Se necessário, transforme em numpy.array para operações vetoriais.
Matriz de riscos & mitigação (qualitativa)
- Risco: resultados errados por dados faltantes. Mitigação: validação e remoção/inspeção de NaNs.
- Risco: confundir amostra com população. Mitigação: escolha stdev vs pstdev corretamente.
- Risco: uso em escala. Mitigação: migrar para NumPy/Pandas.
Exemplo de decisão (Mermaid)
flowchart TD
A[Preciso de estatísticas rápidas?] -->|Sim, pequeno dataset| B[Use statistics]
A -->|Não, grande dataset| C[Use NumPy / Pandas]
C --> D{Precisa de modelos?}
D -->|Sim| E[statsmodels / scikit-learn]
D -->|Não| F[SciPy / operações científicas]
Sugestões de visualização social (previews)
- OG title: Módulo statistics do Python: guia prático
- OG description: Guia rápido para médias, dispersão, regressão simples e distribuição normal no Python. Exemplos e dicas para quando migrar para NumPy/Pandas.
Versão curta para anúncio
O módulo statistics do Python facilita cálculos estatísticos simples sem instalar nada. Ideal para aprender e prototipar. Quando os dados crescem, migre para NumPy, Pandas ou SciPy.
Resumo final
- O módulo statistics é ótimo para tarefas rápidas e aprendizado.
- Para desempenho e modelos avançados, use NumPy/Pandas/SciPy/statsmodels.
- Sempre valide suposições (normalidade, amostragem) antes de interpretar resultados.
Obrigado por ler. Se quiser, posso gerar exemplos adaptados ao seu conjunto de dados ou uma checklist personalizada para um caso de uso específico.
Materiais semelhantes

Ativar feedback háptico no teclado do iPhone

Versão desktop do Facebook no Android

Contornar detecção de AdBlock no YouTube

Bloqueadores de rastreadores: Ghostery e Firefox Focus

AnDoSid no Android: teste de stress de rede
