python格拉布斯检测异常值代码
时间: 2024-09-21 16:12:10 浏览: 57
在Python中,我们可以使用Grubbs检验(也称为离群点检验)来检测数据集中的异常值。Grubbs测试基于最大绝对偏差(Max Absolute Deviation,MAD),它是一种统计方法,用于查找样本中可能存在的显著偏离其他观测值的数据点。
以下是一个简单的Grubbs检验的例子,使用`scipy.stats`库:
```python
from scipy import stats
import numpy as np
# 假设我们有一个数据列表
data = [5, 10, 15, 20, 25, 80, 30] # 这里假设80是异常值
def grubbs_test(data):
n = len(data)
sorted_data = np.sort(data) # 对数据进行排序
d = max(sorted_data) - min(sorted_data) # 计算极差
i = (n + 1) // 2 # 中位数位置
median = sorted_data[i]
test_statistic = abs(max(sorted_data) - median) / (d * ((n - 1) ** (-0.5)))
critical_value = stats.t.isf(0.975, n - 2) * sqrt((2 * (n + 1)) / (n * (n - 3)))
if test_statistic > critical_value:
print("可能存在异常值,Grubbs检验结果:Test Statistic:", test_statistic, "Critical Value:", critical_value)
else:
print("未发现显著异常值")
grubbs_test(data)
```
在这个例子中,如果计算得到的test statistic大于critical value,那么我们就认为数据集中有异常值。注意,Grubbs检验对于小样本(n < 30)特别敏感,对于大数据集,可能会有更好的替代方法,如Z-score或IQR方法。
阅读全文