Python pandas 创建列联表
在数据分析工作中,列联表(Contingency Table)是一种用来展示两个或多个变量之间关系的表格。在Python中,我们可以使用pandas库来轻松地创建列联表。本文将介绍如何使用pandas库来创建列联表。
什么是列联表
列联表是一种统计表格,用来展示两个或多个变量之间的关系。通常情况下,列联表是一个二维表格,其中行表示一个变量的不同取值,列表示另一个变量的不同取值。每个单元格中的值表示两个变量同时满足对应行和列取值的频数或频率。
pandas库简介
pandas是一个强大的数据分析库,提供了数据结构和数据分析工具,包括数据清洗、处理、分析等功能。pandas的核心数据结构是DataFrame,可以将数据以表格的形式表示,非常适合用于创建列联表。
创建列联表
下面我们将通过一个示例来演示如何使用pandas库来创建列联表。假设我们有一个包含两个变量的数据集,分别是性别和婚姻状况。我们希望创建一个列联表来展示这两个变量之间的关系。
import pandas as pd
# 创建示例数据
data = {
'性别': ['男', '女', '男', '女', '男', '女'],
'婚姻状况': ['已婚', '未婚', '未婚', '已婚', '已婚', '未婚']
}
df = pd.DataFrame(data)
# 创建列联表
contingency_table = pd.crosstab(df['性别'], df['婚姻状况'])
print(contingency_table)
上面的代码首先导入pandas库,并创建了一个包含性别和婚姻状况两个变量的数据集。然后使用pd.crosstab()函数创建了一个列联表contingency_table,并打印输出这个列联表。运行以上代码,我们可以得到如下输出:
婚姻状况 已婚 未婚
性别
女 1 2
男 2 1
上面的列联表展示了性别和婚姻状况两个变量之间的关系。我们可以看到,在样本中有1个已婚女性、2个未婚女性、2个已婚男性和1个未婚男性。
添加边际和计算比例
除了创建基本的列联表之外,我们还可以添加行列边际和计算比例。下面我们将在上面的示例数据上继续操作。
# 添加边际
contingency_table_with_margin = pd.crosstab(df['性别'], df['婚姻状况'], margins=True, margins_name='总计')
print(contingency_table_with_margin)
运行以上代码,我们可以得到包含边际的列联表:
婚姻状况 已婚 未婚 总计
性别
女 1 2 3
男 2 1 3
总计 3 3 6
在这个列联表中,我们添加了行和列的边际,并额外添加了总计行和列。接下来,我们可以计算每个单元格的比例。
# 计算比例
contingency_table_normalized = pd.crosstab(df['性别'], df['婚姻状况'], normalize='all')
print(contingency_table_normalized)
运行以上代码,我们可以得到计算比例后的列联表:
婚姻状况 已婚 未婚
性别
女 0.166667 0.333333
男 0.333333 0.166667
这个列联表展示了每个单元格的比例,对于总体样本中已婚女性占比为16.67%,未婚女性占比为33.33%,已婚男性占比为33.33%,未婚男性占比为16.67%。
总结
在本文中,我们详细介绍了如何使用pandas库来创建列联表。通过示例演示,我们展示了如何使用pd.crosstab()函数来创建基本的列联表,并添加边际和计算比例。创建列联表是数据分析中必不可少的一步,可以帮助我们更清晰地了解两个或多个变量之间的关系。