如何在Python中进行Grubbs测试

  • Post category:Python

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测试,最终结果表明数据集中不存在异常值。