# -*- coding: utf-8 -*-
#1、概念:结构分析, 是在分组(这个分组一般是定量分组,定量分组一般看结构)以及交叉的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的一种分析方法。
#结构分析的结果一般以饼图呈现,如果成分较少(两个或三个),那么可以使用圆环图呈现
#下面看看在pandas中如何进行占比计算:
#当我们使用groupby计算出分组结果或者使用pivot_table对计算出交叉表的结果之后,如果我们还需要对计算的结果继续运算,可以使用数据框自带的函数进行运算。自带的函数
#有两种类型:
#外运算:主要用于两个数据框之间的运算。如add、sub、multiply、div
#内运算:主要用于数据框自身的运算。如sum、mean、var、sd
import numpy
import pandas
data = pandas.read_csv("D:/workspaces/python/pythonStudy/28.csv")
#28.csv包括列:用户ID,注册日期,身份证号码,性别,出生日期,年龄。下载地址:https://pan.baidu.com/s/1wHp1q1PgSw_HxyLW59k_Tw
bins = [min(data.年龄)-1,20,30,40,max(data.年龄)+1]
labels = ['20岁及以下','21岁到30岁','31岁到40岁','41岁以上']
data['年龄分层'] = pandas.cut(data.年龄,bins,labels=labels)
ptResult = data.pivot_table(
values = ['年龄'],
index = ['年龄分层'],
columns = ['性别'],
aggfunc = [numpy.size]
)
ptResult.sum() #可以看到默认返回按列计算的结果(因为默认axis=0,即跨行执行)
ptResult.sum(axis=0) #结算结果同上
ptResult.sum(axis=1) #返回按行计算的结果(axis=1,标识跨列执行)
#计算在各年龄层中,不同性别的各自占比
ptResult.div(ptResult.sum(axis=1),axis=0)
#计算在各性别中,不同年龄层的各自占比
ptResult.div(ptResult.sum(axis=0),axis=1)
|
|