I have a list of numbers [1, 2, 3, 4, 5, 6, 7]
and I want to have a function to return the interquartile range of this list of numbers. The interquartile range is the difference between the upper and lower quartiles. I have attempted to calculate the interquartile range using NumPy functions and using Wolfram Alpha. I find all of the answers, from my manual one, to the NumPy one, tothe Wolfram Alpha, to be different. I do not know why this is.
My attempt in Python is as follows:
>>> a = numpy.array([1, 2, 3, 4, 5, 6, 7])
>>> numpy.percentile(a, 25)
2.5
>>> numpy.percentile(a, 75)
5.5
>>> numpy.percentile(a, 75) - numpy.percentile(a, 25) # IQR
3.0
My attempt in Wolfram Alpha is as follows:
- "first quartile 1, 2, 3, 4, 5, 6, 7": 2.25
- "third quartile 1, 2, 3, 4, 5, 6, 7": 5.75
- (comment: 5.75 - 2.25 = 3.5)
- "interquartile range 1, 2, 3, 4, 5, 6, 7": ~3.5
So, I find that the values returned by NumPy and Wolfram Alpha for what I think are the first quartile, the third quartile and the interquartile range are not consistent. Why is this? What should I be doing in Python to calculate the interquartile range correctly?
As far as I am aware, the interquartile range of [1, 2, 3, 4, 5, 6, 7]
should be the following:
median(5, 6, 7) - median(1, 2, 3) = 4.