Norsaa 2019-12-29
import pandas as pd
# 异常值 ——远离正常值范围的错误值
# 异常值 ——删掉
# 异常值判断 ——3σ 箱线图分析
# 3σ 接住标准正态部分得到的规律——99.73%都在(μ-3α,μ+3α)之间,超过这个范围的数据认为是异常的
def three_sigma(data):
"""
进行3sigma异常值剔除
:param data: 原数据——series
:return: bool数组
"""
# 上限
up = data.mean() + 3 * data.std()
# 下线
low = data.mean() - 3 * data.std()
# 在上限与下限之间的数据是正常的
bool_index = (data < up) & (data > low)
return bool_index
def box_analysis(data):
"""
箱线图分析去除异常值
:param data: 原数据——series
:return: bool数组
"""
# 上四分位数
qu = data.quantile(q=0.75)
# 下四分位数
ql = data.quantile(q=0.25)
# 计算四分位间距
iqr = qu - ql
# 上限
up = qu + 1.5 * iqr
# 下限
low = ql - 1.5 * iqr
bool_index = (data < up) & (data > low)
return bool_index
# 验证——加载detail
detail = pd.read_excel("../day05/meal_order_detail.xlsx")
print("detail的列索引: \n", detail.columns)
print("detail的形状: \n", detail.shape)
# 对amounts列进行异常值处理
bool_index = three_sigma(detail.loc[:, "amounts"])
bool_index = box_analysis(detail.loc[:, "amounts"])
print("bool_index: \n", bool_index)
# 获取异常值处理之后的结果
detail = detail.loc[bool_index, :]
print("异常值处理之后的结果: \n", detail.shape)