import pandas as pd def detect_outliers(data,threshold=3): mean_d = np.mean(data) std_d = np.std(data) outliers = [] for y in data_d: z_score= (y - mean_d)/std_d if np.abs(z_score) > threshold: outliers.append(y) return outliers

(3)IQR异常检测

四分位点内距(Inter-Quartile Range,IQR),是指在第75个百分点与第25个百分点的差值,或者说,上四分位数与下四分位数之间的差。

IQR是统计分散程度的一个度量,分散程度通过需要借助箱线图(Box Plot)来观察。通常把小于 Q1-1.5_IQR 或者大于 Q3+1.5_IQR 的数据点视作离群点。

箱线图可以直观地看出数据集的以下重要特性:

  • 中心位置 :中位数所在的位置就是数据集的中心,从中心位置向上或向下看,可以看出数据的倾斜程度。
  • 散布程度 :箱线图分为多个区间,区间较短时,表示落在该区间的点较集中;
  • 对称性 :如果中位数位于箱子的中间位置,那么数据分布较为对称;如果极值离中位数的距离较大,那么表示数据分布倾斜。
  • 离群点 :离群点分布在箱线图的上下边缘之外。

使用Python实现,参数sr是Series类型的变量:

def detect_outliers(sr):
    q1 = sr.quantile(0.25)