数据分析处理——透析表和交叉表

时间:2024-03-11 08:58:34

1透视表

  数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。 之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照不同方式分析数据,也可以重新安排行号、列标和页字段。

  数据分析中的透析表十分强大,甚至可以说是相当于分组聚合外加哑变量三个步骤了。但有个前提就是:在使用透析表之前,你必须明确知道自己想要的是什么,需要做什么!

  当然,有时候你很难直接看出需求。这时候我们就得添加项目和检查每一步来验证我们一步一步得到期望的结果。为了查看什么样的外观最能满足你的需要,就不要害怕处理顺序和变量的繁琐。

 

函数

pands.pivot_table(data, values=None, index=None, columns=None, aggfunc=\'mean\', fill_value=None, margins=False, dropna=True, margins_name=\'All\')

名称说明
data 接收DataFrame。表示透视表的数据。无默认。
values 接收字符串。用于指定想要聚合的数据字段名,默认使用全部数据。默认为None。
index 接收string或list。表示行分组键。默认为None。
columns 接收string或list。表示列分组键。默认为None。
aggfunc 接收functions。表示聚合函数。默认为mean。
fill_value 接受scalar。表示是否将fill_value的数值代替缺失值。默认为None。
margins 接收boolearn。表示汇总(Total)功能的开关,设为True后结果集中会出现名为“ALL”的行和列。默认为True。
dropna 接收boolearn。表示是否删掉全为NaN的列。默认为False。
margins_name  接收string。表示margins为True时,\'All\'的名称。

 

OK,下面开始示范。

# 导入库包
import pandas as pd
import numpy as np

#数据,自编
data = pd.read_csv(\'./data.csv\',encoding=\'gbk\')
data.head()
 detail_idorder_iddishes_idlogicprn_nameparent_class_namedishes_nameitemis_addcountsamountscostplace_order_timediscount_amtdiscount_reasonkick_backadd_inpriceadd_infobar_codepicture_fileemp_id
0 2956 417 610062 NaN NaN 蒜蓉生蚝 0 1 49 NaN 2016/8/111:05:00 NaN NaN NaN 0 NaN NaN caipu/104001.jpg 1442
1 2958 417 609957 NaN NaN 蒙古烤羊腿 0 1 48 NaN 2016/8/111:07:00 NaN NaN NaN 0 NaN NaN caipu/202003.jpg 1442
2 2961 417 609950 NaN NaN 大蒜苋菜 0 1 30 NaN 2016/8/111:07:00 NaN NaN NaN 0 NaN NaN caipu/303001.jpg 1442
3 2966 417 610038 NaN NaN 芝麻烤紫菜 0 1 25 NaN 2016/8/111:11:00 NaN NaN NaN 0 NaN NaN caipu/105002.jpg 1442
4 2968 417 610003 NaN NaN 蒜香包 0 1 13 NaN 2016/8/111:11:00 NaN NaN NaN 0 NaN NaN caipu/503002.jpg 1442

 

# 先看一下数据大小
data.shape
(10037, 19)

# 取4列中的前20行
pd.pivot_table(data[[\'order_id\',\'counts\',\'amounts\',\'dishes_name\']][:20], values=[\'counts\'], index=\'order_id\', columns=\'dishes_name\', aggfunc=\'count\', fill_value=0, margins=False, dropna=True, margins_name=\'All\')
 counts
dishes_name大蒜苋菜干锅田鸡桂圆枸杞鸽子汤爆炒鳝碌番茄有机花菜番茄炖秋葵番茄甘蓝白斩鸡白饭/大碗皮蛋瘦肉粥芝士烩波士顿龙虾芝麻烤紫菜葱姜炒蟹蒙古烤羊腿蒜蓉生蚝蒜香包重庆特色油烧兔长城窖酿解百纳红酒干红葡萄酒香烤牛排
order_id                   
301 0 1 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1
413 0 1 0 1 0 1 1 0 0 1 1 0 1 0 0 0 1 1 0
417 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0

 

2交叉表

  交叉表是一种特殊的透视表,主要用于计算分组频率。利用pandas提供的crosstab函数可以制作交叉表,crosstab函数的常用参数和使用格式格式如下。

 

函数

pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

名称说明
index 接收string或list。表示行索引键。无默认。
columns 接收string或list。表示列索引键。无默认。
values 接收array。表示聚合数据。默认为None。
aggfunc 接收function。表示聚合函数。默认为None。
rownames 表示行分组键名。无默认。
colnames 表示列分组键名。无默认。
dropna 接收boolearn。表示是否删掉全为NaN的。默认为False。
margins 接收boolearn。默认为True。汇总(Total)功能的开关,设为True后结果集中会出现名为“ALL”的行和列。
normalize 接收boolearn。表示是否对值进行标准化。默认为False。
 
# 与上边透析表一样的行列和值(输出结果有点多,故后边省略)
pd.crosstab(index=data[\'order_id\'],columns=data[\'dishes_name\'],values = data[\'counts\'],aggfunc = np.sum)