Python/maths/inter_quartile_range.py
2023-07-02 14:54:56 +00:00

62 lines
1.4 KiB
Python

"""
This is the implementation of inter_quartile range (IQR).
function takes the list of numeric values as input
and return the IQR as output.
Script inspired from its corresponding Wikipedia article
https://en.wikipedia.org/wiki/Interquartile_range
"""
import numpy as np
def find_median(x: np.array) -> float:
"""
This is the implementation of median.
:param x: The list of numeric values
:return: Median of the list
>>> find_median(x=np.array([1,2,2,3,4]))
2
>>> find_median(np.array([1,2,2,3,4,4]))
2.5
"""
length = len(x)
if length % 2:
return x[length // 2]
return float((x[length // 2] + x[(length // 2) - 1]) / 2)
def inter_quartile_range(x: np.array) -> float:
"""
This is the implementation of inter_quartile
range for a list of numeric.
:param x: The list of data point
:return: Inter_quartile range
>>> inter_quartile_range(x=np.array([4,1,2,3,2]))
2.0
>>> inter_quartile_range(x=np.array([25,32,49,21,37,43,27,45,31]))
18.0
"""
length = len(x)
if length == 0:
raise ValueError
x.sort()
q1 = find_median(x[0 : length // 2])
if length % 2:
q3 = find_median(x[(length // 2) + 1 : length])
else:
q3 = find_median(x[length // 2 : length])
return q3 - q1
if __name__ == "__main__":
import doctest
doctest.testmod()