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:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import pandas as pd import numpy as np # Criando um DataFrame de exemplo df = pd.DataFrame({ 'idade': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70], 'salario': [5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000], 'departamento': ['Vendas', 'TI', 'Vendas', 'TI', 'RH', 'Vendas', 'TI', 'RH', 'Vendas', 'TI'] }) # Gerando estatísticas descritivas estatisticas = df.describe() print(estatisticas) |
Em R, a função equivalente seria summary() aplicada a um data frame:
|
1 2 3 4 5 6 7 8 9 10 |
# Criando um data frame de exemplo em R df <- data.frame( idade = c(25, 30, 35, 40, 45, 50, 55, 60, 65, 70), salario = c(5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000), departamento = c('Vendas', 'TI', 'Vendas', 'TI', 'RH', 'Vendas', 'TI', 'RH', 'Vendas', 'TI') ) # Gerando estatísticas descritivas estatisticas <- summary(df) print(estatisticas) |
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:
|
1 2 3 |
# Para incluir variáveis categóricas no describe() estatisticas_categoricas = df.describe(include=['object']) print(estatisticas_categoricas) |
Em R, para obter estatísticas de variáveis categóricas, usamos table() ou funções específicas:
|
1 2 3 4 |
# Estatísticas para variáveis categóricas em R table(df$departamento) # Ou para uma análise mais detalhada summary(df$departamento) |
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:
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.
|
1 2 3 4 5 |
# Primeira análise dos dados print(df.describe()) # Para incluir todas as colunas, inclusive não numéricas print(df.describe(include='all')) |
Identificação de Outliers
Use os quartis e valores min/max para identificar possíveis outliers nos dados.
|
1 2 3 4 5 6 7 8 |
# Identificando outliers com base no IQR Q1 = df['coluna'].quantile(0.25) Q3 = df['coluna'].quantile(0.75) IQR = Q3 - Q1 limite_inferior = Q1 - 1.5 * IQR limite_superior = Q3 + 1.5 * IQR outliers = df[(df['coluna'] < limite_inferior) | (df['coluna'] > limite_superior)] |
Comparação entre Grupos
Use describe() em conjunto com groupby() para comparar estatísticas entre diferentes categorias.
|
1 2 3 |
# Estatísticas descritivas por grupo estatisticas_por_departamento = df.groupby('departamento')['salario'].describe() print(estatisticas_por_departamento) |
Em R, usamos funções do pacote dplyr para operações similares:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
library(dplyr) # Estatísticas descritivas por grupo em R estatisticas_por_departamento <- df %>% group_by(departamento) %>% summarize( media = mean(salario), desvio_padrao = sd(salario), mediana = median(salario), min = min(salario), max = max(salario) ) print(estatisticas_por_departamento) |
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 excluirdatetime_is_numeric: Tratar datetime como numérico (padrão: True)
Exemplos de personalização:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Incluindo percentis específicos estatisticas_personalizadas = df.describe(percentiles=[.1, .2, .8, .9]) # Incluindo todos os tipos de dados estatisticas_completas = df.describe(include='all') # Excluindo tipos específicos estatisticas_sem_object = df.describe(exclude=['object']) # Para dados datetime df_data = pd.DataFrame({ 'data': pd.date_range('2023-01-01', periods=10, freq='D'), 'valor': range(10) }) estatisticas_data = df_data.describe(datetime_is_numeric=True) |
⚠️ 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
- Documentação oficial do Pandas: DataFrame.describe()
- Real Python: Using Pandas describe()
- Towards Data Science: Understanding Descriptive Statistics