- Aprender
- Computação e TI
- Ciência de dados e IA
- Análise de dados com Python
- Análise exploratória de dados em Python
Análise exploratória de dados em Python
IntermediárioAula 8 de 8 do curso Curso de Análise de dados com Python
O que você vai aprender
- Explique para que serve a análise exploratória de dados, transforme uma solicitação ampla em perguntas concretas e prepare um caderno computacional que qualquer pessoa possa executar novamente do início ao fim.
- Definir o objetivo e as perguntas de uma análise exploratóriaDescreva o que a análise exploratória de dados faz, acompanhe seu fluxo de trabalho das perguntas às constatações e escreva perguntas específicas que os dados possam responder.
- Organizar um caderno computacional que qualquer pessoa possa executar novamenteEstruture um caderno Jupyter para que seja executado do início ao fim com os mesmos resultados, com seções claras, caminhos relativos, versões registradas, sementes aleatórias fixas e verificações incorporadas.
- Definir o objetivo e as perguntas de uma análise exploratória
- Inspecione o tamanho, a estrutura e os tipos de variáveis de um novo conjunto de dados, quantifique dados ausentes e duplicados e verifique se os valores são válidos e consistentes antes de confiar em qualquer padrão.
- Inspecionar a estrutura, o tamanho e os tipos de variáveisUse métodos de inspeção do pandas para conhecer a forma, as colunas, os tipos e as chaves de um conjunto de dados, classifique cada variável para análise e identifique valores armazenados com o tipo incorreto.
- Quantificar valores ausentes e duplicatasConte os valores ausentes e sua proporção por coluna, encontre códigos ocultos de ausência, verifique se a ausência de dados segue um padrão e detecte duplicatas de linhas completas e de chaves.
- Verificar se os valores são válidos e consistentesAplique verificações de intervalo, categoria, relações entre colunas, unidades e cobertura temporal e mantenha um registro de cada problema de qualidade dos dados e decisão tomada.
- Inspecionar a estrutura, o tamanho e os tipos de variáveis
- Resuma e represente graficamente variáveis numéricas e categóricas individuais, reconheça formas de distribuição, identifique valores atípicos e decida como tratá-los.
- Resumir uma variável numérica com medidas de tendência central e dispersãoCalcule e interprete medidas de tendência central, dispersão e posição no pandas e escolha resumos robustos quando os dados forem assimétricos ou contiverem valores extremos.
- Representar graficamente e descrever as formas das distribuiçõesCrie histogramas, curvas de densidade, diagramas de caixa e ECDFs com pandas e seaborn, escolha intervalos de classe e escalas que mostrem a forma real e descreva uma distribuição em palavras com números.
- Resumir variáveis categóricasConstrua tabelas de frequências e gráficos de barras para variáveis categóricas, mantenha as categorias ordinais em ordem, trate categorias raras e rótulos ausentes e informe o denominador de cada porcentagem.
- Identificar valores atípicos e decidir como tratá-losSinalize valores incomuns com a regra da IQR, escores z e escores robustos, investigue sua causa e escolha e documente uma forma justificada de tratá-los.
- Resumir uma variável numérica com medidas de tendência central e dispersão
- Mostre relações entre variáveis numéricas com gráficos de dispersão, meça sua intensidade com coeficientes de correlação e interprete o que uma associação pode ou não mostrar.
- Mostrar e descrever relações entre duas variáveis numéricasCrie gráficos de dispersão e matrizes de gráficos de dispersão que permaneçam legíveis com muitos pontos, acrescente uma terceira variável com cores ou painéis e descreva a direção, a forma, a intensidade e os pontos incomuns.
- Medir a associação com coeficientes de correlaçãoCalcule e interprete as correlações de Pearson, Spearman e Kendall no pandas, leia uma matriz de correlação e um mapa de calor e reconheça o que um coeficiente deixa de mostrar.
- Interpretar relações sem tirar conclusões além das evidênciasExplique por que uma associação não estabelece causa, reconheça variáveis de confusão, o paradoxo de Simpson, tendências temporais, intervalo restrito, agregação e achados ao acaso, e formule conclusões de acordo com isso.
- Mostrar e descrever relações entre duas variáveis numéricas
- Compare distribuições, proporções e taxas entre grupos e períodos, considerando os tamanhos dos grupos e usando os denominadores adequados, e reconheça quando uma diferença se baseia em dados insuficientes.
- Comparar uma variável numérica entre gruposResuma uma variável numérica por grupo com contagens, medidas de tendência central e dispersão, represente as distribuições dos grupos lado a lado e expresse diferenças em termos absolutos e relativos.
- Comparar proporções de categorias e taxas entre segmentosConstrua tabulações cruzadas com porcentagens por linha ou coluna, compare taxas com o denominador adequado e distinga pontos percentuais de variações percentuais.
- Comparar segmentos ao longo do tempoAgregue dados por período e segmento, evite armadilhas como períodos parciais e de duração diferente, separe padrões sazonais de tendências e investigue lacunas e mudanças súbitas.
- Comparar uma variável numérica entre grupos
- Transforme a exploração em constatações claras e fundamentadas, com limitações apresentadas com honestidade, e compartilhe a análise como um caderno computacional ou relatório organizado que outras pessoas possam executar novamente e verificar.
- Transformar observações em constatações claras e fundamentadasEscreva constatações que respondam às perguntas com evidências, magnitude e escopo, escolha e identifique gráficos que tornem cada constatação visível e apresente limitações e próximos passos.
- Compartilhar uma análise reproduzívelPrepare um caderno computacional organizado e executável novamente, calcule cada número relatado em código, exporte-o como relatório, salve figuras e tabelas, registre a proveniência e proteja dados pessoais.
- Transformar observações em constatações claras e fundamentadas
Guia de estudo de Análise exploratória de dados em Python
1Planejar uma análise exploratória em um caderno computacional
Perguntas claras tornam uma análise exploratória útil, e um caderno computacional confiável permite verificar seus resultados. Comece relacionando a solicitação a uma decisão, identificando a população e entendendo o que cada linha significa. Depois, organize o código, as configurações e as verificações para que uma nova sessão possa reproduzir o trabalho. Esses hábitos dão um propósito e um ponto de partida confiável aos gráficos e às comparações posteriores.
1.1 Perguntas que dão propósito à exploração
A análise exploratória de dados, ou EDA, usa resumos e gráficos para conhecer o conteúdo de um conjunto de dados. Você procura problemas de qualidade, padrões e surpresas e depois os transforma em perguntas melhores. John Tukey desenvolveu e divulgou essa abordagem, sobretudo em seu livro Exploratory Data Analysis, de 1977.
Comece com uma decisão
Uma solicitação como “Como estão nossas entregas?” é ampla demais para orientar o primeiro cálculo. Pergunte qual decisão a análise apoiará e depois nomeie as variáveis e comparações relevantes. Perguntas úteis incluem “Qual é o tempo típico de entrega e quanto ele varia?”, “Que proporção dos pedidos leva mais de 45 minutos?”, “Os tempos diferem por cidade ou hora?” e “A mediana mensal mudou desde janeiro?”. Cada uma aponta para um resumo, gráfico ou comparação.
Antes de calcular, estabeleça de onde vieram os dados, como foram coletados, seu período e população e o significado e a unidade de cada coluna. Um aumento no preenchimento de campos pode refletir uma alteração que tornou um campo do formulário obrigatório. Esse contexto muda a explicação do padrão.
Saiba o que cada linha significa
A unidade de observação, também chamada de granularidade, é aquilo que uma linha representa. Pode ser um pedido, um item de um pedido, um cliente ou uma loja em um determinado dia. Uma tabela com 12.000 linhas de itens de pedidos e 4.000 IDs de pedidos distintos tem em média 3 linhas por pedido. Sua contagem de linhas descreve itens, então uma pergunta no nível do pedido exige uma contagem de pedidos. IDs de pedidos repetidos são esperados nessa tabela; seriam um problema de qualidade em uma tabela que deveria conter uma linha por pedido.
Trabalhe em ciclo
Um fluxo de trabalho útil é:
- Formular as perguntas e a decisão que elas apoiam.
- Carregar os dados e confirmar o significado de uma linha.
- Caracterizar a estrutura, os tipos e a qualidade.
- Examinar individualmente as variáveis importantes.
- Explorar relações entre variáveis.
- Comparar segmentos e períodos.
- Registrar constatações, limitações e próximas perguntas.
Essas etapas formam um ciclo. Uma relação surpreendente pode levar você de volta à fonte para verificar unidades ou valores ausentes. Novos dados podem mudar a caracterização e reabrir perguntas anteriores. Começar com perguntas mantém a análise focada; manter-se aberto a surpresas preserva seu caráter exploratório. Representar graficamente todos os pares possíveis sem um propósito costuma criar uma longa coleção de gráficos com pouco a explicar.
Distinga uma pista de uma confirmação
A exploração gera hipóteses. A análise confirmatória verifica uma hipótese formulada antecipadamente, de preferência usando dados que não revelaram o padrão. Examinar muitos gráficos aumenta a probabilidade de encontrar padrões ao acaso, então um resultado exploratório marcante precisa de investigação posterior antes de sustentar uma afirmação geral. A EDA ajuda a preparar esse trabalho mostrando variáveis utilizáveis, distribuições assimétricas e relações promissoras.
A cobertura dos dados também define o alcance de uma constatação. Avaliações de produtos vêm de pessoas que escolheram escrevê-las. Suas notas descrevem essas pessoas; estender o resultado a todos os clientes exige evidências sobre como os respondentes diferem dos demais.
Principais conclusões
- Comece com uma decisão e perguntas concretas sobre variáveis, populações e comparações.
- Confirme o que cada linha representa antes de interpretar contagens ou chaves repetidas.
- Use o fluxo de trabalho como um ciclo: surpresas podem revelar problemas de qualidade ou novas perguntas.
- A exploração gera hipóteses; a confirmação verifica hipóteses formuladas antecipadamente.
- O processo de coleta e a população limitam o alcance das constatações.
1.2 Um caderno computacional que é executado do início ao fim
Um caderno Jupyter combina código, saídas e explicações em Markdown. Seu núcleo de execução é o processo Python que mantém variáveis na memória. Ele lembra a ordem em que as células foram executadas, que pode diferir da ordem visível na página.
Elimine o estado oculto
Suponha que você execute uma célula que cria clean, exclua essa célula e continue usando clean abaixo. A sessão atual ainda funciona porque a variável permanece na memória. Uma nova sessão falha porque o caderno não contém mais sua definição. Editar uma célula inicial após executar cálculos posteriores também pode deixar saídas antigas ao lado de código novo.
Contadores de execução como [7] ajudam a revelar execuções fora de ordem. O teste prático é mais forte: no JupyterLab, escolha Kernel → Restart Kernel and Run All Cells. Verifique se o caderno inteiro termina e se seus números correspondem às saídas que você pretende compartilhar.
Coloque as dependências em uma ordem clara
Comece com título, objetivo e perguntas. Em seguida, coloque as importações e uma célula de configurações, depois seções para carregamento, verificações de qualidade, distribuições, relações, comparações e constatações. Por exemplo:
from pathlib import Path
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
DATA = Path("data/raw/orders.csv")
LATE_MINUTES = 45
SEED = 42
df = pd.read_csv(DATA)
Um caminho relativo funciona dentro da estrutura compartilhada do projeto. Um caminho vinculado à área de trabalho de uma pessoa deixa de funcionar quando o projeto é movido. Informe o diretório de trabalho usado para executar o caderno, para que o caminho relativo seja resolvido corretamente. Preserve os arquivos brutos e salve os dados processados separadamente. Faça alterações em código: uma edição manual em planilha fica invisível na próxima execução.
Registre o ambiente e as escolhas aleatórias
Salve as versões dos pacotes em um arquivo de ambiente, como a saída de pip freeze > requirements.txt, e imprima versões importantes no caderno com print(pd.__version__). O comportamento muda entre versões: o pandas 3 fornece ao texto um tipo de dados específico str, e um DataFrame com texto precisa de uma seleção numérica explícita para correlação.
Um gráfico amostrado deve mostrar as mesmas observações em cada nova execução. Use df.sample(n=1000, random_state=42) quando houver pelo menos 1.000 linhas disponíveis, ou crie um gerador do NumPy com rng = np.random.default_rng(42). Registre a semente junto com as outras configurações. Uma semente controla escolhas aleatórias; reproduzir toda a saída também exige as mesmas entradas e os mesmos programas.
Torne os pressupostos executáveis
Transforme expectativas importantes em verificações:
assert df["order_id"].is_unique
assert df["minutes"].ge(0).all()
A primeira exige um ID de pedido único por linha. A segunda exige que toda duração seja não negativa e esteja presente para dados comuns de ponto flutuante. Se tempos ausentes forem permitidos, defina uma verificação separada de ausência e aplique a regra de intervalo apenas aos tempos registrados. Uma asserção que falha interrompe a execução no ponto em que a entrada viola pela primeira vez o contrato esperado.
Coloque procedimentos repetidos em funções para que uma correção atualize todos os usos. Mantenha código e cadernos sob controle de versão. As saídas dos cadernos são armazenadas em seu JSON, o que pode dificultar a comparação de alterações; limpar as saídas antes de um commit ou associar o caderno a um script de texto por meio do Jupytext pode ajudar.
Principais conclusões
- O núcleo de execução armazena variáveis do histórico de execução, incluindo as de células que não estão mais visíveis.
- Reinicie o núcleo de execução e execute todas as células para revelar dependências ocultas e saídas desatualizadas.
- Mantenha importações e configurações juntas, use caminhos relativos e preserve as entradas brutas.
- Registre as versões dos pacotes e fixe a semente de cada etapa aleatória.
- Use asserções para verificar os pressupostos que um novo arquivo de entrada deve atender.
- Faça toda alteração nos dados em código para que outra execução possa repeti-la.
2Caracterizar um conjunto de dados e avaliar sua qualidade
Um conjunto de dados pode parecer organizado e ainda ocultar registros repetidos, códigos de ausência ou unidades incompatíveis. Caracterize sua estrutura e seus significados, quantifique lacunas e duplicatas e aplique regras que reflitam como os dados foram coletados. O objetivo é entender quais observações sustentam cada resultado e deixar um registro visível das decisões que alteram os dados analisados.
2.1 A primeira inspeção de um conjunto de dados
Uma primeira inspeção estabelece o tamanho da tabela, o que suas colunas representam e se os tipos armazenados são adequados a esses significados. Essa caracterização ajuda você a escolher resumos apropriados antes de confiar na saída de um comando conveniente.
Inspecione a estrutura de vários ângulos
Use df.shape para as contagens de linhas e colunas, df.head() e df.tail() para as extremidades do arquivo e df.sample(5, random_state=0) para uma amostra reproduzível quando houver pelo menos cinco linhas. As primeiras linhas podem pertencer todas à data mais antiga ou à mesma loja. Execute df.info() para inspecionar nomes de colunas, contagens de valores não nulos, tipos de dados e uso de memória. Use df.nunique() para contar os valores registrados distintos em cada coluna.
Separe significado de armazenamento
| Tipo para análise | Exemplo | Tratamento útil |
|---|---|---|
| Numérica contínua | Distância em km | Tendência central, dispersão e distribuição |
| Numérica discreta | Itens por pedido | Contagens e intervalos de classe centrados nos inteiros |
| Categoria nominal | Cidade | Frequências e proporções |
| Categoria ordinal | Baixo, médio, alto | Frequências em uma ordem significativa |
| Data e hora | Marca temporal do pedido | Cobertura e comparações entre períodos |
| Identificador | ID do cliente | Unicidade e ligações entre registros |
| Texto livre | Um comentário escrito | Inspecionar o texto e sua qualidade |
Um tipo de dados inteiro não transforma toda coluna em uma quantidade. Códigos de região e IDs de clientes têm armazenamento numérico, mas nenhuma média aritmética útil. Uma avaliação de 1 a 5 tem um pequeno conjunto de respostas ordenadas e muitas vezes se beneficia de uma apresentação categórica.
O pandas costuma usar int64, float64, bool, datetime64, category e, a partir do pandas 3, str. Versões anteriores do pandas frequentemente usavam object para texto. Dados inteiros comuns podem se tornar float64 quando há valores ausentes porque NaN é um marcador de ponto flutuante; o tipo Int64, com suporte a valores ausentes, permite inteiros com valores ausentes.
Verifique conversões e chaves
Uma string com aparência numérica pode ocultar separadores, unidades ou códigos de ausência. Para uma Series que contém “1,234”, “950”, “n/a” e “1,010”:
parsed = pd.to_numeric(
s.str.replace(",", ""), errors="coerce"
)
Os valores tornam-se 1234,0, 950,0, NaN e 1010,0. Compare as contagens de valores ausentes antes e depois da conversão e inspecione as entradas que passaram a estar ausentes. A coerção também transforma um valor não tratado como “12 kg” em NaN, então uma execução bem-sucedida não basta para mostrar que a conversão preservou os dados.
Leia códigos com zeros iniciais significativos como texto, por exemplo pd.read_csv(path, dtype={"postal_code": "str"}). Recuperar um zero perdido posteriormente exige conhecimento que a representação inteira descartou.
Identifique a chave esperada da linha. df["order_id"].is_unique verifica uma chave de uma coluna; df.duplicated(subset=["store_id", "date"]).sum() verifica combinações repetidas de loja e data. Relacione as contagens de chaves ao significado da linha. Uma coluna com um único valor não pode explicar diferenças dentro desse conjunto de dados; milhares de supostas categorias de cidades podem indicar rótulos inconsistentes.
Complete um dicionário de dados durante a inspeção: registre o significado, o tipo para análise, a unidade, os valores permitidos e os problemas conhecidos de cada coluna. Essas informações fornecem as regras para as próximas verificações de qualidade.
Principais conclusões
- Inspecione tamanho, linhas de amostra, contagens de valores não nulos, tipos de dados e contagens de valores distintos.
- Escolha métodos de análise com base no significado de uma variável, incluindo ordem e unidades.
- Verifique as entradas que passaram a estar ausentes após qualquer conversão que use coerção para falhas de interpretação.
- Teste a chave esperada em relação à unidade de observação da tabela.
2.2 Valores ausentes e registros repetidos
Valores ausentes alteram quais observações contribuem para um resultado. Registros duplicados podem dar peso extra a algumas observações. Quantifique ambos antes de escolher um tratamento e mantenha a decisão visível na análise.
Quantifique a ausência e seu padrão
O pandas usa NaN, NaT para datas e horas ausentes e <NA> para tipos com suporte a valores ausentes. Conte e ordene a ausência com:
missing_count = df.isna().sum()
missing_share = df.isna().mean().sort_values(ascending=False)
rows_with_gaps = df.isna().any(axis=1).sum()
Uma média booleana fornece uma proporção porque True conta como 1 e False como 0. Com 96 idades ausentes entre 1.200 linhas, a proporção de valores ausentes é 8%. As linhas com alguma lacuna podem ser muito mais numerosas que as entradas ausentes em uma coluna; essa é a perda de linhas que uma aplicação indiscriminada de df.dropna() causaria.
Algumas lacunas se escondem por trás de valores comuns. A leitura padrão de CSV reconhece muitos marcadores vazios e textuais de ausência, mas códigos como -999, “unknown” e “?” podem permanecer. Inspecione frequências e extremos, consulte o dicionário de dados e declare marcadores adicionais com na_values. O zero precisa de contexto: pode significar nenhuma devolução ou ser um marcador não documentado.
Verifique se as lacunas se concentram em um segmento:
age_gaps = df["customer_age"].isna()
age_gaps.groupby(df["city"]).mean()
Se uma cidade tem 40% de idades ausentes e as outras cerca de 2%, uma análise de linhas completas representará essa cidade em menor proporção. Os termos MCAR, MAR e MNAR descrevem mecanismos diferentes: ausência não relacionada aos valores observados ou ausentes; ausência que depende apenas de variáveis observadas; e ausência que depende do próprio valor ausente. Respondentes de alta renda que deixam de responder a uma pergunta sobre renda exemplificam MNAR. A EDA pode detectar relações com variáveis registradas; determinar o mecanismo completo exige mais evidências sobre a coleta.
Nomeie o denominador
Para 6 pagamentos com cartão, 2 em dinheiro e 2 lacunas, value_counts(normalize=True) informa 75% para cartão e 25% para dinheiro entre os 8 pagamentos registrados. Acrescentar dropna=False informa 60% para cartão, 20% para dinheiro e 20% de ausentes entre todas as 10 linhas. Uma tabela não responde à pergunta da outra. Identifique a população por trás de cada proporção.
Inspecione duplicatas de linhas completas e de chaves
df.duplicated().sum() conta as cópias após a primeira ocorrência de cada linha completa. Uma verificação por chave pode encontrar registros conflitantes que não são idênticos:
repeated = df["order_id"].duplicated(keep=False)
df.loc[repeated].sort_values("order_id")
Considere os IDs 101, 102, 102, 103, 104, 104 com valores 20, 35, 35, 12, 50, 55. Há 1 linha inteiramente duplicada, 2 ocorrências de chaves repetidas após a primeira e 4 linhas envolvidas em chaves repetidas. Os dois registros 104 discordam quanto ao valor, então excluir uma cópia sem investigação poderia descartar o valor correto.
Registre a contagem, a causa provável, o tratamento e as linhas afetadas para cada problema. Remover todas as lacunas pode eliminar um subconjunto enviesado; preenchê-las com a média oculta seu padrão e reduz a dispersão aparente. Escolha um tratamento adequado à pergunta e ao processo de coleta e mantenha a ausência original mensurável.
Principais conclusões
- Conte as lacunas por coluna e as linhas com alguma lacuna antes de escolher um tratamento.
- Verifique códigos sentinela e compare a ausência de dados entre segmentos relevantes.
- Os mecanismos de ausência descrevem por que há lacunas; padrões observados isoladamente não identificam o mecanismo completo.
- As proporções de frequência padrão excluem valores ausentes, então informe o denominador.
- Linhas inteiramente duplicadas e chaves repetidas conflitantes exigem investigações diferentes.
- Registre os tratamentos, pois remover ou preencher valores altera os dados analisados.
2.3 Regras que revelam dados inválidos ou inconsistentes
Um valor é válido quando atende ao intervalo ou conjunto permitido para sua coluna. Os registros são consistentes quando seus valores concordam entre colunas, linhas e fontes. Construa verificações com base no dicionário de dados e no conhecimento do processo que criou os dados.
Verifique intervalos sem misturar lacunas
Comece por mínimos e máximos e depois teste limites explícitos. Para contar idades registradas fora de 0–120:
invalid_age = df["age"].notna() & ~df["age"].between(0, 120)
invalid_age.sum()
between retorna False para valores ausentes. Negá-lo isoladamente contaria idades ausentes como inválidas; a verificação de presença separa os problemas. Outras regras podem exigir quantidades não negativas, porcentagens não superiores a 100 ou datas de extração não anteriores aos eventos contidos nos dados. O intervalo permitido vem do significado da coluna.
Concilie rótulos e colunas
“Lyon”, “lyon” e “ Lyon” são três strings, mesmo quando nomeiam a mesma cidade. Contagens de 410, 22 e 5 tornam-se 437 para “lyon” após uma remoção justificada de espaços e conversão de maiúsculas e minúsculas:
city_clean = df["city"].str.strip().str.lower()
Compare as contagens de categorias antes e depois. Variações de grafia e sinônimos precisam de um mapeamento explícito; mudar apenas maiúsculas e minúsculas não consegue unir “UK” e “United Kingdom”. Guarde a regra usada para que uma nova execução tome a mesma decisão.
Verificações entre colunas procuram contradições. df.query("delivered_at < ordered_at") encontra entregas registradas antes dos pedidos. Outras verificações perguntam se os valores dos itens somam o total, se a idade concorda com a data de nascimento ou se um pedido cancelado tem um horário de entrega inesperado. Essas regras exigem unidades, convenções de tempo e definições compartilhadas entre as colunas.
Procure mudanças de escala e cobertura
Quilogramas e gramas misturados podem criar agrupamentos separados por um fator de aproximadamente 1.000. Uma proporção registrada em parte na escala de 0–1 e em parte na escala de 0–100 também cria uma distribuição enganosa. Verifique a fonte antes de converter: dois agrupamentos também podem representar duas populações reais. Um gráfico sugere onde investigar; a fonte estabelece quais unidades se aplicam.
Inspecione as datas mais antiga e mais recente e as contagens por mês. Um mês ausente pode ser uma lacuna na extração, enquanto um último mês parcial naturalmente contém menos registros. Um aumento repentino pode refletir um novo sistema de registro. Registre a cobertura que você realmente tem antes de relatar um padrão temporal.
Mantenha um registro de qualidade
Use uma pequena tabela com o problema, a verificação, o número de linhas afetadas, a evidência e a ação. Por exemplo, uma duração negativa pode ser sinalizada por uma regra de tempo não negativo, investigada com base nas marcas temporais e corrigida apenas quando a fonte estabelecer seu valor verdadeiro. Expectativas importantes podem se tornar asserções que interrompem uma execução futura.
Uma entrega de 120 minutos é incomum, mas possível. Uma duração de −5 minutos é impossível sob a mesma definição de duração. A primeira exige uma investigação de valor atípico; a segunda exige uma investigação de erro.
Principais conclusões
- Use regras do domínio de aplicação para verificar intervalos válidos, conjuntos de categorias e concordância entre colunas.
- Conte valores ausentes separadamente dos valores registrados fora de um intervalo permitido.
- Verifique variantes de rótulos, unidades misturadas e cobertura temporal antes de interpretar padrões.
- Mantenha um registro de qualidade e transforme expectativas importantes sobre as entradas em asserções.
- Investigue valores incomuns; distinga um valor extremo possível de um valor impossível.
3Descrever a distribuição de cada variável
Uma única média pode ocultar uma cauda longa, dois grupos distintos ou um limite de registro. Descreva cada variável importante com resumos e gráficos adequados ao seu significado. Variáveis numéricas exigem verificações de tendência central, dispersão, forma e valores incomuns; variáveis categóricas exigem rótulos, ordem e denominadores claros. Regras de valores atípicos ajudam a localizar registros que merecem investigação, enquanto o contexto determina seu tratamento.
3.1 Tendência central, dispersão e o efeito de valores extremos
Uma distribuição numérica descreve quais valores ocorrem e com que frequência. Sua tendência central indica uma posição típica, sua dispersão mostra a variação e sua forma revela o que esses resumos deixam de fora. Use um gráfico junto com os números.
Escolha resumos adequados à distribuição
A média é a soma dividida pela contagem. A mediana é o valor central ordenado, ou a média dos dois valores centrais quando a contagem é par. A amplitude é o máximo menos o mínimo. A amplitude interquartil, ou IQR, é Q3 menos Q1: a distância entre os percentis 75 e 25. O desvio padrão mede a dispersão em torno da média nas próprias unidades da variável.
No pandas, s.std() usa o cálculo amostral com ddof=1, dividindo o total dos desvios ao quadrado pela contagem menos um. No NumPy, np.std(a) usa ddof=0 por padrão, dividindo pela contagem. Isso importa especialmente com amostras pequenas, então use configurações correspondentes ao comparar resultados.
Leia o resumo antes de interpretá-lo
s = df["minutes"]
s.describe(percentiles=[0.1, 0.5, 0.9])
O resultado inclui a contagem de valores não ausentes, média, desvio padrão, mínimo, percentis solicitados e máximo. A entrada de 50% é a mediana. Em um DataFrame, describe() abrange colunas numéricas e de data e hora por padrão; os resumos de data e hora incluem sua média e seus percentis. describe(include="all") também resume outras colunas. Colunas de texto e categóricas recebem count, unique, top e freq, em que top é um valor mais frequente e freq é sua contagem. Exclua identificadores numéricos de resumos aritméticos.
Analise uma cauda longa à direita
Considere tempos de entrega de 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 e 95 minutos. Sua soma é 385 e sua contagem é 11, então a média é 35,0 minutos. O sexto valor ordenado é 29, que fornece a mediana. O pandas fornece Q1 = 25, Q3 = 36, IQR = 11 e desvio padrão amostral de cerca de 21,02 minutos.
Sem a entrega de 95 minutos, a média é 29,0, a mediana 28 e o desvio padrão cerca de 7,15. Um valor altera a média em 6 minutos e aproximadamente triplica o desvio padrão; a mediana muda 1 minuto. Por isso, a mediana e a IQR são resumos resistentes úteis para dados com valores extremos. Uma distribuição aproximadamente simétrica sem valores extremos costuma ser bem descrita por sua média e seu desvio padrão.
Descreva a cauda e posições úteis
A assimetria à direita tem uma cauda longa de valores altos; a assimetria à esquerda tem uma cauda longa de valores baixos. A média costuma ficar na direção da cauda longa em relação à mediana, mas verifique a forma porque essa regra prática tem exceções. s.skew() é positivo para uma cauda à direita e negativo para uma cauda à esquerda; é cerca de 2,71 para esses tempos de entrega.
s.quantile(0.9) fornece aqui 41 minutos, uma descrição útil da parte superior da distribuição. Uma das 11 entregas ultrapassa 45 minutos, cerca de 9,1%. Calcule proporções acima de limites usando os valores registrados quando houver lacunas. Quartis de amostras pequenas podem diferir entre programas: o pandas usa interpolação linear por padrão. Registre o método quando quartis exatos forem importantes.
Principais conclusões
- Use tendência central, dispersão e um gráfico para descrever uma distribuição numérica.
- A mediana e a IQR resistem a valores extremos; a média e o desvio padrão respondem fortemente a eles.
- Verifique as contagens de valores não ausentes e use configurações correspondentes de desvio padrão.
- Percentis e proporções em relação a limites podem responder diretamente a perguntas práticas.
- A direção da assimetria descreve a cauda longa, não o lado que contém a maioria das observações.
3.2 Gráficos que mostram a forma de uma distribuição
Um gráfico de distribuição revela caudas, picos, lacunas e limites que uma medida de tendência central isolada oculta. Cada gráfico enfatiza características diferentes, então escolha-o de acordo com a pergunta e verifique como as escolhas de exibição afetam a imagem.
Use intervalos de classe significativos no histograma
Um histograma divide uma escala numérica em intervalos e conta as observações em cada um. sns.histplot(data=df, x="minutes", binwidth=5) usa intervalos de cinco minutos. O seaborn escolhe intervalos automaticamente por padrão; os histogramas do pandas e do Matplotlib usam 10 por padrão. Experimente várias configurações razoáveis de intervalos. Um intervalo muito amplo pode unir dois picos, enquanto intervalos muito estreitos podem transformar ruído amostral em estrutura aparente. Para contagens inteiras, discrete=True centraliza uma barra em cada inteiro.
Descreva a forma como simétrica, assimétrica à direita ou à esquerda, uniforme ou com um, dois ou vários picos. Procure lacunas, tetos e pisos. Picos em valores redondos, como 30 e 60 minutos, podem refletir concentração em valores arredondados por pessoas que informaram tempos arredondados. Dois picos perto de 25 e 50 minutos podem refletir entregas de bicicleta e de carro. Acrescentar hue="vehicle" verifica se esses grupos explicam a separação.
Compare os principais tipos de gráfico
| Gráfico | O que ajuda a ver | O que verificar |
|---|---|---|
| Histograma | Contagens em intervalos, picos e lacunas | Amplitude e alinhamento dos intervalos |
| KDE | Uma estimativa suave da forma da distribuição | Largura de banda e caudas impossíveis |
| Diagrama de caixa | Mediana, metade central e extremos sinalizados | Picos ocultos e tamanho da amostra |
| ECDF | A proporção no máximo igual a cada valor | Unidades dos eixos e população |
Uma estimativa de densidade por núcleo, ou KDE, suaviza as observações em uma curva. sns.kdeplot(data=df, x="minutes") pode ajudar, mas a largura de banda muda sua forma. A suavização pode ocultar tetos ou se estender abaixo de zero mesmo quando as durações são não negativas. Interprete essa extensão como uma característica da estimativa, não como durações negativas observadas.
Um diagrama de caixa desenha a mediana dentro de uma caixa de Q1 a Q3. Os bigodes padrão alcançam os valores observados mais extremos que ainda estão a até 1,5 IQR da caixa; pontos mais distantes aparecem separadamente. Um bigode, portanto, não é necessariamente o mínimo ou o máximo, e sua extremidade é um valor observado, não o limite calculado.
Leia proporções acumuladas e escalas multiplicativas
sns.ecdfplot(data=df, x="minutes")
Uma ECDF mostra a proporção menor ou igual a cada valor. Leia horizontalmente a partir de uma proporção como 0,9 para localizar um percentil. Ela evita a escolha de intervalos de classe de um histograma e é útil para comparar a frequência com que os valores ficam abaixo de um limite.
Uma escala logarítmica ajuda com dados positivos que abrangem grandes razões. Em uma escala de base 10, 10, 100 e 1.000 ficam igualmente espaçados porque cada passo multiplica por 10. Logaritmos reais comuns exigem valores positivos; np.log1p(x) calcula o logaritmo natural de um mais o valor e trata zero em dados não negativos.
Ao comparar grupos de tamanhos diferentes, normalize dentro de cada grupo usando stat="percent", common_norm=False ou use painéis com eixos compartilhados. Termine com uma descrição numérica, como “Os tempos de entrega são assimétricos à direita, com mediana de 29 minutos e metade dos pedidos entre 25 e 36 minutos; um pedido levou 95 minutos.”
Principais conclusões
- Experimente configurações razoáveis de intervalos antes de decidir que um pico ou lacuna é real.
- Verifique se misturas de grupos explicam vários picos.
- A suavidade da KDE pode ocultar características ou se estender além das observações possíveis.
- Um diagrama de caixa resume posição e dispersão, mas oculta a modalidade e o tamanho da amostra.
- Uma ECDF fornece proporções acumuladas sem intervalos de classe.
- Escalas logarítmicas mostram razões; gráficos normalizados separadamente ajudam a comparar as formas dos grupos.
3.3 Contagens de categorias, ordem e denominadores
Resumos categóricos contam observações em grupos nomeados. Seu significado depende dos rótulos, de sua ordem e da população usada para cada porcentagem. Um código numérico de categoria ainda exige um resumo categórico.
Construa uma tabela de frequências
s.value_counts() lista categorias da mais à menos frequente. Use normalize=True para proporções e dropna=False para incluir uma linha de valores ausentes. Para texto, describe() informa o número registrado, o número de valores distintos, um valor mais frequente e sua contagem.
Em 200 respostas a uma pesquisa, 30 avaliações são “baixo”, 50 são “médio” e 120 são “alto”. Dividir cada contagem por 200 fornece 15%, 25% e 60%. Se essas forem as 200 pessoas que responderam a uma pergunta em uma pesquisa maior, as porcentagens descrevem os respondentes daquela pergunta. Respostas ausentes mudam o denominador quando incluídas.
Preserve uma ordem significativa
Categorias nominais como cidades não têm ordem inerente; ordenar por frequência pode facilitar comparações. Categorias ordinais têm uma ordem natural que deve permanecer visível:
order = ["low", "medium", "high"]
counts = s.value_counts().reindex(order, fill_value=0)
Um tipo categórico ordenado registra a ordem para ordenação, comparações e gráficos. Seu value_counts() ainda ordena por frequência por padrão; use sort=False ou reindexe explicitamente as contagens. Um gráfico ordenado como “alto”, “médio”, “baixo” por frequência pode tornar a escala mais difícil de reconhecer.
Mantenha rótulos raros e lacunas separados
Quando muitas categorias tornam um gráfico ilegível, mantenha os rótulos mais comuns e reúna os demais como “Other”:
top = s.value_counts().nlargest(5).index
grouped = s.where(s.isna() | s.isin(top), "Other")
A presença de s.isna() mantém as lacunas como ausentes. Sem ela, entradas ausentes também se tornariam “Other”, misturando respostas ausentes com respostas raras reais. Informe quantos rótulos e observações foram combinados. Verifique se uma categoria rara importante para a pergunta não desapareceu no grupo combinado.
Gráficos de barras horizontais são adequados para rótulos longos. Por exemplo, sns.countplot(data=df, y="city", order=df["city"].value_counts().index) ordena as contagens de cidades. Comece o eixo de contagem em zero porque o comprimento da barra representa o número de observações. Um gráfico de setores fica difícil de comparar quando contém muitos setores.
Transforme intervalos numéricos em categorias rotuladas
bands = pd.cut(
df["minutes"], bins=[0, 30, 45, np.inf],
labels=["up to 30", "over 30 to 45", "over 45"],
include_lowest=True
)
Os intervalos fechados à direita padrão colocam 30 na primeira faixa e 45 na segunda. include_lowest=True também inclui 0 na primeira faixa. Valores fora desses intervalos tornam-se ausentes no resultado discretizado, então valide durações negativas antes de interpretar sua contagem de ausentes. Registre os limites porque um rótulo como “30–45”, sozinho, deixa o tratamento de 30 pouco claro.
Para códigos nominais, mapeie 1 e 2 para seus rótulos de região antes de exibi-los. Calcular a média de códigos de região descreveria sua numeração arbitrária, não a distribuição das regiões.
Principais conclusões
- Tabelas de frequências informam contagens ou proporções de categorias; identifique o denominador.
- Mantenha valores ordinais em sua ordem natural, mesmo quando as frequências diferem.
- Mantenha respostas ausentes separadas ao combinar rótulos raros como “Other”.
- Comece os eixos de contagem de gráficos de barras em zero e torne legíveis os rótulos longos.
- Defina limites explícitos para faixas numéricas e verifique seus extremos.
3.4 Sinalização de valores atípicos e decisões de tratamento
Um valor atípico está distante da maior parte dos dados segundo uma regra e um contexto definidos. Pode ser um erro de registro, um evento raro real ou um membro de um grupo distinto. Uma sinalização inicia uma investigação.
Calcule os limites da IQR
A regra da IQR sinaliza valores abaixo ou acima destes limites:
Para os tempos de entrega 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 e 95, Q1 é 25 e Q3 é 36. A IQR é 11, então o limite inferior é 8,5 e o superior é 52,5. O pedido de 95 minutos é sinalizado.
q1, q3 = s.quantile([0.25, 0.75])
iqr = q3 - q1
flag = (s < q1 - 1.5 * iqr) | (s > q3 + 1.5 * iqr)
Esses são os limites padrão que fundamentam os pontos atípicos do diagrama de caixa. Um valor exatamente em um limite está dentro dele. Em uma cauda longa à direita, a regra pode sinalizar muitos valores altos reais.
Entenda o mascaramento e os escores robustos
Um escore z mede a distância da média em unidades de desvio padrão:
Uma sinalização comum é um escore z absoluto maior que 3. Aqui a média é 35 e o desvio padrão amostral é cerca de 21,02, então 95 fornece um escore z de cerca de 2,85. O valor extremo aumentou justamente a medida de tendência central e a dispersão usadas para avaliá-lo. Esse efeito, chamado mascaramento, pode fazer um valor incomum escapar da regra. A regra também se ajusta melhor a distribuições aproximadamente simétricas do que a distribuições assimétricas.
O desvio absoluto mediano, ou MAD, é a mediana das distâncias absolutas em relação à mediana. Ele usa medidas resistentes. Um escore z modificado é:
Aqui a mediana é 29 e o MAD é 5. Para 95 minutos, o escore modificado é cerca de 8,90, ultrapassando o limite absoluto comum de 3,5. Se o MAD for zero, essa divisão é indefinida; inspecione os valores repetidos e use outra verificação justificada em vez de relatar um escore infinito como resultado medido.
Investigue antes de alterar dados
As regras do domínio de aplicação vêm primeiro. Uma duração de tempo decorrido negativa é um erro sob essa definição, independentemente de seu escore estatístico. Para um possível valor extremo, inspecione a linha inteira, suas marcas temporais, distância, grupo e fonte. Uma tempestade ou uma rota longa pode explicar uma entrega demorada.
| Evidência | Ação possível |
|---|---|
| A fonte estabelece o valor correto | Corrigi-lo em código e registrar a alteração |
| Um registro é um erro comprovado sem valor recuperável | Removê-lo ou marcá-lo como ausente, registrando o efeito |
| O valor é real | Mantê-lo; usar resumos resistentes ou uma escala útil |
| A conclusão depende muito do valor | Comparar resultados com e sem ele |
Comparar resultados com e sem a observação é uma análise de sensibilidade. Limitar valores extremos a um percentil selecionado, chamado de winsorização, é outra transformação deliberada; informe o limite e que os valores foram alterados. Inspecione também combinações incomuns: duas medidas individualmente plausíveis podem formar um ponto raro em um gráfico de dispersão.
Principais conclusões
- Os limites da IQR sinalizam valores fora de Q1 − 1,5 IQR e Q3 + 1,5 IQR.
- Valores extremos podem aumentar a média e o desvio padrão e mascarar a si mesmos nos escores z.
- Escores z modificados usam a mediana e o MAD; um MAD igual a zero exige outra abordagem.
- Regras do domínio de aplicação distinguem valores impossíveis de extremos possíveis.
- Investigue o registro completo e documente cada tratamento.
- Use análises de sensibilidade para mostrar quando valores extremos mudam uma conclusão.
- Procure combinações incomuns, além de extremos em variáveis isoladas.
4Explorar relações entre variáveis
Duas variáveis podem variar juntas em linha reta, ao longo de uma curva ou apenas porque grupos distintos foram combinados. Use gráficos de dispersão para ver a forma, coeficientes de correlação para resumir aspectos específicos da associação e verificações de subgrupos para investigar sua origem. A interpretação exige considerar a população, o tamanho da amostra utilizável e o processo de coleta, além da intensidade aparente do padrão.
4.1 Gráficos de dispersão que revelam a relação
Um gráfico de dispersão coloca uma observação em cada par de valores numéricos. Coloque uma possível variável explicativa no eixo horizontal e a resposta no eixo vertical. O gráfico ajuda você a ver a forma de uma relação antes de resumi-la em um coeficiente.
Descreva quatro características
Use direção, forma, intensidade e pontos incomuns. Direção positiva significa que a resposta tende a aumentar conforme a variável horizontal aumenta; negativa significa que tende a diminuir. A forma pode ser reta, curva ou dividida em agrupamentos. A intensidade descreve o quanto os pontos acompanham essa forma, que pode ser forte mesmo quando é curva.
Para temperaturas de 8, 12, 15, 18, 21, 24, 27 e 30 °C, os aluguéis diários de bicicletas são 310, 420, 515, 600, 690, 760, 800 e 780. A relação é forte e positiva no geral. É quase linear até cerca de 27 °C, depois se estabiliza e cai ligeiramente. Descrevê-la apenas como “positiva” deixa de captar a mudança nas temperaturas mais altas.
sns.scatterplot(data=df, x="temp_c", y="rentals")
Torne gráficos densos legíveis
Com muitas linhas, os pontos cobrem uns aos outros: a sobreposição excessiva oculta onde as observações se concentram. Marcadores menores e alpha=0.2 revelam parte da densidade por meio da transparência. Um gráfico de células hexagonais agrega observações em hexágonos:
df.plot.hexbin(x="distance_km", y="minutes", gridsize=30)
Um sns.histplot bidimensional fornece uma visão semelhante com intervalos retangulares. Uma amostra aleatória pode reduzir a sobreposição; fixe sua semente para que novas execuções mostrem o mesmo subconjunto. Quando um eixo assume apenas alguns valores, pequenos deslocamentos aleatórios espalham os pontos sobrepostos para facilitar a visualização. Esses deslocamentos são movimentos de exibição, não precisão adicional medida.
Acrescente grupos e verifique uma linha ajustada
Use hue="season" para cor ou sns.relplot(..., col="season") para painéis separados. Uma nuvem combinada pode conter agrupamentos sazonais distintos. O tamanho dos marcadores pode representar outra quantidade quando seu significado permanece claro.
sns.regplot(data=df, x="temp_c", y="rentals") acrescenta uma reta de mínimos quadrados e uma faixa sombreada de incerteza. Uma reta ajuda na visualização, mas pode deixar de mostrar uma curvatura. lowess=True desenha uma curva suave quando a dependência statsmodels está instalada. Inspecione as observações antes de escolher qualquer uma das exibições.
Para uma pequena seleção de variáveis, uma matriz de gráficos de pares desenha seus gráficos de dispersão aos pares e suas distribuições individuais. Por exemplo, use comprimento do bico em mm, comprimento da nadadeira em mm, massa corporal em g e espécie como grupo de cor. Cerca de três a seis variáveis numéricas permanecem legíveis; acrescentar muitas outras cria uma parede de pequenos painéis.
Investigue a concentração e tendências temporais compartilhadas
Eixos logarítmicos podem espalhar valores positivos que abrangem grandes razões, como população e consumo total de energia. Mantenha a escala visível nos rótulos. Quando um ponto extremo determina uma escala enorme para os eixos, inspecione-o e acrescente uma visão claramente identificada da maior parte dos dados para que o padrão restante fique visível.
Duas variáveis também podem formar um padrão porque ambas crescem ao longo do tempo. Colora os pontos por data ou represente cada série em função do tempo. Essa verificação pode revelar se a relação aparente é principalmente uma tendência compartilhada.
Principais conclusões
- Descreva direção, forma, intensidade e observações incomuns.
- Use transparência, pontos menores, discretização ou amostras com semente fixa para revelar a densidade.
- Use cores ou painéis para investigar grupos dentro de um padrão combinado.
- Inspecione a curvatura antes de confiar em uma reta ajustada.
- Verifique escalas, pontos extremos e tendências temporais que possam dominar a exibição.
4.2 O que um coeficiente de correlação mede
Um coeficiente de correlação resume um aspecto da associação. Escolha o coeficiente para a relação que você quer descrever e leia-o junto com um gráfico e o número de observações utilizáveis.
Pearson mede uma relação em linha reta
O coeficiente de Pearson é o total dos produtos cruzados centrados dividido pelo produto dos comprimentos centrados:
Seu intervalo vai de −1 a 1. O sinal indica a direção e a magnitude indica a intensidade linear. Valores positivos ou negativos perfeitos significam que todos os pontos utilizáveis estão em uma reta, com variação em ambas as variáveis. O coeficiente não tem unidade, não muda ao trocar os eixos e não muda com uma conversão positiva entre unidades de medida.
Um coeficiente próximo de zero significa pouca associação linear. Para entradas −3, −2, −1, 0, 1, 2, 3 e saídas iguais a seus quadrados, a correlação de Pearson é exatamente zero apesar de uma relação perfeita em forma de U. Correlação também difere de inclinação: uma reta pouco inclinada pode ter correlação alta.
Métodos por postos descrevem a ordenação
A correlação de Spearman calcula a correlação de Pearson sobre postos e descreve a associação monotônica: os valores tendem a subir ou descer de forma consistente, mesmo ao longo de uma curva. O tau de Kendall compara pares concordantes de observações, ordenados da mesma forma nas duas variáveis, com pares discordantes, ordenados de forma oposta. Métodos por postos são menos sensíveis a magnitudes extremas que Pearson.
Para o exemplo de temperatura e aluguéis, Pearson é 0,974, Spearman 0,976 e Kendall 0,929. O gráfico de dispersão ainda revela a estabilização acima de cerca de 27 °C. Um coeficiente alto pode coexistir com curvatura importante.
Calcule uma matriz com cuidado
cols = ["temp_c", "rentals", "distance_km"]
corr = df[cols].corr(method="spearman")
sns.heatmap(corr, annot=True, fmt=".2f",
vmin=-1, vmax=1, center=0, cmap="vlag")
Para um DataFrame misto, df.corr(numeric_only=True) seleciona colunas numéricas; exclua também identificadores e códigos de categorias que não tenham uma relação numérica significativa. Valores ausentes são excluídos par a par, então células da matriz podem descrever subconjuntos diferentes. Verifique a contagem utilizável de cada par. A matriz é simétrica. A correlação de uma variável consigo mesma é 1 onde está definida; uma coluna constante tem correlação indefinida e apresenta valores ausentes em sua linha, coluna e entrada diagonal.
Verifique a sensibilidade à geometria dos dados
Para entradas de 1 a 10 e saídas 3, 1, 4, 2, 5, 3, 4, 2, 5, 3, Pearson é cerca de 0,307. Acrescentar o único ponto (30, 30) eleva o valor a 0,938; Spearman passa a cerca de 0,462. Um ponto pode dominar Pearson enquanto a maior parte dos dados mantém um padrão fraco.
O quarteto de Anscombe torna a mesma lição visível: quatro conjuntos de dados compartilham média de entrada 9, média de saída 7,50, variância de entrada 11, correlação próxima de 0,816 e reta ajustada , mas seus gráficos mostram uma nuvem, uma curva e diferentes pontos influentes. Informe o valor e a contagem junto com qualquer rótulo verbal de intensidade; as áreas têm convenções diferentes para rótulos como “forte”.
Principais conclusões
- Pearson descreve a associação linear, sem unidade e com valores entre −1 e 1.
- Correlação de Pearson igual a zero pode ocultar uma relação curva forte.
- Spearman e Kendall descrevem a ordenação e reduzem a sensibilidade a magnitudes extremas.
- A remoção de valores ausentes par a par pode fazer com que células da matriz usem amostras diferentes.
- Uma variável constante tem correlação indefinida.
- Gráficos e análises de sensibilidade revelam características que coeficientes idênticos podem ocultar.
4.3 Associações, causas e comparações enganosas
Uma associação descreve como variáveis ocorrem juntas nos dados observados. Sua causa precisa de uma explicação separada. Possíveis origens incluem um efeito causal, causalidade reversa, uma terceira variável, seleção e acaso.
Pergunte o que poderia explicar a relação
Uma variável de confusão influencia ambas as variáveis e cria ou distorce sua associação. O calor aumenta as vendas de sorvete e os acidentes em atividades aquáticas. Reduzir as vendas de sorvete manteria o risco relacionado ao clima. Uma variável mediadora é diferente: ela está no caminho causal entre as variáveis.
A causalidade reversa inverte a direção proposta. Clientes que visitam páginas de ajuda com mais frequência podem ter mais pedidos malsucedidos porque as falhas os levam a essas páginas. A relação observada não dá base para esperar menos falhas após ocultar as páginas de ajuda.
Separe padrões de subgrupos do resultado combinado
O paradoxo de Simpson ocorre quando a comparação combinada inverte a direção observada em cada subgrupo. Os dados de tratamento de cálculos renais de um estudo de 1986 ilustram a aritmética:
| Grupo | Tratamento A | Tratamento B |
|---|---|---|
| Cálculos pequenos | 81/87 = 93,1% | 234/270 = 86,7% |
| Cálculos grandes | 192/263 = 73,0% | 55/80 = 68,8% |
| Combinado | 273/350 = 78,0% | 289/350 = 82,6% |
A tem a maior proporção de sucesso nos dois grupos de tamanho de cálculo. B tem a maior proporção combinada porque A foi usado principalmente nos casos mais difíceis de cálculos grandes. As taxas combinadas ponderam as taxas dos subgrupos por suas contagens. Inspecione a composição e compare subgrupos relevantes antes de interpretar um resultado combinado.
Verifique tempo, seleção e agregação
Duas séries sem relação podem subir ao longo dos anos e parecer fortemente correlacionadas. Represente-as ao longo do tempo e inspecione as variações de um período para outro ou as relações dentro de cada período. A relação entre os níveis pode refletir principalmente sua tendência temporal comum.
Um intervalo selecionado também muda o que fica visível. Entre estudantes selecionados por notas altas no exame de ingresso, o intervalo de notas é estreito, e a correlação entre a nota no exame e as notas posteriores pode ser muito mais fraca que entre todos os candidatos. Descreva a população selecionada; seu coeficiente responde a uma pergunta diferente daquela do coeficiente para todos os candidatos.
Uma correlação entre médias de cidades pertence às cidades. Aplicá-la a moradores individuais é a falácia ecológica. A agregação pode fortalecer, enfraquecer ou inverter uma associação porque o padrão dentro dos grupos e a composição entre grupos não precisam concordar.
Trate uma busca ampla como fonte de hipóteses
Com 20 variáveis numéricas há 190 pares distintos. Examinar esses pares e muitos segmentos dá muitas oportunidades para padrões casuais aparecerem. Informe a amplitude da exploração e depois identifique um padrão surpreendente como uma hipótese para novos dados ou uma análise confirmatória planejada.
Use uma formulação vinculada às observações: “Pedidos feitos na chuva estiveram associados a tempos de entrega maiores durante este período.” Essa afirmação registra uma relação. Uma afirmação de que a chuva causou a diferença também exigiria evidências que descartassem explicações concorrentes, como uma composição diferente de rotas ou horários.
Principais conclusões
- Considere causalidade reversa, confundimento, seleção e acaso ao explicar uma associação.
- Variáveis de confusão influenciam ambas as variáveis; mediadoras estão em um caminho causal.
- Comparações combinadas podem inverter comparações de subgrupos quando a composição dos grupos difere.
- Tendências temporais, intervalos selecionados e agregação alteram a associação medida.
- Relações no nível do grupo exigem interpretações no nível do grupo.
- Use padrões exploratórios para formular hipóteses e informe a amplitude da busca.
5Comparar segmentos dos dados
Um resumo combinado pode ocultar diferenças entre cidades, canais ou períodos. Compare distribuições de grupos, proporções de categorias e taxas de eventos com seus denominadores e tamanhos de amostra visíveis. Depois, verifique se a composição dos grupos, resultados ausentes ou cobertura temporal desigual explica a diferença aparente. Uma comparação útil ajusta a medida à pergunta e mantém clara a base de cada número.
5.1 Comparar medidas de tendência central, dispersões e caudas entre grupos
Um segmento é um subconjunto definido por uma categoria, faixa numérica ou período. Uma comparação útil mostra como a distribuição completa difere, com a quantidade de evidências por trás de cada resumo visível.
Coloque os tamanhos dos grupos ao lado dos resumos
by_city = df.groupby("city")["minutes"].agg(
["count", "mean", "median", "std"]
)
A contagem aqui é o número de durações registradas. Se algumas durações estiverem ausentes, informe também o número de pedidos e a proporção de ausentes para que a base da tabela fique clara. Agregações nomeadas podem dar rótulos úteis às colunas, como orders=("order_id", "count") e median_min=("minutes", "median").
Considere estes tempos de entrega:
| Cidade | Tempos em minutos | Média | Mediana | Desvio padrão amostral |
|---|---|---|---|---|
| Lyon | 24, 30, 27, 33, 29, 31 | 29,0 | 29,5 | 3,2 |
| Porto | 22, 25, 21, 40, 24 | 26,4 | 24,0 | 7,8 |
| Tartu | 19, 55 | 37,0 | 37,0 | 25,5 |
Tartu tem a maior média, mas apenas duas observações. Uma entrega longa domina seu resultado. Grupos pequenos muitas vezes aparecem nos dois extremos de uma classificação porque seus resumos variam mais com observações individuais. Defina uma contagem mínima antes de classificar e mantenha os grupos pequenos visíveis como evidência incompleta.
Escolha uma exibição para a distribuição
Um diagrama de caixa em um eixo numérico compartilhado compara medianas, metades centrais e extremos sinalizados. Um gráfico de violino acrescenta uma forma estimada. Com grupos pequenos, gráficos de pontos por categoria ou de enxame mostram cada observação e facilitam a visualização do tamanho da amostra.
Para histogramas, use painéis com os mesmos eixos ou histogramas sobrepostos normalizados, como stat="density", common_norm=False. Histogramas de contagem sobrepostos revelam principalmente qual grupo contém mais registros. Uma sobreposição de densidades permite comparar a forma de cada grupo na mesma base.
Dois grupos com a mesma média podem ter caudas muito diferentes. Uma cidade com entregas em sua maioria rápidas e algumas muito longas pode compartilhar a média de uma cidade com tempos consistentemente moderados. Compare dispersão, percentis e uma proporção relevante em relação a um limite junto com a medida de tendência central.
Nomeie a referência de uma diferença
A diferença entre as médias de Tartu e Lyon nesta amostra é de 8 minutos. Em relação a Lyon, ela é cerca de 27,6%:
A referência é 29 minutos de Lyon. Inverter a referência muda a porcentagem relativa, embora a diferença absoluta permaneça em 8 minutos. Informe as contagens limitadas dos grupos junto com esse cálculo descritivo; a aritmética isolada não pode estabelecer uma diferença estável entre cidades.
Verifique a composição dentro dos grupos
df.groupby(["city", "vehicle"])["minutes"].median().unstack()
Essa tabela de cidade por veículo pode revelar se uma diferença entre cidades vem da composição de veículos. Uma tabela dinâmica com o mesmo agrupamento e a mediana fornece a mesma comparação. Inspecione também as contagens dessas células menores: dividir um grupo pode reduzir a evidência disponível mesmo ao esclarecer o padrão.
Principais conclusões
- Informe as contagens dos grupos com medidas de tendência central e dispersão, incluindo a base de cada contagem.
- Use escalas compartilhadas e normalização dentro dos grupos para comparar distribuições.
- Inspecione caudas e proporções em relação a limites, além das medidas de tendência central.
- Nomeie a referência ao informar uma diferença relativa.
- Verifique a composição dos subgrupos e as contagens de células pequenas antes de classificar grupos.
5.2 Proporções, taxas e o denominador adequado
Contagens respondem quantos eventos ocorreram. Taxas respondem com que frequência os eventos ocorreram em relação às oportunidades. Quando os grupos diferem em tamanho, a escolha do denominador pode mudar a comparação aparente.
Leia uma tabulação cruzada na direção desejada
Uma tabulação cruzada conta combinações de duas categorias:
pd.crosstab(df["region"], df["channel"], margins=True)
O Norte tem 30 pedidos pelo aplicativo e 20 pela web; o Sul tem 60 pedidos pelo aplicativo e 90 pela web. O Sul tem mais pedidos pelo aplicativo, mas seu total maior de pedidos muda a comparação das proporções.
| Pergunta | Denominador | Resultado |
|---|---|---|
| No Norte, qual proporção usa o aplicativo? | Todos os 50 pedidos do Norte | 60% |
| No Sul, qual proporção usa o aplicativo? | Todos os 150 pedidos do Sul | 40% |
| De todos os pedidos pelo aplicativo, qual proporção vem do Norte? | Todos os 90 pedidos pelo aplicativo | 33,3% |
normalize="index" divide pelos totais das linhas; normalize="columns" divide pelos totais das colunas. normalize="all" usa o total geral. Leia a pergunta em voz alta antes de escolher a normalização. Nas linhas normalizadas por linha, cada linha soma 1; o mesmo ocorre com as colunas normalizadas por coluna.
Preserve resultados desconhecidos
Uma média booleana fornece a proporção de valores True. Para um indicador de entrega atrasada, tempos ausentes exigem tratamento especial:
df["late"] = df["minutes"].astype("Float64") > 45
rates = df.groupby("city")["late"].mean()
known = df.groupby("city")["late"].count()
O tipo Float64, com suporte a valores ausentes, preserva tempos ausentes como indicadores ausentes. A média por grupo estima então a proporção de atrasos entre os tempos registrados. No tipo comum de ponto flutuante, NaN > 45 é False, o que contaria tempos desconhecidos como pontuais e reduziria a taxa. Informe o denominador de resultados conhecidos e relate a ausência ao lado da taxa.
Distinga dois tipos de variação percentual
Uma taxa de atraso que sobe de 4% para 5% aumenta 1 ponto percentual. O aumento relativo usa a taxa original como referência:
Escreva “aumentou 1 ponto percentual, um aumento relativo de 25%”. Dizer apenas “aumentou 1%” deixa o significado pouco claro. Para uma taxa baseada em uma célula pequena, mostre também sua contagem: 1 pedido atrasado em 2 produz 50%, mas um único pedido pontual adicional muda a proporção para um terço.
Compare proporções de resultados com o tamanho do grupo
Se o Norte responde por 25% de todos os pedidos, mas por 40% das reclamações, ele está sobrerrepresentado entre as reclamações. Isso compara sua proporção de reclamações com sua proporção de pedidos. É uma pergunta diferente da taxa de reclamações dentro do Norte, que exige dividir a contagem de reclamações do Norte pelos pedidos do Norte.
Use barras agrupadas, barras empilhadas de 100% ou um mapa de calor identificado para mostrar proporções. Uma tabela de região por canal normalizada por linha e representada em barras empilhadas compara a composição dos canais dentro das regiões. Coloque o denominador no título ou no rótulo do eixo para que os leitores distingam essa composição da composição regional de cada canal.
Principais conclusões
- Proporções por linha, por coluna e pelo total geral respondem a perguntas diferentes.
- Compare taxas de eventos usando as oportunidades no mesmo segmento.
- Mantenha resultados desconhecidos como ausentes ao criar indicadores booleanos de taxas.
- Diferenças em pontos percentuais subtraem taxas; variações relativas dividem pela taxa de referência.
- Mostre contagens ao lado das taxas, especialmente para células pequenas.
- Compare a proporção de um resultado atribuída a um grupo com sua proporção de base para avaliar a sobrerrepresentação.
5.3 Comparações temporais com períodos comparáveis
Totais por período dependem tanto da atividade quanto do tempo coberto. Antes de descrever uma alta ou queda, verifique os limites dos períodos, as datas ausentes e o padrão sazonal normal. Compare segmentos com uma medida adequada ao seu tamanho.
Agregue por período do calendário
Com as marcas temporais dos pedidos interpretadas, as contagens mensais podem ser construídas da seguinte forma:
monthly = (
df.set_index("order_date")
.resample("MS")["order_id"].count()
)
"MS" rotula cada mês do calendário pelo primeiro dia. Use "ME" para rótulos de fim de mês no pandas atual. Para uma tabela mensal por cidade, combine pd.Grouper(key="order_date", freq="MS") com o agrupamento por cidade e use .size().unstack(). O método conta linhas, então primeiro estabeleça que uma linha é um pedido.
Verifique a exposição antes de comparar totais
Suponha que haja 100 pedidos por dia de 1º de agosto a 12 de outubro. Os totais mensais são 3.100 em agosto, 3.000 em setembro e 1.200 na parte registrada de outubro. O total de outubro parece muito menor, mas todos os dias observados têm a mesma atividade.
Divida cada total por seus dias observados: 31, 30 e 12. As três médias diárias são 100. Compare essas taxas ou omita períodos incompletos. O denominador deve representar a cobertura real: um dia não registrado não pode ser tratado com segurança como um dia sem atividade.
Mesmo meses completos têm durações diferentes. Eles também podem conter números diferentes de dias da semana movimentados. Se a atividade de sábado for alta, compare os mesmos dias da semana ou taxas que considerem sua composição antes de interpretar uma diferença mensal.
Separe um ciclo de uma mudança duradoura
Sazonalidade é um padrão recorrente, como um ciclo semanal ou anual. daily.rolling(7).mean() suaviza uma janela de sete dias em uma série diária com espaçamento regular. Isso torna um ciclo semanal menos evidente, preservando mudanças mais lentas. Compare dezembro com o dezembro anterior quando a pergunta for sobre a variação anual de uma atividade sazonal.
Alguns dias incomumente altos podem parecer uma tendência em uma janela curta. Mostre histórico suficiente para entender a amplitude normal de variação e mantenha os valores não suavizados quando ajudarem a explicar um evento importante.
Verifique lacunas e compare trajetórias dos segmentos
Uma contagem reamostrada igual a zero pode significar ausência de eventos registrados ou uma interrupção na coleta. Uma mudança súbita de nível pode refletir uma nova versão do aplicativo ou uma definição alterada. Confirme a cobertura e o histórico de coleta com a fonte dos dados antes de tratar esses pontos como mudanças de comportamento.
Represente cada segmento como uma linha em eixos compartilhados, com unidades e uma cor consistente por grupo. Grupos grandes podem dominar gráficos de contagem. Proporções, taxas ou um índice relativo ao valor inicial de cada grupo podem tornar visíveis as mudanças dos grupos menores; identifique a medida mostrada.
Uma coorte agrupa clientes pelo momento em que começaram. Acompanhar os que começaram em março e os que começaram em abril pelo tempo decorrido desde o primeiro pedido pode separar mudanças no histórico dos clientes de mudanças na composição geral da clientela.
Principais conclusões
- Verifique se a cobertura está completa e use os códigos atuais de períodos do calendário.
- Compare totais considerando a duração dos períodos e sua composição de dias da semana.
- Use a exposição observada para taxas e investigue lacunas antes de tratá-las como zeros.
- Compare períodos sazonais e examine histórico suficiente para interpretar a variação.
- Use taxas por segmento ou trajetórias indexadas quando os tamanhos dos grupos diferirem.
- Coortes separam o tempo desde o início de mudanças na composição geral da clientela.
6Relatar constatações exploratórias de forma reproduzível
A exploração se torna útil para outras pessoas quando suas constatações respondem a perguntas claras e suas evidências podem ser verificadas. Selecione os gráficos e números que explicam os resultados, distinga observações de causas e ações propostas e apresente os limites que afetam a interpretação. Prepare um caderno computacional organizado, exportações atualizadas e informações de proveniência suficientes para que um leitor autorizado possa repetir o trabalho.
6.1 Constatações que respondem à pergunta
Uma constatação útil conecta uma pergunta a evidências. Ela informa a magnitude de um padrão, a população e o período que descreve e as limitações que afetam sua interpretação. Construa o relatório em torno das perguntas, em vez da ordem em que os gráficos foram criados.
Fundamente uma constatação em evidências
Por exemplo: “De janeiro a setembro de 2026, a mediana do tempo de entrega foi de 29 minutos; 8% dos 48.200 pedidos levaram mais de 45 minutos. A proporção de atrasos foi maior nas noites de sexta-feira e sábado: 14%, em comparação com 6% nas outras noites.”
Essa afirmação nomeia o período, a medida de tendência central, o limite, o denominador e a comparação. Use precisão suficiente para a decisão. “29 minutos” é mais fácil de usar do que “29,4545 minutos” quando os algarismos extras não acrescentam informação prática. Para uma duração assimétrica, uma mediana e um percentil superior muitas vezes explicam a experiência melhor do que uma média isolada.
Separe o que aconteceu do porquê e do que fazer
| Tipo de afirmação | Exemplo | Função |
|---|---|---|
| Observação | “Entregas atrasadas foram mais comuns em noites chuvosas.” | Descreve uma associação observada |
| Interpretação | “A chuva torna os entregadores mais lentos.” | Propõe uma explicação causal |
| Recomendação | “Escale entregadores adicionais em noites chuvosas.” | Propõe uma ação baseada nessa explicação |
Uma recomendação depende de pressupostos sobre a causa e o efeito da ação. Mantenha esses pressupostos visíveis e indique as evidências adicionais necessárias. Uma observação pode ser útil mesmo enquanto sua explicação permanece uma hipótese.
Faça um gráfico explicar uma constatação
Selecione os poucos gráficos que respondem às perguntas e as surpresas relevantes. Mantenha outras visualizações exploratórias úteis em um apêndice ou caderno computacional. Dê ao gráfico de um relatório um título que apresente sua constatação, como “Entregas atrasadas atingem o pico nas noites de sexta-feira e sábado”. Identifique os eixos com unidades, ordene as categorias quando apropriado e mantenha a cor de cada segmento consistente entre gráficos. Inclua a fonte e o período dos dados.
Relate também evidências contraditórias. Se um gráfico combinado sugere melhora, mas um segmento grande piorou, o resultado do segmento importa para a interpretação. Selecionar apenas gráficos que apoiam uma narrativa esperada ocultaria informações necessárias ao leitor.
Organize um relatório conciso
Uma ordem clara é: pergunta e contexto; fonte dos dados, período, contagem e significado das linhas; problemas de qualidade e decisões de limpeza; três a cinco constatações principais com evidências; limitações; próximos passos. Cada constatação deve responder a uma pergunta ou explicar uma surpresa importante.
As limitações identificam o que os dados abrangem, o que foi excluído e por quê, quanto está ausente e que os padrões são associações. Por exemplo, informe a remoção de 37 pedidos cancelados de uma comparação de entregas concluídas. Os próximos passos podem incluir verificar uma hipótese com novos dados, coletar uma variável ausente, corrigir um problema no sistema de origem ou investigar uma pergunta para modelagem posterior.
Principais conclusões
- Apresente evidências, magnitude, população e período para cada constatação.
- Separe observações, interpretações e recomendações.
- Selecione e identifique gráficos em torno das constatações, mantendo visíveis as evidências contraditórias.
- Informe precisão útil, denominadores, ausência de dados e exclusões.
- Termine com próximas perguntas ou ações concretas fundamentadas na análise.
6.2 Compartilhar resultados que outras pessoas possam reproduzir
Uma análise compartilhada precisa tanto de resultados legíveis quanto de um caminho de volta ao código e às entradas que os produziram. Prepare um caderno final cuja ordem, saídas e arquivos de apoio sejam coerentes.
Organize e execute o caderno final
Remova células sem uso e duplicadas, mantenha as dependências em ordem de execução e acrescente texto em Markdown que explique as decisões entre as seções de código. Preserve separadamente o trabalho mais experimental quando for útil. Reinicie o núcleo de execução e execute todas as células antes de cada exportação. Inspecione tanto os erros quanto as saídas alteradas: uma execução bem-sucedida ainda pode revelar que um número escrito anteriormente está desatualizado.
Gere os números relatados a partir do código:
s = df["minutes"]
print(f"Median delivery time: {s.median():.0f} minutes")
Um número digitado em um parágrafo pode permanecer inalterado após a atualização dos dados. Mantenha a afirmação exibida vinculada ao cálculo para que a próxima execução a atualize.
Exporte relatórios, figuras e tabelas
Uma exportação HTML pode ser lida em um navegador sem um ambiente Python:
jupyter nbconvert --to html --execute report.ipynb
A opção de execução roda o caderno antes da conversão. Verifique o relatório resultante, além do caderno. Ferramentas de publicação como Quarto oferecem outro caminho para um relatório legível.
Salve figuras e tabelas a partir do código para que novas execuções atualizem os arquivos:
fig.savefig("figures/late_by_hour.png", dpi=200,
bbox_inches="tight")
summary.to_csv("output/city_summary.csv")
Crie as pastas de destino como parte da preparação do projeto. Uma captura de tela preserva a saída de um momento, mas não deixa uma ligação automática com o próximo cálculo.
Inclua a proveniência e as instruções de execução
Registre a fonte dos dados, a data de extração, o arquivo ou versão de entrada, a contagem de linhas, os filtros, as versões dos programas e as sementes aleatórias. Esses detalhes explicam quais entradas e configurações produziram uma constatação. Reúna configurações variáveis perto do início do caderno para que uma atualização mensal tenha um ponto de entrada claro.
Um projeto pode separar dados brutos e processados, cadernos, figuras e tabelas exportadas. Inclua um README que informe o objetivo, o diretório de trabalho esperado e as etapas de execução, além de um arquivo de ambiente com os pacotes. Mantenha o caderno, as instruções e o ambiente juntos ao compartilhar a análise reproduzível. Se as entradas exigirem acesso controlado, informe como um leitor autorizado obtém a versão correspondente dos dados.
Verifique o que as saídas revelam
Antes de compartilhar, inspecione cada célula de saída e cada exportação em busca de informações pessoais. Tabelas de prévia podem expor nomes, endereços de e-mail e localizações exatas mesmo quando o gráfico final é agregado. Remova, mascare ou agregue colunas de identificação conforme apropriado e siga os acordos e as regras de proteção de dados aplicáveis ao conjunto de dados.
Principais conclusões
- Organize o caderno final e verifique uma nova execução completa após reiniciar o núcleo.
- Calcule os números relatados em código e salve figuras e tabelas por código.
- Execute antes de exportar para que o relatório contenha saídas atualizadas.
- Inclua proveniência dos dados, configurações, ambiente e instruções claras de execução.
- Inspecione todas as saídas compartilhadas em busca de informações pessoais.
Exercícios resolvidos de Análise exploratória de dados em Python
1Transformar uma solicitação ampla em uma análise reproduzível
12 passos
- 1IntroduçãoDê à análise um ponto de partida claro
Uma equipe pergunta: “Qual é a confiabilidade do nosso serviço de reparos?” Você tem uma tabela de tarefas de reparo e um caderno computacional. Antes de criar um gráfico, decida o que a equipe precisa saber e o que cada linha pode informar. Você transformará a solicitação em perguntas concretas, identificará o nível de detalhe e organizará o trabalho para que uma nova sessão do caderno possa repeti-lo.
- 2ExplicaçãoFaça perguntas que sugiram uma comparação
Comece pela decisão: talvez a equipe precise identificar onde ocorrem esperas longas. Perguntas úteis são “Qual é o tempo típico de reparo?”, “Que proporção ultrapassa nosso limite de atendimento?” e “Como os tempos diferem por modelo de dispositivo?”. Cada uma nomeia uma quantidade ou comparação. Reserve espaço para novas perguntas quando um gráfico revelar um grupo inesperado ou um problema de qualidade.
- 3ExemploEstabeleça o que as linhas representam
O arquivo contém 900 linhas de tarefas e 300 IDs de serviços distintos. Um serviço pode envolver várias tarefas. A razão é de 3 tarefas por serviço em média, mas serviços individuais podem ter números diferentes de tarefas. Contar linhas responde a uma pergunta sobre tarefas. Uma pergunta sobre o número de serviços exige IDs de serviços distintos ou uma tabela no nível do serviço, com uma regra justificada para combinar informações das tarefas.
- 4DesafioEscolha a contagem que corresponde à pergunta
A equipe quer saber a proporção de serviços com atraso. A tabela tem várias linhas de tarefas por serviço. Calcular a média de um indicador de atraso no nível da tarefa responderia a essa pergunta?
---reveal---
Isso fornece a proporção de tarefas atrasadas e dá mais peso a serviços com várias tarefas. Primeiro defina quando um serviço conta como atrasado, combine as informações das tarefas no nível do serviço e divida os serviços atrasados pelos serviços elegíveis.
- 5ConexãoVolte às verificações de qualidade quando um padrão surpreender
A exploração funciona em ciclo: perguntas, carregamento, caracterização, distribuições, relações, comparações e constatações. Suponha que um modelo de dispositivo pareça levar 1.000 vezes mais tempo. Volte às definições das colunas e às unidades da fonte antes de explicar uma diferença de desempenho. A surpresa gerou uma pergunta sobre qualidade, que pode mudar a próxima etapa da análise.
- 6Ideia-chaveSepare uma descoberta de uma verificação planejada
Um padrão encontrado após examinar muitos gráficos é uma pista para trabalho posterior. A análise confirmatória verifica uma hipótese formulada antecipadamente, de preferência com novas observações. Verifique também quem está representado: avaliações de clientes que ofereceram feedback voluntariamente descrevem esses respondentes. O processo de coleta determina quais evidências são necessárias para estender a constatação a todas as pessoas atendidas.
- 7ExplicaçãoVeja o que o núcleo de execução lembra
O núcleo de execução de um caderno mantém variáveis entre execuções de células. Se você criar uma tabela filtrada, excluir a célula que a definiu e continuar usando-a em gráficos, a sessão atual ainda pode funcionar. Um novo núcleo não tem como recriar essa tabela. Os contadores de execução revelam a ordem de execução, mas a verificação decisiva é reiniciar e depois executar todas as células de cima para baixo.
- 8ExemploTorne as dependências visíveis
Organize o caderno com objetivo e perguntas, importações, configurações e depois seções de análise. Coloque caminhos, limites e sementes que podem mudar na célula de configurações. Use um caminho relativo do projeto, como
Path("data/raw/repairs.csv"), e documente o diretório de trabalho. Mantenha os arquivos brutos inalterados e expresse as correções em código para que o próximo conjunto de dados siga o mesmo procedimento. - 9DicaControle as partes que variam entre execuções
Registre as versões dos pacotes e salve um arquivo de ambiente. Fixe a semente de cada etapa aleatória; para uma tabela com pelo menos 200 linhas,
df.sample(n=200, random_state=17)repete a amostra com entradas e programas correspondentes. Uma semente fixa não pode restaurar um arquivo de entrada sobrescrito, então registre também a versão dos dados e os detalhes da extração. - 10DesafioEncontre uma dependência invisível
Uma célula de resumo é executada com sucesso agora. Após reiniciar e executar todas as células, ela falha porque
job_totalsnão está definido. O que isso indica e o que você deve corrigir?---reveal---
O núcleo de execução antigo mantinha uma variável que a sequência visível não cria. Restaure ou mova o código que a define para antes do resumo e execute todo o caderno novamente. Salvar a saída antiga preservaria o resultado sem corrigir sua dependência.
- 11DesafioVerifique um novo arquivo antes de responder à mesma pergunta
O arquivo do mês seguinte chega. Sua pergunta conta serviços, e espera-se que a tabela preparada no nível do serviço tenha IDs de serviços únicos. Como você pode combinar a verificação do significado das linhas com uma nova execução confiável?
---reveal---
Carregue a nova versão por meio da célula de configurações e use uma asserção para verificar se a chave de serviço da tabela preparada é única. Reinicie e execute todas as células. Uma verificação que falha revela um problema de entrada ou preparação antes que serviços repetidos distorçam a proporção relatada.
- 12RecapitulaçãoMantenha a pergunta e o cálculo juntos
Agora você tem uma pergunta vinculada a uma decisão, um significado de linha que determina as contagens e um caderno com dependências visíveis. Use os mesmos hábitos na primeira caracterização: registre a versão da entrada, inspecione sua estrutura e deixe que verificações interrompam a execução quando os pressupostos falharem. Quando um novo padrão aparecer, decida se ele exige outra verificação de qualidade, uma nova comparação ou uma hipótese para investigação posterior.
2Inspecionar um novo arquivo antes de confiar em seus padrões
13 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoConstrua uma caracterização fundamentada em evidências
- 2ExplicaçãoInspecione além das primeiras linhas
- 3ExemploEscolha tipos para análise a partir dos significados das colunas
- 4DesafioVerifique o que uma conversão perdeu
- 5ExplicaçãoQuantifique as lacunas antes de escolher um tratamento
- 6ExemploVeja como a exclusão muda a composição
- 7Ideia-chaveMantenha a afirmação sobre ausência dentro das evidências
- 8DesafioInterprete contagens de duplicatas
- 9ExemploSepare valores ausentes de valores registrados inválidos
- 10ExplicaçãoVerifique a concordância entre campos
- 11DesafioEscolha uma ação justificada
- 12DesafioConecte a caracterização à próxima comparação
- 13RecapitulaçãoMantenha a caracterização junto das constatações
3Construir um panorama completo de cada variável
17 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoOlhe além de uma única média
- 2ExplicaçãoCompare tendência central e dispersão
- 3ExemploCalcule as medidas de tendência central
- 4ExemploAcrescente uma medida da dispersão central
- 5DesafioPreveja o efeito de um valor extremo
- 6ExplicaçãoUse intervalos de classe para revelar a estrutura
- 7ExemploInterprete o que um gráfico acumulado responde
- 8DesafioInvestigue um segundo pico suspeito
- 9DicaInterprete curvas suaves e escalas com cuidado
- 10ExemploResuma categorias com uma base clara
- 11ExplicaçãoMantenha “Other” distinto dos valores ausentes
- 12DesafioVerifique o limite de um intervalo
- 13ExemploCalcule limites para valores atípicos
- 14Ideia-chaveVeja como um valor pode mascarar a si mesmo
- 15DesafioTome uma decisão de tratamento com base em evidências
- 16DesafioTransforme o panorama em uma constatação
- 17RecapitulaçãoEscolha uma visualização para a pergunta
4Interpretar uma associação antes de explicá-la
15 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoMantenha as observações em vista
- 2ExemploDescreva mais do que a direção
- 3DicaRevele a densidade e os grupos
- 4DesafioEscolha um ajuste do gráfico com um propósito
- 5ExplicaçãoIdentifique o que Pearson mede
- 6ExemploUse um exemplo curvo para testar o significado
- 7ExplicaçãoUse postos para uma ordenação consistente
- 8DesafioInvestigue um coeficiente dominado por um ponto
- 9DicaInterprete a amostra por trás de uma célula do mapa de calor
- 10ExplicaçãoListe direções plausíveis e causas comuns
- 11ExemploCompare dentro dos grupos de dificuldade
- 12ExemploVeja a inversão no resultado combinado
- 13DesafioEscolha o nível de interpretação
- 14DesafioEscolha evidências adicionais para um resultado surpreendente
- 15RecapitulaçãoRelate o padrão e a pergunta que permanece
5Comparar grupos na mesma base
15 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoTorne visível a base da comparação
- 2ExemploInclua informações suficientes para avaliar uma média
- 3ExemploExpresse uma diferença com sua referência
- 4DesafioProcure uma diferença oculta na distribuição
- 5ExemploEscolha a direção de uma porcentagem
- 6DicaMantenha resultados ausentes fora do grupo False
- 7DesafioDistingua a diferença da variação relativa
- 8DesafioTeste se as contagens respondem à pergunta sobre a taxa
- 9ExplicaçãoAgregue o período que você pretende comparar
- 10ExemploCalcule a atividade ajustada pela exposição
- 11ConexãoSepare um ciclo recorrente de uma mudança
- 12DesafioInvestigue um zero antes de interpretá-lo
- 13Ideia-chaveAlinhe os históricos dos clientes
- 14DesafioCombine verificações de taxa e cobertura
- 15RecapitulaçãoVincule cada comparação ao seu denominador
6Transformar a exploração em um relatório verificável
11 passos
Salve esta aula para seguir cada Lição Interativa passo a passo.
- 1IntroduçãoAjude o leitor a avaliar o resultado
- 2ExemploEscreva uma constatação com magnitude e escopo
- 3ExplicaçãoSepare as camadas de uma afirmação
- 4DicaSelecione gráficos em torno da pergunta
- 5DesafioCorrija uma constatação ampla demais
- 6ExplicaçãoFaça da execução final a fonte do relatório
- 7ExemploExporte os arquivos atualizados
- 8ExplicaçãoRegistre o que um analista posterior precisa reproduzir
- 9DesafioVerifique todo o material compartilhado
- 10DesafioResolva uma saída alterada antes da divulgação
- 11RecapitulaçãoEntregue evidências com um caminho de volta a elas
Questões de Análise exploratória de dados em Python
Conjunto 1: Começar com dados confiáveis10 Questões de Prática
Questão 1 de 10
len(df) conta?Mostrar respostaOcultar resposta
Questão 2 de 10
Mostrar respostaOcultar resposta
Questão 3 de 10
Mostrar respostaOcultar resposta
Questão 4 de 10
clean com sucesso, mas uma nova execução de todas as células após reiniciar gera NameError nessa célula. O que você deve investigar primeiro?Mostrar respostaOcultar resposta
Questão 5 de 10
pd.to_numeric(s, errors="coerce"), o que precisa de investigação?Mostrar respostaOcultar resposta
Questão 6 de 10
s.duplicated(keep=False).sum() retorna?Mostrar respostaOcultar resposta
keep=False inclui essas primeiras cópias para que você possa inspecionar os conflitos completos.Questão 7 de 10
Mostrar respostaOcultar resposta
between retorna False para elas, misturando dois problemas de qualidade diferentes.Questão 8 de 10
Mostrar respostaOcultar resposta
Questão 9 de 10
Mostrar respostaOcultar resposta
Questão 10 de 10
Mostrar respostaOcultar resposta
Conjunto 2: Interpretar distribuições e investigar extremos10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
value_counts(normalize=True) informa?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
bins=[0, 20, 50, np.inf], include_lowest=True e o fechamento padrão dos intervalos. Em quais intervalos ficam 0, 20 e 50?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 3: Interpretar relações e diferenças entre grupos10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
min_periods=400. Sua célula x–y pode conter validamente 0,82?Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 4: Escolher denominadores e períodos comparáveis10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Conjunto 5: Produzir e compartilhar constatações fundamentadas10 Questões de Prática
Salve esta aula para ver todas as respostas e praticar cada conjunto.
Questão 1 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 2 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 3 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 4 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 5 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 6 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 7 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 8 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 9 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Questão 10 de 10
Mostrar respostaOcultar resposta
Salve esta aula para ver esta resposta.
Travou em uma questão sua? Ajuda com Tarefas
Termos-Chave
A
Amplitude interquartil
Análise confirmatória
Análise de sensibilidade
Análise exploratória de dados
Arquivo de ambiente
Asserção
Assimetria
Associação monotônica
Ausência ao acaso (MAR)
Ausência completamente ao acaso (MCAR)
Ausência de dados
Ausência não ao acaso (MNAR)
C
Caderno computacional
Cardinalidade
Categoria “Outros”
Causalidade reversa
Chave
Concentração em valores arredondados ou preferidos
Consistência
Constatação
Coorte
Correlação de Pearson
Correlação de Spearman
D
Desvio absoluto mediano
Desvio padrão
Dicionário de dados
Diferença relativa
E
Escala logarítmica
Escore z
Escore z modificado
Estado oculto
Estimativa de densidade por núcleo
Exportação por código
F
Falácia ecológica
Função de distribuição acumulada empírica
G
Gráfico de dispersão
H
Hipótese
Histograma
I
Interpretação
Intervalo de classe
L
Limitação
Limites de Tukey
Linha de base
M
Mascaramento
Matriz de correlação
Matriz de gráficos de pares
Média aritmética
Média móvel
Mediana
N
Normalização por coluna
Normalização por linha
Núcleo de execução
O
Observação
P
Paradoxo de Simpson
Pequeno deslocamento visual aleatório
Percentil
Período parcial
Ponto percentual
Proveniência
R
Reamostragem temporal
Recomendação
Registro de qualidade dos dados
Registro duplicado
Regra do domínio de aplicação
Relatório estático
Reprodutibilidade
S
Sazonalidade
Segmento
Semente do gerador de números aleatórios
Sobreposição excessiva de elementos gráficos
T
Tabela de frequências
Tabulação cruzada
Tamanho do grupo
Tau de Kendall
Taxa
Taxa de base
Tipo de dados
U
Unidade de observação
V
Validade
Valor atípico
Variável de confusão
Variável mediadora
Variável nominal
Variável ordinal
W
Winsorização
Sobre esta aula
Crie seus próprios Materiais de Estudo
Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.