现在问题产生了,B球员和C球员采用了不同的异常值忽略方式——B忽略了最低分,而C没有,比较使用不同方式处理的数据,是数据分析的大忌。
忽略异常值的一种较好的方式是使用四分位距。首先将数据排序,然后将数据等分为4份:
从分布上看,四分位距保留了中间靠近均值的50%的数据:
用统一的标准去除了两组数据的异常值。
下四分位数和上四分位数的计算方法和中位数类似。数据集有n个数据,对于下四分位数来说,如果n/4是整数,则下四分位数是n/4位置和n/4 + 1位置的两个数的平均值;如果n/4不是整数,向上取整,该位置的数就是下四分位数。对于上四分位数来说,如果3n/4是整数,则下四分位数是3n/4位置和3n/4 + 1位置的两个数的平均值;如果3n/4不是整数,向上取整,该位置的数就是下四分位数。
球员B共有11个得分,11÷4=2.75,向上取整,下四分位数是数据集中的第3个,下四分位数是4;用11×3÷4=8.25,向上取整,上四分位数是数据集中的第9个,下四分位数是13。该球员的四分距是13 – 4 = 9。
1 A = [7, 8, 9, 9, 10, 10, 11, 11, 12, 13] 2 B = [3, 3, 4, 6, 7, 10, 10, 10, 13, 13, 31] 3 lower_A = np.quantile(A, 1/4, interpolation='lower')# 下四分位数4 higher_A = np.quantile(A, 3/4, interpolation='higher')# 上四分位数5 lower_B = np.quantile(B, 1/4, interpolation='lower') 6 higher_B = np.quantile(B, 3/4, interpolation='higher') 7print('lower_A = {}, higher_A = {}'.format(lower_A, higher_A))# lower_A = 9, higher_A = 118print('lower_B = {}, higher_B = {}'.format(lower_B, higher_B))# lower_B = 4, higher_B = 13
当然,你也可以把数据分成