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、数据聚合
数据聚合是计算数据的总计、平均值、标准差等。
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()