1.四分卫间距确定数据范围
numpy.quantile(a, q, axis=None, out=None, overwrite_input=False, method='linear', keepdims=False, *, interpolation=None)[source]
计算指定轴的n分位数
参数q给定指定的几分位数,范围[0,1]
import numpy as np
import pandas as pd
def find_outliers_by_iqr(data: pd.core.series.Series, whis=1.5):
# outliers 异常值
# 计算第一个四分位数和第三分位数
q1, q3 = np.quantile(data, [0.25, 0.75])
# IQR分位数范围
iqr = q3 - q1
# 下限和上限(分别减加范围的1.5倍)
lower_fence, upper_fence = q1 - iqr * 1.5, q3 + iqr * 1.5
# 注意这里并不是闭包
return data[lower_fence > data | data < upper_fence]
outliers_index = find_outliers_by_iqr(data).index
df.drop(index=outliers_index)
2.Z - score判别法判断异常值
x=特定值, μ=平均值, σ=标准偏差
如果特定数据点的 Z 分数值小于 -3 或大于 +3,则 该值为异常值
def find_outliers_by_zscore(data):
mu, sigma = data.mean(), data.std()
zscore = (data - mu) / sigma
return data[np.fabs(zscore) > 3]