20 数据预处理

在上一章中,我们讨论了如何使用 NumPy 读取和加载数据。在数据分析的过程中,数据预处理是一个至关重要的步骤。本章将聚焦于如何使用 NumPy 进行有效的数据预处理,为后续的数据分析打下坚实的基础。

什么是数据预处理?

数据预处理是将数据清洗、整理并转换成分析所需格式的过程。通常包括以下几个重要步骤:

  1. 数据清理:处理缺失值和异常值。
  2. 数据筛选:根据特定条件从数据集中提取子集。
  3. 数据转换:如归一化、标准化和数据类型转换。
  4. 数据整合:将不同数据源整合到一个数据集中。

接下来,我们将通过实际案例演示如何使用 NumPy 进行这些操作。

1. 数据清理

处理缺失值

在数据集中,缺失值是非常常见的情况。使用 NumPy,我们可以容易地识别和填补这些缺失值。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np

# 创建一个包含缺失值的数组
data = np.array([1, 2, np.nan, 4, np.nan, 6])

# 识别缺失值
nan_mask = np.isnan(data)
print("缺失值掩码:", nan_mask)

# 使用均值填补缺失值
mean_value = np.nanmean(data) # 计算均值,忽略缺失值
data[nan_mask] = mean_value
print("填补缺失值后数据:", data)

在上面的代码中,我们通过 np.isnan() 函数来识别缺失值,然后使用 np.nanmean() 计算均值,最终将缺失值填补为该均值。

处理异常值

异常值是指与其他数据点显著不同的值。可以通过统计方法(如 Z-score)来识别和处理异常值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建示例数据
data = np.array([10, 12, 12, 11, 90, 13, 12])

# 计算 Z-score
mean = np.mean(data)
std_dev = np.std(data)
z_scores = (data - mean) / std_dev

# 识别异常值
threshold = 2
outliers = np.where(np.abs(z_scores) > threshold)
print("异常值索引:", outliers)

# 替换异常值为均值
data[outliers] = mean
print("处理异常值后数据:", data)

在这段代码中,我们计算了每个数据点的 Z-score,找出绝对值大于设定阈值的点,然后将这些异常值替换为均值。

2. 数据筛选

有时候,我们只对满足特定条件的数据感兴趣。使用 NumPy 的布尔索引,我们可以很方便地筛选数据。

1
2
3
4
5
6
# 创建示例数据
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 筛选出大于5的值
filtered_data = data[data > 5]
print("筛选后的数据:", filtered_data)

3. 数据转换

归一化和标准化

在许多机器学习算法中,数据的尺度(即范围)对于模型的效率和表现至关重要。我们经常需要对数据进行归一化或标准化。

归一化

归一化是将数据缩放到0和1之间。

1
2
3
4
5
6
# 创建示例数据
data = np.array([10, 20, 30, 40, 50])

# 进行归一化
normalized_data = (data - np.min(data)) / (np.max(data) - np.min(data))
print("归一化后的数据:", normalized_data)

标准化

标准化是将数据转换为均值为0,标准差为1的分布。

1
2
3
4
5
6
# 创建示例数据
data = np.array([10, 20, 30, 40, 50])

# 进行标准化
standardized_data = (data - np.mean(data)) / np.std(data)
print("标准化后的数据:", standardized_data)

4. 数据整合

有时我们需要将多个数据源合并到一起。可以使用 NumPy 的 concatenate() 函数来实现。

1
2
3
4
5
6
7
# 创建两个示例数组
data1 = np.array([1, 2, 3])
data2 = np.array([4, 5, 6])

# 合并数组
merged_data = np.concatenate((data1, data2))
print("合并后的数据:", merged_data)

结论

在本章中,我们学习了如何使用 NumPy 进行数据预处理,包括数据清理、筛选、转换和整合。数据预处理为我们的数据分析提供了坚实的基础,保证了数据的质量和可用性。

在下一章,我们将探索如何使用 NumPy 进行数据可视化,帮助我们更直观地理解数据。

希望这些案例能帮助你更好地应用 NumPy 进行数据预处理!

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论