从 Matplotlib 中查找异常值点
异常值,或与其他观测值明显不同的数据点,在数据分析中经常遇到。为了防止它们歪曲统计分析的结果,识别和处理这些异常值至关重要。在本技术博客文章中,我们将研究如何使用 Matplotlib(一个著名的 Python 数据可视化库)查找异常值点。
安装和语法
流行的 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),水平线显示中位数。
四分位距 (IQR) 是通过将第三四分位数 (Q3) 减去第一四分位数 (Q1) 来计算的 (Q3 - Q1)。使用公式 上限 = Q3 + 1.5*IQR 和 下限 = Q1 - 1.5*IQR 来估计异常值的上限和下限。
超出上限和下限的观测值是异常值,箱线图可以识别这些异常值。
annotate() 函数允许您命名异常值并在图形中显示其值或索引。
示例 1
import numpy as np import matplotlib.pyplot as plt # Generate random data data = np.random.normal(size=100) # Create boxplot plt.boxplot(data) # Show plot plt.show()
在这个例子中,我们使用 NumPy 的 random.normal() 函数从正态分布中生成 100 个随机数据点。然后,我们使用 boxplot() 函数生成数据的箱线图,并使用 show() 函数显示它。生成的图形显示数据的分布,并突出显示超出须线的任何异常值。
输出
示例 2
import pandas as pd import numpy as np import matplotlib.pyplot as plt # Generate sample data np.random.seed(42) data = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C']) # Create boxplot plt.boxplot(data['B']) # Show plot plt.show()
创建一个包含 100 行和 3 列(名为 data (A、B 和 C))的 Pandas DataFrame。使用 NumPy 库中的 np.random.randn() 方法,并生成随机整数来填充 DataFrame。然后,Matplotlib 的 plt.boxplot() 生成 B 列的箱线图,然后显示生成的图表。
输出
示例 3
import seaborn as sns import matplotlib.pyplot as plt # Load data tips = sns.load_dataset("tips") # Create boxplot sns.boxplot(x=tips["total_bill"]) # Show plot plt.show()
在这个例子中,我们从 Seaborn 库的内置 tips 数据集中加载数据。然后,我们使用 Seaborn 库的 boxplot() 函数创建数据中特定列的箱线图,并使用 show() 函数显示它。
输出
import numpy as np import matplotlib.pyplot as plt # Generate random data np.random.seed(123) data = np.random.normal(size=50) # Add outliers data = np.concatenate([data, [6, -7, 8]]) # Create boxplot fig, ax = plt.subplots() ax.boxplot(data) # Set title and labels ax.set_title('Boxplot of Data') ax.set_xlabel('Data') ax.set_ylabel('Values') #Calculate and print outliers 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) #Show plot plt.show()
输出
Outliers: [6.0, -7.0, 8.0]
在这个例子中,我们首先使用 NumPy 的 `random.normal()` 方法生成 50 个来自正态分布的随机数据点。然后,我们向数据中添加三个异常值点,以演示 `boxplot()` 函数如何检测异常值。我们使用 `boxplot()` 函数创建数据的箱线图,并将图形和轴对象分别存储在变量 `fig` 和 `ax` 中。我们使用轴对象的 `set_title()`、`set_xlabel()` 和 `set_ylabel()` 方法设置标题和轴标签。
为了计算异常值,我们首先使用 NumPy 的 `percentile()` 方法计算第一和第三四分位数 (Q1 和 Q3) 和四分位距 (IQR)。然后,我们使用公式 `下限 = Q1 - (1.5 * IQR)` 和 `上限 = Q3 + (1.5 * IQR)` 计算须线的上下限。最后,我们使用列表推导式打印位于须线之外的异常值。
应用
在数据分析和可视化中,查找异常值是一个关键步骤。异常值可能是罕见或异常事件、数据收集错误、数据输入错误或测量错误,或者两者兼而有之。通过识别和有效地处理异常值,我们可以确保统计研究和预测模型的准确性和可靠性。
结论
在本技术博客文章中,我们研究了如何在 Matplotlib(一个著名的 Python 数据可视化包)中识别异常值点。我们展示了如何创建数据的箱线图以及如何使用四分位距方法识别异常值。我们还提供了使用 Matplotlib 识别和显示数据中异常值的各种示例。通过使用这些方法,您可以确保数据分析和可视化工作的准确性和可靠性。