一、iqr的定义
iqr(InterQuartile Range)即四分位间距,是一种衡量数据波动程度的方法。它是剔除最小25%和最大25%后剩余数据的中位数与第一四分位数的差值。也就是Q3-Q1,Q1是数据的低四分位数,Q3是数据的高四分位数。
代码如下:
def iqr(data): # 计算第一、三四分位数 q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) # 计算iqr iqr = q3 - q1 return iqr
二、iqr的应用
iqr常用于箱线图(boxplot)中,箱线图以iqr为基础计算出箱体的位置,将数据分为四个部分:上界(Q3 + 1.5×iqr)、下界(Q1 – 1.5×iqr)、iqr范围内的中位数、iqr范围内的第一四分位数和第三四分位数。
iqr也常用于异常值的检测,将超出iqr范围的数据视为异常值。
代码如下:
def detect_outlier(data): # 计算第一、三四分位数 q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) # 计算iqr和上、下边界 iqr = q3 - q1 lower_bound = q1 - 1.5 * iqr upper_bound = q3 + 1.5 * iqr # 将超出范围的视为异常值 outlier = [x for x in data if x upper_bound] return outlier
三、iqr与标准差的比较
iqr与标准差都是用来衡量数据波动程度的方法,但有一些区别:
1. iqr只考虑25%~75%数据的范围,更加稳健,不易受极值的影响;而标准差考虑了全部数据,受极值的影响更大。
2. 标准差是对数据分布的测量,与数据本身有关,而iqr是对数据的排序结果的测量,与具体数据数值无关。
因此,iqr适用于数据有异常值的情况下,标准差适用于数据呈正态分布的情况下。
代码如下:
def std_iqr(data): # 计算标准差和iqr std = np.std(data) q1 = np.percentile(data, 25) q3 = np.percentile(data, 75) iqr = q3 - q1 return std, iqr
四、iqr的局限性
iqr虽然稳健、不易受极值影响,但也有其局限性:
1. iqr只考虑了25%~75%范围的数据,对于较短尾的数据分布可能有些欠缺。
2. iqr无法度量非对称分布的波动情况,如偏态分布。
3. iqr只关注数据的排序,无法反映数据值本身所含信息。
综上,iqr适用于一些特殊情况下,但不是适用于所有情况的万能工具。
原创文章,作者:HERJR,如若转载,请注明出处:https://www.506064.com/n/362659.html