Logo
Section 1 / 8

连续变量与分类变量的双变量分析:箱线图与直方图

学习如何一起分析连续变量和分类变量。

导入

连续变量与分类变量的双变量分析:箱线图与直方图

学习如何一起分析连续变量和分类变量。

双变量分析:双变量直方图

在本节中,我们将讨论如何同时分析一个连续变量和一个分类变量。

双变量分析

双变量分析是一种统计技术,用于探索两个变量之间的关系。当其中一个变量为连续变量,另一个为分类变量时,可以使用双变量分析来判断连续变量在分类变量各类别中的分布是否存在差异。

接下来的示例将使用一个客户流失数据集,该数据集记录了个人是否已离开公司。数据集包含客户的重要特征,如年龄、信用评分、居住地等。

1# 导入库 2import pandas as pd 3 4# 导入数据集 5churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 6 7# 查看数据 8print(churn.head())

双变量箱线图

我们将延续第一章的工作,这次按类别对图表进行分组。首先展示如何使用 plotly.express 和 plotly.graph_objs 实现双变量箱线图。使用 plotly.express 时,我们仍像往常一样传入 data_frame。唯一的区别是现在通过关键字参数传递 x 和 y(我们可以选择哪个变量对应哪个坐标轴)。

例如,可以使用以下代码创建双变量箱线图:

1fig = px.box(data_frame=churn, x='Geography', y='Age') 2fig.show()

还值得注意的是,实际上也可以不传入 data_frame 参数。此时我们像在 Plotly 图形对象中那样显式引用列/序列。这完全取决于你的偏好:

1fig = px.box(x=churn['Geography'], y=churn['Age']) 2fig.show()

使用 plotly.graph_objs 时,流程与单变量情况非常相似。不同之处在于,由于我们现在处理两个变量,需要同时传入 x 和 y 作为轨迹参数。

双变量箱线图:Plotly Express

现在我们使用箱线图来绘制按国家(Geography)分组的人群年龄分布。

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 9 10# 创建图表 11fig = px.box(data_frame=churn, x='Geography', y='Age') 12 13# 显示图表 14fig.show()

双变量箱线图:Plotly 图形对象

虽然我们将在后续更详细地讲解图形布局更新,但需要注意的是,使用 Plotly 图形对象时,我们的图表默认没有明确的标题和标签。不过,我们将开始使用 fig.update_layout() 对图表的外观进行一些微调,包括添加标题和坐标轴标签。

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 9 10# 创建箱线图 11trace = go.Box(x=churn['Geography'], y=churn['Age']) 12 13# 创建 go.Figure() 对象 14fig = go.Figure(data=[trace]) 15 16# 对布局进行小幅调整 17fig.update_layout(title='按国家划分的年龄', 18 xaxis_title='国家', 19 yaxis_title='年龄') 20 21# 显示图形 22fig.show()

直方图(连续变量 vs. 分类变量):Plotly Express

在 plotly.express 中绘制涉及多个变量的直方图时,可以通过设置 color 参数为字符串来指定用作颜色区分的列。

在此示例中,我们绘制每个人的年龄,并按国家分组。同时设置了 histnorm='probability density',使纵轴表示概率密度,而非每个柱子中数值的计数。

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 9 10# 创建图表 11fig = px.histogram(data_frame=churn, 12 x='Age', 13 color='Geography', 14 histnorm='probability density') 15 16# 显示图表 17fig.show()

直方图:Plotly 图形对象

要按类别值创建独立的直方图,需按以下步骤操作:

  1. 第1–5行:导入库。

  2. 第8行:导入数据集。

  3. 第11行:创建一个名为 traces 的空列表。

  4. 第14–21行:遍历每个类别值,在每次循环中:

    • 第18行:筛选数据集,仅保留当前类别值的观测数据,结果存储在名为 temp 的变量中。

    • 第18–19行:使用 temp 数据集创建直方图,结果存储在名为 trace 的变量中。

    • 第21行:将 trace 变量添加到 traces 列表中。

  5. 第24行:创建一个包含 traces 列表的图形对象图。

  6. 第27–30行:对布局进行更新。特别注意 barmode='stack' 的设置。

  7. 第33行:显示图表。

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 9 10# 步骤3: 11traces = [] 12 13# 步骤4 14for country in churn['Geography'].unique(): 15 # a) 16 temp = churn[churn['Geography'] == country].copy() 17 # b) 18 trace = go.Histogram(x=temp['Age'], 19 name=country) 20 # c) 21 traces.append(trace) 22 23# 步骤5: 24fig = go.Figure(data=traces) 25 26# 步骤6: 27fig.update_layout(title='按国家划分的年龄直方图', 28 barmode='stack', 29 xaxis_title='国家', 30 yaxis_title='年龄') 31 32# 步骤7: 33fig.show()

以下是本课程中所有代码练习的笔记本:

简介与单变量分析

连续变量与分类变量的双变量分析:经验累积分布函数图与小提琴图