使用 NumPy 和 SciPy 的四分位数范围和四分位数偏差
原文:https://www . geesforgeks . org/inter-quartle-range-and-quartle-variance-using-numpy-and-scipy/
四分位数: 四分位数是分位数的一种。第一个四分位数(Q1) ,定义为数据集最小数和中值之间的中间数,给定数据集的第二个四分位数(Q2)–中值,而第三个四分位数(Q3) ,是数据集中值和最大值之间的中间数。
求四分位数的算法: 四分位数是借助中位数计算的。如果条目数是偶数,即 2n 形式,则第一个四分位数(Q1)等于最小条目 n 的中间值,第三个四分位数(Q3)等于最大条目 n 的中间值。
如果条目的数量是奇数,即形式为(2n + 1),那么
- 第一个四分位数(Q1)等于最小条目的中间值
- 第三个四分位数(Q3)等于 n 个最大条目的中间值
- 第二个四分位数(Q2)与普通中位数相同。
范围:是给定数据集中最大值和最小值的差值。 四分位数区间: 四分位数区间(IQR),也称为中间延伸或中间 50% ,或技术上的 H-spread 是第三个四分位数(Q3)和第一个四分位数(Q1)的差值。它覆盖了分布的中心,包含了 50%的观测值。IQR = Q3–Q1
用途:
- 四分位数区间的细分点为 25%,因此通常比总区间更受青睐。
- IQR 用于构建箱线图,概率分布的简单图形表示。
- IQR 也可以用来识别给定数据集中的异常值。
- IQR 给出了数据的中心趋势。
决策
- 数据集具有更高的四分位数范围值(IQR)具有更大的可变性。
- 具有较低值的四分位数范围(IQR)的数据集是优选的。
假设我们有两个数据集,它们的四分位数范围是 IR1 和 IR2,如果 IR1 > IR2,那么据说 IR1 中的数据比 IR2 中的数据更具可变性,IR2 中的数据更可取。
示例:
- 以下是过去 20 天每天报名参加本课程的考生人数– 数据结构&算法- DSA Online 3 在 GeeksforGeeks: 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
使用数值中位数的四分位数范围
# 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
使用数值百分位的四分位数范围
# 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
决策 四分位数离差值较高的数据集具有较高的变异性。
使用数值中位数的四分位数偏差
# 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