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()