NumPy 是数据分析的重要工具。它可以帮助我们快速有效地处理大量数据。通过使用 NumPy 提供的函数,我们可以轻松地进行数据清理、数据转换、数据聚合和数据可视化。

1、数据清理

数据清理是数据分析的第一步。在清理数据之前,需要确保数据是正确的和完整的。

1)处理缺失值

NumPy 可以用于识别、替换或删除数组中的缺失值(通常表示为 np.nan)。

import numpy as np

# 示例数据,包含缺失值
data = np.array([1, np.nan, 3, 4, np.nan, 6])

# 替换缺失值为指定值(例如0)
data_cleaned = np.nan_to_num(data, nan=0)

print(data_cleaned)

2)过滤数据

使用条件语句过滤掉不符合特定条件的数据。

import numpy as np

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

# 过滤掉小于4的所有元素
filtered_data = data[data >= 4]

print(filtered_data)条件语句过滤掉不符合特定条件的数据。

3)删除重复值

在数据中删除重复的元素。

import numpy as np

# 示例数据,包含重复值
data = np.array([1, 2, 2, 3, 4, 4, 5])

# 删除重复元素
unique_data = np.unique(data)

print(unique_data)

4)标准化数据

将数据标准化到一个特定的范围内,例如0到1。

import numpy as np

# 示例数据
data = np.array([10, 20, 30, 40, 50])

# 数据标准化
data_normalized = (data - data.min()) / (data.max() - data.min())

print(data_normalized)

2、数据转换

数据转换是将数据转换为更适合分析的格式。

函数

描述

astype()

将数据转换为另一种数据类型。

reshape()

重塑数据的形状。

append()

添加数据到现有数组。

concatenate()

将多个数组连接到一起。

代码如下,

import numpy as np

# 创建一个整数数组并将其转换为浮点类型数组
arr = np.array([1, 2, 3, 4])
float_arr = arr.astype(np.float64)
print("经过 astype 后的数组:", float_arr)

# 将数组重塑为2x2的形状
reshaped_arr = float_arr.reshape((2, 2))
print("经过 reshape 后的数组:", reshaped_arr)

# 向重塑后的数组末尾追加元素
# 首先,将数组展平,因为 np.append 在一维数组上操作更合适
flat_arr = reshaped_arr.flatten()
appended_arr = np.append(flat_arr, [5.0, 6.0])
print("经过 append 后的数组:", appended_arr)

# 与另一个数组连接
another_arr = np.array([7.0, 8.0])
concatenated_arr = np.concatenate((appended_arr, another_arr))
print("经过 concatenate 后的数组:", concatenated_arr)

3、数据聚合

数据聚合是计算数据的总计、平均值、标准差等。

参考文档:Python NumPy 数据分析常用数学运算

4、数据可视化

数据可视化是将数据以图表或图形的形式表示。可视化可以帮助我们更好地理解数据。

参考文档Python NumPy 数据可视化

5、数据分析实例

使用 NumPy 进行数据分析时,可以涉及各种不同的应用场景。

1)统计分析

import numpy as np

# 运动员得分数据(例如:跳远距离,单位:米)
scores = np.array([6.5, 7.1, 6.8, 7.5, 7.0, 6.7])

# 计算基本统计指标
average_score = np.mean(scores)   # 平均得分
max_score = np.max(scores)        # 最高得分
min_score = np.min(scores)        # 最低得分
std_deviation = np.std(scores)    # 得分的标准差

print(f"平均得分: {average_score}")
print(f"最高得分: {max_score}")
print(f"最低得分: {min_score}")
print(f"得分标准差: {std_deviation}")

2)信号处理

import numpy as np

# 生成模拟的时间序列数据
time_series = np.random.normal(0, 1, 100)  # 生成100个正态分布的随机数

# 使用简单的移动平均进行平滑
def moving_average(data, window_size):
    return np.convolve(data, np.ones(window_size)/window_size, mode='valid')

smoothed_data = moving_average(time_series, 5)

print("原始数据:", time_series)
print("平滑后数据:", smoothed_data)

3)图像处理

import numpy as np
import matplotlib.pyplot as plt

# 假设我们有一个灰度图像存储为NumPy数组(值范围0到255)
image = np.random.randint(0, 256, size=(100, 100))

# 计算直方图
histogram, bin_edges = np.histogram(image, bins=256, range=(0, 255))

print(histogram)
# 绘制直方图
plt.plot(histogram)
plt.title("灰度直方图")
plt.xlabel("灰度值")
plt.ylabel("像素数量")
plt.show()

推荐文档