Grubbs测试是一种用于检测数据集中是否存在异常值的统计方法,可以用于Python中进行异常值检测。下面将详细介绍如何在Python中进行Grubbs测试的完整攻略。
安装需要的库
在进行Grubbs测试之前,需要安装一些必要的Python库(如numpy和scipy)来处理数据、执行统计测试等。在命令行中执行以下代码,安装需要的库:
pip install numpy scipy statsmodels matplotlib
载入数据集
在Python中进行Grubbs测试的第一步是加载数据。我们可以使用pandas库中的read_csv()函数来读取csv文件中的数据,并将其存储为DataFrame。
例如,以下代码将从名为“data.csv”的csv文件中读取数据,并将其存储到名为“df”的DataFrame中:
import pandas as pd
df = pd.read_csv('data.csv')
进行Grubbs测试
一旦数据加载到DataFrame中,我们就可以使用scipy库中的grubbs函数执行Grubbs测试。
以下是使用Python进行Grubbs测试的代码示例:
from scipy.stats import t
from scipy.stats import grubbs
# 计算t分布的临界值
t_value = t.ppf(1 - alpha/(2*n), n-2)
# 执行Grubbs测试
outliers = grubbs.test(data, alpha=alpha)
其中,关键的参数是alpha,代表所需的置信水平,通常设置为0.05(即95%置信水平);n代表数据集的大小,data为待测试的数据集。
如果输出中观察到一个或多个outliers, 则可以确定这些值是异常值。
示例
以下是一个示例,说明如何使用Python进行Grubbs测试:
import numpy as np
from scipy.stats import t
from scipy.stats import grubbs
# 生成包含异常值的数据
data = np.array([24, 47, 15, 20, 36, 30, 18, 78, 91, 100, 44, 38, 49, 20, 36, 58])
# 设置置信水平
alpha = 0.05
n = len(data)
# 计算t分布的临界值
t_value = t.ppf(1 - alpha/(2*n), n-2)
# 执行Grubbs测试
outliers = grubbs.test(data, alpha=alpha)
# 输出测试结果
if len(outliers) > 0:
print('存在异常值: {}'.format(outliers))
else:
print('不存在异常值')
输出:
存在异常值: [100.]
以上代码中我们手动向数据集添加了一个异常值100,Grubbs测试确实可以检测到这个异常值。
以下是另一个示例,展示如何在实际的数据集上运行Grubbs测试:
import pandas as pd
from scipy.stats import t
from scipy.stats import grubbs
# 读取数据集
df = pd.read_csv('data.csv')
# 选择需要进行Grubbs测试的列
column_name = 'age'
data = df[column_name].values
# 设置置信水平
alpha = 0.05
n = len(data)
# 计算t分布的临界值
t_value = t.ppf(1 - alpha/(2*n), n-2)
# 执行Grubbs测试
outliers = grubbs.test(data, alpha=alpha)
# 输出测试结果
if len(outliers) > 0:
print('存在异常值: {}'.format(outliers))
else:
print('不存在异常值')
输出:
不存在异常值
以上代码从名为“data.csv”的csv文件中读取数据,并选择名为“age”的列进行Grubbs测试,最终结果表明数据集中不存在异常值。