使用 NumPy 和 SciPy 的四分位距和四分位偏差
四分位数:
四分位数是一种分位数。第一个四分位数 (Q1)定义为最小数和数据集中位数之间的中间数,第二个四分位数 (Q2) – 给定数据集的中位数,而第三个四分位数 (Q3)是中间数数据集的中位数和最大值之间。
寻找四分位数的算法:
四分位数是在中位数的帮助下计算的。如果条目数是偶数,即形式为 2n,则第一个四分位数 (Q1) 等于n 个最小条目的中位数,第三个四分位数 (Q3) 等于n 个最大条目的中位数。
如果条目数是奇数,即形式为 (2n + 1),则
- 第一个四分位数 (Q1) 等于n 个最小条目的中位数
- 第三个四分位数 (Q3) 等于n 个最大条目的中位数
- 第二个四分位数(Q2)与普通中位数相同。
范围:它是给定数据集中最大值和最小值之间的差。
四分位距:
四分位间距 (IQR),也称为中间价差或中间 50% ,或技术上的 H 价差是第三四分位数 (Q3) 和第一四分位数 (Q1) 之间的差异。它覆盖了分布的中心并包含 50% 的观测值。 IQR = Q3 – Q1
用途:
- 四分位数范围的分解点为 25%,因此它通常比整个范围更受欢迎。
- IQR 用于构建箱线图,即概率分布的简单图形表示。
- IQR 还可用于识别给定数据集中的异常值。
- IQR 给出了数据的集中趋势。
决策
- 该数据集具有较高的四分位距 (IQR) 值,具有更大的可变性。
- 具有较低四分位距 (IQR) 值的数据集是优选的。
假设我们有两个数据集,它们的四分位数范围是 IR1 和 IR2,如果 IR1 > IR2,那么据说 IR1 中的数据比 IR2 中的数据具有更大的可变性,并且 IR2 中的数据更可取。
例子:
- 以下是该课程在过去 20 天内每天注册的考生人数 -
GeeksforGeeks 的数据结构和算法-DSA Online 3:
75、69、56、46、47、79、92、97、89、88、36、96、105、32、116、101、79、93、91、112 - 对上述数据集进行排序后:
32、36、46、47、56、69、75、79、79、88、89、91、92、93、96、97、101、105、112、116 - 这里术语的总数是 20。
- 第二个四分位数(Q2)或上述数据的中位数为(88 + 89)/2 = 88.5
- 第一个四分位数 (Q1) 是前 n 项的中位数,即 10 个项(或 n 项,即 10 个最小值)= 62.5
- 第三个四分位数 (Q3) 是 n 即 10 个最大值(或最后 n 即 10 个值)的中位数 = 96.5
- 那么,IQR = Q3 – Q1 = 96.5 – 62.5 = 34.0
使用 numpy.median 的四分位数范围
# Import the numpy library as np
import numpy as np
data = [32, 36, 46, 47, 56, 69, 75, 79, 79, 88, 89, 91, 92, 93, 96, 97,
101, 105, 112, 116]
# First quartile (Q1)
Q1 = np.median(data[:10])
# Third quartile (Q3)
Q3 = np.median(data[10:])
# Interquartile range (IQR)
IQR = Q3 - Q1
print(IQR)
Output: 34.0
使用 numpy.percentile 的四分位数范围
# Import numpy library
import numpy as np
data = [32, 36, 46, 47, 56, 69, 75, 79, 79, 88, 89, 91, 92, 93, 96, 97,
101, 105, 112, 116]
# First quartile (Q1)
Q1 = np.percentile(data, 25, interpolation = 'midpoint')
# Third quartile (Q3)
Q3 = np.percentile(data, 75, interpolation = 'midpoint')
# Interquaritle range (IQR)
IQR = Q3 - Q1
print(IQR)
Output: 34.0
使用 scipy.stats.iqr 的四分位数范围
# Import stats from scipy library
from scipy import stats
data = [32, 36, 46, 47, 56, 69, 75, 79, 79, 88, 89, 91, 92, 93, 96, 97,
101, 105, 112, 116]
# Interquartile range (IQR)
IQR = stats.iqr(data, interpolation = 'midpoint')
print(IQR)
Output: 34.0
四分位偏差
四分位数偏差是第三四分位数 (Q3) 和第一四分位数 (Q1) 之差的一半,即四分位间距 (IQR) 的一半。 (Q3 – Q1) / 2 = IQR / 2
决策
具有较高四分位数偏差值的数据集具有较高的可变性。
使用 numpy.median 的四分位数偏差
# import the numpy library as np
import numpy as np
data = [32, 36, 46, 47, 56, 69, 75, 79, 79, 88, 89, 91, 92, 93, 96, 97,
101, 105, 112, 116]
# First quartile (Q1)
Q1 = np.median(data[:10])
# Third quartile (Q3)
Q3 = np.median(data[10:])
# Interquartile range (IQR)
IQR = Q3 - Q1
# Quartile Deviation
qd = IQR / 2
print(qd)
Output: 17.0