Limpeza e pré-processamento de dados raspados

Guias, Como fazer, Ago-06-20245 minutos de leitura

Nesta postagem do blog, exploraremos os vários desafios que você pode enfrentar com os dados extraídos e ofereceremos um guia detalhado sobre como limpá-los e pré-processá-los para obter os melhores resultados. Não importa se você é um analista de dados experiente ou um raspador da Web iniciante usando Python, este guia tem o objetivo de fornecer dicas e técnicas práticas para organizar seus conjuntos de dados com eficiência.

De armadilhas comuns a práticas recomendadas e exemplos do mundo real, fique atento para saber como tornar seus dados raspados tão limpos e acionáveis quanto possível.

Desafios comuns em dados extraídos

Os dados extraídos geralmente apresentam seu próprio conjunto de desafios. Alguns dos problemas mais comuns são irregularidades, inconsistências e valores ausentes. Esses problemas podem prejudicar significativamente sua capacidade de analisar os dados de forma eficaz.

Exemplos de irregularidades e inconsistências

As irregularidades podem assumir várias formas. Por exemplo, imagine scraping preços de produtos de vários sites de comércio eletrônico. Um site pode listar os preços incluindo impostos, enquanto outro pode excluí-los. As unidades de medida também podem ser diferentes - pense em quilogramas versus libras. Essas inconsistências exigem limpeza e pré-processamento completos para garantir que seus dados sejam precisos e comparáveis.

Impacto da baixa qualidade dos dados

A baixa qualidade dos dados não apenas distorce seus resultados, mas também pode levar a decisões comerciais incorretas. Para os analistas de dados, isso torna a fase de limpeza inegociável. Dados adequadamente limpos garantem que as análises subsequentes sejam confiáveis e perspicazes.

Ferramentas e técnicas para limpeza de dados

Guia passo a passo usando Pandas

Vamos examinar um exemplo básico de limpeza de um conjunto de dados usando o Pandas. Suponha que você tenha coletado dados sobre filmes, mas os dados incluem valores ausentes e formatação inconsistente.

Etapa 1 - Carregando dados:

   importar pandas como pd
   df = pd.read_csv('movies.csv')

Etapa 2 - Manuseio de valores ausentes:

   df.fillna(method='ffill', inplace=True)

Etapa 3 - Padronização de formatos:

df['release_date'] = pd.to_datetime(df['release_date'])

Etapa 4 - Remoção de duplicatas:

df.drop_duplicates(inplace=True)

Aproveitamento do NumPy para limpeza de dados

O NumPy complementa o Pandas fornecendo funções matemáticas de alto desempenho. Por exemplo, para lidar com valores discrepantes, você pode usar a função `np.where` do NumPy para limitar os valores extremos.

import pandas as pd
import numpy as np
# Sample data
data = {
   'A': [1, 2, 3, 1000, 5],
   'B': [10, 20, 30, 40, 5000]
}
# Create a DataFrame
df = pd.DataFrame(data)
# Define a threshold to cap the values
threshold_A = 100
threshold_B = 100
# Use np.where to cap the extreme values
df['A'] = np.where(df['A'] > threshold_A, threshold_A, df['A'])
df['B'] = np.where(df['B'] > threshold_B, threshold_B, df['B'])
print("DataFrame after handling outliers:")
print(df)

Aqui está o resultado do script acima:

DataFrame após o tratamento de outliers:
   A B
0 1 10
1 2 20
2 3 30
3 100 40
4 5 100

Práticas recomendadas no pré-processamento de dados extraídos

Padronização de formatos e estruturas de dados

A padronização é fundamental ao lidar com várias fontes de dados. Certifique-se de que pontos de dados semelhantes de fontes diferentes sigam o mesmo formato. Por exemplo, as datas devem estar em um formato padrão como o ISO 8601 para evitar ambiguidade.

Tratamento de dados ausentes ou incorretos

Os dados faltantes devem ser tratados adequadamente. Técnicas como a imputação podem preencher os valores ausentes com base em outros dados disponíveis. Os dados incorretos, por outro lado, geralmente exigem inspeção manual ou algoritmos de validação para serem corrigidos.

Garantir a consistência dos dados

As verificações de consistência são vitais. Use scripts para garantir que seus dados atendam a regras predefinidas. Por exemplo, se uma coluna só deve conter números positivos, escreva um script de validação para sinalizar qualquer anomalia.

Estudo de caso: Aplicativo do mundo real

Vamos nos aprofundar em um exemplo prático para ver como podemos abordar alguns dos desafios comuns dos dados extraídos. Analisaremos o processo de scraping, limpeza e análise de dados de um site hipotético de anúncios de emprego, com foco em problemas reais que você pode encontrar.

Etapa 1: Scraping Data

Imagine que você está acessando scraping dados de um site de anúncios de emprego. O objetivo é coletar títulos de cargos, nomes de empresas e faixas salariais. Aqui está um exemplo de script Python usando o BeautifulSoup para extrair esses dados:

from bs4 import BeautifulSoup
import requests
import pandas as pd

url = "https://example-jobsite.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

jobs = []
for job_post in soup.find_all('div', class_='job'):
    title = job_post.find('h2').text
    company = job_post.find('p', class_='company').text
    salary = job_post.find('span', class_='salary').text
    jobs.append({'title': title, 'company': company, 'salary': salary})

df = pd.DataFrame(jobs)

Nesse ponto, os dados podem ser mais ou menos assim:

títuloempresasalário
engenheiro de softwareEmpresa de tecnologia$100,000
desenvolvedor sêniorInovatech$120,000
Desenvolvimento JúniorstartupX$80,000
Analista de dadosBigData Inc$95000
cientista de dados sêniordatamine140,000 USD

Observe as inconsistências: capitalização variável, símbolos de moeda diferentes e formatação inconsistente para valores salariais.

Etapa 2: Limpeza dos dados

A limpeza desses dados é crucial antes que qualquer análise significativa possa ser realizada. Vamos detalhar as etapas:

1. Padronização de dados de texto: Os títulos de cargos e nomes de empresas geralmente sofrem com a formatação inconsistente. Podemos padronizá-los colocando-os em letras maiúsculas de maneira uniforme.

df['title'] = df['title'].str.strip().str.title()
df['company'] = df['company'].str.strip().str.title()

Após essa etapa, os dados parecerão mais uniformes:

títuloempresasalário
Engenheiro de softwareEmpresa de tecnologia$100,000
Desenvolvedor sêniorInovatech$120,000
Desenvolvimento JúniorStartupx$80,000
Analista de dadosBigdata Inc$95000
Cientista de dados sêniorDatamine140,000 USD

2: Padronização de dados numéricos: Os valores salariais podem conter símbolos e formatos diferentes, o que dificulta as comparações diretas. Retiraremos o cifrão e as vírgulas e converteremos essas cadeias de caracteres em valores numéricos.

df['salary'] = df['salary'].str.replace('[\$,]', '').str.replace('USD', '').astype(float)

Agora, sua coluna de salário terá valores numéricos consistentes:

títuloempresasalário
Engenheiro de softwareEmpresa de tecnologia100000
Desenvolvedor sêniorInovatech120000
Desenvolvimento JúniorStartupx80000
Analista de dadosBigdata Inc95000
Cientista de dados sêniorDatamine140000

3: Tratamento de dados ausentes: Suponha que algumas listagens de empregos não contenham informações sobre salários. Em vez de descartar essas linhas, você pode optar por preencher os valores ausentes com base em alguma lógica, como o salário médio para esse cargo:

df['salary'].fillna(df.groupby('title')['salary'].transform('median'), inplace=True)

Etapa 3: Analisando os dados limpos

Com os dados limpos, agora você pode realizar análises significativas. Por exemplo, talvez você queira entender a distribuição salarial entre diferentes cargos:

imprimir(df.groupby('title')['salary'].describe())

Esse comando lhe dará um resumo estatístico de cada cargo, fornecendo informações sobre as tendências salariais.

Exemplo: Como lidar com outliers com o NumPy

Em alguns casos, seus dados podem conter outliers - valores salariais extremamente altos ou baixos que podem distorcer sua análise. O NumPy pode ser usado para limitar esses valores discrepantes:

importar numpy como np

# Limite os salários em um limite (por exemplo, 200.000)
salário_limite = 200000
df['salary'] = np.where(df['salary'] > threshold_salary, threshold_salary, df['salary'])

print(df)

Depois de aplicar o limite, seu conjunto de dados pode ter a seguinte aparência:

títuloempresasalário
Engenheiro de softwareEmpresa de tecnologia100000
Desenvolvedor sêniorInovatech120000
Desenvolvimento JúniorStartupx80000
Analista de dadosBigdata Inc95000
Cientista de dados sêniorDatamine200000

Impacto nas percepções e na tomada de decisões

Ao limpar e pré-processar seus dados, você transformou um conjunto de dados confuso em um recurso valioso. Agora, você pode obter insights com confiança, como identificar as empresas mais bem pagas ou analisar as tendências salariais entre os setores. Esses insights informam diretamente as estratégias de negócios, como benchmarking salarial ou planos de aquisição de talentos.

Conclusão e próximas etapas

Nesta postagem do blog, abordamos a importância da limpeza e do pré-processamento de dados extraídos. Desde a compreensão dos desafios comuns até o aproveitamento de bibliotecas Python poderosas, como Pandas e NumPy, sua caixa de ferramentas agora está abastecida com o essencial.

Lembre-se, dados limpos não são apenas um luxo, mas uma necessidade para tomar decisões precisas e confiáveis. Ao seguir as práticas recomendadas descritas aqui, você pode garantir que sua análise de dados seja eficiente e eficaz.

Pronto para levar sua análise de dados para o próximo nível? Comece a implementar essas estratégias hoje mesmo e confira nossos outros recursos para aprofundar seu conhecimento sobre limpeza e pré-processamento de dados. Feliz scraping!