Análise Estatística Descritiva com df.describe() no Pandas

O método df.describe() é uma das funções mais úteis e frequentemente utilizadas na biblioteca Pandas para Python. Ele fornece um resumo estatístico rápido das colunas numéricas e de objeto em um DataFrame, permitindo uma compreensão rápida da distribuição e características dos dados.

O que é df.describe()?

O método describe() gera estatísticas descritivas que resumem a tendência central, dispersão e forma da distribuição de um conjunto de dados, excluindo valores NaN.

Por padrão, o método fornece:

  • Para dados numéricos: count, mean, std, min, quartis (25%, 50%, 75%) e max
  • Para dados categóricos/object: count, unique, top (valor mais frequente) e freq (frequência do top)

Exemplo básico de uso:

Em R, a função equivalente seria summary() aplicada a um data frame:

Estatísticas Fornecidas pelo describe()

Para Variáveis Numéricas

Para colunas numéricas, describe() retorna oito medidas estatísticas principais:

Medidas de Posição:

  • count: Quantidade de valores não nulos
  • mean: Média aritmética dos valores
  • min: Valor mínimo
  • max: Valor máximo

Medidas de Dispersão:

  • std: Desvio padrão (medida de dispersão)
  • 25%: Primeiro quartil (Q1)
  • 50%: Mediana (segundo quartil, Q2)
  • 75%: Terceiro quartil (Q3)

Interpretação Matemática:

As medidas de posição e dispersão podem ser representadas matematicamente:

\(\text{Média} (\mu) = \frac{1}{n}\sum_{i=1}^{n}x_i\) \(\text{Desvio Padrão} (\sigma) = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i – \mu)^2}\) \(\text{Mediana} = \begin{cases} x_{\frac{n+1}{2}} & \text{se n é ímpar} \\ \frac{x_{\frac{n}{2}} + x_{\frac{n}{2}+1}}{2} & \text{se n é par} \end{cases}\)

Para Variáveis Categóricas

Para colunas do tipo object (strings) ou categóricas, describe() retorna quatro medidas diferentes:

Medidas de Frequência:

  • count: Quantidade de valores não nulos
  • unique: Número de valores únicos

Medidas de Moda:

  • top: Valor mais frequente (moda)
  • freq: Frequência do valor mais comum

Exemplo com dados categóricos:

Em R, para obter estatísticas de variáveis categóricas, usamos table() ou funções específicas:

Relação entre as Medidas Estatísticas

As estatísticas fornecidas pelo describe() estão inter-relacionadas e fornecem uma visão abrangente da distribuição dos dados:

\(\text{Intervalo Interquartil (IQR)} = Q_3 – Q_1\)

O IQR é uma medida de dispersão robusta a outliers, diferentemente do desvio padrão.

Podemos detectar outliers usando a regra:

Outlier inferior < \(Q_1\) - 1.5 IQR e

Outlier superior > \(Q_3\) + 1.5 IQR

O coeficiente de variação (CV) é outra medida útil:

\(CV = \frac{\sigma}{\mu} \times 100\%\)

Que representa a dispersão relativa dos dados em relação à média.

Quando e Como Usar df.describe()

Análise Exploratória Inicial

Use describe() como uma das primeiras etapas na análise de dados para obter uma visão geral rápida das variáveis numéricas.

Identificação de Outliers

Use os quartis e valores min/max para identificar possíveis outliers nos dados.

Comparação entre Grupos

Use describe() em conjunto com groupby() para comparar estatísticas entre diferentes categorias.

Em R, usamos funções do pacote dplyr para operações similares:

Personalizando o df.describe()

O método describe() aceita vários parâmetros para personalizar sua saída:

Parâmetros Principais:

  • percentiles: Lista de percentis para incluir (padrão: [.25, .5, .75])
  • include: Tipos de dados a incluir (padrão: apenas numéricos)
  • exclude: Tipos de dados a excluir
  • datetime_is_numeric: Tratar datetime como numérico (padrão: True)

Exemplos de personalização:

⚠️ Limitações e Considerações

Embora describe() seja extremamente útil, é importante entender suas limitações:

  • Não mostra a assimetria (skewness) ou curtose da distribuição
  • Não fornece informações sobre missing values além do count
  • Para uma análise completa, é necessário complementar com outras técnicas
  • Pode ser enganoso para distribuições multimodais ou assimétricas

Conclusão

O método df.describe() é uma ferramenta poderosa para análise exploratória de dados em Python com Pandas. Ele fornece um resumo estatístico rápido que ajuda a entender a distribuição, tendência central e dispersão dos dados.

Lembre-se de que describe() é apenas o ponto de partida para a análise de dados. Para uma compreensão completa, complemente essas estatísticas com visualizações, testes de hipóteses e análises mais profundas específicas do seu domínio de aplicação.

Referências

Tratamento de Dados Ausentes com Pandas

empreteiro






Tratamento de Dados com Pandas

O tratamento de dados ausentes é uma etapa crucial na análise de dados. No Pandas, existem várias funções para lidar com valores faltantes, sendo df.info(), df.dropna() e df.fillna(valor) algumas das mais importantes.

Funções Principais para Dados Ausentes

df.info()

A função info() fornece um resumo conciso do DataFrame, incluindo:

  • Número de entradas não nulas por coluna
  • Tipo de dados de cada coluna
  • Uso de memória

É útil para identificar rapidamente colunas com valores ausentes.

Exemplo de uso:

df.dropna()

A função dropna() remove linhas ou colunas que contenham valores ausentes.

Parâmetros importantes:

  • axis: 0 para linhas, 1 para colunas
  • how: ‘any’ (remove se algum valor for NA) ou ‘all’ (remove se todos os valores forem NA)
  • subset: colunas específicas para verificar valores NA

Exemplo de uso:

df.fillna(valor)

A função fillna() preenche valores ausentes com um valor específico.

Pode receber como argumento:

  • Um valor escalar (preenche todos os NAs com esse valor)
  • Um dicionário mapeando colunas para valores
  • Métodos como ‘ffill’ (forward fill) ou ‘bfill’ (backward fill)

Exemplo de uso:

Comparativo entre as Abordagens

Vantagens de df.dropna()

  • Remove completamente os dados problemáticos
  • Mantém a integridade dos dados restantes
  • Simples de implementar

Desvantagens de df.dropna()

  • Pode resultar em perda significativa de dados
  • Pode introduzir viés se os valores ausentes não forem completamente aleatórios
  • Não é adequado quando há muitos valores ausentes

Vantagens de df.fillna()

  • Preserva o tamanho do dataset
  • Mantém outras variáveis inalteradas
  • Permite uso de diferentes estratégias de preenchimento

Desvantagens de df.fillna()

  • Pode distorcer distribuições estatísticas
  • Pode introduzir viés se o método de preenchimento for inadequado
  • Valores preenchidos podem não representar a realidade

Conclusão

O tratamento de dados ausentes é fundamental para uma análise precisa. A escolha entre dropna() e fillna() depende do contexto:

  • Use info() para diagnosticar a extensão dos dados ausentes
  • Prefira dropna() quando a perda de dados for aceitável e os valores ausentes forem escassos
  • Use fillna() com estratégias adequadas quando precisar manter todas as observações

Lembre-se que não existe uma solução única – a abordagem deve ser adaptada a cada conjunto de dados e pergunta de pesquisa.

Referências

  • Pandas Documentation: Handling Missing Data
  • McKinney, W. (2017). Python for Data Analysis.
  • VanderPlas, J. (2016). Python Data Science Handbook.