文章目录
- 专栏导读
- 1. 箱形图介绍
- 1)箱形图介绍
- 2)怎么看箱型图?
- 3)解释说明
- 2. 普通箱型图
- 3. 水平箱型图
- 4. 群组箱型图
- 5. 带异常点的箱型图
专栏导读
🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html
- 优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
- 专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
1. 箱形图介绍
1)箱形图介绍
箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。箱形图是由首位两个四分位数(Q1,Q3)以及中位数(Q2)组成的,它能够反映出一组数据的基本统计特性,如分布的范围、中位数、变异程度等。
特点:箱形图是概括性较强的一种图,它能够准确反映出数据的主要特点,包括最大值、最小值、四分位数、中位数和实例数,同时观测异常点。
应用场景:箱形图主要用于比较多组数据的分布情况,它非常适用于表示连续变量的分布和比较,是显著进行数据可视化的一种常用工具。
2)怎么看箱型图?
“盒式图"或叫"盒须图”"箱形图"boxplot(也称箱须图(Box-whiskerPlot)须图又称为箱形图,其绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。
主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有一个异常值。标示了图中每条线表示的含义,其中应用到了分位值(数)的概念,如下图所示:
运行结果:
3)解释说明
数学层面理解箱形图每个部分的含义(下四分位线,中位数,上四分位数,上限,下限,异常值,极端异常值):
- 下四分位数:指数据的25%分位点所对应的值(Q1)
- 中位数:指数据的50%分位点所对应的值(Q2)
- 上四分位数:指数据的75%分位点所对应的值(Q3)
- 上限:上限=Q3+1.5*(Q3-Q1)
- 下限:下限=Q1-1.5*(Q3-Q1)
- 异常值的判定标准:当变量的数据值大于上限或小于下限时,判定为异常值
计算方法:
- 1、.数据集:-15, 7, 10, 15, 20, 33, 5
- 2、按从小到大的顺序对数据集进行排列:-15, 5, 7, 10, 15, 20, 33
- 3、确定四分位数索引位置的根据公式:1+(n-1)*数据的百分比分位点,在根据索引位置确定索引所对应的数据值(n是数据集的数量 n=6)
- Q1_position=1+(6-1)*0.25=2.25 (Q1在第二个数和第三个数之间)
- Q1_value=15+(36-15)*(2.25-2)=20.25
- Q2_position=1+(6-1)*0.5=3.5 (Q2在第三个数和第四个数之间)
- Q2_value=36+(39-36)*(3.5-3)=37.5
- Q3_position=1+(6-1)*0.75=4.75 (Q3在第四个数和第五个数之间)
- Q3_value=39+(40-39)*(4.75-4)=39.75
- 上限=39.75+(39.75-20.25)*1.5=69
- 下限=20.25-(39.75-20.25)*1.5=-9
极端异常值:
- 极端上限:上限=Q3+3*(Q3-Q1)
- 极端下限:下限=Q1-3*(Q3-Q1)
- 极端异常值的判定标准:当变量的数据值大于极端上限或小于极端下限时,判定为极端异常值
2. 普通箱型图
首先,确保已经安装了Pyecharts库。可以使用以下命令进行安装:
!pip install pyecharts
接下来,我们可以按照以下步骤绘制普通箱形图:
- 导入所需的库和模块:
from pyecharts.charts import Boxplot
from pyecharts import options as opts
from pyecharts.globals import ThemeType
- 创建一个Boxplot对象,并设置主题:
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
- 添加数据和配置项:
boxplot.add_xaxis(x_data) # 设置x轴数据
boxplot.add_yaxis(series_name, y_data) # 设置y轴数据和系列名称
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="普通箱形图")) # 设置标题
- 展示图表:
boxplot.render_notebook()
下面是一个完整的示例代码:
from pyecharts.charts import Boxplot
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 数据
x_data = ["A", "B", "C", "D", "E"]
y_data = [
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[2, 3, 4, 5, 6, 7, 8, 9, 10],
[3, 4, 5, 6, 7, 8, 9, 10, 11],
[4, 5, 6, 7, 8, 9, 10, 11, 12],
[5, 6, 7, 8, 9, 10, 11, 12, 13]
]
series_name = "数据"
# 创建Boxplot对象
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
# 添加数据和配置项
boxplot.add_xaxis(x_data)
boxplot.add_yaxis(series_name, boxplot.prepare_data(y_data))
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="普通箱形图"))
# 展示图表
boxplot.render_notebook()
运行以上代码,即可在Jupyter Notebook中绘制出普通箱形图。可以根据需要调整数据和配置项,以满足具体需求,运行结果:
3. 水平箱型图
绘制水平方向箱型图只需要在代码中加上以下两句调转绘制方向即可:
# 设置图表的朝向为水平方向
boxplot.set_global_opts(legend_opts=opts.LegendOpts(orient="vertical"))
boxplot.reversal_axis()
完整源码:
from pyecharts.charts import Boxplot
from pyecharts import options as opts
from pyecharts.globals import ThemeType
# 数据
x_data = ["A", "B", "C", "D", "E"]
y_data = [
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[2, 3, 4, 5, 6, 7, 8, 9, 10],
[3, 4, 5, 6, 7, 8, 9, 10, 11],
[4, 5, 6, 7, 8, 9, 10, 11, 12],
[5, 6, 7, 8, 9, 10, 11, 12, 13]
]
series_name = "数据"
# 创建Boxplot对象
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
# 添加数据和配置项
boxplot.add_xaxis(x_data)
boxplot.add_yaxis(series_name, boxplot.prepare_data(y_data))
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="普通箱形图"))
# 设置图表的朝向为水平方向
boxplot.set_global_opts(legend_opts=opts.LegendOpts(orient="vertical"))
boxplot.reversal_axis()
# 展示图表
boxplot.render_notebook()
运行结果:
4. 群组箱型图
from pyecharts import options as opts
from pyecharts.charts import Boxplot
import random
# 生成随机数据
y_data1 = [
[random.randint(500, 1000) for _ in range(12)],
[random.randint(500, 1000) for _ in range(12)],
]
y_data2 = [
[random.randint(100, 500) for _ in range(12)],
[random.randint(100, 500) for _ in range(12)],
]
c = (
Boxplot(init_opts=opts.InitOpts(width="800px", height="500px")) # 创建 Boxplot 对象
.add_xaxis(["expr1", "expr2"]) # 设置 x 轴数据
.add_yaxis("A组",Boxplot.prepare_data(y_data1)) # 添加第一个 y 轴数据
.add_yaxis("B组", Boxplot.prepare_data(y_data2)) # 添加第二个 y 轴数据
.set_global_opts(title_opts=opts.TitleOpts(title="群组箱型图")) # 设置全局参数
)
# 在 Jupyter Notebook 中展示图表
c.render_notebook()
运行结果:
5. 带异常点的箱型图
1、导入相关库:在Jupyter Notebook中,需要导入Pyecharts和相关的其他库。可以使用以下代码导入所需的库:
from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.commons.utils import JsCode
2、创建箱型图对象:通过创建Boxplot对象来生成箱型图,并设置相关的属性。可以使用链式调用方法来设置属性。以下是一个示例:
boxplot = (
Boxplot()
.add_xaxis(x_data)
.add_yaxis("boxplot", y_data)
.set_global_opts(
title_opts=opts.TitleOpts(title="带异常点的箱型图"),
xaxis_opts=opts.AxisOpts(name="x轴"),
yaxis_opts=opts.AxisOpts(name="y轴"),
)
)
其中,x_data是一个列表,包含了每个箱型图的x轴标签;y_data是一个二维列表,每个子列表包含了每个箱型图的数据。
3、设置异常点:可以通过add_yaxis方法的第二个参数设置异常点。以下是一个示例:
.add_yaxis(
"boxplot",
y_data,
tooltip_opts=opts.TooltipOpts(
formatter=JsCode(
"function (params) {return params.name + ': ' + params.value[2];}"
)
),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
]
),
)
在这个示例中,通过设置tooltip_opts属性来自定义提示框的显示内容,通过设置markpoint_opts属性来添加最大值和最小值的标记点。
4、渲染图表:最后,可以使用render_notebook方法将图表渲染并输出到Jupyter Notebook中,如下所示:
boxplot.render_notebook()
完整的示例代码如下:
from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.commons.utils import JsCode
# 示例数据
x_data = ["A", "B", "C", "D", "E"]
y_data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
[4, 8, 12, 16, 20],
[5, 10, 15, 20, 25],
]
# 创建箱型图对象
boxplot = (
Boxplot()
.add_xaxis(x_data)
.add_yaxis(
"boxplot",
y_data,
tooltip_opts=opts.TooltipOpts(
formatter=JsCode(
"function (params) {return params.name + ': ' + params.value[2];}"
)
),
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
]
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title="带异常点的箱型图"),
xaxis_opts=opts.AxisOpts(name="x轴"),
yaxis_opts=opts.AxisOpts(name="y轴"),
)
)
# 渲染图表
boxplot.render_notebook()
运行以上代码,即可在Jupyter Notebook中输出带异常点的箱型图: