📜  使用 NumPy 和 SciPy 的四分位距和四分位偏差

📅  最后修改于: 2022-05-13 01:54:23.435000             🧑  作者: Mango

使用 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