11 数据存储与处理之数据清洗与预处理

在本篇文章中,我们将深入探讨数据存储与处理过程中不可或缺的一部分——数据清洗与预处理。这一过程在获取数据之后,存储之前显得尤为重要,直接关系到后续的数据分析和可视化效果。我们将通过一些实例和代码示例来帮助理解这一过程。

数据清洗的必要性

在实际的爬虫工作中,我们获取的数据通常是“肮脏的”,即包含了许多的噪声和冗余信息。数据清洗的主要目的是去除这些噪声,使数据能够更好地用于分析。清洗过程通常包括以下几个步骤:

  1. 去重:移除重复数据。
  2. 处理缺失值:填补或删去缺失数据。
  3. 格式统一:统一数据格式,例如日期和数值的表示。
  4. 异常值处理:识别并处理异常数据。

案例:去重与处理缺失值

假设我们从一个网站上爬取了用户信息,获得的数据如下:

1
2
3
4
5
6
7
8
9
10
import pandas as pd

data = {
'用户ID': [1, 2, 2, 3, 4, 5, 5, 6],
'用户名': ['alice', 'bob', 'bob', 'charlie', 'dave', None, 'eve', 'frank'],
'注册时间': ['2021-01-01', '2021-01-02', None, '2021-01-04', '2021-01-05', '2021-01-06', '2021-01-06', None]
}

df = pd.DataFrame(data)
print("原始数据:\n", df)

这里的数据包含重复的用户ID以及缺失的用户名和注册时间。首先,我们可以通过 drop_duplicates 方法去除重复项:

1
2
3
# 去重
df = df.drop_duplicates(subset='用户ID')
print("去重后的数据:\n", df)

接下来,我们处理缺失值。可以使用 fillna 方法,如用 '未知' 填补缺失的用户名,用当前时间来填补缺失的注册时间:

1
2
3
4
# 填补缺失值
df['用户名'] = df['用户名'].fillna('未知')
df['注册时间'] = df['注册时间'].fillna(pd.to_datetime('today').strftime('%Y-%m-%d'))
print("处理缺失值后的数据:\n", df)

数据预处理

在数据清洗完成后,我们需要对数据进行预处理,以便于后续分析。这部分内容通常包括:

  1. 数据类型转换:确保数值型和日期型数据为正确的类型。
  2. 特征选择:移除不相关的特征。
  3. 特征工程:通过处理现有特征创造新特征。

案例:数据类型转换与特征选择

继续上面的案例,假设我们需要确保“注册时间”为日期类型,并选择“用户ID”和“用户名”作为我们的分析特征:

1
2
3
4
5
6
# 数据类型转换
df['注册时间'] = pd.to_datetime(df['注册时间'])

# 特征选择
df_selected = df[['用户ID', '用户名']]
print("选择的特征数据:\n", df_selected)

数据格式统一

有时候,数据来源于不同的地方,格式可能不一致。我们需要尽量统一数据格式。例如,将所有用户名转换为小写,以便于后续处理:

1
2
3
# 格式统一
df['用户名'] = df['用户名'].str.lower()
print("统一格式后的数据:\n", df)

结论

数据清洗与预处理是数据存储与处理过程中的关键步骤。清洗后的数据不仅提高了数据质量,也为后续的数据分析与可视化打下了坚实的基础。在下一篇中,我们将聚焦于数据分析与可视化,探讨如何从清洗过的数据中提取有价值的信息,进行直观的展示与表达。

在处理爬虫数据时,时刻关注数据的清洗与预处理步骤,确保所用数据的质量是一个高效分析的基础。期待在接下来的内容中继续与大家探讨数据的分析与可视化!

11 数据存储与处理之数据清洗与预处理

https://zglg.work/crawler-one/11/

作者

IT教程网(郭震)

发布于

2024-08-11

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论