人工智能数据集处理——数据清理2

目录

异常值的检测与处理

一、异常值的检测

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值