np.percentile не равно квартилям
Я пытаюсь рассчитать квартили для массива значений в Python, используя numpy
,
X = [1, 1, 1, 3, 4, 5, 5, 7, 8, 9, 10, 1000]
Я бы сделал следующее:
quartiles = np.percentile(X, range(0, 100, 25))
quartiles
# array([1. , 2.5 , 5. , 8.25])
Но это неверно, поскольку 1-й и 3-й квартили должны быть 2 и 8,5 соответственно.
Это может быть показано как следующее:
Q1 = np.median(X[:len(X)/2])
Q3 = np.median(X[len(X):])
Q1, Q3
# (2.0, 8.5)
Я не могу понять, что np.percentile
делает, чтобы дать другой ответ. Я бы очень благодарен за это.
1 ответ
Нет правильного или неправильного, а просто разные способы вычисления процентилей. В непрерывном случае процентиль является четко определенной концепцией, в меньшей степени - для дискретных выборок: разные методы не будут иметь значения для очень большого числа наблюдений (по сравнению с количество дубликатов), но на самом деле может иметь значение для небольших выборок, и вам нужно выяснить, что имеет смысл в каждом конкретном случае.
Чтобы получить желаемый результат, вы должны указать interpolation = 'midpoint' в функции процентиля:
quartiles = np.percentile(X, range(0, 100, 25), interpolation = 'midpoint')
quartiles # array([ 1. , 2. , 5. , 8.5])
Я бы посоветовал вам ознакомиться с документами http://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html