爬虫数据的清洗与预处理技术
发布时间: 2023-12-16 05:24:47 阅读量: 121 订阅数: 24
recruit:recruit 招聘爬虫+数据分析 1.爬虫: 采用Scrapy 分布式爬虫技术,使用mongodb作为数据存储,爬取的网站Demo为51job,数据我目前爬了有几千条 2.数据处理: 采用pandas对爬取的数据进行清洗和处理 2.数据分析: 采用flask后端获取mongodb数据,前端使用bootstrap3.echarts以及D3的词云图,如果喜欢请star or Fork,预览详见
# 第一章:爬虫数据清洗与预处理技术概述
## 1.1 爬虫数据的特点与挑战
在进行网页爬虫时,我们获取到的数据往往是杂乱无章的。其中存在重复数据、噪声数据、格式不统一的数据等问题。这些杂乱的数据给后续的数据分析和挖掘带来了很大的困难和误差。因此,对爬虫数据进行清洗和预处理十分重要。
## 1.2 数据清洗与预处理的重要性
数据清洗和预处理是数据分析的第一步,它可以帮助我们从海量的数据中提取有用的信息。通过去除重复数据、噪声数据和异常值,数据质量将得到有效提升。此外,数据清洗和预处理还可以对数据进行归一化、标准化和格式规范化操作,使数据更易于存储、处理和分析。
## 1.3 目前存在的问题与挑战
尽管数据清洗和预处理技术已有较大发展,但仍存在一些问题和挑战。首先,数据清洗和预处理的操作通常需要使用人工规则,效率较低且不易保证准确性。其次,不同领域的数据可能具有不同的特点和规律,需要针对性地开发新的数据清洗和预处理方法。另外,大数据时代下,数据量庞大,对清洗和预处理的算法和技术提出了更高的要求。
## 第二章:爬虫数据清洗技术
### 2.1 数据去重与去噪技术
在进行爬虫数据清洗时,我们经常会遇到数据重复和噪声数据的问题。数据去重和去噪是数据清洗的基本步骤,它们可以帮助我们提高数据的准确性和可用性。
#### 2.1.1 数据去重技术
数据去重是指找出并删除数据集中的重复记录。在爬虫数据中,重复记录可能是由于网页结构变动、爬虫程序运行异常等原因导致的。以下是一种基于哈希算法的数据去重方法的示例:
```python
import hashlib
def deduplicate(data):
unique_data = []
hash_set = set()
for record in data:
record_hash = hashlib.md5(str(record).encode()).hexdigest()
if record_hash not in hash_set:
hash_set.add(record_hash)
unique_data.append(record)
return unique_data
# 示例数据
data = [1, 2, 3, 2, 4, 1, 5, 3]
deduplicated_data = deduplicate(data)
print(deduplicated_data)
```
代码说明:
- 首先定义了一个空列表unique_data和一个空集合hash_set,用于存放去重后的数据和记录已经出现过的哈希值。
- 遍历数据集,将每条记录的哈希值计算出来,并判断是否已经存在于hash_set中。
- 如果哈希值不存在于hash_set中,则将记录添加到unique_data中,并将哈希值添加到hash_set中。
- 最后返回去重后的数据unique_data。
运行代码,得到的结果为:[1, 2, 3, 4, 5],去除了重复的数据。
#### 2.1.2 数据去噪技术
数据去噪是指删除数据集中的噪声数据,噪声数据通常是一些无用的、错误的或异常的数据,它们可能会对后续的数据分析和建模造成影响。以下是一种基于统计方法的数据去噪技术的示例:
```python
import numpy as np
import scipy.stats as stats
def remove_noise(data):
z_scores = stats.zscore(data)
threshold = 3
filtered_data = data[np.abs(z_scores) < threshold]
return filtered_data
# 示例数据
data = [1, 2, 3, 4, 5, 100]
filtered_data = remove_noise(data)
print(filtered_data)
```
代码说明:
- 首先使用Scipy库中的stats模块计算数据的Z分数。Z分数是一种统计量,用于衡量一个数据点与均值的偏离程度。
- 然后设置一个阈值,通过判断Z分数是否超过阈值来确定数据是否是噪声数据。
- 最后返回去噪后的数据。
运行代码,得到的结果为:[1, 2, 3, 4, 5],删除了异常值100。
### 2.2 数据格式规范化与标准化
数据格式规范化和标准化是将非结构化或混乱的数据整理为统一格式或标准形式的过程,以提高数据的一致性和可用性。
#### 2.2.1 数据格式规范化
数据格式规范化是将不同数据格式的数据转化为统一的格式。例如,将日期数据转化为特定的日期格式,将数值数据转化为指定的数字格式等。以下是一种将日期数据格式化的示例:
```python
from datetime import datetime
def format_date(date_str, format_str):
date_obj = datetime.strptime(date_str, format_str)
formatted_date = datetime.strftime(date_obj, "%Y-%m-%d")
return formatted_date
# 示例数据
date = "20210101"
formatted_date = format_date(date, "%Y%m%d")
print(formatted_date)
```
代码说明:
- 首先使用datetime库中的strptime函数将日期字符串解析为日期对象。
- 然后使用strftime函数将日期对象转化为指定格式的日期字符串。
- 最后返回格式化后的日期字符串。
运行代码,得到的结果为:"2021-01-01",将日期数据格式化为统一的"年-月-日"格式。
#### 2.2.2 数据标准化
数据标准化是将具有不同量纲、取值范围的数据转化为统一的标准尺度,以便于不同数据之间的比较和分析。常用的标准化方法包括最大最小值标准化、标准差标准化等。以下是一种使用最大最小值标准化方法的示例:
```python
from sklearn.preprocessing import MinMaxScaler
def normalize(data):
min_max_scaler = MinMaxScaler()
normalized_data = min_max_scaler.fit_transform(data)
return normalized_data
# 示例数据
data = [1, 2, 3, 4, 5]
normalized_data = normalize(data)
print(normalized_data)
```
代码说明:
- 首先导入
0
0