top of page

7 种简单的技术来检测 Pandas 数据分析中的异常

已更新:8月18日

数据分析是一段激动人心的旅程,但也伴随着挑战。最大的挑战之一是识别异常——那些可能扭曲我们结论和预测的意外结果。无论您是在分析销售数据还是监控系统性能,识别这些异常都至关重要。作为 Python Pandas 库的忠实用户,我发现了一些有效识别这些异常的实用技巧。在本文中,我将分享七种可靠的方法,您可以轻松实施这些方法,以增强您的数据分析能力。

Pandas 检测异常
Pandas detecting anomalies

了解异常


异常值,有时也称为离群值,是指与整体分布存在显著偏差的数据点。它们可能源于测量误差或真正的罕见事件等问题。例如,如果您正在分析一个客户购买金额的数据集,而大多数购买金额在 20 美元到 200 美元之间的数据集中,那么单笔 10,000 美元的交易就会被视为异常值。识别这些异常值至关重要,因为它们可能会扭曲您的见解并导致错误的决策。


1. 使用箱线图进行视觉检查


识别异常最简单但最有效的方法之一是使用箱线图。它们清晰地显示数据的分布,并易于发现异常值。

箱线图包含五个统计数据:最小值、第一四分位数、中位数、第三四分位数和最大值。“须线”外的数据点是潜在的异常值。

import pandas as pd
import matplotlib.pyplot as plt

示例数据

data = {'Values': [1, 2, 3, 4, 5, 100]}
df = pd.DataFrame(data)

箱线图

plt.boxplot(df['Values'])
plt.title('Box Plot of Values')

plt.show()

研究表明,箱线图可以有效地指示异常值,使其成为您工具箱中必不可少的工具。快速浏览一下箱线图,您就能知道是否有值得进一步分析的值。


2. Z分数分析


Z分数提供了一种直接量化数据点与平均值差距的方法。Z分数高于3或低于-3通常表示存在异常。

以下是使用 Pandas 计算 Z 分数的方法:

from scipy import stats
import pandas as pd

df['Z-Score'] = stats.zscore(df['Values'])
anomalies = df[(df['Z-Score'] > 3) | (df['Z-Score'] < -3)]

print(anomalies)

使用这项技术,您可以清晰地看到那些与平均值存在偏差的数值指标。例如,在一个包含 1000 条记录的数据集中,只要发现几个超出此范围的 Z 分数,就可能表明您发现了一些值得调查的异常情况。


3.四分位距(IQR)


四分位距 (IQR) 是另一种发现异常的可靠方法。IQR 计算的是第一四分位数(25 百分位数)与第三四分位数(75 百分位数)之间的差值,有效地捕捉了中间 50% 的数据。

Q1 = df['Values'].quantile(0.25)
Q3 = df['Values'].quantile(0.75)

IQR = Q3 - Q

定义识别异常值的界限

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

anomalies = df[(df['Values'] < lower_bound) | (df['Values'] > upper_bound)]

print(anomalies)

研究表明,使用 IQR 可以显著降低极值的影响。例如,在一个包含 500 条销售记录的数据集中,应用 IQR 可以帮助识别与客户购买模式不一致的交易。


4. 具有滚动平均值和标准差的时间序列分析


对于时间序列数据,滚动统计数据特别有用。它们使您能够计算移动窗口内的平均值和标准差,从而更容易识别趋势变化时的异常。

df['Rolling_Mean'] = df['Values'].rolling(window=3).mean()
df['Rolling_Std'] = df['Values'].rolling(window=3).std()

识别异常

anomalies = df[(df['Values'] > (df['Rolling_Mean'] + 2 * df['Rolling_Std'])) | (df['Values'] < (df['Rolling_Mean'] - 2 * df['Rolling_Std']))]

print(anomalies)

例如,如果您正在长期跟踪传感器数据,则此方法可以提醒您可能表明设备出现故障的波动,以便在问题恶化之前及时进行维护。


5.孤立森林算法


对于那些涉足机器学习的人来说,孤立森林算法是识别异常的有力工具,尤其是在大型数据集中。

首先,请确保您已安装 scikit-learn 库。孤立森林通过随机选择特征和分割值来隔离异常,从而能够捕获异常模式。

from sklearn.ensemble import IsolationForest

model = IsolationForest(contamination=0.1)

df['Anomaly'] = model.fit_predict(df[['Values']])
anomalies = df[df['Anomaly'] == -1]
print(anomalies)

这种方法对于包含数万个条目的数据集特别有效,因为传统方法可能难以查明异常。

6.局部异常值因子(LOF)


局部异常值因子 (LOF) 是另一种高级技术,用于评估某个数据点相对于其邻近点的局部密度。密度明显较低的点会被标记为异常。

from sklearn.neighbors import LocalOutlierFactor

lof = LocalOutlierFactor()
df['Anomaly'] = lof.fit_predict(df[['Values']])
anomalies = df[df['Anomaly'] == -1]

print(anomalies)


例如,如果您正在分析流量模式,LOF 可以帮助识别流量中异常的峰值或下降,并提醒您注意潜在的事件或数据不准确之处。

7.可视化技术


可视化工具可以显著增强您对数据的理解,并帮助识别异常。您可以考虑使用散点图或配对图来有效地直观地检查数据。

plt.scatter(df.index, df['Values'])
plt.title('Scatter Plot of Values')

plt.xlabel('Index')
plt.ylabel('Values')

plt.axhline(y=upper_bound, color='r', linestyle='-')
plt.axhline(y=lower_bound, color='r', linestyle='-')

plt.show()

研究表明,可视化可以揭示原始数据和指标无法完全揭示的内容。它们提供的洞察力,让您能够快速识别复杂数据集中的模式和异常值。

整合:Pandas 数据分析


识别异常对于准确的数据分析至关重要,尤其是在精度至关重要的领域。虽然箱线图和 Z 分数分析等工具非常适合初步检查,但孤立森林和局部异常因子等高级方法在复杂分析中表现出色。

尝试这些技术,将其应用于你的数据集,并提升你使用 Pandas 进行数据分析的技能。借助这些工具,你将能够高效地发现异常,并做出明智的数据驱动决策。

Pandas 寻找更多数据异常
Pandas hunting for more data anomalies

bottom of page