下面我为您详细讲解“python利用panda实现列联表(交叉表)”的完整攻略。
1. pandas中列联表的概念
列联表是一种将两个或多个分类变量交叉分类后形成的表格,用于展示它们之间的关系。pandas中列联表的实现就是通过数据透视表来实现的,它可以将一张表中的一些列作为纵坐标,将另外一些列作为横坐标,将数据值作为交叉点所显示的值,从而实现对某些分类变量之间关系的展示。
2. pandas中列联表的使用方法
2.1 导入必要的库
我们首先需要导入必要的库,包括pandas、numpy和matplotlib库:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
2.2 创建数据
我们以一个购买卡车的客户数据为例,来创建一个列联表。我们通过pandas的DataFrame函数来构造一个表格,并通过字典的方式输入数据:
data = {"Customer": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
"Type": ["Small", "Small", "Large", "Large", "Small",
"Small", "Large", "Large", "Small", "Large"],
"Bought": ["Yes", "No", "Yes", "Yes", "Yes",
"Yes", "No", "Yes", "Yes", "Yes"]}
df = pd.DataFrame(data)
2.3 利用透视函数创建列联表
接下来,我们可以利用pandas的透视函数(pd.pivot_table)来创建列联表:
pivot = pd.pivot_table(df, values='Bought', index=['Customer'],
columns=['Type'], aggfunc=len, fill_value=0)
在上述代码中,我们传入的参数中:“df”指的是我们创建的DataFrame, “‘Bought’”是我们要分析的数据列, “‘Customer’”是行索引, “‘Type’”是列索引,“‘len’”是我们会计算的函数,表示每个单元格的值的计数, “‘0’”是填充缺失单元格的值。
2.4 查看结果
通过以下代码,我们可以查看生成的列联表:
print(pivot)
输出结果为:
Type Large Small
Customer
A 0 1
B 0 1
C 1 0
D 1 0
E 0 1
F 0 1
G 1 0
H 1 0
I 0 1
J 1 0
上述结果展示了每个客户购买的卡车类型。我们可以看到,大卡车的购买者中只有C、D、G和H号客户,而小卡车的购买者则包括了除以上四个客户之外的全部客户。
2.5 可视化结果
最后,我们可以利用matplotlib库来可视化列联表,并比较不同卡车类型的购买者数量。以下是可视化代码:
pivot.plot(kind='bar')
plt.show()
该代码将用柱形图的形式将不同类型卡车的购买者数量展现给客户。
3. 示例
下面是另一个示例,以一个餐厅点餐数据为例,来创建一个列联表。
3.1 创建数据
我们同样通过pandas的DataFrame函数来构造一个点餐的表格,并通过字典的方式输入数据:
data = {"Table": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
"Day": ["Weekdays", "Weekdays", "Weekdays", "Weekdays", "Weekdays",
"Weekdays", "Weekdays", "Weekends", "Weekends", "Weekends"],
"Order": ["Vegetable salad", "Hamburger", "Pizza", "Hamburger",
"Pizza", "Steak", "Sushi", "Pizza", "Steak", "Sushi"]}
df = pd.DataFrame(data)
上述代码创建的数据表示十桌餐厅客人点的菜单类型和在星期几用餐。
3.2 创建列联表
下面通过pd.crosstab函数来创建列联表:
cross_tab = pd.crosstab(df['Day'], df['Order'])
在上述代码中,“‘Day’”和“‘Order’”是我们要分析的两个变量。
3.3 查看结果
通过下面的代码,我们可以查看生成的列联表:
print(cross_tab)
输出结果为:
Order Hamburger Pizza Steak Sushi Vegetable salad
Day
Weekdays 1 2 1 1 1
Weekends 0 1 1 1 0
上述结果展示了每天顾客点的不同菜品类型的数量。我们可以看到,在平日,顾客点的主要菜品类型为披萨(Pizza)和蔬菜沙拉(Vegetable salad),而在周末,主要的菜品类型为牛排(Steak)和寿司(Sushi)。
3.4 可视化结果
最后,我们可以利用matplotlib库来可视化列联表,并比较不同菜品类型在各天的点餐数量。以下是可视化代码:
cross_tab.plot(kind='bar')
plt.show()
该代码将用柱形图的形式将不同菜品类型在每个用餐日的点餐数量展现给客户。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 利用panda 实现列联表(交叉表) - Python技术站