📜  四分位间距(IQR)

📅  最后修改于: 2021-05-06 07:59:03             🧑  作者: Mango

一组排序的数据值的四分位数是三个点,这些点将数据精确地划分为四个相等的部分,每个部分包括四分之一数据。

  1. Q1定义为数据集的最小数和中位数之间的中间数。
  2. Q2是数据的中位数。
  3. Q3是数据集的中位数和最大值之间的中间值。
The interquartile range IQR tells us the range 
where the bulk of the values lie. The interquartile 
range is calculated by subtracting the first quartile
from the third quartile. 
IQR = Q3 - Q1

用途
1.与范围不同,IQR会告知大多数数据在哪里,因此比范围更可取。
2. IQR可用于识别数据集中的异常值。
3.给出数据的集中趋势。

例子:

Input : 1, 19, 7, 6, 5, 9, 12, 27, 18, 2, 15
Output : 13
The data set after being sorted is 
1, 2, 5, 6, 7, 9, 12, 15, 18, 19, 27
As mentioned above Q2 is the median of the data. 
Hence Q2 = 9
Q1 is the median of lower half, taking Q2 as pivot.
So Q1 = 5
Q3 is the median of upper half talking Q2 as pivot. 
So Q3 = 18
Therefore IQR for given data=Q3-Q1=18-5=13 

Input : 1, 3, 4, 5, 5, 6, 7, 11
Output : 3
C++
// CPP program to find IQR of a data set
#include 
using namespace std;
  
// Function to give index of the median
int median(int* a, int l, int r)
{
    int n = r - l + 1;
    n = (n + 1) / 2 - 1;
    return n + l;
}
  
// Function to calculate IQR
int IQR(int* a, int n)
{
    sort(a, a + n);
  
    // Index of median of entire data
    int mid_index = median(a, 0, n);
  
    // Median of first half
    int Q1 = a[median(a, 0, mid_index)];
  
    // Median of second half
    int Q3 = a[mid_index + median(a, mid_index + 1, n)];
  
    // IQR calculation
    return (Q3 - Q1);
}
  
// Driver Function
int main()
{
    int a[] = { 1, 19, 7, 6, 5, 9, 12, 27, 18, 2, 15 };
    int n = sizeof(a)/sizeof(a[0]);
    cout << IQR(a, n);
    return 0;
}


Java
// Java program to find 
// IQR of a data set
import java.io.*;
import java .util.*;
  
class GFG
{
      
// Function to give 
// index of the median
static int median(int a[], 
                  int l, int r)
{
    int n = r - l + 1;
    n = (n + 1) / 2 - 1;
    return n + l;
}
  
// Function to 
// calculate IQR
static int IQR(int [] a, int n)
{
    Arrays.sort(a);
  
    // Index of median 
    // of entire data
    int mid_index = median(a, 0, n);
  
    // Median of first half
    int Q1 = a[median(a, 0, 
                      mid_index)];
  
    // Median of second half
    int Q3 = a[mid_index + median(a, 
               mid_index + 1, n)];
  
    // IQR calculation
    return (Q3 - Q1);
}
  
// Driver Code
public static void main (String[] args) 
{
    int []a = {1, 19, 7, 6, 5, 9, 
               12, 27, 18, 2, 15};
    int n = a.length;
    System.out.println(IQR(a, n));
}
}
  
// This code is contributed 
// by anuj_67.


Python3
# Python3 program to find IQR of 
# a data set
  
# Function to give index of the median
def median(a, l, r):
    n = r - l + 1
    n = (n + 1) // 2 - 1
    return n + l
  
# Function to calculate IQR
def IQR(a, n):
  
    a.sort()
  
    # Index of median of entire data
    mid_index = median(a, 0, n)
  
    # Median of first half
    Q1 = a[median(a, 0, mid_index)]
  
    # Median of second half
    Q3 = a[mid_index + median(a, mid_index + 1, n)]
  
    # IQR calculation
    return (Q3 - Q1)
  
# Driver Function
if __name__=='__main__':
    a = [1, 19, 7, 6, 5, 9, 12, 27, 18, 2, 15]
    n = len(a)
    print(IQR(a, n))
  
# This code is contributed by
# Sanjit_Prasad


C#
// C# program to find 
// IQR of a data set
using System;
  
class GFG
{
      
// Function to give 
// index of the median
static int median(int []a, 
                int l, int r)
{
    int n = r - l + 1;
    n = (n + 1) / 2 - 1;
    return n + l;
}
  
// Function to 
// calculate IQR
static int IQR(int [] a, int n)
{
    Array.Sort(a);
  
    // Index of median 
    // of entire data
    int mid_index = median(a, 0, n);
  
    // Median of first half
    int Q1 = a[median(a, 0, 
                    mid_index)];
  
    // Median of second half
    int Q3 = a[mid_index + median(a, 
            mid_index + 1, n)];
  
    // IQR calculation
    return (Q3 - Q1);
}
  
// Driver Code
public static void Main () 
{
    int []a = {1, 19, 7, 6, 5, 9, 
            12, 27, 18, 2, 15};
    int n = a.Length;
    Console.WriteLine(IQR(a, n));
}
}
  
// This code is contributed 
// by anuj_67.


PHP


输出:

13

参考
https://zh.wikipedia.org/wiki/Interquartile_range