从 Matplotlib 中查找异常点
异常点,即与其他观察值明显不同的数据点,在数据分析中经常遇到。为了防止它们歪曲统计分析的结果,识别和处理这些异常点至关重要。在这篇技术博客文章中,我们将介绍如何从著名的 Python 数据可视化库 Matplotlib 中查找异常点。
安装和语法
流行的 Python 模块 Matplotlib 用于构建静态、动画和交互式可视化。可以使用 Python 包安装程序 Pip 来安装它。在终端中运行以下行以安装 Matplotlib −
pip install matplotlib
Matplotlib 提供了多种方法来定位和显示数据异常值。最常用来创建箱线图的方法是 boxplot() 函数,它提供了大量的自定义功能,接受下面提到的参数 -
plt.boxplot(data, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None)
算法
使用 Matplotlib 的 boxplot() 函数生成数据的箱线图。
数据的 四分位距 (IQR) 由 boxplot 中的框显示,中位数由水平显示线。
通过将第一四分位数 (Q1)除以第三四分位数,得出IQR (Q3) (Q3)。使用公式 上限 = Q3 + 1.5*IQR 和 下限 = Q1 - 1.5*IQR 估计异常值的上限和下限。
异常值观测值是超出箱线图可以识别的上下边界的观测值。
annotate() 函数允许您命名异常值并在图形中显示它们的值或索引。
示例 1
import numpy as np import matplotlib.pyplot as plt # 生成随机数据 data = np.random.normal(size=100) # 创建箱线图 plt.boxplot(data) # 显示情节 plt.show()
在本例中,我们使用 NumPy 的 random.normal() 函数从正态分布中创建 100 个随机数据点。之后,我们使用 boxplot() 方法生成数据的箱线图,并使用 show() 函数显示该图。生成的图形显示了数据的分布,并提醒人们注意晶须之外的任何异常值。
输出
示例 2
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 生成样本数据 np.random.seed(42) data = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C']) # 创建箱线图 plt.boxplot(data['B']) # 显示plot plt.show()
构建一个 Pandas DataFrame,其中包含 100 行和 3 列,分别命名为数据(A、B 和 C)。使用 NumPy 库中的 np.random.randn() 方法,并生成随机整数来填充 DataFrame。然后,Matplotlib 的 plt.boxplot() 生成 B 列的箱线图,之后显示结果图。
输出
示例 3
import seaborn as sns import matplotlib.pyplot as plt # 加载数据 tips = sns.load_dataset("tips") # 创建箱线图 sns.boxplot(x=tips["total_bill"]) # 显示图 plt.show()
在此示例中,我们从 Seaborn 库的内置 tips 数据集加载数据。然后,我们使用 Seaborn 库中的 boxplot() 函数创建数据中特定列的箱线图,并使用 show() 函数显示它。
输出
import numpy as np import matplotlib.pyplot as plt # 生成随机数据 np.random.seed(123) data = np.random.normal(size=50) # 添加异常值 data = np.concatenate([data, [6, -7, 8]]) # 创建箱线图 fig, ax = plt.subplots() ax.boxplot(data) # 设置标题和标签 ax.set_title('Boxplot of Data') ax.set_xlabel('Data') ax.set_ylabel('Values') #计算并打印异常值 q1, q3 = np.percentile(data, [25, 75]) iqr = q3 - q1 lower_bound = q1 - (1.5 * iqr) upper_bound = q3 + (1.5 * iqr) outliers = [x for x in data if x < lower_bound or x > upper_bound] print("Outliers:", outliers) #显示图 plt.show()
输出
Outliers: [6.0, -7.0, 8.0]
在此示例中,我们首先使用 NumPy 的 `random.normal()` 方法从正态分布中生成 50 个随机数据点。然后,我们向数据添加三个异常值点,以演示 `boxplot()` 函数如何检测异常值。我们使用 `boxplot()` 函数创建数据的箱线图,并将图形和轴对象分别存储在变量 `fig` 和 `ax` 中。我们使用 axis 对象的 `set_title()`、`set_xlabel()` 和 `set_ylabel()` 方法设置标题和轴标签。
要计算异常值,我们首先使用 NumPy 的 `percentile()` 方法计算第一和第三四分位数(Q1 和 Q3) 和四分位距 (IQR)。然后我们使用公式 `lower_bound = Q1 - (1.5 * IQR)` 和 `upper_bound = Q3 + (1.5 * IQR)` 计算须线的下限和上限。我们最终使用列表推导打印出位于晶须之外的异常值。
应用
在数据分析和可视化中,定位异常值是一个关键步骤。异常值可能是罕见或异常事件、数据收集、数据输入或测量中的错误,或两者兼而有之。通过识别和有效处理异常值,我们可以保证统计研究和预测模型的准确性和可靠性。
结论
在这篇技术博客文章中,我们研究了如何在著名的 Python 数据可视化包 Matplotlib 中识别异常点。我们展示了如何绘制数据的箱线图以及如何使用四分位距方法来识别异常值。我们还提供了如何使用 Matplotlib 识别和显示数据中的异常值的各种示例。您可以通过采用这些方法来保证数据分析和可视化计划的准确性和可靠性。