目录

异常值的检测与处理

一、异常值的检测

1、使用3σ准则检测异常值

定义一个基于3σ准则检测的函数,使用该函数检测文件中的数据,并返回异常值

 2、使用箱形图检测异常值

根据data.xlsx文件中的数据,使用boxplot()方法绘制一个箱型图

定义一个从箱型图形中获取异常值的函数,并返回data.xlsx文件中数据的异常值及其对应的索引

二、异常值的处理

1、删除异常值

使用drop()方法根据指定的行索引中读取的data.xlsx 文件的数据中删除异常值

异常值被删除后,可以再次调佣定义值的three_sigma()函数进行检测,以确保异常值全部删除

2、替换异常值

 使用replace()方法从data.xlsx文件读取的数据的异常值


异常值的检测与处理

一、异常值的检测

1、使用3σ准则检测异常值

定义一个基于3σ准则检测的函数,使用该函数检测文件中的数据,并返回异常值
import numpy as np
import pandas as pd


def three_sigma(ser):
    """

    ser参数:被检测的数据,接收DataFrom的一列数据
    返回: 异常值及其对应的行索引
    """
    # 计算平均值
    mean_data = ser.mean()
    # 计算标准差
    std_data = ser.std()
    # 小于 μ - 3σ 或 μ + 3σ的数值均为异常值
    rule = (mean_data - 3 * std_data > ser) | (mean_data + 3 * std_data < ser)
    # 返回异常值的行索引
    index = np.arange(ser.shape[0])[rule]
    # 获取异常值
    outliers = ser.iloc[index]
    return outliers


# 读取data.xlsx文件
execl_data = pd.read_excel('C:/py数据/第5章/data.xlsx')
# 对value列进行异常值检测
print(three_sigma(execl_data['value']))

121    13.2
710    13.1
Name: value, dtype: float64

 2、使用箱形图检测异常值

根据data.xlsx文件中的数据,使用boxplot()方法绘制一个箱型图
import pandas as pd
import matplotlib.pyplot as plt

execl_data = pd.read_excel('C:/py数据/第5章/data.xlsx')
# print(execl_data)
plt.boxplot(execl_data['value'], sym='rs')
plt.show()

 

定义一个从箱型图形中获取异常值的函数,并返回data.xlsx文件中数据的异常值及其对应的索引
import pandas as pd
import numpy as np


def box_outliers(ser):
    # 对待检测的数集进行排序
    global Q3, Q1
    new_ser = ser.sort_values()
    # 判断数据的总数量是奇数还是偶数
    if new_ser.count() % 2 == 0:
        # 计算Q3,Q1,IQR
        Q3 = new_ser[int(len(new_ser) / 2):].median()
        Q1 = new_ser[:int(len(new_ser) / 2)].median()
    elif new_ser.count() % 2 != 0:
        Q3 = new_ser[int((len(new_ser) - 1) / 2):].median()
        Q1 = new_ser[:int((len(new_ser) - 1) / 2)].median()
    IQR = round(Q3 - Q1, 1)
    rule = (round(Q3 + 1.5 * IQR, 1) < ser) | (round(Q1 - 1.5 * IQR, 1) > ser)
    index = np.arange(ser.shape[0])[rule]
    # 获取异常值及其索引
    outliers = ser.iloc[index]
    return outliers


execl_data = pd.read_excel('C:/py数据/第5章/data.xlsx')
print(box_outliers(execl_data['value']))

0      12.7
121    13.2
255    12.7
353    13.0
694    12.8
710    13.1
724    12.9
Name: value, dtype: float64

二、异常值的处理

1、删除异常值

使用drop()方法根据指定的行索引中读取的data.xlsx 文件的数据中删除异常值
# 根据行索引删除异常值
execl_data = pd.read_excel('C:/py数据/第5章/data.xlsx')
execl_data.drop([121, 710])
异常值被删除后,可以再次调佣定义值的three_sigma()函数进行检测,以确保异常值全部删除
clean_data = execl_data.drop([121,710])
# 再次检测数据中是否有异常值
print(three_sigma(clean_data['value']))

Series([], Name: value, dtype: float64)

2、替换异常值

替换异常值既可以是固定数值,也可以计算得出的值

 使用replace()方法从data.xlsx文件读取的数据的异常值
replace_data = execl_data.replace({13.2:10.2,13.1:10.5})
# 根据行索引获取替换后的值
print(replace_data.loc[121])
print(replace_data.loc[710])

Unnamed: 0    121.0
value          10.2
Name: 121, dtype: float64
Unnamed: 0    710.0
value          10.5
Name: 710, dtype: float64

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐