什么是箱线图?箱线图,也称为箱形图、箱线图或箱须图。箱形图是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名。1977年由美国著名统计学家约翰·图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数及上下四分位数(Q1和Q3)。
箱线图可以告诉你异常值及其值、数据是否对称、数据分组紧密程度以及数据是否以及如何倾斜。
什么是平均值?
平均值是数据中所有观测值的总和与观测值总数的比率。这也称为平均值。因此,平均值是整个数据集分布的数字。
什么是中位数?
中位数是将整个数据分成两个相等部分的点。一半数据小于中位数,另一半数据大于中位数。计算中位数时,首先按升序或降序排列数据。
如果观测值的数量为奇数,则中位数由排序后的中间观测值给出。如果观测值的数量为偶数,则中位数由排序后两个中间观测值的平均值给出。需要注意的一点是,数据的顺序(升序或降序)不会影响中位数。
箱线图绘制为一个盒子,里面有一条线,每条边都有延伸线(称为“须线”)。该框用于表示给定数据集中的四分位距 (IQR),即位于第一四分位数上方和第三四分位数下方的 50% 的数据点。须线用于表示最小值、最大值和任何异常值数据点与 IQR 相比的变异性(须线越长,附加数据点与 IQR 的变异性越宽)。
盒子的左边缘或底端代表数据的第一/下四分位数 (Q1;25 百分位数)。箱线图中的线表示数据的中位数(Q2;第 50 个百分位数),它将箱子一分为二。箱线图的右边缘或顶端表示数据的第三/上四分位数(Q3;第 75 个百分位数)。
如果箱线图中有一个点、十字或菱形符号,则表示数据的平均值。
从箱子延伸出去的线条展现出了上下四分位数以外的数据,由于这两根延伸出去的线像是胡须,因此箱形图也被称为盒须图。左侧胡须显示最小数据值及其与 IQR 相比的变异性。右侧胡须显示最大数据值及其与 IQR 相比的变异性。
胡须还有助于显示与其余数据相比的异常值,因为异常值位于胡须线的外部。有时,箱形图上也会出现个别的点,在胡须的末端值以外,这代表离群值,也可称之为异常值。箱形图是非参数的:它们显示统计总体样本的变化,而不对基础统计分布做任何假设。框的不同部分之间的间距表示数据中的分散程度(扩散)和偏斜,并显示异常值。
中位数 (Q2/50 百分位数):数据集的中间值。
第一四分位数 (Q1/25 百分位数):数据集最小数字(不是“最小值”)和中位数之间的中间数字。
第三四分位数 (Q3/75 百分位数):数据集中位数和最高值(不是“最大值”)之间的中间值。四分位距 (IQR):25 到 75 百分位数。胡须(以蓝色显示) 异常值(以绿色圆圈显示)
“最小值”:Q1 - 1.5IQR
“最大值”:Q3 + 1.5IQR
箱形图最大的优势是,它以一种简单的方式,概括出一个或多个数值变量的分布,同时又不会占据太多空间。通过箱形图,我们可以很快知道一些关键的统计值,如中位数、上下四分位数等;也可以分析是否存在离群值、离群值分别是多少;整体来看,还可以检验数据是否对称、是否有偏向性,如果有,它偏向于哪一边;最后,我们还可以用多个箱型图,比较多组数据的分布,从而快速获得对数据结构、数据质量的认知。当你需要从数据集/分布中获取更多信息而不仅仅是集中趋势(平均值、中位数和众数)时,箱线图可能会有所帮助。
箱线图可以说明集合中所有数据点的变异性或分散性,从而很好地指示异常值以及数据的对称性。虽然与直方图或密度图相比,箱线图似乎很原始,但它们具有占用空间较少的优势,这在比较多个组或数据集之间的分布时很有用。
下面用R可视化两个例子(也可用python matplotlib等):
例子1:
# Load ggplot2
library(ggplot2)
# The mpg dataset is natively available
#head(mpg)
# geom_boxplot proposes several arguments to custom appearance
ggplot(mpg, aes(x=class, y=hwy)) +
geom_boxplot(
# custom boxes
color="blue",
fill="blue",
alpha=0.2,
# Notch?
notch=TRUE,
notchwidth = 0.8,
# custom outliers
outlier.colour="red",
outlier.fill="red",
outlier.size=3)
例子2:
# library
library(ggplot2)
# The mtcars dataset is natively available in R
#head(mpg)
# Top Left: Set a unique color with fill, colour, and alpha
ggplot(mpg, aes(x=class, y=hwy)) +
geom_boxplot(color="red", fill="orange", alpha=0.2)
# Top Right: Set a different color for each group
ggplot(mpg, aes(x=class, y=hwy, fill=class)) +
geom_boxplot(alpha=0.3) +
theme(legend.position="none")
# Bottom Left
ggplot(mpg, aes(x=class, y=hwy, fill=class)) +
geom_boxplot(alpha=0.3) +
theme(legend.position="none") +
scale_fill_brewer(palette="BuPu")
# Bottom Right
ggplot(mpg, aes(x=class, y=hwy, fill=class)) +
geom_boxplot(alpha=0.3) +
theme(legend.position="none") +
scale_fill_brewer(palette="Dark2")