问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

数据可视化之箱线图:从理论到实践

创作时间:
作者:
@小白创作中心

数据可视化之箱线图:从理论到实践

引用
CSDN
1.
https://blog.csdn.net/u010701274/article/details/144559660

箱线图(Boxplot),又称为盒须图,是一种用于统计数据分布分析的图表。它可以直观地展示数据的分布特征、集中趋势和离散程度,并能有效识别异常值。本文将详细介绍箱线图的构成、解读方法、适用场景、局限性以及如何使用Python代码实现箱线图。

1. 箱线图的构成

箱线图由以下几个部分组成:

  • 箱体(Box):表示数据分布的中间部分,通常从第一四分位数(Q1)到第三四分位数(Q3)。
  • Q1(第25百分位数):表示25%的数据小于此值。
  • Q3(第75百分位数):表示75%的数据小于此值。
  • 箱体的高度(或宽度,取决于方向)反映了四分位距(IQR = Q3 - Q1),即中间50%数据的范围。
  • 中位数(Median):箱体内的一条线,表示数据的中间值。
  • 须(Whiskers)
  • 须的长度通常延伸至非异常值的范围。
  • 上须的最大值为 Q3 + 1.5 × IQR,下须的最小值为 Q1 - 1.5 × IQR。
  • 异常值(Outliers)
  • 在须范围外的数据点,被单独标记为圆点或其他符号,表示可能的异常数据。

2. 解读箱线图

以一个单个箱线图为例:

  • 箱体位置:如果箱体位于图表的上半部分,说明数据整体偏高;反之偏低。
  • 箱体宽窄:箱体越窄,说明中间50%的数据分布越集中。
  • 中位数的位置:如果中位数偏向箱体一侧,说明数据分布不对称。
  • 须的长度:长须表明数据有较大的变化范围或离散程度。
  • 异常值的数量和位置:离须越远的点,异常程度越高。

多个箱线图在一起时:

  • 组间对比:可以比较不同组数据的分布和特征。

3. 箱线图的适用场景

  • 数据分布的初步探索
  • 数据质量检查(例如检测异常值)
  • 比较多个数据组的特征,例如实验组与对照组的结果
  • 分析指标的趋势和变化

4. 箱线图的局限性

  • 仅展示关键的统计特征,隐藏了数据的具体分布形态(如双峰分布)。
  • 如果数据量较少,可能不适合使用箱线图。
  • 异常值的定义较为固定(1.5 × IQR以外),对特殊情况下的异常值判断可能不够灵活。
  • 箱线图在某些情况下可能不适用。例如,当数据中存在超大或超小异常值时,箱线图可能呈现扁平形态或只剩一线,此时不适合使用箱线图;当数据量较小时,箱线图的统计能力可能不足;此外,箱线图只能反映数据的一维分布,无法展示多个变量之间的关系。

5. 箱线图的代码实现

5.1 Python 代码

import dash
from dash import html, dcc
import plotly.graph_objects as go
import dash_bootstrap_components as dbc
import numpy as np

def create_advanced_charts():
    """
    创建高级图表示例
    返回一个包含多个图表的列表
    """
    # 1. 箱线图
    #np.random.normal(loc=0.0, scale=1.0, size=None),其作用:返回一组符合高斯分布的概率密度随机数。
    # 其中,loc为高斯概率分布的均值;scale为高斯概率分布的标准差;size为输出的shape,默认为None,只输出一个值。
    box_data = [
        np.random.normal(0, 1, 100),   
        np.random.normal(2, 1.2, 100), 
        np.random.normal(-1, 1.5, 100) 
    ]
    
    print(max(box_data[0]),min(box_data[0]))
    print(max(box_data[1]),min(box_data[1]))
    print(max(box_data[2]),min(box_data[2]))
    box_fig = go.Figure()
    box_fig.add_trace(go.Box(y=box_data[0], name="组A"))
    box_fig.add_trace(go.Box(y=box_data[1], name="组B"))
    box_fig.add_trace(go.Box(y=box_data[2], name="组C"))
    box_fig.update_layout(
        title='箱线图示例',
        yaxis_title='数值',
        template='plotly_white'
    )
    return(box_fig)

app = dash.Dash(__name__)
app.layout = html.Div([
    html.Div([
        html.H3("高级图表展示", className="text-center mt-4 mb-3"),
        dbc.Row([
            dbc.Col(dcc.Graph(figure=create_advanced_charts()), width=6)
        ], className="mb-4")
    ], style={"backgroundColor": "#fff0f4", "padding": "20px", "borderRadius": "10px"}),
])

if __name__ == "__main__":
    app.run_server(debug=True, port=8051)  

5.2 箱线图效果(网页展示)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号