Limpeza e pré-processamento de dados extraídos

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

Nesta publicação do blogue, vamos explorar os vários desafios que pode enfrentar com os dados extraídos e oferecer um guia detalhado sobre como os limpar e pré-processar para obter os melhores resultados. Quer seja um analista de dados experiente ou um raspador da Web em início de carreira que utiliza Python, este guia tem como objetivo fornecer-lhe dicas e técnicas práticas para organizar eficazmente os seus conjuntos de dados.

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 nos dados extraídos

Os dados extraídos têm muitas vezes o seu próprio conjunto de desafios. Alguns dos problemas mais comuns são irregularidades, inconsistências e valores em falta. Estes problemas podem prejudicar significativamente a sua capacidade de analisar os dados de forma eficaz.

Exemplos de irregularidades e incoerências

As irregularidades podem assumir muitas formas. Por exemplo, imagine-se a recolha de preços de produtos de vários sítios Web 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 - por exemplo, quilogramas ou libras. Estas inconsistências requerem uma limpeza e um pré-processamento exaustivos para garantir que os dados são exactos e comparáveis.

Impacto da má qualidade dos dados

A má qualidade dos dados não só distorce os resultados, como também pode levar a decisões comerciais incorrectas. Para os analistas de dados, este facto torna a fase de limpeza não negociável. Dados corretamente limpos garantem que as análises subsequentes são fiáveis e perspicazes.

Ferramentas e técnicas para limpeza de dados

Guia passo-a-passo utilizando Pandas

Vamos analisar um exemplo básico de limpeza de um conjunto de dados utilizando o Pandas. Suponha que recolheu dados sobre filmes, mas os dados incluem valores em falta e formatação inconsistente.

Passo 1 - Carregamento de dados:

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

Passo 2 - Tratamento de valores em falta:

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

Etapa 3 - Normalização dos formatos:

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

Passo 4 - Remoção de duplicados:

df.drop_duplicates(inplace=True)

Utilização 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 anómalos, pode utilizar 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 depois de tratar os valores atípicos:
   A B
0 1 10
1 2 20
2 3 30
3 100 40
4 5 100

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

Normalização de formatos e estruturas de dados

A normalização é crucial quando se lida com várias fontes de dados. Certifique-se de que pontos de dados semelhantes de fontes diferentes seguem o mesmo formato. Por exemplo, as datas devem estar num formato normalizado como o ISO 8601 para evitar ambiguidades.

Tratamento de dados em falta ou incorrectos

Os dados em falta devem ser tratados de forma adequada. Técnicas como a imputação podem preencher os valores em falta com base noutros dados disponíveis. Os dados incorrectos, por outro lado, requerem frequentemente uma 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. Utilize scripts para garantir que os seus dados cumprem regras predefinidas. Por exemplo, se uma coluna só deve conter números positivos, escreva um script de validação para assinalar quaisquer anomalias.

Estudo de caso: Aplicação no mundo real

Vamos mergulhar num exemplo prático para ver como podemos resolver alguns dos desafios comuns dos dados extraídos. Vamos percorrer o processo de recolha, limpeza e análise de dados de um hipotético Web site de anúncios de emprego, concentrando-nos em problemas reais que poderá encontrar.

Passo 1: Recolha de dados

Imagine que está a extrair 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 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)

Nesta altura, os dados podem ser mais ou menos assim:

títuloempresasalário
engenheiro de softwareEmpresa de tecnologia$100,000
programador séniorInovatech$120,000
Desenvolvimento JúniorarranqueX$80,000
Analista de dadosBigData Inc$95000
cientista de dados séniordatamina140,000 USD

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

Passo 2: Limpar os dados

A limpeza destes dados é crucial antes de se poder efetuar qualquer análise significativa. Vamos analisar os passos:

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

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

Após este passo, os dados terão um aspeto mais uniforme:

títuloempresasalário
Engenheiro de softwareEmpresa de tecnologia$100,000
Programador 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, dificultando as comparações directas. Vamos retirar o sinal de dólar e as vírgulas e, em seguida, converter essas cadeias de caracteres em valores numéricos.

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

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

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

3: Tratamento de dados em falta: Suponha que algumas listagens de empregos não tenham informações sobre salários. Em vez de eliminar estas linhas, pode optar por preencher os valores em falta 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)

Passo 3: Analisar os dados limpos

Com os dados limpos, pode agora efetuar uma análise significativa. Por exemplo, pode querer compreender a distribuição salarial entre diferentes cargos:

imprimir(df.groupby('title')['salário'].descrever())

Este comando dá-lhe um resumo estatístico para cada cargo, fornecendo informações sobre as tendências salariais.

Exemplo: Abordagem de outliers com NumPy

Nalguns casos, os seus dados podem conter valores aberrantes - valores salariais extremamente altos ou baixos que podem distorcer a sua análise. O NumPy pode ser utilizado para limitar estes valores anómalos:

importar numpy as np

# Limitar os salários a um limiar (por exemplo, 200.000)
salário_limiar = 200000
df['salary'] = np.where(df['salary'] > threshold_salary, threshold_salary, df['salary'])

print(df)

Depois de aplicar o limite, o conjunto de dados pode ter o seguinte aspeto:

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

Impacto na perceção e na tomada de decisões

Ao limpar e pré-processar os seus dados, transformou um conjunto de dados confuso num recurso valioso. Agora, pode retirar conclusões com confiança, como a identificação das empresas mais bem pagas ou a análise das tendências salariais em todos os sectores. Estas informações informam diretamente as estratégias empresariais, tais como o benchmarking salarial ou os planos de aquisição de talentos.

Conclusão e próximas etapas

Nesta publicação do blogue, abordámos a importância da limpeza e do pré-processamento de dados extraídos. Desde a compreensão dos desafios comuns até à utilização de poderosas bibliotecas Python como Pandas e NumPy, a sua caixa de ferramentas está agora equipada com o essencial.

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

Pronto para levar a sua análise de dados para o próximo nível? Comece a implementar estas estratégias hoje mesmo e consulte os nossos outros recursos para aprofundar os seus conhecimentos sobre limpeza e pré-processamento de dados. Boa raspagem!