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

Importação de Módulos e Bibliotecas em Python

importação

Em Python, a importação de módulos, bibliotecas e métodos é fundamental para expandir as funcionalidades básicas da linguagem. Existem várias formas de importar recursos externos, cada uma com suas particularidades e casos de uso específicos.

Tipos de Importação em Python

1. Importação de Módulos Específicos

A instrução from datetime import datetime importa apenas a classe datetime do módulo datetime, permitindo usá-la diretamente sem precisar referenciar o módulo.

Vantagens:

  • Código mais limpo e legível
  • Não precisa usar o nome do módulo como prefixo
  • Economiza tempo de digitação

Cuidados:

  • Pode causar conflitos de nomes
  • Pode tornar menos claro a origem da função/classe

Exemplo de uso:

Em R, o equivalente seria usar o operador :: para acessar funções específicas de um pacote:

2. Importação de Módulos Completos

A instrução import os importa todo o módulo os, que fornece funções para interagir com o sistema operacional. Para usar suas funções, é necessário prefixá-las com os..

Vantagens:

  • Evita conflitos de nomes
  • Torna explícito a qual módulo pertence cada função
  • Importa todas as funcionalidades do módulo

Desvantagens:

  • Código mais verboso
  • Necessidade de digitar o prefixo repetidamente

Exemplo de uso:

Em R, o equivalente seria carregar um pacote completo com library():

3. Importação de Tudo de um Módulo

A instrução from sklearn import * importa todas as classes, funções e variáveis do módulo sklearn para o namespace atual. Esta abordagem é geralmente desencorajada.

Vantagens:

  • Acesso direto a todas as funcionalidades
  • Código mais curto (sem necessidade de prefixos)

Desvantagens:

  • Alto risco de conflitos de nomes
  • Dificulta a leitura e compreensão do código
  • Pode importar itens desnecessários, consumindo mais memória
  • Considerada má prática pela comunidade Python

Exemplo de uso (não recomendado):

⚠️ Esta prática é desencorajada pois pode levar a conflitos de nomes e dificulta a legibilidade do código. Prefira importações explícitas.

Em R, o equivalente aproximado seria carregar um pacote e usar suas funções diretamente, mas R tem um sistema de namespaces mais permissivo:

Relação Matemática entre os Tipos de Importação

Podemos pensar nos diferentes tipos de importação como operações matemáticas de conjuntos:

Seja M o conjunto de todos os elementos (funções, classes, variáveis) de um módulo:

  • import modulo → Acesso a todos os elementos através de modulo.elemento
  • from modulo import elemento → Importação de um elemento específico: {elemento} ⊆ M
  • from modulo import * → Importação de todos os elementos: M

Matematicamente, podemos expressar isso como: \(Elemento \in M\)

Guia de Decisão: Quando Usar Cada Tipo de Importação

Use from modulo import elemento quando:

  • Você precisa de apenas uma ou poucas funcionalidades específicas
  • Quer evitar digitação excessiva
  • O nome do elemento é único e não conflita com outros no seu código

Use import modulo quando:

  • Você precisa de várias funcionalidades do módulo
  • Quer evitar conflitos de nomes
  • Deseja tornar explícita a origem de cada função

Evite from modulo import * exceto quando:

  • Está trabalhando em um ambiente controlado e interativo
  • O módulo foi projetado especificamente para este uso (raro)
  • Está prototipando rapidamente e não em produção

Conclusão

O Python oferece flexibilidade na importação de módulos e bibliotecas, mas com essa flexibilidade vem a responsabilidade de escolher a abordagem mais adequada para cada situação. Como regra geral, prefira importações explícitas (import modulo ou from modulo import elemento) para escrever código mais legível e maintainable.

Lembre-se que importações são fundamentais para expandir as capacidades do Python, permitindo acesso a um vasto ecossistema de bibliotecas para áreas como ciência de dados (pandas, numpy, scikit-learn), desenvolvimento web (Django, Flask), e muitas outras.

Referências