清理和预处理扫描数据

指南, 如何, Aug-05-20245 分钟阅读

在这篇博文中,我们将探讨您在使用刮擦数据时可能面临的各种挑战,并就如何清理和预处理数据以获得最佳结果提供详细指导。无论您是经验丰富的数据分析师,还是刚开始使用 Python 进行网络搜刮的新手,本指南都将为您提供实用的技巧和技术,帮助您高效地整理数据集。

从常见误区到最佳实践和真实案例,敬请关注,了解如何尽可能使您的数据刮擦干净并具有可操作性。

抓取数据的常见挑战

抓取的数据通常会带来一系列挑战。一些最常见的问题是不规则、不一致和缺失值。这些问题会严重影响您有效分析数据的能力。

不规范和不一致的例子

违规行为有多种形式。例如,试想从多个电子商务网站搜索产品价格。一个网站列出的价格可能含税,而另一个网站可能不含税。计量单位也可能不同,比如公斤与磅。为了确保数据的准确性和可比性,有必要对这些不一致之处进行彻底清理和预处理。

数据质量差的影响

糟糕的数据质量不仅会影响结果,还会导致错误的业务决策。因此,对于数据分析师来说,清理阶段是必不可少的。经过适当清理的数据可确保后续分析既可靠又有洞察力。

数据清理工具和技术

使用 Pandas 的分步指南

让我们举一个使用 Pandas 清理数据集的基本例子。假设您采集了有关电影的数据,但数据中包含缺失值和不一致的格式。

第 1 步 - 载入数据:

   pandas导入pd
   df = pd.read_csv('movies.csv')

步骤 2 - 处理缺失值:

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

步骤 3 - 格式标准化:

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

第 4 步 - 删除重复内容:

df.drop_duplicates(inplace=True)

利用 NumPy 进行数据清理

NumPy 提供高性能的数学函数,是对 Pandas 的补充。例如,要处理异常值,可以使用 NumPy 的 `np.where` 函数来限制极值。

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)

以下是上述脚本的输出结果:

处理异常值后的DataFrameAB
0 1 10
1 2 20
2 3 30
3 100 40
4 5 100

预处理刮擦数据的最佳做法

数据格式和结构标准化

在处理多个数据源时,标准化至关重要。确保不同来源的类似数据点遵循相同的格式。例如,日期应采用 ISO 8601 等标准格式,以避免歧义。

处理缺失或错误数据

应适当处理缺失数据。估算等技术可以根据其他可用数据填补缺失值。另一方面,不正确的数据通常需要人工检查或验证算法来纠正。

确保数据一致性

一致性检查至关重要。使用脚本确保数据符合预定义的规则。例如,如果一列只应包含正数,则编写一个验证脚本来标记任何异常。

案例研究:实际应用

让我们深入一个实际案例,看看如何解决刮擦数据中的一些常见问题。我们将从一个假定的职位列表网站中进行数据搜刮、清理和分析,重点关注您可能遇到的实际问题。

步骤 1:搜索数据

想象一下,你正在从一个职位列表网站上搜索数据。目标是收集职位名称、公司名称和薪资范围。下面是一个使用 BeautifulSoup 提取这些数据的 Python 脚本示例:

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)

此时,数据可能是这样的

标题公司薪金
软件工程师技术公司$100,000
高级开发人员创新科技$120,000
初级开发人员启动X$80,000
数据分析师BigData 公司$95000
高级数据科学家数据监控140,000 USD

请注意这些不一致之处:不同的大写字母、不同的货币符号以及不一致的工资值格式。

步骤 2:清理数据

在进行任何有意义的分析之前,清理这些数据至关重要。让我们来分解一下步骤:

1.文本数据标准化:职位名称和公司名称通常存在格式不统一的问题。我们可以通过统一大写来实现标准化。

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

经过这一步,数据看起来会更加统一:

标题公司薪金
软件工程师技术公司$100,000
高级开发人员创新科技$120,000
初级开发人员启动x$80,000
数据分析师Bigdata 公司$95000
高级数据科学家Datamine140,000 USD

2:数值数据标准化:工资值可能包含不同的符号和格式,因此很难进行直接比较。我们将去掉美元符号和逗号,然后将这些字符串转换为数值。

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

现在,您的工资栏将拥有一致的数值:

标题公司薪金
软件工程师技术公司100000
高级开发人员创新科技120000
初级开发人员启动x80000
数据分析师Bigdata 公司95000
高级数据科学家Datamine140000

3:处理缺失数据:假设某些职位列表缺少薪资信息。与其丢弃这些行,您可能会选择根据一些逻辑填入缺失值,例如该职位名称的工资中位数:

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

步骤 3:分析清理后的数据

有了经过清理的数据,您就可以进行有意义的分析了。例如,您可能想了解不同职称的薪酬分布情况:

打印(df.groupby('title')['salary'].describe())

该命令将为您提供每个职位名称的统计摘要,让您深入了解薪酬趋势。

示例:使用 NumPy 处理异常值

在某些情况下,您的数据可能包含离群值--极高或极低的工资值,这会影响您的分析。NumPy 可用于消除这些异常值:

导入 numpy 为 np

# 将工资上限设定为一个阈值(例如 200,000)
threshold_salary = 200000
df['salary'] = np.where(df['salary'] > threshold_salary, threshold_salary,df['salary'])

print(df)

封顶后,您的数据集可能如下所示:

标题公司薪金
软件工程师技术公司100000
高级开发人员创新科技120000
初级开发人员启动x80000
数据分析师Bigdata 公司95000
高级数据科学家Datamine200000

对洞察力和决策的影响

通过对数据进行清理和预处理,您已将杂乱无章的数据集转化为宝贵的资源。现在,您可以自信地提出自己的见解,例如确定薪酬最高的公司或分析各行业的薪酬趋势。这些洞察力可直接为业务战略提供信息,如薪酬基准或人才招聘计划。

结论和下一步措施

在这篇博文中,我们介绍了清理和预处理刮擦数据的重要性。从了解常见挑战到利用强大的 Python 库(如 Pandas 和 NumPy),您的工具箱里现在已经装满了必需品。

请记住,要做出准确可靠的决策,干净的数据不仅是奢侈品,更是必需品。通过遵循这里概述的最佳实践,您可以确保您的数据分析既高效又有效。

准备好让您的数据分析更上一层楼了吗?今天就开始实施这些策略,并查看我们的其他资源,加深对数据清理和预处理的理解。祝您采集愉快